From ca9fd3ae3a1ef5ca1fbe33a83abb12e656a2556f Mon Sep 17 00:00:00 2001 From: Tom Willemse Date: Wed, 25 Nov 2020 23:10:58 -0800 Subject: Chapter 8: Add blocks and scopes --- src/com/craftinginterpreters/lox/Interpreter.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/com/craftinginterpreters/lox/Interpreter.java') diff --git a/src/com/craftinginterpreters/lox/Interpreter.java b/src/com/craftinginterpreters/lox/Interpreter.java index 7378164..e03ca37 100644 --- a/src/com/craftinginterpreters/lox/Interpreter.java +++ b/src/com/craftinginterpreters/lox/Interpreter.java @@ -89,6 +89,26 @@ class Interpreter implements Expr.Visitor, Stmt.Visitor { stmt.accept(this); } + private void executeBlock(List statements, Environment environment) { + Environment previous = this.environment; + + try { + this.environment = environment; + + for (Stmt statement : statements) { + execute(statement); + } + } finally { + this.environment = previous; + } + } + + @Override + public Void visitBlockStmt(Stmt.Block stmt) { + executeBlock(stmt.statements, new Environment(environment)); + return null; + } + @Override public Void visitExpressionStmt(Stmt.Expression stmt) { evaluate(stmt.expression); -- cgit v1.2.3-54-g00ecf