10.4.2
change qowmqrwyypzvmmklxnkylzqsxkxltttl
commit 435249e620b26f84201fc267a1b8eb6f2e9a4a6f
author Alpha Chen <alpha@kejadlen.dev>
date
parent ytorskrk
diff --git a/ruby/lib/lox/environment.rb b/ruby/lib/lox/environment.rb
index 543e07e..f962e90 100644
--- a/ruby/lib/lox/environment.rb
+++ b/ruby/lib/lox/environment.rb
@@ -46,5 +46,9 @@ module Lox
         raise RuntimeError.new(name, "Undefined variable '#{lexeme}'.")
       end
     end
+
+    def assign_at(distance, name, value)
+      ancestor(distance).values[name] = value
+    end
   end
 end
diff --git a/ruby/lib/lox/interpreter.rb b/ruby/lib/lox/interpreter.rb
index d194c00..c36e7cb 100644
--- a/ruby/lib/lox/interpreter.rb
+++ b/ruby/lib/lox/interpreter.rb
@@ -135,7 +135,14 @@ module Lox
 
     def visit_assign(expr)
       value = evaluate(expr.value)
-      @env.assign(expr.name, value)
+
+      if @locals.has_key?(expr)
+        distance = @locals.get(expr)
+        @env.assign_at(distance, expr.name, value)
+      else
+        @globals.assign(expr.name, value)
+      end
+
       value
     end