|
|
@@ -1231,6 +1231,9 @@ namespace CorCompare
|
|
|
|
|
|
static object GetFlaggedEnumValue (TypeDefinition type, object value)
|
|
|
{
|
|
|
+ if (value is ulong)
|
|
|
+ return GetFlaggedEnumValue (type, (ulong)value);
|
|
|
+
|
|
|
long flags = Convert.ToInt64 (value);
|
|
|
var signature = new StringBuilder ();
|
|
|
|
|
|
@@ -1257,6 +1260,33 @@ namespace CorCompare
|
|
|
return signature.ToString ();
|
|
|
}
|
|
|
|
|
|
+ static object GetFlaggedEnumValue (TypeDefinition type, ulong flags)
|
|
|
+ {
|
|
|
+ var signature = new StringBuilder ();
|
|
|
+
|
|
|
+ for (int i = type.Fields.Count - 1; i >= 0; i--) {
|
|
|
+ FieldDefinition field = type.Fields [i];
|
|
|
+
|
|
|
+ if (!field.HasConstant)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ ulong flag = Convert.ToUInt64 (field.Constant);
|
|
|
+
|
|
|
+ if (flag == 0)
|
|
|
+ continue;
|
|
|
+
|
|
|
+ if ((flags & flag) == flag) {
|
|
|
+ if (signature.Length != 0)
|
|
|
+ signature.Append (", ");
|
|
|
+
|
|
|
+ signature.Append (field.Name);
|
|
|
+ flags -= flag;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return signature.ToString ();
|
|
|
+ }
|
|
|
+
|
|
|
static object GetEnumValue (TypeDefinition type, object value)
|
|
|
{
|
|
|
foreach (FieldDefinition field in type.Fields) {
|