public EvalObject Visit(AstNode.FunCall v) { var fun = Eval(v.fun); return(fun switch { EvalObject.Int _ => throw new EvalException(v.pos, "Int is not callable"), EvalObject.Builtin b => b.Call(Eval(v.arg)), EvalObject.Lambda l => l.Call(Eval(v.arg), this), _ => throw new InvalidOperationException(), });
// funCall: [funCall] ternary AstNode FunCall() { var a = Ternary(); for (;;) { if (IsEof() || Is(TT.RightParen) || Is(TT.Question) || Is(TT.Colon) || Is(TT.Assign)) { return(a); } Pos p = pos; a = new AstNode.FunCall(p, a, Ternary()); } }