From 687477f38a6b13bb5e1622575e430602cbcbb059 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sat, 14 Nov 2015 15:30:01 +0000 Subject: Implement if statements in interpreter --- src/main/java/org/zwobble/couscous/interpreter/Executor.java | 3 ++- .../java/org/zwobble/couscous/tests/BackendMethodTests.java | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'src') 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> 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(); -- cgit v1.2.3