From 2b17c6b76596464a4cace039ace428c01aa4128c Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 10 Jan 2016 20:54:22 +0000 Subject: Combine code for reading conditions in interpreter --- .../org/zwobble/couscous/interpreter/Evaluator.java | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java') diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java index 3bcf3ac..e715caa 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java @@ -18,6 +18,10 @@ public class Evaluator implements ExpressionNodeMapper { public static InterpreterValue eval(Environment environment, ExpressionNode expression) { return new Evaluator(environment).eval(expression); } + + public static boolean evalCondition(Environment environment, ExpressionNode expression) { + return new Evaluator(environment).evalCondition(expression); + } private final Environment environment; @@ -67,14 +71,19 @@ public class Evaluator implements ExpressionNodeMapper { @Override public InterpreterValue visit(TernaryConditionalNode ternaryConditional) { - InterpreterValue condition = eval(ternaryConditional.getCondition()); - if (!(condition instanceof BooleanInterpreterValue)) { - throw new ConditionMustBeBoolean(condition); - } - final org.zwobble.couscous.ast.ExpressionNode branch = ((BooleanInterpreterValue)condition).getValue() ? ternaryConditional.getIfTrue() : ternaryConditional.getIfFalse(); + boolean condition = evalCondition(ternaryConditional.getCondition()); + ExpressionNode branch = condition ? ternaryConditional.getIfTrue() : ternaryConditional.getIfFalse(); return eval(branch); } - + + private boolean evalCondition(ExpressionNode condition) { + InterpreterValue value = eval(condition); + if (!(value instanceof BooleanInterpreterValue)) { + throw new ConditionMustBeBoolean(value); + } + return ((BooleanInterpreterValue)value).getValue(); + } + @Override public InterpreterValue visit(MethodCallNode methodCall) { List arguments = evalArguments(methodCall.getArguments()); -- cgit v1.2.3