diff --git a/ruby/lib/lox/resolver.rb b/ruby/lib/lox/resolver.rb
index 1321adf..fdd385a 100644
--- a/ruby/lib/lox/resolver.rb
+++ b/ruby/lib/lox/resolver.rb
@@ -7,7 +7,7 @@ module Lox
@scopes = []
end
- def resolve(values)
+ def resolve(*values)
values.each do
value.accept(self)
end
@@ -15,11 +15,18 @@ module Lox
def visit_block(stmt)
with_scope do
- resolve(stmt.stmts)
+ resolve(*stmt.stmts)
end
nil
end
+ def visit_var(stmt)
+ declare(stmt.name)
+ resolve(stmt.initializer) if stmt.initializer
+ define(stmt.name)
+ nil
+ end
+
private
def with_block
@@ -28,6 +35,19 @@ module Lox
@scopes.pop
end
+ def declare(name)
+ scope = @scopes.last
+ return if scope.nil?
+
+ scope[name.lexeme] = false
+ end
+
+ def define(name)
+ scope = @scopes.last
+ return if scope.nil?
+
+ scopes[name.lexeme] = true
+ end
end
end