diff options
| author | Michael Williamson <mike@zwobble.org> | 2016-01-10 20:54:22 +0000 |
|---|---|---|
| committer | Michael Williamson <mike@zwobble.org> | 2016-01-10 20:54:22 +0000 |
| commit | 2b17c6b76596464a4cace039ace428c01aa4128c (patch) | |
| tree | 7be2784f8a3cd4c1f5c94998a20aed75b5329b0f /src/main/java/org/zwobble/couscous/interpreter/Executor.java | |
| parent | b3a14193f1cd90a0f94270fa05d3239af4d5d47a (diff) | |
Combine code for reading conditions in interpreter
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Executor.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/Executor.java | 12 |
1 files changed, 3 insertions, 9 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Executor.java b/src/main/java/org/zwobble/couscous/interpreter/Executor.java index 556e7d1..6de4828 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Executor.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Executor.java @@ -1,10 +1,8 @@ package org.zwobble.couscous.interpreter; import org.zwobble.couscous.ast.*; -import org.zwobble.couscous.ast.structure.NodeStructure; import org.zwobble.couscous.ast.visitors.NodeMapperWithDefault; import org.zwobble.couscous.ast.visitors.StatementNodeMapper; -import org.zwobble.couscous.interpreter.values.BooleanInterpreterValue; import org.zwobble.couscous.interpreter.values.InterpreterValue; import org.zwobble.couscous.interpreter.values.UnitInterpreterValue; @@ -14,6 +12,7 @@ import java.util.stream.Stream; import static org.zwobble.couscous.ast.structure.NodeStructure.descendantNodesAndSelf; import static org.zwobble.couscous.interpreter.Evaluator.eval; +import static org.zwobble.couscous.interpreter.Evaluator.evalCondition; public class Executor implements StatementNodeMapper<Optional<InterpreterValue>> { public static InterpreterValue callMethod(Environment environment, CallableNode method, Optional<InterpreterValue> thisValue, PositionalArguments arguments) { @@ -76,7 +75,7 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>> @Override public Optional<InterpreterValue> visit(IfStatementNode ifStatement) { - List<StatementNode> body = evalCondition(ifStatement.getCondition()) + List<StatementNode> body = evalCondition(environment, ifStatement.getCondition()) ? ifStatement.getTrueBranch() : ifStatement.getFalseBranch(); return exec(body); @@ -84,7 +83,7 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>> @Override public Optional<InterpreterValue> visit(WhileNode whileLoop) { - while (evalCondition(whileLoop.getCondition())) { + while (evalCondition(environment, whileLoop.getCondition())) { Optional<InterpreterValue> result = exec(whileLoop.getBody()); if (result.isPresent()) { return result; @@ -93,11 +92,6 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>> return Optional.empty(); } - private boolean evalCondition(ExpressionNode conditionExpression) { - BooleanInterpreterValue condition = (BooleanInterpreterValue) eval(environment, conditionExpression); - return condition.getValue(); - } - private Optional<InterpreterValue> exec(List<StatementNode> statements) { for (StatementNode statement : statements) { Optional<InterpreterValue> result = exec(environment, statement); |
