diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-09-29 20:48:16 +0100 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-09-29 20:48:16 +0100 |
| commit | d5a76fddca54379b943d988cdca4098ed4cbbad3 (patch) | |
| tree | ae9b10620ee5f718b7eb27fcf2f238671f453981 /src/main/java | |
| parent | e25666869229ae2f586ad12ceb0f9257ec6bbd91 (diff) | |
Check that condition is a boolean
Diffstat (limited to 'src/main/java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/ConditionMustBeBoolean.java | 14 | ||||
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/Evaluator.java | 7 |
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); |
