aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2015-09-29 20:48:16 +0100
committerMichael Williamson <mike@zwobble.org>2015-09-29 20:48:16 +0100
commitd5a76fddca54379b943d988cdca4098ed4cbbad3 (patch)
treeae9b10620ee5f718b7eb27fcf2f238671f453981 /src/main/java/org
parente25666869229ae2f586ad12ceb0f9257ec6bbd91 (diff)
Check that condition is a boolean
Diffstat (limited to 'src/main/java/org')
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/ConditionMustBeBoolean.java14
-rw-r--r--src/main/java/org/zwobble/couscous/interpreter/Evaluator.java7
2 files changed, 19 insertions, 2 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/ConditionMustBeBoolean.java b/src/main/java/org/zwobble/couscous/interpreter/ConditionMustBeBoolean.java
new file mode 100644
index 0000000..c69c290
--- /dev/null
+++ b/src/main/java/org/zwobble/couscous/interpreter/ConditionMustBeBoolean.java
@@ -0,0 +1,14 @@
+package org.zwobble.couscous.interpreter;
+
+import org.zwobble.couscous.values.InterpreterValue;
+
+import lombok.EqualsAndHashCode;
+import lombok.Value;
+
+@Value
+@EqualsAndHashCode(callSuper=false)
+public class ConditionMustBeBoolean extends InterpreterException {
+ private static final long serialVersionUID = 1L;
+
+ InterpreterValue actual;
+}
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
index 6586f6a..232441c 100644
--- a/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
+++ b/src/main/java/org/zwobble/couscous/interpreter/Evaluator.java
@@ -45,8 +45,11 @@ public class Evaluator implements ExpressionNodeVisitor<InterpreterValue> {
@Override
public InterpreterValue visit(TernaryConditionalNode ternaryConditional) {
- val condition = (BooleanValue)eval(ternaryConditional.getCondition());
- val branch = condition.getValue()
+ val condition = eval(ternaryConditional.getCondition());
+ if (!(condition instanceof BooleanValue)) {
+ throw new ConditionMustBeBoolean(condition);
+ }
+ val branch = ((BooleanValue)condition).getValue()
? ternaryConditional.getIfTrue()
: ternaryConditional.getIfFalse();
return eval(branch);