aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-09-29 20:42:41 +0100
committerMichael Williamson <mike@zwobble.org>2015-09-29 20:42:41 +0100
commite25666869229ae2f586ad12ceb0f9257ec6bbd91 (patch)
tree1328b1d452f99fe243e81044fe1319374ee82c49 /src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
parent4e031ada69e27d9aa518ef00ebf532328ba23e79 (diff)
Add ternary conditionals
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Evaluator.java')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
index 863ccb0..6586f6a 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
@@ -3,8 +3,10 @@ package org.zwobble.couscous.interpreter;
import org.zwobble.couscous.ast.Assignment;
import org.zwobble.couscous.ast.ExpressionNode;
import org.zwobble.couscous.ast.LiteralNode;
+import org.zwobble.couscous.ast.TernaryConditionalNode;
import org.zwobble.couscous.ast.VariableReferenceNode;
import org.zwobble.couscous.ast.visitors.ExpressionNodeVisitor;
+import org.zwobble.couscous.values.BooleanValue;
import org.zwobble.couscous.values.InterpreterValue;
import lombok.val;
@@ -40,4 +42,13 @@ public class Evaluator implements ExpressionNodeVisitor<InterpreterValue> {
environment.put(assignment.getTarget().getReferentId(), value);
return value;
}
+
+ @Override
+ public InterpreterValue visit(TernaryConditionalNode ternaryConditional) {
+ val condition = (BooleanValue)eval(ternaryConditional.getCondition());
+ val branch = condition.getValue()
+ ? ternaryConditional.getIfTrue()
+ : ternaryConditional.getIfFalse();
+ return eval(branch);
+ }
}