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

Loading…
Cancel
Save