diff options
Diffstat (limited to 'src/com/craftinginterpreters/lox/Environment.java')
-rw-r--r-- | src/com/craftinginterpreters/lox/Environment.java | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/src/com/craftinginterpreters/lox/Environment.java b/src/com/craftinginterpreters/lox/Environment.java index 0a95282..65c6d88 100644 --- a/src/com/craftinginterpreters/lox/Environment.java +++ b/src/com/craftinginterpreters/lox/Environment.java @@ -43,4 +43,21 @@ class Environment { void define(String name, Object value) { values.put(name, value); } + + Environment ancestor(int distance) { + Environment environment = this; + for (int i = 0; i < distance; i++) { + environment = environment.enclosing; + } + + return environment; + } + + Object getAt(int distance, String name) { + return ancestor(distance).values.get(name); + } + + void assignAt(int distance, Token name, Object value) { + ancestor(distance).values.put(name.lexeme, value); + } } |