From 2b17c6b76596464a4cace039ace428c01aa4128c Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Sun, 10 Jan 2016 20:54:22 +0000 Subject: Combine code for reading conditions in interpreter --- src/main/java/org/zwobble/couscous/interpreter/Executor.java | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) (limited to 'src/main/java/org/zwobble/couscous/interpreter/Executor.java') 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> { public static InterpreterValue callMethod(Environment environment, CallableNode method, Optional thisValue, PositionalArguments arguments) { @@ -76,7 +75,7 @@ public class Executor implements StatementNodeMapper> @Override public Optional visit(IfStatementNode ifStatement) { - List body = evalCondition(ifStatement.getCondition()) + List body = evalCondition(environment, ifStatement.getCondition()) ? ifStatement.getTrueBranch() : ifStatement.getFalseBranch(); return exec(body); @@ -84,7 +83,7 @@ public class Executor implements StatementNodeMapper> @Override public Optional visit(WhileNode whileLoop) { - while (evalCondition(whileLoop.getCondition())) { + while (evalCondition(environment, whileLoop.getCondition())) { Optional result = exec(whileLoop.getBody()); if (result.isPresent()) { return result; @@ -93,11 +92,6 @@ public class Executor implements StatementNodeMapper> return Optional.empty(); } - private boolean evalCondition(ExpressionNode conditionExpression) { - BooleanInterpreterValue condition = (BooleanInterpreterValue) eval(environment, conditionExpression); - return condition.getValue(); - } - private Optional exec(List statements) { for (StatementNode statement : statements) { Optional result = exec(environment, statement); -- cgit v1.2.3