summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean Boussier <jean.boussier@gmail.com>2020-11-18 13:57:01 +0100
committerNobuyoshi Nakada <nobu@ruby-lang.org>2020-11-30 17:33:28 +0900
commit6bef49427ab2a9d3bc338f1cffcd086153a59f44 (patch)
tree3324d63fd62c7a95420967fce546d7143293f1a7
parent930a135524382ddd80c0608a7593b6cdfceee846 (diff)
Fix rb_interned_str_* functions to not assume static strings
Fixes [Feature #13381] When passed a `fake_str`, `register_fstring` would create new strings with `str_new_static`. That's not what was expected, and answer almost no use cases.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3786
-rw-r--r--ext/-test-/string/depend567
-rw-r--r--ext/-test-/string/rb_interned_str.c14
-rw-r--r--string.c71
-rw-r--r--test/-ext-/string/test_interned_str.rb12
4 files changed, 433 insertions, 231 deletions
diff --git a/ext/-test-/string/depend b/ext/-test-/string/depend
index 309da041d5..67dfd2289f 100644
--- a/ext/-test-/string/depend
+++ b/ext/-test-/string/depend
@@ -2,6 +2,20 @@
capacity.o: $(RUBY_EXTCONF_H)
capacity.o: $(arch_hdrdir)/ruby/config.h
capacity.o: $(hdrdir)/ruby.h
+capacity.o: $(hdrdir)/ruby/assert.h
+capacity.o: $(hdrdir)/ruby/backward.h
+capacity.o: $(hdrdir)/ruby/backward/2/assume.h
+capacity.o: $(hdrdir)/ruby/backward/2/attributes.h
+capacity.o: $(hdrdir)/ruby/backward/2/bool.h
+capacity.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+capacity.o: $(hdrdir)/ruby/backward/2/inttypes.h
+capacity.o: $(hdrdir)/ruby/backward/2/limits.h
+capacity.o: $(hdrdir)/ruby/backward/2/long_long.h
+capacity.o: $(hdrdir)/ruby/backward/2/stdalign.h
+capacity.o: $(hdrdir)/ruby/backward/2/stdarg.h
+capacity.o: $(hdrdir)/ruby/defines.h
+capacity.o: $(hdrdir)/ruby/encoding.h
+capacity.o: $(hdrdir)/ruby/intern.h
capacity.o: $(hdrdir)/ruby/internal/anyargs.h
capacity.o: $(hdrdir)/ruby/internal/arithmetic.h
capacity.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -142,20 +156,6 @@ capacity.o: $(hdrdir)/ruby/internal/value_type.h
capacity.o: $(hdrdir)/ruby/internal/variable.h
capacity.o: $(hdrdir)/ruby/internal/warning_push.h
capacity.o: $(hdrdir)/ruby/internal/xmalloc.h
-capacity.o: $(hdrdir)/ruby/assert.h
-capacity.o: $(hdrdir)/ruby/backward.h
-capacity.o: $(hdrdir)/ruby/backward/2/assume.h
-capacity.o: $(hdrdir)/ruby/backward/2/attributes.h
-capacity.o: $(hdrdir)/ruby/backward/2/bool.h
-capacity.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-capacity.o: $(hdrdir)/ruby/backward/2/inttypes.h
-capacity.o: $(hdrdir)/ruby/backward/2/limits.h
-capacity.o: $(hdrdir)/ruby/backward/2/long_long.h
-capacity.o: $(hdrdir)/ruby/backward/2/stdalign.h
-capacity.o: $(hdrdir)/ruby/backward/2/stdarg.h
-capacity.o: $(hdrdir)/ruby/defines.h
-capacity.o: $(hdrdir)/ruby/encoding.h
-capacity.o: $(hdrdir)/ruby/intern.h
capacity.o: $(hdrdir)/ruby/missing.h
capacity.o: $(hdrdir)/ruby/onigmo.h
capacity.o: $(hdrdir)/ruby/oniguruma.h
@@ -168,6 +168,20 @@ capacity.o: $(top_srcdir)/internal/string.h
capacity.o: capacity.c
coderange.o: $(RUBY_EXTCONF_H)
coderange.o: $(arch_hdrdir)/ruby/config.h
+coderange.o: $(hdrdir)/ruby/assert.h
+coderange.o: $(hdrdir)/ruby/backward.h
+coderange.o: $(hdrdir)/ruby/backward/2/assume.h
+coderange.o: $(hdrdir)/ruby/backward/2/attributes.h
+coderange.o: $(hdrdir)/ruby/backward/2/bool.h
+coderange.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+coderange.o: $(hdrdir)/ruby/backward/2/inttypes.h
+coderange.o: $(hdrdir)/ruby/backward/2/limits.h
+coderange.o: $(hdrdir)/ruby/backward/2/long_long.h
+coderange.o: $(hdrdir)/ruby/backward/2/stdalign.h
+coderange.o: $(hdrdir)/ruby/backward/2/stdarg.h
+coderange.o: $(hdrdir)/ruby/defines.h
+coderange.o: $(hdrdir)/ruby/encoding.h
+coderange.o: $(hdrdir)/ruby/intern.h
coderange.o: $(hdrdir)/ruby/internal/anyargs.h
coderange.o: $(hdrdir)/ruby/internal/arithmetic.h
coderange.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -308,20 +322,6 @@ coderange.o: $(hdrdir)/ruby/internal/value_type.h
coderange.o: $(hdrdir)/ruby/internal/variable.h
coderange.o: $(hdrdir)/ruby/internal/warning_push.h
coderange.o: $(hdrdir)/ruby/internal/xmalloc.h
-coderange.o: $(hdrdir)/ruby/assert.h
-coderange.o: $(hdrdir)/ruby/backward.h
-coderange.o: $(hdrdir)/ruby/backward/2/assume.h
-coderange.o: $(hdrdir)/ruby/backward/2/attributes.h
-coderange.o: $(hdrdir)/ruby/backward/2/bool.h
-coderange.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-coderange.o: $(hdrdir)/ruby/backward/2/inttypes.h
-coderange.o: $(hdrdir)/ruby/backward/2/limits.h
-coderange.o: $(hdrdir)/ruby/backward/2/long_long.h
-coderange.o: $(hdrdir)/ruby/backward/2/stdalign.h
-coderange.o: $(hdrdir)/ruby/backward/2/stdarg.h
-coderange.o: $(hdrdir)/ruby/defines.h
-coderange.o: $(hdrdir)/ruby/encoding.h
-coderange.o: $(hdrdir)/ruby/intern.h
coderange.o: $(hdrdir)/ruby/missing.h
coderange.o: $(hdrdir)/ruby/onigmo.h
coderange.o: $(hdrdir)/ruby/oniguruma.h
@@ -332,6 +332,20 @@ coderange.o: coderange.c
cstr.o: $(RUBY_EXTCONF_H)
cstr.o: $(arch_hdrdir)/ruby/config.h
cstr.o: $(hdrdir)/ruby.h
+cstr.o: $(hdrdir)/ruby/assert.h
+cstr.o: $(hdrdir)/ruby/backward.h
+cstr.o: $(hdrdir)/ruby/backward/2/assume.h
+cstr.o: $(hdrdir)/ruby/backward/2/attributes.h
+cstr.o: $(hdrdir)/ruby/backward/2/bool.h
+cstr.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+cstr.o: $(hdrdir)/ruby/backward/2/inttypes.h
+cstr.o: $(hdrdir)/ruby/backward/2/limits.h
+cstr.o: $(hdrdir)/ruby/backward/2/long_long.h
+cstr.o: $(hdrdir)/ruby/backward/2/stdalign.h
+cstr.o: $(hdrdir)/ruby/backward/2/stdarg.h
+cstr.o: $(hdrdir)/ruby/defines.h
+cstr.o: $(hdrdir)/ruby/encoding.h
+cstr.o: $(hdrdir)/ruby/intern.h
cstr.o: $(hdrdir)/ruby/internal/anyargs.h
cstr.o: $(hdrdir)/ruby/internal/arithmetic.h
cstr.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -472,20 +486,6 @@ cstr.o: $(hdrdir)/ruby/internal/value_type.h
cstr.o: $(hdrdir)/ruby/internal/variable.h
cstr.o: $(hdrdir)/ruby/internal/warning_push.h
cstr.o: $(hdrdir)/ruby/internal/xmalloc.h
-cstr.o: $(hdrdir)/ruby/assert.h
-cstr.o: $(hdrdir)/ruby/backward.h
-cstr.o: $(hdrdir)/ruby/backward/2/assume.h
-cstr.o: $(hdrdir)/ruby/backward/2/attributes.h
-cstr.o: $(hdrdir)/ruby/backward/2/bool.h
-cstr.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-cstr.o: $(hdrdir)/ruby/backward/2/inttypes.h
-cstr.o: $(hdrdir)/ruby/backward/2/limits.h
-cstr.o: $(hdrdir)/ruby/backward/2/long_long.h
-cstr.o: $(hdrdir)/ruby/backward/2/stdalign.h
-cstr.o: $(hdrdir)/ruby/backward/2/stdarg.h
-cstr.o: $(hdrdir)/ruby/defines.h
-cstr.o: $(hdrdir)/ruby/encoding.h
-cstr.o: $(hdrdir)/ruby/intern.h
cstr.o: $(hdrdir)/ruby/missing.h
cstr.o: $(hdrdir)/ruby/onigmo.h
cstr.o: $(hdrdir)/ruby/oniguruma.h
@@ -500,6 +500,19 @@ cstr.o: cstr.c
ellipsize.o: $(RUBY_EXTCONF_H)
ellipsize.o: $(arch_hdrdir)/ruby/config.h
ellipsize.o: $(hdrdir)/ruby.h
+ellipsize.o: $(hdrdir)/ruby/assert.h
+ellipsize.o: $(hdrdir)/ruby/backward.h
+ellipsize.o: $(hdrdir)/ruby/backward/2/assume.h
+ellipsize.o: $(hdrdir)/ruby/backward/2/attributes.h
+ellipsize.o: $(hdrdir)/ruby/backward/2/bool.h
+ellipsize.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+ellipsize.o: $(hdrdir)/ruby/backward/2/inttypes.h
+ellipsize.o: $(hdrdir)/ruby/backward/2/limits.h
+ellipsize.o: $(hdrdir)/ruby/backward/2/long_long.h
+ellipsize.o: $(hdrdir)/ruby/backward/2/stdalign.h
+ellipsize.o: $(hdrdir)/ruby/backward/2/stdarg.h
+ellipsize.o: $(hdrdir)/ruby/defines.h
+ellipsize.o: $(hdrdir)/ruby/intern.h
ellipsize.o: $(hdrdir)/ruby/internal/anyargs.h
ellipsize.o: $(hdrdir)/ruby/internal/arithmetic.h
ellipsize.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -640,19 +653,6 @@ ellipsize.o: $(hdrdir)/ruby/internal/value_type.h
ellipsize.o: $(hdrdir)/ruby/internal/variable.h
ellipsize.o: $(hdrdir)/ruby/internal/warning_push.h
ellipsize.o: $(hdrdir)/ruby/internal/xmalloc.h
-ellipsize.o: $(hdrdir)/ruby/assert.h
-ellipsize.o: $(hdrdir)/ruby/backward.h
-ellipsize.o: $(hdrdir)/ruby/backward/2/assume.h
-ellipsize.o: $(hdrdir)/ruby/backward/2/attributes.h
-ellipsize.o: $(hdrdir)/ruby/backward/2/bool.h
-ellipsize.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-ellipsize.o: $(hdrdir)/ruby/backward/2/inttypes.h
-ellipsize.o: $(hdrdir)/ruby/backward/2/limits.h
-ellipsize.o: $(hdrdir)/ruby/backward/2/long_long.h
-ellipsize.o: $(hdrdir)/ruby/backward/2/stdalign.h
-ellipsize.o: $(hdrdir)/ruby/backward/2/stdarg.h
-ellipsize.o: $(hdrdir)/ruby/defines.h
-ellipsize.o: $(hdrdir)/ruby/intern.h
ellipsize.o: $(hdrdir)/ruby/missing.h
ellipsize.o: $(hdrdir)/ruby/ruby.h
ellipsize.o: $(hdrdir)/ruby/st.h
@@ -661,6 +661,20 @@ ellipsize.o: ellipsize.c
enc_associate.o: $(RUBY_EXTCONF_H)
enc_associate.o: $(arch_hdrdir)/ruby/config.h
enc_associate.o: $(hdrdir)/ruby.h
+enc_associate.o: $(hdrdir)/ruby/assert.h
+enc_associate.o: $(hdrdir)/ruby/backward.h
+enc_associate.o: $(hdrdir)/ruby/backward/2/assume.h
+enc_associate.o: $(hdrdir)/ruby/backward/2/attributes.h
+enc_associate.o: $(hdrdir)/ruby/backward/2/bool.h
+enc_associate.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+enc_associate.o: $(hdrdir)/ruby/backward/2/inttypes.h
+enc_associate.o: $(hdrdir)/ruby/backward/2/limits.h
+enc_associate.o: $(hdrdir)/ruby/backward/2/long_long.h
+enc_associate.o: $(hdrdir)/ruby/backward/2/stdalign.h
+enc_associate.o: $(hdrdir)/ruby/backward/2/stdarg.h
+enc_associate.o: $(hdrdir)/ruby/defines.h
+enc_associate.o: $(hdrdir)/ruby/encoding.h
+enc_associate.o: $(hdrdir)/ruby/intern.h
enc_associate.o: $(hdrdir)/ruby/internal/anyargs.h
enc_associate.o: $(hdrdir)/ruby/internal/arithmetic.h
enc_associate.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -801,20 +815,6 @@ enc_associate.o: $(hdrdir)/ruby/internal/value_type.h
enc_associate.o: $(hdrdir)/ruby/internal/variable.h
enc_associate.o: $(hdrdir)/ruby/internal/warning_push.h
enc_associate.o: $(hdrdir)/ruby/internal/xmalloc.h
-enc_associate.o: $(hdrdir)/ruby/assert.h
-enc_associate.o: $(hdrdir)/ruby/backward.h
-enc_associate.o: $(hdrdir)/ruby/backward/2/assume.h
-enc_associate.o: $(hdrdir)/ruby/backward/2/attributes.h
-enc_associate.o: $(hdrdir)/ruby/backward/2/bool.h
-enc_associate.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-enc_associate.o: $(hdrdir)/ruby/backward/2/inttypes.h
-enc_associate.o: $(hdrdir)/ruby/backward/2/limits.h
-enc_associate.o: $(hdrdir)/ruby/backward/2/long_long.h
-enc_associate.o: $(hdrdir)/ruby/backward/2/stdalign.h
-enc_associate.o: $(hdrdir)/ruby/backward/2/stdarg.h
-enc_associate.o: $(hdrdir)/ruby/defines.h
-enc_associate.o: $(hdrdir)/ruby/encoding.h
-enc_associate.o: $(hdrdir)/ruby/intern.h
enc_associate.o: $(hdrdir)/ruby/missing.h
enc_associate.o: $(hdrdir)/ruby/onigmo.h
enc_associate.o: $(hdrdir)/ruby/oniguruma.h
@@ -824,6 +824,20 @@ enc_associate.o: $(hdrdir)/ruby/subst.h
enc_associate.o: enc_associate.c
enc_str_buf_cat.o: $(RUBY_EXTCONF_H)
enc_str_buf_cat.o: $(arch_hdrdir)/ruby/config.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/assert.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/assume.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/attributes.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/bool.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/inttypes.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/limits.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/long_long.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/stdalign.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/stdarg.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/defines.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/encoding.h
+enc_str_buf_cat.o: $(hdrdir)/ruby/intern.h
enc_str_buf_cat.o: $(hdrdir)/ruby/internal/anyargs.h
enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic.h
enc_str_buf_cat.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -964,20 +978,6 @@ enc_str_buf_cat.o: $(hdrdir)/ruby/internal/value_type.h
enc_str_buf_cat.o: $(hdrdir)/ruby/internal/variable.h
enc_str_buf_cat.o: $(hdrdir)/ruby/internal/warning_push.h
enc_str_buf_cat.o: $(hdrdir)/ruby/internal/xmalloc.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/assert.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/assume.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/attributes.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/bool.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/inttypes.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/limits.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/long_long.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/stdalign.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/backward/2/stdarg.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/defines.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/encoding.h
-enc_str_buf_cat.o: $(hdrdir)/ruby/intern.h
enc_str_buf_cat.o: $(hdrdir)/ruby/missing.h
enc_str_buf_cat.o: $(hdrdir)/ruby/onigmo.h
enc_str_buf_cat.o: $(hdrdir)/ruby/oniguruma.h
@@ -988,6 +988,19 @@ enc_str_buf_cat.o: enc_str_buf_cat.c
fstring.o: $(RUBY_EXTCONF_H)
fstring.o: $(arch_hdrdir)/ruby/config.h
fstring.o: $(hdrdir)/ruby.h
+fstring.o: $(hdrdir)/ruby/assert.h
+fstring.o: $(hdrdir)/ruby/backward.h
+fstring.o: $(hdrdir)/ruby/backward/2/assume.h
+fstring.o: $(hdrdir)/ruby/backward/2/attributes.h
+fstring.o: $(hdrdir)/ruby/backward/2/bool.h
+fstring.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+fstring.o: $(hdrdir)/ruby/backward/2/inttypes.h
+fstring.o: $(hdrdir)/ruby/backward/2/limits.h
+fstring.o: $(hdrdir)/ruby/backward/2/long_long.h
+fstring.o: $(hdrdir)/ruby/backward/2/stdalign.h
+fstring.o: $(hdrdir)/ruby/backward/2/stdarg.h
+fstring.o: $(hdrdir)/ruby/defines.h
+fstring.o: $(hdrdir)/ruby/intern.h
fstring.o: $(hdrdir)/ruby/internal/anyargs.h
fstring.o: $(hdrdir)/ruby/internal/arithmetic.h
fstring.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1128,19 +1141,6 @@ fstring.o: $(hdrdir)/ruby/internal/value_type.h
fstring.o: $(hdrdir)/ruby/internal/variable.h
fstring.o: $(hdrdir)/ruby/internal/warning_push.h
fstring.o: $(hdrdir)/ruby/internal/xmalloc.h
-fstring.o: $(hdrdir)/ruby/assert.h
-fstring.o: $(hdrdir)/ruby/backward.h
-fstring.o: $(hdrdir)/ruby/backward/2/assume.h
-fstring.o: $(hdrdir)/ruby/backward/2/attributes.h
-fstring.o: $(hdrdir)/ruby/backward/2/bool.h
-fstring.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-fstring.o: $(hdrdir)/ruby/backward/2/inttypes.h
-fstring.o: $(hdrdir)/ruby/backward/2/limits.h
-fstring.o: $(hdrdir)/ruby/backward/2/long_long.h
-fstring.o: $(hdrdir)/ruby/backward/2/stdalign.h
-fstring.o: $(hdrdir)/ruby/backward/2/stdarg.h
-fstring.o: $(hdrdir)/ruby/defines.h
-fstring.o: $(hdrdir)/ruby/intern.h
fstring.o: $(hdrdir)/ruby/missing.h
fstring.o: $(hdrdir)/ruby/ruby.h
fstring.o: $(hdrdir)/ruby/st.h
@@ -1149,6 +1149,19 @@ fstring.o: fstring.c
init.o: $(RUBY_EXTCONF_H)
init.o: $(arch_hdrdir)/ruby/config.h
init.o: $(hdrdir)/ruby.h
+init.o: $(hdrdir)/ruby/assert.h
+init.o: $(hdrdir)/ruby/backward.h
+init.o: $(hdrdir)/ruby/backward/2/assume.h
+init.o: $(hdrdir)/ruby/backward/2/attributes.h
+init.o: $(hdrdir)/ruby/backward/2/bool.h
+init.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+init.o: $(hdrdir)/ruby/backward/2/inttypes.h
+init.o: $(hdrdir)/ruby/backward/2/limits.h
+init.o: $(hdrdir)/ruby/backward/2/long_long.h
+init.o: $(hdrdir)/ruby/backward/2/stdalign.h
+init.o: $(hdrdir)/ruby/backward/2/stdarg.h
+init.o: $(hdrdir)/ruby/defines.h
+init.o: $(hdrdir)/ruby/intern.h
init.o: $(hdrdir)/ruby/internal/anyargs.h
init.o: $(hdrdir)/ruby/internal/arithmetic.h
init.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1289,19 +1302,6 @@ init.o: $(hdrdir)/ruby/internal/value_type.h
init.o: $(hdrdir)/ruby/internal/variable.h
init.o: $(hdrdir)/ruby/internal/warning_push.h
init.o: $(hdrdir)/ruby/internal/xmalloc.h
-init.o: $(hdrdir)/ruby/assert.h
-init.o: $(hdrdir)/ruby/backward.h
-init.o: $(hdrdir)/ruby/backward/2/assume.h
-init.o: $(hdrdir)/ruby/backward/2/attributes.h
-init.o: $(hdrdir)/ruby/backward/2/bool.h
-init.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-init.o: $(hdrdir)/ruby/backward/2/inttypes.h
-init.o: $(hdrdir)/ruby/backward/2/limits.h
-init.o: $(hdrdir)/ruby/backward/2/long_long.h
-init.o: $(hdrdir)/ruby/backward/2/stdalign.h
-init.o: $(hdrdir)/ruby/backward/2/stdarg.h
-init.o: $(hdrdir)/ruby/defines.h
-init.o: $(hdrdir)/ruby/intern.h
init.o: $(hdrdir)/ruby/missing.h
init.o: $(hdrdir)/ruby/ruby.h
init.o: $(hdrdir)/ruby/st.h
@@ -1310,6 +1310,19 @@ init.o: init.c
modify.o: $(RUBY_EXTCONF_H)
modify.o: $(arch_hdrdir)/ruby/config.h
modify.o: $(hdrdir)/ruby.h
+modify.o: $(hdrdir)/ruby/assert.h
+modify.o: $(hdrdir)/ruby/backward.h
+modify.o: $(hdrdir)/ruby/backward/2/assume.h
+modify.o: $(hdrdir)/ruby/backward/2/attributes.h
+modify.o: $(hdrdir)/ruby/backward/2/bool.h
+modify.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+modify.o: $(hdrdir)/ruby/backward/2/inttypes.h
+modify.o: $(hdrdir)/ruby/backward/2/limits.h
+modify.o: $(hdrdir)/ruby/backward/2/long_long.h
+modify.o: $(hdrdir)/ruby/backward/2/stdalign.h
+modify.o: $(hdrdir)/ruby/backward/2/stdarg.h
+modify.o: $(hdrdir)/ruby/defines.h
+modify.o: $(hdrdir)/ruby/intern.h
modify.o: $(hdrdir)/ruby/internal/anyargs.h
modify.o: $(hdrdir)/ruby/internal/arithmetic.h
modify.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1450,19 +1463,6 @@ modify.o: $(hdrdir)/ruby/internal/value_type.h
modify.o: $(hdrdir)/ruby/internal/variable.h
modify.o: $(hdrdir)/ruby/internal/warning_push.h
modify.o: $(hdrdir)/ruby/internal/xmalloc.h
-modify.o: $(hdrdir)/ruby/assert.h
-modify.o: $(hdrdir)/ruby/backward.h
-modify.o: $(hdrdir)/ruby/backward/2/assume.h
-modify.o: $(hdrdir)/ruby/backward/2/attributes.h
-modify.o: $(hdrdir)/ruby/backward/2/bool.h
-modify.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-modify.o: $(hdrdir)/ruby/backward/2/inttypes.h
-modify.o: $(hdrdir)/ruby/backward/2/limits.h
-modify.o: $(hdrdir)/ruby/backward/2/long_long.h
-modify.o: $(hdrdir)/ruby/backward/2/stdalign.h
-modify.o: $(hdrdir)/ruby/backward/2/stdarg.h
-modify.o: $(hdrdir)/ruby/defines.h
-modify.o: $(hdrdir)/ruby/intern.h
modify.o: $(hdrdir)/ruby/missing.h
modify.o: $(hdrdir)/ruby/ruby.h
modify.o: $(hdrdir)/ruby/st.h
@@ -1471,6 +1471,20 @@ modify.o: modify.c
new.o: $(RUBY_EXTCONF_H)
new.o: $(arch_hdrdir)/ruby/config.h
new.o: $(hdrdir)/ruby.h
+new.o: $(hdrdir)/ruby/assert.h
+new.o: $(hdrdir)/ruby/backward.h
+new.o: $(hdrdir)/ruby/backward/2/assume.h
+new.o: $(hdrdir)/ruby/backward/2/attributes.h
+new.o: $(hdrdir)/ruby/backward/2/bool.h
+new.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+new.o: $(hdrdir)/ruby/backward/2/inttypes.h
+new.o: $(hdrdir)/ruby/backward/2/limits.h
+new.o: $(hdrdir)/ruby/backward/2/long_long.h
+new.o: $(hdrdir)/ruby/backward/2/stdalign.h
+new.o: $(hdrdir)/ruby/backward/2/stdarg.h
+new.o: $(hdrdir)/ruby/defines.h
+new.o: $(hdrdir)/ruby/encoding.h
+new.o: $(hdrdir)/ruby/intern.h
new.o: $(hdrdir)/ruby/internal/anyargs.h
new.o: $(hdrdir)/ruby/internal/arithmetic.h
new.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1611,20 +1625,6 @@ new.o: $(hdrdir)/ruby/internal/value_type.h
new.o: $(hdrdir)/ruby/internal/variable.h
new.o: $(hdrdir)/ruby/internal/warning_push.h
new.o: $(hdrdir)/ruby/internal/xmalloc.h
-new.o: $(hdrdir)/ruby/assert.h
-new.o: $(hdrdir)/ruby/backward.h
-new.o: $(hdrdir)/ruby/backward/2/assume.h
-new.o: $(hdrdir)/ruby/backward/2/attributes.h
-new.o: $(hdrdir)/ruby/backward/2/bool.h
-new.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-new.o: $(hdrdir)/ruby/backward/2/inttypes.h
-new.o: $(hdrdir)/ruby/backward/2/limits.h
-new.o: $(hdrdir)/ruby/backward/2/long_long.h
-new.o: $(hdrdir)/ruby/backward/2/stdalign.h
-new.o: $(hdrdir)/ruby/backward/2/stdarg.h
-new.o: $(hdrdir)/ruby/defines.h
-new.o: $(hdrdir)/ruby/encoding.h
-new.o: $(hdrdir)/ruby/intern.h
new.o: $(hdrdir)/ruby/missing.h
new.o: $(hdrdir)/ruby/onigmo.h
new.o: $(hdrdir)/ruby/oniguruma.h
@@ -1635,6 +1635,19 @@ new.o: new.c
nofree.o: $(RUBY_EXTCONF_H)
nofree.o: $(arch_hdrdir)/ruby/config.h
nofree.o: $(hdrdir)/ruby.h
+nofree.o: $(hdrdir)/ruby/assert.h
+nofree.o: $(hdrdir)/ruby/backward.h
+nofree.o: $(hdrdir)/ruby/backward/2/assume.h
+nofree.o: $(hdrdir)/ruby/backward/2/attributes.h
+nofree.o: $(hdrdir)/ruby/backward/2/bool.h
+nofree.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+nofree.o: $(hdrdir)/ruby/backward/2/inttypes.h
+nofree.o: $(hdrdir)/ruby/backward/2/limits.h
+nofree.o: $(hdrdir)/ruby/backward/2/long_long.h
+nofree.o: $(hdrdir)/ruby/backward/2/stdalign.h
+nofree.o: $(hdrdir)/ruby/backward/2/stdarg.h
+nofree.o: $(hdrdir)/ruby/defines.h
+nofree.o: $(hdrdir)/ruby/intern.h
nofree.o: $(hdrdir)/ruby/internal/anyargs.h
nofree.o: $(hdrdir)/ruby/internal/arithmetic.h
nofree.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1775,19 +1788,6 @@ nofree.o: $(hdrdir)/ruby/internal/value_type.h
nofree.o: $(hdrdir)/ruby/internal/variable.h
nofree.o: $(hdrdir)/ruby/internal/warning_push.h
nofree.o: $(hdrdir)/ruby/internal/xmalloc.h
-nofree.o: $(hdrdir)/ruby/assert.h
-nofree.o: $(hdrdir)/ruby/backward.h
-nofree.o: $(hdrdir)/ruby/backward/2/assume.h
-nofree.o: $(hdrdir)/ruby/backward/2/attributes.h
-nofree.o: $(hdrdir)/ruby/backward/2/bool.h
-nofree.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-nofree.o: $(hdrdir)/ruby/backward/2/inttypes.h
-nofree.o: $(hdrdir)/ruby/backward/2/limits.h
-nofree.o: $(hdrdir)/ruby/backward/2/long_long.h
-nofree.o: $(hdrdir)/ruby/backward/2/stdalign.h
-nofree.o: $(hdrdir)/ruby/backward/2/stdarg.h
-nofree.o: $(hdrdir)/ruby/defines.h
-nofree.o: $(hdrdir)/ruby/intern.h
nofree.o: $(hdrdir)/ruby/missing.h
nofree.o: $(hdrdir)/ruby/ruby.h
nofree.o: $(hdrdir)/ruby/st.h
@@ -1796,6 +1796,20 @@ nofree.o: nofree.c
normalize.o: $(RUBY_EXTCONF_H)
normalize.o: $(arch_hdrdir)/ruby/config.h
normalize.o: $(hdrdir)/ruby.h
+normalize.o: $(hdrdir)/ruby/assert.h
+normalize.o: $(hdrdir)/ruby/backward.h
+normalize.o: $(hdrdir)/ruby/backward/2/assume.h
+normalize.o: $(hdrdir)/ruby/backward/2/attributes.h
+normalize.o: $(hdrdir)/ruby/backward/2/bool.h
+normalize.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+normalize.o: $(hdrdir)/ruby/backward/2/inttypes.h
+normalize.o: $(hdrdir)/ruby/backward/2/limits.h
+normalize.o: $(hdrdir)/ruby/backward/2/long_long.h
+normalize.o: $(hdrdir)/ruby/backward/2/stdalign.h
+normalize.o: $(hdrdir)/ruby/backward/2/stdarg.h
+normalize.o: $(hdrdir)/ruby/defines.h
+normalize.o: $(hdrdir)/ruby/encoding.h
+normalize.o: $(hdrdir)/ruby/intern.h
normalize.o: $(hdrdir)/ruby/internal/anyargs.h
normalize.o: $(hdrdir)/ruby/internal/arithmetic.h
normalize.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -1936,20 +1950,6 @@ normalize.o: $(hdrdir)/ruby/internal/value_type.h
normalize.o: $(hdrdir)/ruby/internal/variable.h
normalize.o: $(hdrdir)/ruby/internal/warning_push.h
normalize.o: $(hdrdir)/ruby/internal/xmalloc.h
-normalize.o: $(hdrdir)/ruby/assert.h
-normalize.o: $(hdrdir)/ruby/backward.h
-normalize.o: $(hdrdir)/ruby/backward/2/assume.h
-normalize.o: $(hdrdir)/ruby/backward/2/attributes.h
-normalize.o: $(hdrdir)/ruby/backward/2/bool.h
-normalize.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-normalize.o: $(hdrdir)/ruby/backward/2/inttypes.h
-normalize.o: $(hdrdir)/ruby/backward/2/limits.h
-normalize.o: $(hdrdir)/ruby/backward/2/long_long.h
-normalize.o: $(hdrdir)/ruby/backward/2/stdalign.h
-normalize.o: $(hdrdir)/ruby/backward/2/stdarg.h
-normalize.o: $(hdrdir)/ruby/defines.h
-normalize.o: $(hdrdir)/ruby/encoding.h
-normalize.o: $(hdrdir)/ruby/intern.h
normalize.o: $(hdrdir)/ruby/missing.h
normalize.o: $(hdrdir)/ruby/onigmo.h
normalize.o: $(hdrdir)/ruby/oniguruma.h
@@ -1962,6 +1962,20 @@ normalize.o: normalize.c
qsort.o: $(RUBY_EXTCONF_H)
qsort.o: $(arch_hdrdir)/ruby/config.h
qsort.o: $(hdrdir)/ruby.h
+qsort.o: $(hdrdir)/ruby/assert.h
+qsort.o: $(hdrdir)/ruby/backward.h
+qsort.o: $(hdrdir)/ruby/backward/2/assume.h
+qsort.o: $(hdrdir)/ruby/backward/2/attributes.h
+qsort.o: $(hdrdir)/ruby/backward/2/bool.h
+qsort.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+qsort.o: $(hdrdir)/ruby/backward/2/inttypes.h
+qsort.o: $(hdrdir)/ruby/backward/2/limits.h
+qsort.o: $(hdrdir)/ruby/backward/2/long_long.h
+qsort.o: $(hdrdir)/ruby/backward/2/stdalign.h
+qsort.o: $(hdrdir)/ruby/backward/2/stdarg.h
+qsort.o: $(hdrdir)/ruby/defines.h
+qsort.o: $(hdrdir)/ruby/encoding.h
+qsort.o: $(hdrdir)/ruby/intern.h
qsort.o: $(hdrdir)/ruby/internal/anyargs.h
qsort.o: $(hdrdir)/ruby/internal/arithmetic.h
qsort.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -2102,20 +2116,6 @@ qsort.o: $(hdrdir)/ruby/internal/value_type.h
qsort.o: $(hdrdir)/ruby/internal/variable.h
qsort.o: $(hdrdir)/ruby/internal/warning_push.h
qsort.o: $(hdrdir)/ruby/internal/xmalloc.h
-qsort.o: $(hdrdir)/ruby/assert.h
-qsort.o: $(hdrdir)/ruby/backward.h
-qsort.o: $(hdrdir)/ruby/backward/2/assume.h
-qsort.o: $(hdrdir)/ruby/backward/2/attributes.h
-qsort.o: $(hdrdir)/ruby/backward/2/bool.h
-qsort.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-qsort.o: $(hdrdir)/ruby/backward/2/inttypes.h
-qsort.o: $(hdrdir)/ruby/backward/2/limits.h
-qsort.o: $(hdrdir)/ruby/backward/2/long_long.h
-qsort.o: $(hdrdir)/ruby/backward/2/stdalign.h
-qsort.o: $(hdrdir)/ruby/backward/2/stdarg.h
-qsort.o: $(hdrdir)/ruby/defines.h
-qsort.o: $(hdrdir)/ruby/encoding.h
-qsort.o: $(hdrdir)/ruby/intern.h
qsort.o: $(hdrdir)/ruby/missing.h
qsort.o: $(hdrdir)/ruby/onigmo.h
qsort.o: $(hdrdir)/ruby/oniguruma.h
@@ -2124,9 +2124,183 @@ qsort.o: $(hdrdir)/ruby/st.h
qsort.o: $(hdrdir)/ruby/subst.h
qsort.o: $(hdrdir)/ruby/util.h
qsort.o: qsort.c
+rb_interned_str.o: $(RUBY_EXTCONF_H)
+rb_interned_str.o: $(arch_hdrdir)/ruby/config.h
+rb_interned_str.o: $(hdrdir)/ruby.h
+rb_interned_str.o: $(hdrdir)/ruby/assert.h
+rb_interned_str.o: $(hdrdir)/ruby/backward.h
+rb_interned_str.o: $(hdrdir)/ruby/backward/2/assume.h
+rb_interned_str.o: $(hdrdir)/ruby/backward/2/attributes.h
+rb_interned_str.o: $(hdrdir)/ruby/backward/2/bool.h
+rb_interned_str.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+rb_interned_str.o: $(hdrdir)/ruby/backward/2/inttypes.h
+rb_interned_str.o: $(hdrdir)/ruby/backward/2/limits.h
+rb_interned_str.o: $(hdrdir)/ruby/backward/2/long_long.h
+rb_interned_str.o: $(hdrdir)/ruby/backward/2/stdalign.h
+rb_interned_str.o: $(hdrdir)/ruby/backward/2/stdarg.h
+rb_interned_str.o: $(hdrdir)/ruby/defines.h
+rb_interned_str.o: $(hdrdir)/ruby/intern.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/anyargs.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/char.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/double.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/fixnum.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/gid_t.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/int.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/intptr_t.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/long.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/long_long.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/mode_t.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/off_t.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/pid_t.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/short.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/size_t.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/st_data_t.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/arithmetic/uid_t.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/assume.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/alloc_size.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/artificial.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/cold.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/const.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/constexpr.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/deprecated.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/diagnose_if.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/enum_extensibility.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/error.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/flag_enum.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/forceinline.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/format.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/maybe_unused.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/noalias.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/nodiscard.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/noexcept.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/noinline.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/nonnull.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/noreturn.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/pure.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/restrict.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/returns_nonnull.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/warning.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/attr/weakref.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/cast.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/apple.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/clang.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/gcc.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/intel.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/msvc.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_is/sunpro.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/compiler_since.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/config.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/constant_p.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rarray.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rbasic.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rbignum.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rclass.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rdata.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rfile.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rhash.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/robject.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rregexp.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rstring.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rstruct.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/core/rtypeddata.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/ctype.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/dllexport.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/dosish.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/error.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/eval.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/event.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/fl_type.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/gc.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/glob.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/globals.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/has/attribute.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/has/builtin.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/has/c_attribute.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/has/cpp_attribute.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/has/declspec_attribute.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/has/extension.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/has/feature.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/has/warning.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/array.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/bignum.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/class.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/compar.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/complex.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/cont.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/dir.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/enum.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/enumerator.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/error.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/eval.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/file.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/gc.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/hash.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/io.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/load.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/marshal.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/numeric.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/object.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/parse.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/proc.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/process.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/random.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/range.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/rational.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/re.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/ruby.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/select.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/select/largesize.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/signal.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/sprintf.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/string.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/struct.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/thread.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/time.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/variable.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/intern/vm.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/interpreter.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/iterator.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/memory.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/method.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/module.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/newobj.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/rgengc.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/scan_args.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/special_consts.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/static_assert.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/stdalign.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/stdbool.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/symbol.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/token_paste.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/value.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/value_type.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/variable.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/warning_push.h
+rb_interned_str.o: $(hdrdir)/ruby/internal/xmalloc.h
+rb_interned_str.o: $(hdrdir)/ruby/missing.h
+rb_interned_str.o: $(hdrdir)/ruby/ruby.h
+rb_interned_str.o: $(hdrdir)/ruby/st.h
+rb_interned_str.o: $(hdrdir)/ruby/subst.h
+rb_interned_str.o: rb_interned_str.c
rb_str_dup.o: $(RUBY_EXTCONF_H)
rb_str_dup.o: $(arch_hdrdir)/ruby/config.h
rb_str_dup.o: $(hdrdir)/ruby.h
+rb_str_dup.o: $(hdrdir)/ruby/assert.h
+rb_str_dup.o: $(hdrdir)/ruby/backward.h
+rb_str_dup.o: $(hdrdir)/ruby/backward/2/assume.h
+rb_str_dup.o: $(hdrdir)/ruby/backward/2/attributes.h
+rb_str_dup.o: $(hdrdir)/ruby/backward/2/bool.h
+rb_str_dup.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+rb_str_dup.o: $(hdrdir)/ruby/backward/2/inttypes.h
+rb_str_dup.o: $(hdrdir)/ruby/backward/2/limits.h
+rb_str_dup.o: $(hdrdir)/ruby/backward/2/long_long.h
+rb_str_dup.o: $(hdrdir)/ruby/backward/2/stdalign.h
+rb_str_dup.o: $(hdrdir)/ruby/backward/2/stdarg.h
+rb_str_dup.o: $(hdrdir)/ruby/defines.h
+rb_str_dup.o: $(hdrdir)/ruby/intern.h
rb_str_dup.o: $(hdrdir)/ruby/internal/anyargs.h
rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic.h
rb_str_dup.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -2267,19 +2441,6 @@ rb_str_dup.o: $(hdrdir)/ruby/internal/value_type.h
rb_str_dup.o: $(hdrdir)/ruby/internal/variable.h
rb_str_dup.o: $(hdrdir)/ruby/internal/warning_push.h
rb_str_dup.o: $(hdrdir)/ruby/internal/xmalloc.h
-rb_str_dup.o: $(hdrdir)/ruby/assert.h
-rb_str_dup.o: $(hdrdir)/ruby/backward.h
-rb_str_dup.o: $(hdrdir)/ruby/backward/2/assume.h
-rb_str_dup.o: $(hdrdir)/ruby/backward/2/attributes.h
-rb_str_dup.o: $(hdrdir)/ruby/backward/2/bool.h
-rb_str_dup.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-rb_str_dup.o: $(hdrdir)/ruby/backward/2/inttypes.h
-rb_str_dup.o: $(hdrdir)/ruby/backward/2/limits.h
-rb_str_dup.o: $(hdrdir)/ruby/backward/2/long_long.h
-rb_str_dup.o: $(hdrdir)/ruby/backward/2/stdalign.h
-rb_str_dup.o: $(hdrdir)/ruby/backward/2/stdarg.h
-rb_str_dup.o: $(hdrdir)/ruby/defines.h
-rb_str_dup.o: $(hdrdir)/ruby/intern.h
rb_str_dup.o: $(hdrdir)/ruby/missing.h
rb_str_dup.o: $(hdrdir)/ruby/ruby.h
rb_str_dup.o: $(hdrdir)/ruby/st.h
@@ -2288,6 +2449,19 @@ rb_str_dup.o: rb_str_dup.c
set_len.o: $(RUBY_EXTCONF_H)
set_len.o: $(arch_hdrdir)/ruby/config.h
set_len.o: $(hdrdir)/ruby.h
+set_len.o: $(hdrdir)/ruby/assert.h
+set_len.o: $(hdrdir)/ruby/backward.h
+set_len.o: $(hdrdir)/ruby/backward/2/assume.h
+set_len.o: $(hdrdir)/ruby/backward/2/attributes.h
+set_len.o: $(hdrdir)/ruby/backward/2/bool.h
+set_len.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
+set_len.o: $(hdrdir)/ruby/backward/2/inttypes.h
+set_len.o: $(hdrdir)/ruby/backward/2/limits.h
+set_len.o: $(hdrdir)/ruby/backward/2/long_long.h
+set_len.o: $(hdrdir)/ruby/backward/2/stdalign.h
+set_len.o: $(hdrdir)/ruby/backward/2/stdarg.h
+set_len.o: $(hdrdir)/ruby/defines.h
+set_len.o: $(hdrdir)/ruby/intern.h
set_len.o: $(hdrdir)/ruby/internal/anyargs.h
set_len.o: $(hdrdir)/ruby/internal/arithmetic.h
set_len.o: $(hdrdir)/ruby/internal/arithmetic/char.h
@@ -2428,19 +2602,6 @@ set_len.o: $(hdrdir)/ruby/internal/value_type.h
set_len.o: $(hdrdir)/ruby/internal/variable.h
set_len.o: $(hdrdir)/ruby/internal/warning_push.h
set_len.o: $(hdrdir)/ruby/internal/xmalloc.h
-set_len.o: $(hdrdir)/ruby/assert.h
-set_len.o: $(hdrdir)/ruby/backward.h
-set_len.o: $(hdrdir)/ruby/backward/2/assume.h
-set_len.o: $(hdrdir)/ruby/backward/2/attributes.h
-set_len.o: $(hdrdir)/ruby/backward/2/bool.h
-set_len.o: $(hdrdir)/ruby/backward/2/gcc_version_since.h
-set_len.o: $(hdrdir)/ruby/backward/2/inttypes.h
-set_len.o: $(hdrdir)/ruby/backward/2/limits.h
-set_len.o: $(hdrdir)/ruby/backward/2/long_long.h
-set_len.o: $(hdrdir)/ruby/backward/2/stdalign.h
-set_len.o: $(hdrdir)/ruby/backward/2/stdarg.h
-set_len.o: $(hdrdir)/ruby/defines.h
-set_len.o: $(hdrdir)/ruby/intern.h
set_len.o: $(hdrdir)/ruby/missing.h
set_len.o: $(hdrdir)/ruby/ruby.h
set_len.o: $(hdrdir)/ruby/st.h
diff --git a/ext/-test-/string/rb_interned_str.c b/ext/-test-/string/rb_interned_str.c
new file mode 100644
index 0000000000..47643ec249
--- /dev/null
+++ b/ext/-test-/string/rb_interned_str.c
@@ -0,0 +1,14 @@
+#include "ruby.h"
+
+static VALUE
+bug_rb_interned_str_dup(VALUE self, VALUE str)
+{
+ Check_Type(str, T_STRING);
+ return rb_interned_str(RSTRING_PTR(str), RSTRING_LEN(str));
+}
+
+void
+Init_string_rb_interned_str(VALUE klass)
+{
+ rb_define_singleton_method(klass, "rb_interned_str_dup", bug_rb_interned_str_dup, 1);
+}
diff --git a/string.c b/string.c
index b33d83caaf..086e97a770 100644
--- a/string.c
+++ b/string.c
@@ -201,6 +201,7 @@ static VALUE str_new_shared(VALUE klass, VALUE str);
static VALUE str_new_frozen(VALUE klass, VALUE orig);
static VALUE str_new_frozen_buffer(VALUE klass, VALUE orig, int copy_encoding);
static VALUE str_new_static(VALUE klass, const char *ptr, long len, int encindex);
+static VALUE str_new(VALUE klass, const char *ptr, long len);
static void str_make_independent_expand(VALUE str, long len, long expand, const int termlen);
static inline void str_modifiable(VALUE str);
static VALUE rb_str_downcase(int argc, VALUE *argv, VALUE str);
@@ -271,7 +272,7 @@ mustnot_wchar(VALUE str)
static int fstring_cmp(VALUE a, VALUE b);
-static VALUE register_fstring(VALUE str);
+static VALUE register_fstring(VALUE str, bool copy);
const struct st_hash_type rb_fstring_hash_type = {
fstring_cmp,
@@ -280,10 +281,16 @@ const struct st_hash_type rb_fstring_hash_type = {
#define BARE_STRING_P(str) (!FL_ANY_RAW(str, FL_EXIVAR) && RBASIC_CLASS(str) == rb_cString)
+struct fstr_update_arg {
+ VALUE fstr;
+ bool copy;
+};
+
static int
-fstr_update_callback(st_data_t *key, st_data_t *value, st_data_t arg, int existing)
+fstr_update_callback(st_data_t *key, st_data_t *value, st_data_t data, int existing)
{
- VALUE *fstr = (VALUE *)arg;
+
+ struct fstr_update_arg *arg = (struct fstr_update_arg *)data;
VALUE str = (VALUE)*key;
if (existing) {
@@ -291,18 +298,25 @@ fstr_update_callback(st_data_t *key, st_data_t *value, st_data_t arg, int existi
* at next time */
if (rb_objspace_garbage_object_p(str)) {
- *fstr = Qundef;
+ arg->fstr = Qundef;
return ST_DELETE;
}
- *fstr = str;
+ arg->fstr = str;
return ST_STOP;
}
else {
if (FL_TEST_RAW(str, STR_FAKESTR)) {
- str = str_new_static(rb_cString, RSTRING(str)->as.heap.ptr,
- RSTRING(str)->as.heap.len,
- ENCODING_GET(str));
+ if (arg->copy) {
+ VALUE new_str = str_new(rb_cString, RSTRING(str)->as.heap.ptr, RSTRING(str)->as.heap.len);
+ rb_enc_copy(new_str, str);
+ str = new_str;
+ }
+ else {
+ str = str_new_static(rb_cString, RSTRING(str)->as.heap.ptr,
+ RSTRING(str)->as.heap.len,
+ ENCODING_GET(str));
+ }
OBJ_FREEZE_RAW(str);
}
else {
@@ -319,7 +333,7 @@ fstr_update_callback(st_data_t *key, st_data_t *value, st_data_t arg, int existi
}
RBASIC(str)->flags |= RSTRING_FSTR;
- *key = *value = *fstr = str;
+ *key = *value = arg->fstr = str;
return ST_CONTINUE;
}
}
@@ -351,7 +365,7 @@ rb_fstring(VALUE str)
if (!OBJ_FROZEN(str))
rb_str_resize(str, RSTRING_LEN(str));
- fstr = register_fstring(str);
+ fstr = register_fstring(str, FALSE);
if (!bare) {
str_replace_shared_without_enc(str, fstr);
@@ -362,27 +376,26 @@ rb_fstring(VALUE str)
}
static VALUE
-register_fstring(VALUE str)
+register_fstring(VALUE str, bool copy)
{
- VALUE ret;
+ struct fstr_update_arg args;
+ args.copy = copy;
RB_VM_LOCK_ENTER();
{
st_table *frozen_strings = rb_vm_fstring_table();
-
do {
- ret = str;
- st_update(frozen_strings, (st_data_t)str,
- fstr_update_callback, (st_data_t)&ret);
- } while (ret == Qundef);
+ args.fstr = str;
+ st_update(frozen_strings, (st_data_t)str, fstr_update_callback, (st_data_t)&args);
+ } while (args.fstr == Qundef);
}
RB_VM_LOCK_LEAVE();
- assert(OBJ_FROZEN(ret));
- assert(!FL_TEST_RAW(ret, STR_FAKESTR));
- assert(!FL_TEST_RAW(ret, FL_EXIVAR));
- assert(RBASIC_CLASS(ret) == rb_cString);
- return ret;
+ assert(OBJ_FROZEN(args.fstr));
+ assert(!FL_TEST_RAW(args.fstr, STR_FAKESTR));
+ assert(!FL_TEST_RAW(args.fstr, FL_EXIVAR));
+ assert(RBASIC_CLASS(args.fstr) == rb_cString);
+ return args.fstr;
}
static VALUE
@@ -418,14 +431,14 @@ MJIT_FUNC_EXPORTED VALUE
rb_fstring_new(const char *ptr, long len)
{
struct RString fake_str;
- return register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII));
+ return register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII), FALSE);
}
VALUE
rb_fstring_enc_new(const char *ptr, long len, rb_encoding *enc)
{
struct RString fake_str;
- return register_fstring(rb_setup_fake_str(&fake_str, ptr, len, enc));
+ return register_fstring(rb_setup_fake_str(&fake_str, ptr, len, enc), FALSE);
}
VALUE
@@ -11418,25 +11431,27 @@ rb_str_to_interned_str(VALUE str)
VALUE
rb_interned_str(const char *ptr, long len)
{
- return rb_fstring_new(ptr, len);
+ struct RString fake_str;
+ return register_fstring(setup_fake_str(&fake_str, ptr, len, ENCINDEX_US_ASCII), TRUE);
}
VALUE
rb_interned_str_cstr(const char *ptr)
{
- return rb_fstring_cstr(ptr);
+ return rb_interned_str(ptr, strlen(ptr));
}
VALUE
rb_enc_interned_str(const char *ptr, long len, rb_encoding *enc)
{
- return rb_fstring_enc_new(ptr, len, enc);
+ struct RString fake_str;
+ return register_fstring(rb_setup_fake_str(&fake_str, ptr, len, enc), TRUE);
}
VALUE
rb_enc_interned_str_cstr(const char *ptr, rb_encoding *enc)
{
- return rb_fstring_enc_new(ptr, strlen(ptr), enc);
+ return rb_enc_interned_str(ptr, strlen(ptr), enc);
}
/*
diff --git a/test/-ext-/string/test_interned_str.rb b/test/-ext-/string/test_interned_str.rb
new file mode 100644
index 0000000000..340dba41e8
--- /dev/null
+++ b/test/-ext-/string/test_interned_str.rb
@@ -0,0 +1,12 @@
+require 'test/unit'
+require '-test-/string'
+
+class Test_RbInternedStr < Test::Unit::TestCase
+ def test_interned_str
+ src = "a" * 20
+ interned_str = Bug::String.rb_interned_str_dup(src)
+ src.clear
+ src << "b" * 20
+ assert_equal "a" * 20, interned_str
+ end
+end