Browse Source

Use appropriate type for helper variables introduced for named arguments.

pull/1464/head v5.0-preview1
Daniel Grunwald 6 years ago
parent
commit
40b6f0c7bf
  1. 13
      ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs
  2. 2
      ICSharpCode.Decompiler/IL/Transforms/NamedArgumentTransform.cs

13
ICSharpCode.Decompiler/IL/Instructions/ILFunction.cs

@ -229,7 +229,18 @@ namespace ICSharpCode.Decompiler.IL @@ -229,7 +229,18 @@ namespace ICSharpCode.Decompiler.IL
public ILVariable RegisterVariable(VariableKind kind, IType type, string name = null)
{
var variable = new ILVariable(kind, type);
return RegisterVariable(kind, type, type.GetStackType(), name);
}
public ILVariable RegisterVariable(VariableKind kind, StackType stackType, string name = null)
{
var type = Method.Compilation.FindType(stackType.ToKnownTypeCode());
return RegisterVariable(kind, type, stackType, name);
}
ILVariable RegisterVariable(VariableKind kind, IType type, StackType stackType, string name = null)
{
var variable = new ILVariable(kind, type, stackType);
if (string.IsNullOrWhiteSpace(name)) {
name = "I_" + (helperVariableCount++);
variable.HasGeneratedName = true;

2
ICSharpCode.Decompiler/IL/Transforms/NamedArgumentTransform.cs

@ -79,7 +79,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms @@ -79,7 +79,7 @@ namespace ICSharpCode.Decompiler.IL.Transforms
{
var call = (CallInstruction)arg.Parent;
Debug.Assert(context.Function == call.Ancestors.OfType<ILFunction>().First());
var v = context.Function.RegisterVariable(VariableKind.NamedArgument, arg.InferType(context.TypeSystem));
var v = context.Function.RegisterVariable(VariableKind.NamedArgument, arg.ResultType);
context.Step($"Introduce named argument '{v.Name}'", arg);
if (!(call.Parent is Block namedArgBlock) || namedArgBlock.Kind != BlockKind.CallWithNamedArgs) {
// create namedArgBlock:

Loading…
Cancel
Save