Browse Source

Fix #2060: Add support for alternate code patterns in TransformDisplayClassUsage.ValidateConstructor

pull/2069/head
Siegfried Pammer 5 years ago
parent
commit
5da3b87845
  1. 15
      ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs

15
ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs

@ -399,8 +399,19 @@ namespace ICSharpCode.Decompiler.IL.Transforms
// IL_0000: ldarg.0
// IL_0001: call instance void [mscorlib]System.Object::.ctor()
// IL_0006: ret
if (DecodeOpCodeSkipNop(ref reader) != ILOpCode.Ldarg_0)
return false;
var opCode = DecodeOpCodeSkipNop(ref reader);
switch (opCode) {
case ILOpCode.Ldarg:
case ILOpCode.Ldarg_s:
if (reader.DecodeIndex(opCode) != 0)
return false;
break;
case ILOpCode.Ldarg_0:
// OK
break;
default:
return false;
}
if (DecodeOpCodeSkipNop(ref reader) != ILOpCode.Call)
return false;
var baseCtorHandle = MetadataTokenHelpers.EntityHandleOrNil(reader.ReadInt32());

Loading…
Cancel
Save