public object VisitCallExpr(Expr.Call expr) { var callee = Evaluate(expr.Callee); var arguments = new List <object>(); foreach (var argument in expr.Arguments) { arguments.Add(Evaluate(argument)); } if (!(callee is ILoxCallable)) { throw new RuntimeError(expr.Paren, "Can only call functions and classes."); } var function = (ILoxCallable)callee; if (arguments.Count != function.Arity) { throw new RuntimeError(expr.Paren, $"Expected {function.Arity} arguments but got {arguments.Count}."); } return(function.Call(this, arguments)); }
public object VisitCallExpr(Expr.Call expr) { Resolve(expr.Callee); foreach (var argument in expr.Arguments) { Resolve(argument); } return(null); }
public string VisitCallExpr(Expr.Call expr) { return(Parenthesize2("call", expr.Callee, expr.Arguments)); }