From 5a692610ff5e14f49fd6105f509ce8f3899aadca Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Sat, 8 Jun 2019 17:05:14 +0200 Subject: [PATCH] Fix #1523: Search throws EnumUnderlyingTypeResolverException --- .../CSharp/CSharpDecompiler.cs | 21 ------------------- .../CSharp/OutputVisitor/CSharpAmbience.cs | 2 +- .../TypeSystem/TypeProvider.cs | 1 - 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs index 00791e127..41119a828 100644 --- a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs @@ -1406,27 +1406,6 @@ namespace ICSharpCode.Decompiler.CSharp return false; } - internal static bool IsFixedField(MetadataReader metadata, FieldDefinitionHandle handle, out IType type, out int elementCount) - { - type = null; - elementCount = 0; - var field = metadata.GetFieldDefinition(handle); - foreach (var h in field.GetCustomAttributes()) { - var customAttribute = metadata.GetCustomAttribute(h); - if (customAttribute.IsKnownAttribute(metadata, KnownAttribute.FixedBuffer)) { - var value = customAttribute.DecodeValue(MetadataExtensions.minimalCorlibTypeProvider); - if (value.FixedArguments.Length == 2) { - if (value.FixedArguments[0].Value is IType trr && value.FixedArguments[1].Value is int length) { - type = trr; - elementCount = length; - return true; - } - } - } - } - return false; - } - EntityDeclaration DoDecompile(IProperty property, DecompileRun decompileRun, ITypeResolveContext decompilationContext) { Debug.Assert(decompilationContext.CurrentMember == property); diff --git a/ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs b/ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs index 6064fbd33..30bade713 100644 --- a/ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs +++ b/ICSharpCode.Decompiler/CSharp/OutputVisitor/CSharpAmbience.cs @@ -137,7 +137,7 @@ namespace ICSharpCode.Decompiler.CSharp.OutputVisitor writer.Space(); writer.WriteToken(Roles.Colon, ":"); writer.Space(); - if (symbol is IField f && CSharpDecompiler.IsFixedField(f.ParentModule.PEFile.Metadata, (System.Reflection.Metadata.FieldDefinitionHandle)f.MetadataToken, out var type, out int elementCount)) { + if (symbol is IField f && CSharpDecompiler.IsFixedField(f, out var type, out int elementCount)) { rt = astBuilder.ConvertType(type); new IndexerExpression(new TypeReferenceExpression(rt), astBuilder.ConvertConstantValue(f.Compilation.FindType(KnownTypeCode.Int32), elementCount)) .AcceptVisitor(new CSharpOutputVisitor(writer, formattingPolicy)); diff --git a/ICSharpCode.Decompiler/TypeSystem/TypeProvider.cs b/ICSharpCode.Decompiler/TypeSystem/TypeProvider.cs index fbf241d41..ccf21ac9c 100644 --- a/ICSharpCode.Decompiler/TypeSystem/TypeProvider.cs +++ b/ICSharpCode.Decompiler/TypeSystem/TypeProvider.cs @@ -131,7 +131,6 @@ namespace ICSharpCode.Decompiler.TypeSystem public IType GetTypeFromReference(SRM.MetadataReader reader, SRM.TypeReferenceHandle handle, byte rawTypeKind) { - var asmref = handle.GetDeclaringModule(reader); bool? isReferenceType = IsReferenceType(reader, handle, rawTypeKind); var gctr = new GetClassTypeReference(handle.GetFullTypeName(reader), handle.GetDeclaringModule(reader), isReferenceType); return gctr.Resolve(module != null ? new SimpleTypeResolveContext(module) : new SimpleTypeResolveContext(compilation));