private ExpResult eagerEval(EvalContext ec) throws ExpError { ExpResult condRes = constCondRes != null ? constCondRes : condExp.evaluate(ec); ExpResult trueRes = constTrueRes != null ? constTrueRes : trueExp.evaluate(ec); ExpResult falseRes = constFalseRes != null ? constFalseRes : falseExp.evaluate(ec); if (condRes.value == 0) return falseRes; else return trueRes; }
public ExpResult evaluate(EvalContext ec) throws ExpError { synchronized (executingThreads) { if (executingThreads.contains(Thread.currentThread())) { throw new ExpError(null, 0, "Expression recursion detected for expression: %s", source); } executingThreads.add(Thread.currentThread()); } ExpResult res = null; try { res = rootNode.evaluate(ec); } finally { synchronized (executingThreads) { executingThreads.remove(Thread.currentThread()); } } return res; }
@Override public ExpResult evaluate(EvalContext ec) throws ExpError { ExpResult lRes = lConstVal != null ? lConstVal : lSubExp.evaluate(ec); ExpResult rRes = rConstVal != null ? rConstVal : rSubExp.evaluate(ec); return func.apply(context, lRes, rRes, exp.source, tokenPos); }
@Override public ExpResult evaluate(EvalContext ec) throws ExpError { return func.apply(context, subExp.evaluate(ec)); }