Browse Source

Fix ReadCodeMappingInfo for lambdas compiled with mcs.

pull/1274/merge
Siegfried Pammer 7 years ago
parent
commit
d5a2b893e9
  1. 2
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs
  2. 11
      ICSharpCode.Decompiler/SRMExtensions.cs

2
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -613,7 +613,7 @@ namespace ICSharpCode.Decompiler.CSharp @@ -613,7 +613,7 @@ namespace ICSharpCode.Decompiler.CSharp
// deal with ldftn instructions, i.e., lambdas
token = MetadataTokenHelpers.EntityHandleOrNil(blob.ReadInt32());
if (!token.IsNil && token.Kind == HandleKind.MethodDefinition) {
if (((MethodDefinitionHandle)token).IsCompilerGenerated(module.Metadata))
if (((MethodDefinitionHandle)token).IsCompilerGeneratedOrIsInCompilerGeneratedClass(module.Metadata))
connectedMethods.Enqueue((MethodDefinitionHandle)token);
}
break;

11
ICSharpCode.Decompiler/SRMExtensions.cs

@ -291,6 +291,17 @@ namespace ICSharpCode.Decompiler @@ -291,6 +291,17 @@ namespace ICSharpCode.Decompiler
return metadata.GetMethodDefinition(handle).IsCompilerGenerated(metadata);
}
public static bool IsCompilerGeneratedOrIsInCompilerGeneratedClass(this MethodDefinitionHandle handle, MetadataReader metadata)
{
MethodDefinition method = metadata.GetMethodDefinition(handle);
if (method.IsCompilerGenerated(metadata))
return true;
TypeDefinitionHandle declaringTypeHandle = method.GetDeclaringType();
if (!declaringTypeHandle.IsNil && declaringTypeHandle.IsCompilerGenerated(metadata))
return true;
return false;
}
public static bool IsCompilerGenerated(this MethodDefinition method, MetadataReader metadata)
{
return method.GetCustomAttributes().HasKnownAttribute(metadata, KnownAttribute.CompilerGenerated);

Loading…
Cancel
Save