Browse Source

Fix #1765: Add another pattern of FSM initialization to ReadCodeMappingInfo

pull/2030/head
Siegfried Pammer 5 years ago
parent
commit
30c8a22ded
  1. 7
      ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

7
ICSharpCode.Decompiler/CSharp/CSharpDecompiler.cs

@ -616,6 +616,7 @@ namespace ICSharpCode.Decompiler.CSharp
while (blob.RemainingBytes > 0) { while (blob.RemainingBytes > 0) {
var code = blob.DecodeOpCode(); var code = blob.DecodeOpCode();
switch (code) { switch (code) {
case ILOpCode.Newobj:
case ILOpCode.Stfld: case ILOpCode.Stfld:
// async and yield fsms: // async and yield fsms:
var token = MetadataTokenHelpers.EntityHandleOrNil(blob.ReadInt32()); var token = MetadataTokenHelpers.EntityHandleOrNil(blob.ReadInt32());
@ -623,14 +624,16 @@ namespace ICSharpCode.Decompiler.CSharp
continue; continue;
TypeDefinitionHandle fsmTypeDef; TypeDefinitionHandle fsmTypeDef;
switch (token.Kind) { switch (token.Kind) {
case HandleKind.MethodDefinition:
var fsmMethod = module.Metadata.GetMethodDefinition((MethodDefinitionHandle)token);
fsmTypeDef = fsmMethod.GetDeclaringType();
break;
case HandleKind.FieldDefinition: case HandleKind.FieldDefinition:
var fsmField = module.Metadata.GetFieldDefinition((FieldDefinitionHandle)token); var fsmField = module.Metadata.GetFieldDefinition((FieldDefinitionHandle)token);
fsmTypeDef = fsmField.GetDeclaringType(); fsmTypeDef = fsmField.GetDeclaringType();
break; break;
case HandleKind.MemberReference: case HandleKind.MemberReference:
var memberRef = module.Metadata.GetMemberReference((MemberReferenceHandle)token); var memberRef = module.Metadata.GetMemberReference((MemberReferenceHandle)token);
if (memberRef.GetKind() != MemberReferenceKind.Field)
continue;
fsmTypeDef = ExtractDeclaringType(memberRef); fsmTypeDef = ExtractDeclaringType(memberRef);
break; break;
default: default:

Loading…
Cancel
Save