diff options
Diffstat (limited to 'src/main/java/org/zwobble/couscous/interpreter/Executor.java')
| -rw-r--r-- | src/main/java/org/zwobble/couscous/interpreter/Executor.java | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/main/java/org/zwobble/couscous/interpreter/Executor.java b/src/main/java/org/zwobble/couscous/interpreter/Executor.java index 6de4828..60f7d9c 100644 --- a/src/main/java/org/zwobble/couscous/interpreter/Executor.java +++ b/src/main/java/org/zwobble/couscous/interpreter/Executor.java @@ -16,14 +16,9 @@ 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) { - final org.zwobble.couscous.interpreter.Environment innerEnvironment = buildEnvironment(environment, method, thisValue, arguments); - for (final org.zwobble.couscous.ast.StatementNode statement : method.getBody()) { - final java.util.Optional<org.zwobble.couscous.interpreter.values.InterpreterValue> result = exec(innerEnvironment, statement); - if (result.isPresent()) { - return result.get(); - } - } - return UnitInterpreterValue.UNIT; + Environment innerEnvironment = buildEnvironment(environment, method, thisValue, arguments); + return exec(innerEnvironment, method.getBody()) + .orElse(UnitInterpreterValue.UNIT); } private static Environment buildEnvironment(final Environment environment, final CallableNode method, Optional<InterpreterValue> thisValue, PositionalArguments arguments) { @@ -46,6 +41,16 @@ public class Executor implements StatementNodeMapper<Optional<InterpreterValue>> })); } + public static Optional<InterpreterValue> exec(Environment environment, Iterable<StatementNode> statements) { + for (StatementNode statement : statements) { + Optional<InterpreterValue> result = exec(environment, statement); + if (result.isPresent()) { + return result; + } + } + return Optional.empty(); + } + public static Optional<InterpreterValue> exec(Environment environment, StatementNode statement) { return statement.accept(new Executor(environment)); } |
