/// <summary>
/// Visits an invocation expression and visits <see cref="InvocationExpression.Arguments"/> that are passed
/// to <c>ref</c> or <c>out</c> parameters using <see cref="VisitLval"/>.
/// </summary>
/// <param name="node">The invocation expression to visit.</param>
/// <returns>The result of visiting the invocation expression.</returns>
protected virtual Expression VisitInvocationCore(InvocationExpression node)
{
var expression = Visit(node.Expression);
var parameters = GetInvokeMethod(expression).GetParameters();
var arguments = VisitArguments(node.Arguments, parameters);
return(node.Update(expression, arguments));
}