Browse Source

Fix #1569: Look for first non-static field in enum definitions to determine enum underlying type.

pull/1596/head
Siegfried Pammer 6 years ago
parent
commit
01d1e2ef57
  1. 7
      ICSharpCode.Decompiler/SRMExtensions.cs

7
ICSharpCode.Decompiler/SRMExtensions.cs

@ -69,13 +69,18 @@ namespace ICSharpCode.Decompiler
return false; return false;
if (!baseType.IsKnownType(reader, KnownTypeCode.Enum)) if (!baseType.IsKnownType(reader, KnownTypeCode.Enum))
return false; return false;
var field = reader.GetFieldDefinition(typeDefinition.GetFields().First()); foreach (var handle in typeDefinition.GetFields()) {
var field = reader.GetFieldDefinition(handle);
if ((field.Attributes & FieldAttributes.Static) != 0)
continue;
var blob = reader.GetBlobReader(field.Signature); var blob = reader.GetBlobReader(field.Signature);
if (blob.ReadSignatureHeader().Kind != SignatureKind.Field) if (blob.ReadSignatureHeader().Kind != SignatureKind.Field)
return false; return false;
underlyingType = (PrimitiveTypeCode)blob.ReadByte(); underlyingType = (PrimitiveTypeCode)blob.ReadByte();
return true; return true;
} }
return false;
}
public static bool IsDelegate(this TypeDefinitionHandle handle, MetadataReader reader) public static bool IsDelegate(this TypeDefinitionHandle handle, MetadataReader reader)
{ {

Loading…
Cancel
Save