Browse Source

Fix ReadCodeMappingInfo for delegates that are embedded in the declaring type, not a nested type.

pull/1633/head
Siegfried Pammer 6 years ago
parent
commit
9358ea6d73
  1. 9
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

9
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -667,6 +667,7 @@ namespace ICSharpCode.Decompiler.CSharp
closureTypeHandle = ExtractDeclaringType(memberRef); closureTypeHandle = ExtractDeclaringType(memberRef);
if (!closureTypeHandle.IsNil) { if (!closureTypeHandle.IsNil) {
var closureType = module.Metadata.GetTypeDefinition(closureTypeHandle); var closureType = module.Metadata.GetTypeDefinition(closureTypeHandle);
if (closureTypeHandle != declaringType) {
// Must be a nested type of the containing type. // Must be a nested type of the containing type.
if (closureType.GetDeclaringType() != declaringType) if (closureType.GetDeclaringType() != declaringType)
break; break;
@ -675,6 +676,14 @@ namespace ICSharpCode.Decompiler.CSharp
foreach (var m in closureType.GetMethods()) { foreach (var m in closureType.GetMethods()) {
connectedMethods.Enqueue(m); 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; break;
} }
break; break;

Loading…
Cancel
Save