From 9358ea6d7381daaae155eb315d84ba1c0b7831b8 Mon Sep 17 00:00:00 2001 From: Siegfried Pammer Date: Mon, 5 Aug 2019 21:43:04 +0200 Subject: [PATCH] Fix ReadCodeMappingInfo for delegates that are embedded in the declaring type, not a nested type. --- .../CSharp/CSharpDecompiler.cs | 23 +++++++++++++------ 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs index 2bf09a7bf..994be0c13 100644 --- a/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs +++ b/ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs @@ -667,13 +667,22 @@ namespace ICSharpCode.Decompiler.CSharp closureTypeHandle = ExtractDeclaringType(memberRef); if (!closureTypeHandle.IsNil) { var closureType = module.Metadata.GetTypeDefinition(closureTypeHandle); - // Must be a nested type of the containing type. - if (closureType.GetDeclaringType() != declaringType) - break; - if (!processedNestedTypes.Add(closureTypeHandle)) - break; - foreach (var m in closureType.GetMethods()) { - connectedMethods.Enqueue(m); + if (closureTypeHandle != declaringType) { + // Must be a nested type of the containing type. + if (closureType.GetDeclaringType() != declaringType) + break; + if (!processedNestedTypes.Add(closureTypeHandle)) + break; + foreach (var m in closureType.GetMethods()) { + connectedMethods.Enqueue(m); + } + } else { + // Delegate body is declared in the same type + foreach (var m in closureType.GetMethods()) { + var methodDef = module.Metadata.GetMethodDefinition(m); + if (methodDef.Name == memberRef.Name) + connectedMethods.Enqueue(m); + } } break; }