diff options
author | Jemma Issroff <jemmaissroff@gmail.com> | 2022-10-19 09:30:41 -0400 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2022-10-19 11:06:19 -0700 |
commit | 0aaa6133ed7365e5037ccdac8b59b00fb13aa50e (patch) | |
tree | c5fbd725f7534b08a32b304beeb9fea954a1b1e7 | |
parent | 5ca23caa2057fc4760fbefab6087371b11c4bc6c (diff) | |
download | ruby-0aaa6133ed7365e5037ccdac8b59b00fb13aa50e.tar.gz |
Transition frozen string to frozen root shape
Co-Authored-By: Aaron Patterson <tenderlove@ruby-lang.org>
-rw-r--r-- | shape.c | 8 | ||||
-rw-r--r-- | spec/ruby/optional/capi/shared/rbasic.rb | 2 | ||||
-rw-r--r-- | test/ruby/test_string.rb | 12 |
3 files changed, 13 insertions, 9 deletions
@@ -203,14 +203,6 @@ rb_shape_transition_shape_frozen(VALUE obj) rb_shape_t* next_shape; if (shape == rb_shape_get_root_shape()) { - switch (BUILTIN_TYPE(obj)) { - case T_OBJECT: - case T_CLASS: - case T_MODULE: - break; - default: - return; - } next_shape = rb_shape_get_frozen_root_shape(); } else { diff --git a/spec/ruby/optional/capi/shared/rbasic.rb b/spec/ruby/optional/capi/shared/rbasic.rb index 99c2044bd7..95c3137143 100644 --- a/spec/ruby/optional/capi/shared/rbasic.rb +++ b/spec/ruby/optional/capi/shared/rbasic.rb @@ -10,7 +10,7 @@ describe :rbasic, shared: true do obj, _ = @data.call initial = @specs.get_flags(obj) obj.freeze - @specs.get_flags(obj).should == @freeze | initial + (@specs.get_flags(obj) & 0xFFFF).should == (@freeze | initial) & 0xFFFF end it "supports setting the FREEZE flag" do diff --git a/test/ruby/test_string.rb b/test/ruby/test_string.rb index ab14a3c17b..4add7dfe2f 100644 --- a/test/ruby/test_string.rb +++ b/test/ruby/test_string.rb @@ -887,6 +887,18 @@ CODE end end + class StringWithIVSet < String + def set_iv + @foo = 1 + end + end + + def test_ivar_set_after_frozen_dup + str = StringWithIVSet.new.freeze + str.dup.set_iv + assert_raise(FrozenError) { str.set_iv } + end + def test_each verbose, $VERBOSE = $VERBOSE, nil |