|
|
|
@ -3811,9 +3811,19 @@ namespace ICSharpCode.Decompiler.CSharp
@@ -3811,9 +3811,19 @@ namespace ICSharpCode.Decompiler.CSharp
|
|
|
|
|
|
|
|
|
|
protected internal override TranslatedExpression VisitDynamicInvokeMemberInstruction(DynamicInvokeMemberInstruction inst, TranslationContext context) |
|
|
|
|
{ |
|
|
|
|
Expression targetExpr; |
|
|
|
|
var target = TranslateDynamicTarget(inst.Arguments[0], inst.ArgumentInfo[0]); |
|
|
|
|
if (inst.BinderFlags.HasFlag(CSharpBinderFlags.InvokeSimpleName)) |
|
|
|
|
{ |
|
|
|
|
targetExpr = new IdentifierExpression(inst.Name); |
|
|
|
|
((IdentifierExpression)targetExpr).TypeArguments.AddRange(inst.TypeArguments.Select(ConvertType)); |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
targetExpr = new MemberReferenceExpression(target, inst.Name, inst.TypeArguments.Select(ConvertType)); |
|
|
|
|
} |
|
|
|
|
var arguments = TranslateDynamicArguments(inst.Arguments.Skip(1), inst.ArgumentInfo.Skip(1)).ToList(); |
|
|
|
|
return new InvocationExpression(new MemberReferenceExpression(target, inst.Name, inst.TypeArguments.Select(ConvertType)), arguments.Select(a => a.Expression)) |
|
|
|
|
return new InvocationExpression(targetExpr, arguments.Select(a => a.Expression)) |
|
|
|
|
.WithILInstruction(inst) |
|
|
|
|
.WithRR(new DynamicInvocationResolveResult(target.ResolveResult, DynamicInvocationType.Invocation, arguments.Select(a => a.ResolveResult).ToArray())); |
|
|
|
|
} |
|
|
|
|