aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/org/zwobble/couscous/interpreter/Executor.java
diff options
context:
space:
mode:
authorMichael Williamson <mike@zwobble.org>2016-01-10 20:54:22 +0000
committerMichael Williamson <mike@zwobble.org>2016-01-10 20:54:22 +0000
commit2b17c6b76596464a4cace039ace428c01aa4128c (patch)
tree7be2784f8a3cd4c1f5c94998a20aed75b5329b0f /src/main/java/org/zwobble/couscous/interpreter/Executor.java
parentb3a14193f1cd90a0f94270fa05d3239af4d5d47a (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.java12
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);