Browse Source

Fix #1209: System.ArgumentException: given Block is invalid!, named arguments in object / collection initializer ctor were not supported.

pull/1213/head
Siegfried Pammer 7 years ago
parent
commit
3cb2d316a3
  1. 15
      ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

15
ICSharpCode.Decompiler/CSharp/ExpressionBuilder.cs

@ -1951,14 +1951,19 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1951,14 +1951,19 @@ namespace ICSharpCode.Decompiler.CSharp
case BlockKind.CallInlineAssign:
return TranslateSetterCallAssignment(block);
case BlockKind.CallWithNamedArgs:
return WrapInRef(
new CallBuilder(this, typeSystem, settings).CallWithNamedArgs(block),
((CallInstruction)block.FinalInstruction).Method.ReturnType);
return TranslateCallWithNamedArgs(block);
default:
return ErrorExpression("Unknown block type: " + block.Kind);
}
}
private TranslatedExpression TranslateCallWithNamedArgs(Block block)
{
return WrapInRef(
new CallBuilder(this, typeSystem, settings).CallWithNamedArgs(block),
((CallInstruction)block.FinalInstruction).Method.ReturnType);
}
private TranslatedExpression TranslateSetterCallAssignment(Block block)
{
if (!block.MatchInlineAssignBlock(out var call, out var value)) {
@ -1991,6 +1996,10 @@ namespace ICSharpCode.Decompiler.CSharp @@ -1991,6 +1996,10 @@ namespace ICSharpCode.Decompiler.CSharp
.WithILInstruction(defaultVal)
.WithRR(new TypeResolveResult(defaultVal.Type));
break;
case Block callWithNamedArgs when callWithNamedArgs.Kind == BlockKind.CallWithNamedArgs:
expr = TranslateCallWithNamedArgs(callWithNamedArgs);
initObjRR = new InitializedObjectResolveResult(expr.Type);
break;
default:
throw new ArgumentException("given Block is invalid!");
}

Loading…
Cancel
Save