diff options
| author | Matt Valentine-House <matt@eightbitraptor.com> | 2023-12-06 20:22:18 +0000 |
|---|---|---|
| committer | Matt Valentine-House <matt@eightbitraptor.com> | 2023-12-06 21:12:08 +0000 |
| commit | c8b60c8ac2c8bbd077150792b5b207e983ab3634 (patch) | |
| tree | 76d34c1eeab307f668c64a716273acdd82268aff /test/ruby | |
| parent | fe6ee5e92148755b75ffd00ab29611b59a416d5a (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.rb | 26 |
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 |
