From 6bef49427ab2a9d3bc338f1cffcd086153a59f44 Mon Sep 17 00:00:00 2001 From: Jean Boussier Date: Wed, 18 Nov 2020 13:57:01 +0100 Subject: 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. --- ext/-test-/string/depend | 567 +++++++++++++++++++++------------ ext/-test-/string/rb_interned_str.c | 14 + string.c | 71 +++-- test/-ext-/string/test_interned_str.rb | 12 + 4 files changed, 433 insertions(+), 231 deletions(-) create mode 100644 ext/-test-/string/rb_interned_str.c create mode 100644 test/-ext-/string/test_interned_str.rb 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 -- cgit v1.2.3