diff options
author | Aaron Patterson <tenderlove@ruby-lang.org> | 2022-12-05 16:48:47 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2022-12-07 09:57:11 -0800 |
commit | edc7af48acd12666a2945f30901d16b62a39f474 (patch) | |
tree | 7497e93afe9d84f970228cb515a5dc9092db1fbb /spec | |
parent | f725bf358a38b2d5dccb016a962f560baaee55c2 (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 'spec')
-rw-r--r-- | spec/bundler/bundler/fetcher/compact_index_spec.rb | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/spec/bundler/bundler/fetcher/compact_index_spec.rb b/spec/bundler/bundler/fetcher/compact_index_spec.rb index 00eb27edea..842088a20a 100644 --- a/spec/bundler/bundler/fetcher/compact_index_spec.rb +++ b/spec/bundler/bundler/fetcher/compact_index_spec.rb @@ -52,7 +52,9 @@ RSpec.describe Bundler::Fetcher::CompactIndex do context "when OpenSSL is FIPS-enabled" do def remove_cached_md5_availability + require "objspace" return unless Bundler::SharedHelpers.instance_variable_defined?(:@md5_available) + puts ObjectSpace.dump(Bundler::SharedHelpers) Bundler::SharedHelpers.remove_instance_variable(:@md5_available) end |