public object visitCallExpr(Expr.Call expr) { resolve(expr.callee); foreach (var argument in expr.arguments) { resolve(argument); } return(null); }
public object visitCallExpr(Expr.Call expr) { var callee = evaluate(expr.callee); var arguments = new LinkedList <object>(); foreach (var argument in expr.arguments) { arguments.AddLast(evaluate(argument)); } if (callee is RosellaCallable function) { if (arguments.Count != function.arity()) { throw new RuntimeError(expr.paren, $"Expected {function.arity()} arguments but got {arguments.Count}."); } return(function.call(this, arguments.ToList())); } throw new RuntimeError(expr.paren, "Can only call functions and classes"); }