From a34a00ba19f6ffb61762da4629b53b8a633f9d17 Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 11 Feb 2016 21:33:25 +0000 Subject: Implement static constructor and fields in interpreter --- .../org/zwobble/couscous/interpreter/Executor.java | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 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 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> { public static InterpreterValue callMethod(Environment environment, CallableNode method, Optional 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 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 thisValue, PositionalArguments arguments) { @@ -46,6 +41,16 @@ public class Executor implements StatementNodeMapper> })); } + public static Optional exec(Environment environment, Iterable statements) { + for (StatementNode statement : statements) { + Optional result = exec(environment, statement); + if (result.isPresent()) { + return result; + } + } + return Optional.empty(); + } + public static Optional exec(Environment environment, StatementNode statement) { return statement.accept(new Executor(environment)); } -- cgit v1.2.3