Browse Source

Fix #1781: TDCU: Support methods without .locals init

pull/2134/head
Siegfried Pammer 5 years ago
parent
commit
c74680df33
  1. 6
      ICSharpCode.Decompiler/IL/Transforms/TransformDisplayClassUsage.cs

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

@ -79,7 +79,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
if (declaredVariable != null) if (declaredVariable != null)
return declaredVariable; return declaredVariable;
declaredVariable = container.Variable.Function.RegisterVariable(VariableKind.Local, field.Type, field.Name); declaredVariable = container.Variable.Function.RegisterVariable(VariableKind.Local, field.Type, field.Name);
declaredVariable.HasInitialValue = true; declaredVariable.HasInitialValue = container.Type.IsReferenceType != false || container.Variable.HasInitialValue;
declaredVariable.CaptureScope = container.CaptureScope; declaredVariable.CaptureScope = container.CaptureScope;
return declaredVariable; return declaredVariable;
} }
@ -288,9 +288,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
HandleInitBlock(stloc.Parent as Block, stloc.ChildIndex + 1, result, result.Variable); HandleInitBlock(stloc.Parent as Block, stloc.ChildIndex + 1, result, result.Variable);
break; break;
case TypeKind.Struct: case TypeKind.Struct:
if (!v.HasInitialValue) if (v.StoreCount != (v.HasInitialValue ? 1 : 0))
return null;
if (v.StoreCount != 1)
return null; return null;
Debug.Assert(v.StoreInstructions.Count == 0); Debug.Assert(v.StoreInstructions.Count == 0);
result = new DisplayClass(v, definition) { CaptureScope = v.CaptureScope }; result = new DisplayClass(v, definition) { CaptureScope = v.CaptureScope };

Loading…
Cancel
Save