summaryrefslogtreecommitdiff
path: root/test/ruby
diff options
context:
space:
mode:
authorMatt Valentine-House <matt@eightbitraptor.com>2023-12-06 20:22:18 +0000
committerMatt Valentine-House <matt@eightbitraptor.com>2023-12-06 21:12:08 +0000
commitc8b60c8ac2c8bbd077150792b5b207e983ab3634 (patch)
tree76d34c1eeab307f668c64a716273acdd82268aff /test/ruby
parentfe6ee5e92148755b75ffd00ab29611b59a416d5a (diff)
[PRISM] Correct depth offset for block local vars
Blocks should always look at their own local table first, even when defined inside an ensure/rescue or something else that uses depth offset. We can ignore the depth offset if we're doing local lookups inside a block
Diffstat (limited to 'test/ruby')
-rw-r--r--test/ruby/test_compile_prism.rb26
1 files changed, 26 insertions, 0 deletions
diff --git a/test/ruby/test_compile_prism.rb b/test/ruby/test_compile_prism.rb
index a707aa5a9c..339300a638 100644
--- a/test/ruby/test_compile_prism.rb
+++ b/test/ruby/test_compile_prism.rb
@@ -789,6 +789,23 @@ module Prism
end
end
CODE
+ assert_prism_eval(<<~CODE)
+ def test
+ ensure
+ {}.each do |key, value|
+ {}[key] = value
+ end
+ end
+ CODE
+ assert_prism_eval(<<~CODE)
+ def test
+ a = 1
+ ensure
+ {}.each do |key, value|
+ {}[key] = a
+ end
+ end
+ CODE
end
def test_NextNode
@@ -924,6 +941,15 @@ module Prism
a + b + c
CODE
assert_prism_eval("begin; rescue; end")
+
+ assert_prism_eval(<<~CODE)
+ begin
+ rescue
+ args.each do |key, value|
+ tmp[key] = 1
+ end
+ end
+ CODE
end
def test_RescueModiferNode