|
|
|
@ -249,15 +249,15 @@ namespace ICSharpCode.Decompiler.IL.Transforms
@@ -249,15 +249,15 @@ namespace ICSharpCode.Decompiler.IL.Transforms
|
|
|
|
|
return false; |
|
|
|
|
if (!this.parameters.TryGetValue(v, out var value)) |
|
|
|
|
return false; |
|
|
|
|
// Parameter variable cannot be used in two different compiler-generated expression trees,
|
|
|
|
|
// therefore we have to abort if the parameter is already mapped to a variable.
|
|
|
|
|
if (this.parameterMapping.ContainsKey(v)) |
|
|
|
|
return false; |
|
|
|
|
var param = new ILVariable(VariableKind.Parameter, value.Item1, i) { Name = value.Item2 }; |
|
|
|
|
parameterMapping.Add(v, param); |
|
|
|
|
parameterVariables.Add(param); |
|
|
|
|
parameters.Add(new DefaultParameter(value.Item1, value.Item2)); |
|
|
|
|
instructionsToRemove.Add((ILInstruction)v.StoreInstructions[0]); |
|
|
|
|
// Add parameter variable only once to mapping.
|
|
|
|
|
if (!this.parameterMapping.ContainsKey(v)) |
|
|
|
|
{ |
|
|
|
|
var param = new ILVariable(VariableKind.Parameter, value.Item1, i) { Name = value.Item2 }; |
|
|
|
|
parameterMapping.Add(v, param); |
|
|
|
|
parameterVariables.Add(param); |
|
|
|
|
parameters.Add(new DefaultParameter(value.Item1, value.Item2)); |
|
|
|
|
instructionsToRemove.Add((ILInstruction)v.StoreInstructions[0]); |
|
|
|
|
} |
|
|
|
|
i++; |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
@ -1290,7 +1290,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms
@@ -1290,7 +1290,8 @@ namespace ICSharpCode.Decompiler.IL.Transforms
|
|
|
|
|
{ |
|
|
|
|
case 1: |
|
|
|
|
ILInstruction left; |
|
|
|
|
switch (argumentType.GetStackType()) |
|
|
|
|
var underlyingType = NullableType.GetUnderlyingType(argumentType); |
|
|
|
|
switch (underlyingType.GetStackType()) |
|
|
|
|
{ |
|
|
|
|
case StackType.I4: |
|
|
|
|
left = new LdcI4(0); |
|
|
|
@ -1307,6 +1308,9 @@ namespace ICSharpCode.Decompiler.IL.Transforms
@@ -1307,6 +1308,9 @@ namespace ICSharpCode.Decompiler.IL.Transforms
|
|
|
|
|
case StackType.F8: |
|
|
|
|
left = new LdcF8(0); |
|
|
|
|
break; |
|
|
|
|
case StackType.O when underlyingType.IsKnownType(KnownTypeCode.Decimal): |
|
|
|
|
left = new LdcDecimal(0); |
|
|
|
|
break; |
|
|
|
|
default: |
|
|
|
|
return (null, SpecialType.UnknownType); |
|
|
|
|
} |
|
|
|
|