aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-10 20:54:22 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-10 20:54:22 +0000
commit2b17c6b76596464a4cace039ace428c01aa4128c (patch)
tree7be2784f8a3cd4c1f5c94998a20aed75b5329b0f /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
parentb3a14193f1cd90a0f94270fa05d3239af4d5d47a (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.java21
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());