From 30d2215800deafbdcfb134f1356777ec0139bb7a Mon Sep 17 00:00:00 2001 From: Michael Williamson Date: Thu, 1 Oct 2015 21:49:18 +0100 Subject: Use normal method call exec in interpreter entry point --- .../org/zwobble/couscous/interpreter/Executor.java | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 src/main/java/org/zwobble/couscous/interpreter/Executor.java (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 new file mode 100644 index 0000000..633bf6b --- /dev/null +++ b/src/main/java/org/zwobble/couscous/interpreter/Executor.java @@ -0,0 +1,34 @@ +package org.zwobble.couscous.interpreter; + +import java.util.Optional; + +import org.zwobble.couscous.ast.ExpressionStatementNode; +import org.zwobble.couscous.ast.ReturnNode; +import org.zwobble.couscous.ast.StatementNode; +import org.zwobble.couscous.ast.visitors.StatementNodeVisitor; +import org.zwobble.couscous.values.InterpreterValue; + +import static org.zwobble.couscous.interpreter.Evaluator.eval; + +public class Executor implements StatementNodeVisitor> { + public static Optional exec(Environment environment, StatementNode statement) { + return statement.accept(new Executor(environment)); + } + + private final Environment environment; + + private Executor(Environment environment) { + this.environment = environment; + } + + @Override + public Optional visit(ReturnNode returnNode) { + return Optional.of(eval(environment, returnNode.getValue())); + } + + @Override + public Optional visit(ExpressionStatementNode expressionStatement) { + eval(environment, expressionStatement.getExpression()); + return Optional.empty(); + } +} -- cgit v1.2.3