public Field Invoke(Runner runner, Node node) { try { runner.PushContext(); for (int i = 0, l = Math.Min(arguments.Count, node.Count); i < l; i++) { runner.SetField( runner.Eval(arguments[i]).StringValue, runner.Eval(node[i])); } return(runner.Eval(body)); } finally { runner.PopContext(); } }