diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-10 20:54:22 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-10 20:54:22 +0000 |
| commit | 2b17c6b76596464a4cace039ace428c01aa4128c (patch) | |
| tree | 7be2784f8a3cd4c1f5c94998a20aed75b5329b0f /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | |
| parent | b3a14193f1cd90a0f94270fa05d3239af4d5d47a (diff) | |
Combine code for reading conditions in interpreter
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | 21 |
1 files changed, 15 insertions, 6 deletions
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<InterpreterValue> { 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<InterpreterValue> { @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<InterpreterValue> arguments = evalArguments(methodCall.getArguments()); |
