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. 23
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

23
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -667,13 +667,22 @@ namespace ICSharpCode.Decompiler.CSharp @@ -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;
}

Loading…
Cancel
Save