aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/craftinginterpreters/lox/Interpreter.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/craftinginterpreters/lox/Interpreter.java')
-rw-r--r--src/com/craftinginterpreters/lox/Interpreter.java31
1 files changed, 22 insertions, 9 deletions
diff --git a/src/com/craftinginterpreters/lox/Interpreter.java b/src/com/craftinginterpreters/lox/Interpreter.java
index 407c537..4549e11 100644
--- a/src/com/craftinginterpreters/lox/Interpreter.java
+++ b/src/com/craftinginterpreters/lox/Interpreter.java
@@ -9,17 +9,21 @@ class Interpreter implements Expr.Visitor<Object>, Stmt.Visitor<Void> {
Interpreter() {
globals.define("clock", new LoxCallable() {
- @Override
- public int arity() { return 0; }
+ @Override
+ public int arity() {
+ return 0;
+ }
- @Override
- public Object call(Interpreter interpreter, List<Object> arguments) {
- return (double)System.currentTimeMillis() / 1000.0;
- }
+ @Override
+ public Object call(Interpreter interpreter, List<Object> arguments) {
+ return (double) System.currentTimeMillis() / 1000.0;
+ }
- @Override
- public String toString() { return "<native fn>"; }
- });
+ @Override
+ public String toString() {
+ return "<native fn>";
+ }
+ });
}
@Override
@@ -173,6 +177,15 @@ class Interpreter implements Expr.Visitor<Object>, Stmt.Visitor<Void> {
}
@Override
+ public Void visitReturnStmt(Stmt.Return stmt) {
+ Object value = null;
+ if (stmt.value != null)
+ value = evaluate(stmt.value);
+
+ throw new Return(value);
+ }
+
+ @Override
public Void visitVarStmt(Stmt.Var stmt) {
Object value = null;
if (stmt.initializer != null) {