@Override public Object evaluate(Evaluator evaluator) { switch (kind) { case Return: case Sequence: // NOTE: We ignore control flow. This is only correct if "return" // is the last statement in the block. return expression.evaluate(evaluator); default: throw new AssertionError("evaluate not implemented"); } }
@Override public Object evaluate(Evaluator evaluator) { final Object target; if (targetExpression == null) { target = null; } else { target = targetExpression.evaluate(evaluator); } final Object[] args = new Object[expressions.size()]; for (int i = 0; i < expressions.size(); i++) { Expression expression = expressions.get(i); args[i] = expression.evaluate(evaluator); } try { return method.invoke(target, args); } catch (IllegalAccessException | InvocationTargetException e) { throw new RuntimeException("error while evaluating " + this, e); } }
public Object evaluate(Evaluator evaluator) { final Object o = expression == null ? null : expression.evaluate(evaluator); try { return field.get(o); } catch (IllegalAccessException e) { throw new RuntimeException("error while evaluating " + this, e); } }
public Object evaluate(Evaluator evaluator) { switch (nodeType) { case AndAlso: return (Boolean) expression0.evaluate(evaluator) && (Boolean) expression1.evaluate(evaluator); case Add: switch (primitive) { case INT: return (Integer) expression0.evaluate(evaluator) + (Integer) expression1 .evaluate(evaluator); case DOUBLE: return (Double) expression0.evaluate(evaluator) + (Double) expression1.evaluate(evaluator); default: throw cannotEvaluate(); switch (primitive) { case INT: return (Integer) expression0.evaluate(evaluator) / (Integer) expression1 .evaluate(evaluator); case DOUBLE: return (Double) expression0.evaluate(evaluator) / (Double) expression1.evaluate(evaluator); default: throw cannotEvaluate(); return expression0.evaluate(evaluator) .equals(expression1.evaluate(evaluator)); case GreaterThan: switch (primitive) {