summaryrefslogtreecommitdiff
path: root/tool
diff options
context:
space:
mode:
authorAaron Patterson <tenderlove@ruby-lang.org>2022-12-05 16:48:47 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2022-12-07 09:57:11 -0800
commitedc7af48acd12666a2945f30901d16b62a39f474 (patch)
tree7497e93afe9d84f970228cb515a5dc9092db1fbb /tool
parentf725bf358a38b2d5dccb016a962f560baaee55c2 (diff)
Stop transitioning to UNDEF when undefining an instance variable
Cases like this: ```ruby obj = Object.new loop do obj.instance_variable_set(:@foo, 1) obj.remove_instance_variable(:@foo) end ``` can cause us to use many more shapes than we want (and even run out). This commit changes the code such that when an instance variable is removed, we'll walk up the shape tree, find the shape, then rebuild any child nodes that happened to be below the "targetted for removal" IV. This also requires moving any instance variables so that indexes derived from the shape tree will work correctly. Co-Authored-By: Jemma Issroff <jemmaissroff@gmail.com> Co-authored-by: John Hawthorn <jhawthorn@github.com>
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/6866
Diffstat (limited to 'tool')
-rwxr-xr-xtool/mjit/bindgen.rb1
1 files changed, 0 insertions, 1 deletions
diff --git a/tool/mjit/bindgen.rb b/tool/mjit/bindgen.rb
index b846a91664..c093cd423c 100755
--- a/tool/mjit/bindgen.rb
+++ b/tool/mjit/bindgen.rb
@@ -359,7 +359,6 @@ generator = BindingGenerator.new(
SHAPE_FROZEN
SHAPE_INITIAL_CAPACITY
SHAPE_IVAR
- SHAPE_IVAR_UNDEF
SHAPE_ROOT
],
ULONG: %w[