Esempio n. 1
0
        public object visitCallExpr(Expr.Call expr)
        {
            resolve(expr.callee);

            foreach (var argument in expr.arguments)
            {
                resolve(argument);
            }

            return(null);
        }
Esempio n. 2
0
        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");
        }