diff options
| author | Michael Williamson <mike@zwobble.org> | 2015-11-14 15:30:01 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2015-11-14 15:30:01 +0000 |
| commit | 687477f38a6b13bb5e1622575e430602cbcbb059 (patch) | |
| tree | b2a456093a1edba6c09906a3c6d7796c078da66a | |
| parent | 0afff8d1d345c3b6b1ffa86fc357c4b45c20d0ba (diff) | |
Implement if statements in interpreter
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/Executor.java | 3 | ||||
| -rw-r--r-- | src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java | 10 |
2 files changed, 12 insertions, 1 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Executor.java b/src/main/java/org/zwobble/couscous/interpreter/Executor.java index 9e34c42..84665a1 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Executor.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Executor.java @@ -96,8 +96,9 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>> BooleanInterpreterValue condition = (BooleanInterpreterValue) eval(environment, ifStatement.getCondition()); if (condition.getValue()) { return exec(ifStatement.getTrueBranch()); + } else { + return exec(ifStatement.getFalseBranch()); } - return Optional.empty(); } @Override diff --git a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java index f77140b..758832f 100644 --- a/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java +++ b/src/test/java/org/zwobble/couscous/tests/BackendMethodTests.java @@ -96,6 +96,16 @@ public abstract class BackendMethodTests { asList(returns(literal("[false]"))))); assertEquals(value("[true]"), runMethod(method)); } + + @Test + public void whenConditionIsFalseIfStatementExecutesTrueBranch() { + MethodNode.Builder method = staticMethod("hello") + .statement(ifStatement( + literal(false), + asList(returns(literal("[true]"))), + asList(returns(literal("[false]"))))); + assertEquals(value("[false]"), runMethod(method)); + } protected PrimitiveValue runMethod(MethodNode.Builder methodBuilder, PrimitiveValue... arguments) { MethodNode method = methodBuilder.build(); |
