diff options
author | Tom Willemse | 2021-01-18 17:42:02 -0800 |
---|---|---|
committer | Tom Willemse | 2021-01-18 17:42:02 -0800 |
commit | 80394e184274eb8ec3ce03cd901e5c817ec82e2a (patch) | |
tree | 67c0b023af49684ef79c1428c1b6fc9618f159c4 /src/com/craftinginterpreters/lox/Interpreter.java | |
parent | 613c2388bedd7a9ad98587877d9f15c7dc99bc84 (diff) | |
download | crafting-interpreters-80394e184274eb8ec3ce03cd901e5c817ec82e2a.tar.gz crafting-interpreters-80394e184274eb8ec3ce03cd901e5c817ec82e2a.zip |
Add break statementchapter-9-challenges
Diffstat (limited to 'src/com/craftinginterpreters/lox/Interpreter.java')
-rw-r--r-- | src/com/craftinginterpreters/lox/Interpreter.java | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/src/com/craftinginterpreters/lox/Interpreter.java b/src/com/craftinginterpreters/lox/Interpreter.java index 9d0cfb3..22c8d4a 100644 --- a/src/com/craftinginterpreters/lox/Interpreter.java +++ b/src/com/craftinginterpreters/lox/Interpreter.java @@ -161,14 +161,23 @@ class Interpreter implements Expr.Visitor<Object>, Stmt.Visitor<Void> { @Override public Void visitWhileStmt(Stmt.While stmt) { - while (isTruthy(evaluate(stmt.condition))) { - execute(stmt.body); + try { + while (isTruthy(evaluate(stmt.condition))) { + execute(stmt.body); + } + } catch (Break ex) { + // We continue on. } return null; } @Override + public Void visitBreakStmt(Stmt.Break stmt) { + throw new Break(); + } + + @Override public Object visitAssignExpr(Expr.Assign expr) { Object value = evaluate(expr.value); environment.assign(expr.name, value); |