From f19b29d1dbb2918dee112b0df0cba2ca1165a399 Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Wed, 5 Nov 2025 12:02:07 +0900 Subject: [PATCH 01/11] Add namespace tests about global variables, toplevel methods --- test/ruby/test_namespace.rb | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/ruby/test_namespace.rb b/test/ruby/test_namespace.rb index daa4e9e0ba3881..4241ce62ff4a92 100644 --- a/test/ruby/test_namespace.rb +++ b/test/ruby/test_namespace.rb @@ -700,8 +700,13 @@ def test_basic_namespace_detections assert_separately([ENV_ENABLE_NAMESPACE], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) begin; ns = Namespace.new + $gvar1 = 'bar' code = <<~EOC NS1 = Namespace.current + $gvar1 = 'foo' + + def toplevel = $gvar1 + class Foo NS2 = Namespace.current NS2_proc = ->(){ NS2 } @@ -721,6 +726,9 @@ def self.ns7 def self.yield_block = yield def self.call_block(&b) = b.call + + def self.gvar1 = $gvar1 + def self.call_toplevel = toplevel end FOO_NAME = Foo.name @@ -749,6 +757,10 @@ def foo_namespace = Namespace.current assert_equal outer, ns::Foo.yield_block{ Namespace.current } # method yields assert_equal outer, ns::Foo.call_block{ Namespace.current } # method calls a block + assert_equal 'foo', ns::Foo.gvar1 # method refers gvar + assert_equal 'bar', $gvar1 # gvar value out of the ns + assert_equal 'foo', ns::Foo.call_toplevel # toplevel method referring gvar + assert_equal ns, ns::NS_X # on TOP frame, referring a class in the current assert_equal ns, ns::NS_Y # on TOP frame, referring Kernel method defined by a CFUNC method From 50b9d9d355b2c64101ebdd2f2de0e9010bb050dc Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Wed, 5 Nov 2025 13:52:45 +0900 Subject: [PATCH 02/11] rename namespace.c (and others) to box.c --- namespace.c => box.c | 0 doc/{namespace.md => box.h} | 0 ext/-test-/{namespace => box}/yay1/extconf.rb | 0 ext/-test-/{namespace => box}/yay1/yay1.c | 0 ext/-test-/{namespace => box}/yay1/yay1.def | 0 ext/-test-/{namespace => box}/yay1/yay1.h | 0 ext/-test-/{namespace => box}/yay2/extconf.rb | 0 ext/-test-/{namespace => box}/yay2/yay2.c | 0 ext/-test-/{namespace => box}/yay2/yay2.def | 0 ext/-test-/{namespace => box}/yay2/yay2.h | 0 internal/{namespace.h => box.h} | 0 test/-ext-/{namespace => box}/test_load_ext.rb | 0 test/ruby/{namespace => box}/a.1_1_0.rb | 0 test/ruby/{namespace => box}/a.1_2_0.rb | 0 test/ruby/{namespace => box}/a.rb | 0 test/ruby/{namespace => box}/autoloading.rb | 0 test/ruby/{namespace => box}/blank.rb | 0 test/ruby/{namespace => box}/blank1.rb | 0 test/ruby/{namespace => box}/blank2.rb | 0 test/ruby/{namespace => box}/call_proc.rb | 0 test/ruby/{namespace => box}/call_toplevel.rb | 0 test/ruby/{namespace => box}/consts.rb | 0 test/ruby/{namespace => box}/current.rb | 0 test/ruby/{namespace => box}/define_toplevel.rb | 0 test/ruby/{namespace => box}/global_vars.rb | 0 test/ruby/{namespace => box}/instance_variables.rb | 0 test/ruby/{namespace => box}/line_splitter.rb | 0 test/ruby/{namespace => box}/load_path.rb | 0 test/ruby/{namespace => box}/ns.rb | 0 test/ruby/{namespace => box}/open_class_with_include.rb | 0 test/ruby/{namespace => box}/proc_callee.rb | 0 test/ruby/{namespace => box}/proc_caller.rb | 0 test/ruby/{namespace => box}/procs.rb | 0 test/ruby/{namespace => box}/raise.rb | 0 test/ruby/{namespace => box}/returns_proc.rb | 0 test/ruby/{namespace => box}/singleton_methods.rb | 0 test/ruby/{namespace => box}/string_ext.rb | 0 test/ruby/{namespace => box}/string_ext_caller.rb | 0 test/ruby/{namespace => box}/string_ext_calling.rb | 0 test/ruby/{namespace => box}/string_ext_eval_caller.rb | 0 test/ruby/{namespace => box}/top_level.rb | 0 test/ruby/{test_namespace.rb => test_box.c} | 0 42 files changed, 0 insertions(+), 0 deletions(-) rename namespace.c => box.c (100%) rename doc/{namespace.md => box.h} (100%) rename ext/-test-/{namespace => box}/yay1/extconf.rb (100%) rename ext/-test-/{namespace => box}/yay1/yay1.c (100%) rename ext/-test-/{namespace => box}/yay1/yay1.def (100%) rename ext/-test-/{namespace => box}/yay1/yay1.h (100%) rename ext/-test-/{namespace => box}/yay2/extconf.rb (100%) rename ext/-test-/{namespace => box}/yay2/yay2.c (100%) rename ext/-test-/{namespace => box}/yay2/yay2.def (100%) rename ext/-test-/{namespace => box}/yay2/yay2.h (100%) rename internal/{namespace.h => box.h} (100%) rename test/-ext-/{namespace => box}/test_load_ext.rb (100%) rename test/ruby/{namespace => box}/a.1_1_0.rb (100%) rename test/ruby/{namespace => box}/a.1_2_0.rb (100%) rename test/ruby/{namespace => box}/a.rb (100%) rename test/ruby/{namespace => box}/autoloading.rb (100%) rename test/ruby/{namespace => box}/blank.rb (100%) rename test/ruby/{namespace => box}/blank1.rb (100%) rename test/ruby/{namespace => box}/blank2.rb (100%) rename test/ruby/{namespace => box}/call_proc.rb (100%) rename test/ruby/{namespace => box}/call_toplevel.rb (100%) rename test/ruby/{namespace => box}/consts.rb (100%) rename test/ruby/{namespace => box}/current.rb (100%) rename test/ruby/{namespace => box}/define_toplevel.rb (100%) rename test/ruby/{namespace => box}/global_vars.rb (100%) rename test/ruby/{namespace => box}/instance_variables.rb (100%) rename test/ruby/{namespace => box}/line_splitter.rb (100%) rename test/ruby/{namespace => box}/load_path.rb (100%) rename test/ruby/{namespace => box}/ns.rb (100%) rename test/ruby/{namespace => box}/open_class_with_include.rb (100%) rename test/ruby/{namespace => box}/proc_callee.rb (100%) rename test/ruby/{namespace => box}/proc_caller.rb (100%) rename test/ruby/{namespace => box}/procs.rb (100%) rename test/ruby/{namespace => box}/raise.rb (100%) rename test/ruby/{namespace => box}/returns_proc.rb (100%) rename test/ruby/{namespace => box}/singleton_methods.rb (100%) rename test/ruby/{namespace => box}/string_ext.rb (100%) rename test/ruby/{namespace => box}/string_ext_caller.rb (100%) rename test/ruby/{namespace => box}/string_ext_calling.rb (100%) rename test/ruby/{namespace => box}/string_ext_eval_caller.rb (100%) rename test/ruby/{namespace => box}/top_level.rb (100%) rename test/ruby/{test_namespace.rb => test_box.c} (100%) diff --git a/namespace.c b/box.c similarity index 100% rename from namespace.c rename to box.c diff --git a/doc/namespace.md b/doc/box.h similarity index 100% rename from doc/namespace.md rename to doc/box.h diff --git a/ext/-test-/namespace/yay1/extconf.rb b/ext/-test-/box/yay1/extconf.rb similarity index 100% rename from ext/-test-/namespace/yay1/extconf.rb rename to ext/-test-/box/yay1/extconf.rb diff --git a/ext/-test-/namespace/yay1/yay1.c b/ext/-test-/box/yay1/yay1.c similarity index 100% rename from ext/-test-/namespace/yay1/yay1.c rename to ext/-test-/box/yay1/yay1.c diff --git a/ext/-test-/namespace/yay1/yay1.def b/ext/-test-/box/yay1/yay1.def similarity index 100% rename from ext/-test-/namespace/yay1/yay1.def rename to ext/-test-/box/yay1/yay1.def diff --git a/ext/-test-/namespace/yay1/yay1.h b/ext/-test-/box/yay1/yay1.h similarity index 100% rename from ext/-test-/namespace/yay1/yay1.h rename to ext/-test-/box/yay1/yay1.h diff --git a/ext/-test-/namespace/yay2/extconf.rb b/ext/-test-/box/yay2/extconf.rb similarity index 100% rename from ext/-test-/namespace/yay2/extconf.rb rename to ext/-test-/box/yay2/extconf.rb diff --git a/ext/-test-/namespace/yay2/yay2.c b/ext/-test-/box/yay2/yay2.c similarity index 100% rename from ext/-test-/namespace/yay2/yay2.c rename to ext/-test-/box/yay2/yay2.c diff --git a/ext/-test-/namespace/yay2/yay2.def b/ext/-test-/box/yay2/yay2.def similarity index 100% rename from ext/-test-/namespace/yay2/yay2.def rename to ext/-test-/box/yay2/yay2.def diff --git a/ext/-test-/namespace/yay2/yay2.h b/ext/-test-/box/yay2/yay2.h similarity index 100% rename from ext/-test-/namespace/yay2/yay2.h rename to ext/-test-/box/yay2/yay2.h diff --git a/internal/namespace.h b/internal/box.h similarity index 100% rename from internal/namespace.h rename to internal/box.h diff --git a/test/-ext-/namespace/test_load_ext.rb b/test/-ext-/box/test_load_ext.rb similarity index 100% rename from test/-ext-/namespace/test_load_ext.rb rename to test/-ext-/box/test_load_ext.rb diff --git a/test/ruby/namespace/a.1_1_0.rb b/test/ruby/box/a.1_1_0.rb similarity index 100% rename from test/ruby/namespace/a.1_1_0.rb rename to test/ruby/box/a.1_1_0.rb diff --git a/test/ruby/namespace/a.1_2_0.rb b/test/ruby/box/a.1_2_0.rb similarity index 100% rename from test/ruby/namespace/a.1_2_0.rb rename to test/ruby/box/a.1_2_0.rb diff --git a/test/ruby/namespace/a.rb b/test/ruby/box/a.rb similarity index 100% rename from test/ruby/namespace/a.rb rename to test/ruby/box/a.rb diff --git a/test/ruby/namespace/autoloading.rb b/test/ruby/box/autoloading.rb similarity index 100% rename from test/ruby/namespace/autoloading.rb rename to test/ruby/box/autoloading.rb diff --git a/test/ruby/namespace/blank.rb b/test/ruby/box/blank.rb similarity index 100% rename from test/ruby/namespace/blank.rb rename to test/ruby/box/blank.rb diff --git a/test/ruby/namespace/blank1.rb b/test/ruby/box/blank1.rb similarity index 100% rename from test/ruby/namespace/blank1.rb rename to test/ruby/box/blank1.rb diff --git a/test/ruby/namespace/blank2.rb b/test/ruby/box/blank2.rb similarity index 100% rename from test/ruby/namespace/blank2.rb rename to test/ruby/box/blank2.rb diff --git a/test/ruby/namespace/call_proc.rb b/test/ruby/box/call_proc.rb similarity index 100% rename from test/ruby/namespace/call_proc.rb rename to test/ruby/box/call_proc.rb diff --git a/test/ruby/namespace/call_toplevel.rb b/test/ruby/box/call_toplevel.rb similarity index 100% rename from test/ruby/namespace/call_toplevel.rb rename to test/ruby/box/call_toplevel.rb diff --git a/test/ruby/namespace/consts.rb b/test/ruby/box/consts.rb similarity index 100% rename from test/ruby/namespace/consts.rb rename to test/ruby/box/consts.rb diff --git a/test/ruby/namespace/current.rb b/test/ruby/box/current.rb similarity index 100% rename from test/ruby/namespace/current.rb rename to test/ruby/box/current.rb diff --git a/test/ruby/namespace/define_toplevel.rb b/test/ruby/box/define_toplevel.rb similarity index 100% rename from test/ruby/namespace/define_toplevel.rb rename to test/ruby/box/define_toplevel.rb diff --git a/test/ruby/namespace/global_vars.rb b/test/ruby/box/global_vars.rb similarity index 100% rename from test/ruby/namespace/global_vars.rb rename to test/ruby/box/global_vars.rb diff --git a/test/ruby/namespace/instance_variables.rb b/test/ruby/box/instance_variables.rb similarity index 100% rename from test/ruby/namespace/instance_variables.rb rename to test/ruby/box/instance_variables.rb diff --git a/test/ruby/namespace/line_splitter.rb b/test/ruby/box/line_splitter.rb similarity index 100% rename from test/ruby/namespace/line_splitter.rb rename to test/ruby/box/line_splitter.rb diff --git a/test/ruby/namespace/load_path.rb b/test/ruby/box/load_path.rb similarity index 100% rename from test/ruby/namespace/load_path.rb rename to test/ruby/box/load_path.rb diff --git a/test/ruby/namespace/ns.rb b/test/ruby/box/ns.rb similarity index 100% rename from test/ruby/namespace/ns.rb rename to test/ruby/box/ns.rb diff --git a/test/ruby/namespace/open_class_with_include.rb b/test/ruby/box/open_class_with_include.rb similarity index 100% rename from test/ruby/namespace/open_class_with_include.rb rename to test/ruby/box/open_class_with_include.rb diff --git a/test/ruby/namespace/proc_callee.rb b/test/ruby/box/proc_callee.rb similarity index 100% rename from test/ruby/namespace/proc_callee.rb rename to test/ruby/box/proc_callee.rb diff --git a/test/ruby/namespace/proc_caller.rb b/test/ruby/box/proc_caller.rb similarity index 100% rename from test/ruby/namespace/proc_caller.rb rename to test/ruby/box/proc_caller.rb diff --git a/test/ruby/namespace/procs.rb b/test/ruby/box/procs.rb similarity index 100% rename from test/ruby/namespace/procs.rb rename to test/ruby/box/procs.rb diff --git a/test/ruby/namespace/raise.rb b/test/ruby/box/raise.rb similarity index 100% rename from test/ruby/namespace/raise.rb rename to test/ruby/box/raise.rb diff --git a/test/ruby/namespace/returns_proc.rb b/test/ruby/box/returns_proc.rb similarity index 100% rename from test/ruby/namespace/returns_proc.rb rename to test/ruby/box/returns_proc.rb diff --git a/test/ruby/namespace/singleton_methods.rb b/test/ruby/box/singleton_methods.rb similarity index 100% rename from test/ruby/namespace/singleton_methods.rb rename to test/ruby/box/singleton_methods.rb diff --git a/test/ruby/namespace/string_ext.rb b/test/ruby/box/string_ext.rb similarity index 100% rename from test/ruby/namespace/string_ext.rb rename to test/ruby/box/string_ext.rb diff --git a/test/ruby/namespace/string_ext_caller.rb b/test/ruby/box/string_ext_caller.rb similarity index 100% rename from test/ruby/namespace/string_ext_caller.rb rename to test/ruby/box/string_ext_caller.rb diff --git a/test/ruby/namespace/string_ext_calling.rb b/test/ruby/box/string_ext_calling.rb similarity index 100% rename from test/ruby/namespace/string_ext_calling.rb rename to test/ruby/box/string_ext_calling.rb diff --git a/test/ruby/namespace/string_ext_eval_caller.rb b/test/ruby/box/string_ext_eval_caller.rb similarity index 100% rename from test/ruby/namespace/string_ext_eval_caller.rb rename to test/ruby/box/string_ext_eval_caller.rb diff --git a/test/ruby/namespace/top_level.rb b/test/ruby/box/top_level.rb similarity index 100% rename from test/ruby/namespace/top_level.rb rename to test/ruby/box/top_level.rb diff --git a/test/ruby/test_namespace.rb b/test/ruby/test_box.c similarity index 100% rename from test/ruby/test_namespace.rb rename to test/ruby/test_box.c From aaa1234702f0186b1cd7d2cea136eee20fc82153 Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Wed, 5 Nov 2025 14:29:25 +0900 Subject: [PATCH 03/11] update referenced filenames from namespace to box --- box.c | 2 +- class.c | 2 +- common.mk | 2 +- depend | 606 ++++++++++++++++++++++---------------------- dln.c | 2 +- ext/coverage/depend | 2 +- ext/objspace/depend | 6 +- ext/ripper/depend | 2 +- ext/socket/depend | 30 +-- internal/class.h | 2 +- load.c | 2 +- variable.c | 2 +- vm.c | 4 +- vm_core.h | 2 +- 14 files changed, 333 insertions(+), 333 deletions(-) diff --git a/box.c b/box.c index 0efc75e28bf009..a9368ca7440d91 100644 --- a/box.c +++ b/box.c @@ -2,6 +2,7 @@ #include "eval_intern.h" #include "internal.h" +#include "internal/box.h" #include "internal/class.h" #include "internal/eval.h" #include "internal/error.h" @@ -9,7 +10,6 @@ #include "internal/gc.h" #include "internal/hash.h" #include "internal/load.h" -#include "internal/namespace.h" #include "internal/st.h" #include "internal/variable.h" #include "iseq.h" diff --git a/class.c b/class.c index 04c66ce8d54962..8c3c91cf7a92b4 100644 --- a/class.c +++ b/class.c @@ -21,10 +21,10 @@ #include "debug_counter.h" #include "id_table.h" #include "internal.h" +#include "internal/box.h" #include "internal/class.h" #include "internal/eval.h" #include "internal/hash.h" -#include "internal/namespace.h" #include "internal/object.h" #include "internal/string.h" #include "internal/variable.h" diff --git a/common.mk b/common.mk index 58a8da14021fff..fe8ef3b19efe43 100644 --- a/common.mk +++ b/common.mk @@ -119,6 +119,7 @@ COMMONOBJS = \ array.$(OBJEXT) \ ast.$(OBJEXT) \ bignum.$(OBJEXT) \ + box.$(OBJEXT) \ class.$(OBJEXT) \ compar.$(OBJEXT) \ compile.$(OBJEXT) \ @@ -146,7 +147,6 @@ COMMONOBJS = \ marshal.$(OBJEXT) \ math.$(OBJEXT) \ memory_view.$(OBJEXT) \ - namespace.$(OBJEXT) \ node.$(OBJEXT) \ node_dump.$(OBJEXT) \ numeric.$(OBJEXT) \ diff --git a/depend b/depend index c908bb6b0102b4..569f14a04da5bf 100644 --- a/depend +++ b/depend @@ -63,6 +63,7 @@ array.$(OBJEXT): $(top_srcdir)/internal/array.h array.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h array.$(OBJEXT): $(top_srcdir)/internal/bignum.h array.$(OBJEXT): $(top_srcdir)/internal/bits.h +array.$(OBJEXT): $(top_srcdir)/internal/box.h array.$(OBJEXT): $(top_srcdir)/internal/class.h array.$(OBJEXT): $(top_srcdir)/internal/compar.h array.$(OBJEXT): $(top_srcdir)/internal/compilers.h @@ -71,7 +72,6 @@ array.$(OBJEXT): $(top_srcdir)/internal/fixnum.h array.$(OBJEXT): $(top_srcdir)/internal/gc.h array.$(OBJEXT): $(top_srcdir)/internal/hash.h array.$(OBJEXT): $(top_srcdir)/internal/imemo.h -array.$(OBJEXT): $(top_srcdir)/internal/namespace.h array.$(OBJEXT): $(top_srcdir)/internal/numeric.h array.$(OBJEXT): $(top_srcdir)/internal/object.h array.$(OBJEXT): $(top_srcdir)/internal/proc.h @@ -286,12 +286,12 @@ ast.$(OBJEXT): $(top_srcdir)/internal/array.h ast.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h ast.$(OBJEXT): $(top_srcdir)/internal/bignum.h ast.$(OBJEXT): $(top_srcdir)/internal/bits.h +ast.$(OBJEXT): $(top_srcdir)/internal/box.h ast.$(OBJEXT): $(top_srcdir)/internal/compilers.h ast.$(OBJEXT): $(top_srcdir)/internal/complex.h ast.$(OBJEXT): $(top_srcdir)/internal/fixnum.h ast.$(OBJEXT): $(top_srcdir)/internal/gc.h ast.$(OBJEXT): $(top_srcdir)/internal/imemo.h -ast.$(OBJEXT): $(top_srcdir)/internal/namespace.h ast.$(OBJEXT): $(top_srcdir)/internal/numeric.h ast.$(OBJEXT): $(top_srcdir)/internal/parse.h ast.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -526,13 +526,13 @@ bignum.$(OBJEXT): $(top_srcdir)/internal/array.h bignum.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h bignum.$(OBJEXT): $(top_srcdir)/internal/bignum.h bignum.$(OBJEXT): $(top_srcdir)/internal/bits.h +bignum.$(OBJEXT): $(top_srcdir)/internal/box.h bignum.$(OBJEXT): $(top_srcdir)/internal/class.h bignum.$(OBJEXT): $(top_srcdir)/internal/compilers.h bignum.$(OBJEXT): $(top_srcdir)/internal/complex.h bignum.$(OBJEXT): $(top_srcdir)/internal/fixnum.h bignum.$(OBJEXT): $(top_srcdir)/internal/gc.h bignum.$(OBJEXT): $(top_srcdir)/internal/imemo.h -bignum.$(OBJEXT): $(top_srcdir)/internal/namespace.h bignum.$(OBJEXT): $(top_srcdir)/internal/numeric.h bignum.$(OBJEXT): $(top_srcdir)/internal/object.h bignum.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -729,6 +729,251 @@ bignum.$(OBJEXT): {$(VPATH)}thread_native.h bignum.$(OBJEXT): {$(VPATH)}util.h bignum.$(OBJEXT): {$(VPATH)}vm_core.h bignum.$(OBJEXT): {$(VPATH)}vm_opts.h +box.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +box.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +box.$(OBJEXT): $(CCAN_DIR)/list/list.h +box.$(OBJEXT): $(CCAN_DIR)/str/str.h +box.$(OBJEXT): $(hdrdir)/ruby/ruby.h +box.$(OBJEXT): $(top_srcdir)/internal/array.h +box.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +box.$(OBJEXT): $(top_srcdir)/internal/box.h +box.$(OBJEXT): $(top_srcdir)/internal/class.h +box.$(OBJEXT): $(top_srcdir)/internal/compilers.h +box.$(OBJEXT): $(top_srcdir)/internal/error.h +box.$(OBJEXT): $(top_srcdir)/internal/eval.h +box.$(OBJEXT): $(top_srcdir)/internal/file.h +box.$(OBJEXT): $(top_srcdir)/internal/gc.h +box.$(OBJEXT): $(top_srcdir)/internal/hash.h +box.$(OBJEXT): $(top_srcdir)/internal/imemo.h +box.$(OBJEXT): $(top_srcdir)/internal/load.h +box.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h +box.$(OBJEXT): $(top_srcdir)/internal/serial.h +box.$(OBJEXT): $(top_srcdir)/internal/set_table.h +box.$(OBJEXT): $(top_srcdir)/internal/st.h +box.$(OBJEXT): $(top_srcdir)/internal/static_assert.h +box.$(OBJEXT): $(top_srcdir)/internal/string.h +box.$(OBJEXT): $(top_srcdir)/internal/variable.h +box.$(OBJEXT): $(top_srcdir)/internal/vm.h +box.$(OBJEXT): $(top_srcdir)/internal/warnings.h +box.$(OBJEXT): $(top_srcdir)/prism/ast.h +box.$(OBJEXT): $(top_srcdir)/prism/defines.h +box.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h +box.$(OBJEXT): $(top_srcdir)/prism/encoding.h +box.$(OBJEXT): $(top_srcdir)/prism/node.h +box.$(OBJEXT): $(top_srcdir)/prism/options.h +box.$(OBJEXT): $(top_srcdir)/prism/pack.h +box.$(OBJEXT): $(top_srcdir)/prism/parser.h +box.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h +box.$(OBJEXT): $(top_srcdir)/prism/prism.h +box.$(OBJEXT): $(top_srcdir)/prism/regexp.h +box.$(OBJEXT): $(top_srcdir)/prism/static_literals.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h +box.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h +box.$(OBJEXT): $(top_srcdir)/prism/version.h +box.$(OBJEXT): {$(VPATH)}assert.h +box.$(OBJEXT): {$(VPATH)}atomic.h +box.$(OBJEXT): {$(VPATH)}backward/2/assume.h +box.$(OBJEXT): {$(VPATH)}backward/2/attributes.h +box.$(OBJEXT): {$(VPATH)}backward/2/bool.h +box.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h +box.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h +box.$(OBJEXT): {$(VPATH)}backward/2/limits.h +box.$(OBJEXT): {$(VPATH)}backward/2/long_long.h +box.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h +box.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h +box.$(OBJEXT): {$(VPATH)}box.c +box.$(OBJEXT): {$(VPATH)}config.h +box.$(OBJEXT): {$(VPATH)}constant.h +box.$(OBJEXT): {$(VPATH)}darray.h +box.$(OBJEXT): {$(VPATH)}debug_counter.h +box.$(OBJEXT): {$(VPATH)}defines.h +box.$(OBJEXT): {$(VPATH)}encoding.h +box.$(OBJEXT): {$(VPATH)}eval_intern.h +box.$(OBJEXT): {$(VPATH)}id.h +box.$(OBJEXT): {$(VPATH)}id_table.h +box.$(OBJEXT): {$(VPATH)}intern.h +box.$(OBJEXT): {$(VPATH)}internal.h +box.$(OBJEXT): {$(VPATH)}internal/abi.h +box.$(OBJEXT): {$(VPATH)}internal/anyargs.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h +box.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h +box.$(OBJEXT): {$(VPATH)}internal/assume.h +box.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h +box.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h +box.$(OBJEXT): {$(VPATH)}internal/attr/cold.h +box.$(OBJEXT): {$(VPATH)}internal/attr/const.h +box.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h +box.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h +box.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h +box.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h +box.$(OBJEXT): {$(VPATH)}internal/attr/error.h +box.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h +box.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h +box.$(OBJEXT): {$(VPATH)}internal/attr/format.h +box.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h +box.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h +box.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h +box.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h +box.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h +box.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h +box.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h +box.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h +box.$(OBJEXT): {$(VPATH)}internal/attr/pure.h +box.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h +box.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h +box.$(OBJEXT): {$(VPATH)}internal/attr/warning.h +box.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h +box.$(OBJEXT): {$(VPATH)}internal/cast.h +box.$(OBJEXT): {$(VPATH)}internal/compiler_is.h +box.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h +box.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h +box.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h +box.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h +box.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h +box.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h +box.$(OBJEXT): {$(VPATH)}internal/compiler_since.h +box.$(OBJEXT): {$(VPATH)}internal/config.h +box.$(OBJEXT): {$(VPATH)}internal/constant_p.h +box.$(OBJEXT): {$(VPATH)}internal/core.h +box.$(OBJEXT): {$(VPATH)}internal/core/rarray.h +box.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h +box.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h +box.$(OBJEXT): {$(VPATH)}internal/core/rclass.h +box.$(OBJEXT): {$(VPATH)}internal/core/rdata.h +box.$(OBJEXT): {$(VPATH)}internal/core/rfile.h +box.$(OBJEXT): {$(VPATH)}internal/core/rhash.h +box.$(OBJEXT): {$(VPATH)}internal/core/robject.h +box.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h +box.$(OBJEXT): {$(VPATH)}internal/core/rstring.h +box.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h +box.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h +box.$(OBJEXT): {$(VPATH)}internal/ctype.h +box.$(OBJEXT): {$(VPATH)}internal/dllexport.h +box.$(OBJEXT): {$(VPATH)}internal/dosish.h +box.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h +box.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h +box.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h +box.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h +box.$(OBJEXT): {$(VPATH)}internal/encoding/re.h +box.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h +box.$(OBJEXT): {$(VPATH)}internal/encoding/string.h +box.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h +box.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h +box.$(OBJEXT): {$(VPATH)}internal/error.h +box.$(OBJEXT): {$(VPATH)}internal/eval.h +box.$(OBJEXT): {$(VPATH)}internal/event.h +box.$(OBJEXT): {$(VPATH)}internal/fl_type.h +box.$(OBJEXT): {$(VPATH)}internal/gc.h +box.$(OBJEXT): {$(VPATH)}internal/glob.h +box.$(OBJEXT): {$(VPATH)}internal/globals.h +box.$(OBJEXT): {$(VPATH)}internal/has/attribute.h +box.$(OBJEXT): {$(VPATH)}internal/has/builtin.h +box.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h +box.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h +box.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h +box.$(OBJEXT): {$(VPATH)}internal/has/extension.h +box.$(OBJEXT): {$(VPATH)}internal/has/feature.h +box.$(OBJEXT): {$(VPATH)}internal/has/warning.h +box.$(OBJEXT): {$(VPATH)}internal/intern/array.h +box.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h +box.$(OBJEXT): {$(VPATH)}internal/intern/class.h +box.$(OBJEXT): {$(VPATH)}internal/intern/compar.h +box.$(OBJEXT): {$(VPATH)}internal/intern/complex.h +box.$(OBJEXT): {$(VPATH)}internal/intern/cont.h +box.$(OBJEXT): {$(VPATH)}internal/intern/dir.h +box.$(OBJEXT): {$(VPATH)}internal/intern/enum.h +box.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h +box.$(OBJEXT): {$(VPATH)}internal/intern/error.h +box.$(OBJEXT): {$(VPATH)}internal/intern/eval.h +box.$(OBJEXT): {$(VPATH)}internal/intern/file.h +box.$(OBJEXT): {$(VPATH)}internal/intern/hash.h +box.$(OBJEXT): {$(VPATH)}internal/intern/io.h +box.$(OBJEXT): {$(VPATH)}internal/intern/load.h +box.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h +box.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h +box.$(OBJEXT): {$(VPATH)}internal/intern/object.h +box.$(OBJEXT): {$(VPATH)}internal/intern/parse.h +box.$(OBJEXT): {$(VPATH)}internal/intern/proc.h +box.$(OBJEXT): {$(VPATH)}internal/intern/process.h +box.$(OBJEXT): {$(VPATH)}internal/intern/random.h +box.$(OBJEXT): {$(VPATH)}internal/intern/range.h +box.$(OBJEXT): {$(VPATH)}internal/intern/rational.h +box.$(OBJEXT): {$(VPATH)}internal/intern/re.h +box.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h +box.$(OBJEXT): {$(VPATH)}internal/intern/select.h +box.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h +box.$(OBJEXT): {$(VPATH)}internal/intern/set.h +box.$(OBJEXT): {$(VPATH)}internal/intern/signal.h +box.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h +box.$(OBJEXT): {$(VPATH)}internal/intern/string.h +box.$(OBJEXT): {$(VPATH)}internal/intern/struct.h +box.$(OBJEXT): {$(VPATH)}internal/intern/thread.h +box.$(OBJEXT): {$(VPATH)}internal/intern/time.h +box.$(OBJEXT): {$(VPATH)}internal/intern/variable.h +box.$(OBJEXT): {$(VPATH)}internal/intern/vm.h +box.$(OBJEXT): {$(VPATH)}internal/interpreter.h +box.$(OBJEXT): {$(VPATH)}internal/iterator.h +box.$(OBJEXT): {$(VPATH)}internal/memory.h +box.$(OBJEXT): {$(VPATH)}internal/method.h +box.$(OBJEXT): {$(VPATH)}internal/module.h +box.$(OBJEXT): {$(VPATH)}internal/newobj.h +box.$(OBJEXT): {$(VPATH)}internal/scan_args.h +box.$(OBJEXT): {$(VPATH)}internal/special_consts.h +box.$(OBJEXT): {$(VPATH)}internal/static_assert.h +box.$(OBJEXT): {$(VPATH)}internal/stdalign.h +box.$(OBJEXT): {$(VPATH)}internal/stdbool.h +box.$(OBJEXT): {$(VPATH)}internal/stdckdint.h +box.$(OBJEXT): {$(VPATH)}internal/symbol.h +box.$(OBJEXT): {$(VPATH)}internal/value.h +box.$(OBJEXT): {$(VPATH)}internal/value_type.h +box.$(OBJEXT): {$(VPATH)}internal/variable.h +box.$(OBJEXT): {$(VPATH)}internal/warning_push.h +box.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +box.$(OBJEXT): {$(VPATH)}iseq.h +box.$(OBJEXT): {$(VPATH)}method.h +box.$(OBJEXT): {$(VPATH)}missing.h +box.$(OBJEXT): {$(VPATH)}node.h +box.$(OBJEXT): {$(VPATH)}onigmo.h +box.$(OBJEXT): {$(VPATH)}oniguruma.h +box.$(OBJEXT): {$(VPATH)}prism/ast.h +box.$(OBJEXT): {$(VPATH)}prism/diagnostic.h +box.$(OBJEXT): {$(VPATH)}prism/version.h +box.$(OBJEXT): {$(VPATH)}prism_compile.h +box.$(OBJEXT): {$(VPATH)}ruby_assert.h +box.$(OBJEXT): {$(VPATH)}ruby_atomic.h +box.$(OBJEXT): {$(VPATH)}rubyparser.h +box.$(OBJEXT): {$(VPATH)}shape.h +box.$(OBJEXT): {$(VPATH)}st.h +box.$(OBJEXT): {$(VPATH)}subst.h +box.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +box.$(OBJEXT): {$(VPATH)}thread_native.h +box.$(OBJEXT): {$(VPATH)}util.h +box.$(OBJEXT): {$(VPATH)}vm_core.h +box.$(OBJEXT): {$(VPATH)}vm_debug.h +box.$(OBJEXT): {$(VPATH)}vm_opts.h +box.$(OBJEXT): {$(VPATH)}vm_sync.h builtin.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h builtin.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h builtin.$(OBJEXT): $(CCAN_DIR)/list/list.h @@ -736,10 +981,10 @@ builtin.$(OBJEXT): $(CCAN_DIR)/str/str.h builtin.$(OBJEXT): $(hdrdir)/ruby/ruby.h builtin.$(OBJEXT): $(top_srcdir)/internal/array.h builtin.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +builtin.$(OBJEXT): $(top_srcdir)/internal/box.h builtin.$(OBJEXT): $(top_srcdir)/internal/compilers.h builtin.$(OBJEXT): $(top_srcdir)/internal/gc.h builtin.$(OBJEXT): $(top_srcdir)/internal/imemo.h -builtin.$(OBJEXT): $(top_srcdir)/internal/namespace.h builtin.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h builtin.$(OBJEXT): $(top_srcdir)/internal/serial.h builtin.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -966,13 +1211,13 @@ class.$(OBJEXT): $(CCAN_DIR)/str/str.h class.$(OBJEXT): $(hdrdir)/ruby/ruby.h class.$(OBJEXT): $(top_srcdir)/internal/array.h class.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +class.$(OBJEXT): $(top_srcdir)/internal/box.h class.$(OBJEXT): $(top_srcdir)/internal/class.h class.$(OBJEXT): $(top_srcdir)/internal/compilers.h class.$(OBJEXT): $(top_srcdir)/internal/eval.h class.$(OBJEXT): $(top_srcdir)/internal/gc.h class.$(OBJEXT): $(top_srcdir)/internal/hash.h class.$(OBJEXT): $(top_srcdir)/internal/imemo.h -class.$(OBJEXT): $(top_srcdir)/internal/namespace.h class.$(OBJEXT): $(top_srcdir)/internal/object.h class.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h class.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -1365,6 +1610,7 @@ compile.$(OBJEXT): $(top_srcdir)/internal/array.h compile.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h compile.$(OBJEXT): $(top_srcdir)/internal/bignum.h compile.$(OBJEXT): $(top_srcdir)/internal/bits.h +compile.$(OBJEXT): $(top_srcdir)/internal/box.h compile.$(OBJEXT): $(top_srcdir)/internal/class.h compile.$(OBJEXT): $(top_srcdir)/internal/compile.h compile.$(OBJEXT): $(top_srcdir)/internal/compilers.h @@ -1376,7 +1622,6 @@ compile.$(OBJEXT): $(top_srcdir)/internal/gc.h compile.$(OBJEXT): $(top_srcdir)/internal/hash.h compile.$(OBJEXT): $(top_srcdir)/internal/imemo.h compile.$(OBJEXT): $(top_srcdir)/internal/io.h -compile.$(OBJEXT): $(top_srcdir)/internal/namespace.h compile.$(OBJEXT): $(top_srcdir)/internal/numeric.h compile.$(OBJEXT): $(top_srcdir)/internal/object.h compile.$(OBJEXT): $(top_srcdir)/internal/parse.h @@ -1631,6 +1876,7 @@ complex.$(OBJEXT): $(top_srcdir)/internal/array.h complex.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h complex.$(OBJEXT): $(top_srcdir)/internal/bignum.h complex.$(OBJEXT): $(top_srcdir)/internal/bits.h +complex.$(OBJEXT): $(top_srcdir)/internal/box.h complex.$(OBJEXT): $(top_srcdir)/internal/class.h complex.$(OBJEXT): $(top_srcdir)/internal/compilers.h complex.$(OBJEXT): $(top_srcdir)/internal/complex.h @@ -1638,7 +1884,6 @@ complex.$(OBJEXT): $(top_srcdir)/internal/fixnum.h complex.$(OBJEXT): $(top_srcdir)/internal/gc.h complex.$(OBJEXT): $(top_srcdir)/internal/imemo.h complex.$(OBJEXT): $(top_srcdir)/internal/math.h -complex.$(OBJEXT): $(top_srcdir)/internal/namespace.h complex.$(OBJEXT): $(top_srcdir)/internal/numeric.h complex.$(OBJEXT): $(top_srcdir)/internal/object.h complex.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -1845,11 +2090,11 @@ concurrent_set.$(OBJEXT): $(CCAN_DIR)/str/str.h concurrent_set.$(OBJEXT): $(hdrdir)/ruby/ruby.h concurrent_set.$(OBJEXT): $(top_srcdir)/internal/array.h concurrent_set.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +concurrent_set.$(OBJEXT): $(top_srcdir)/internal/box.h concurrent_set.$(OBJEXT): $(top_srcdir)/internal/compilers.h concurrent_set.$(OBJEXT): $(top_srcdir)/internal/concurrent_set.h concurrent_set.$(OBJEXT): $(top_srcdir)/internal/gc.h concurrent_set.$(OBJEXT): $(top_srcdir)/internal/imemo.h -concurrent_set.$(OBJEXT): $(top_srcdir)/internal/namespace.h concurrent_set.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h concurrent_set.$(OBJEXT): $(top_srcdir)/internal/serial.h concurrent_set.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -2051,13 +2296,13 @@ cont.$(OBJEXT): $(hdrdir)/ruby/ruby.h cont.$(OBJEXT): $(hdrdir)/ruby/version.h cont.$(OBJEXT): $(top_srcdir)/internal/array.h cont.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +cont.$(OBJEXT): $(top_srcdir)/internal/box.h cont.$(OBJEXT): $(top_srcdir)/internal/compilers.h cont.$(OBJEXT): $(top_srcdir)/internal/cont.h cont.$(OBJEXT): $(top_srcdir)/internal/error.h cont.$(OBJEXT): $(top_srcdir)/internal/eval.h cont.$(OBJEXT): $(top_srcdir)/internal/gc.h cont.$(OBJEXT): $(top_srcdir)/internal/imemo.h -cont.$(OBJEXT): $(top_srcdir)/internal/namespace.h cont.$(OBJEXT): $(top_srcdir)/internal/proc.h cont.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h cont.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -2294,11 +2539,11 @@ debug.$(OBJEXT): $(CCAN_DIR)/str/str.h debug.$(OBJEXT): $(hdrdir)/ruby/ruby.h debug.$(OBJEXT): $(top_srcdir)/internal/array.h debug.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +debug.$(OBJEXT): $(top_srcdir)/internal/box.h debug.$(OBJEXT): $(top_srcdir)/internal/class.h debug.$(OBJEXT): $(top_srcdir)/internal/compilers.h debug.$(OBJEXT): $(top_srcdir)/internal/gc.h debug.$(OBJEXT): $(top_srcdir)/internal/imemo.h -debug.$(OBJEXT): $(top_srcdir)/internal/namespace.h debug.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h debug.$(OBJEXT): $(top_srcdir)/internal/serial.h debug.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -2672,6 +2917,7 @@ dir.$(OBJEXT): $(hdrdir)/ruby/ruby.h dir.$(OBJEXT): $(hdrdir)/ruby/version.h dir.$(OBJEXT): $(top_srcdir)/internal/array.h dir.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +dir.$(OBJEXT): $(top_srcdir)/internal/box.h dir.$(OBJEXT): $(top_srcdir)/internal/class.h dir.$(OBJEXT): $(top_srcdir)/internal/compilers.h dir.$(OBJEXT): $(top_srcdir)/internal/dir.h @@ -2681,7 +2927,6 @@ dir.$(OBJEXT): $(top_srcdir)/internal/file.h dir.$(OBJEXT): $(top_srcdir)/internal/gc.h dir.$(OBJEXT): $(top_srcdir)/internal/imemo.h dir.$(OBJEXT): $(top_srcdir)/internal/io.h -dir.$(OBJEXT): $(top_srcdir)/internal/namespace.h dir.$(OBJEXT): $(top_srcdir)/internal/object.h dir.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h dir.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -2883,8 +3128,8 @@ dir.$(OBJEXT): {$(VPATH)}util.h dir.$(OBJEXT): {$(VPATH)}vm_core.h dir.$(OBJEXT): {$(VPATH)}vm_opts.h dln.$(OBJEXT): $(hdrdir)/ruby/ruby.h +dln.$(OBJEXT): $(top_srcdir)/internal/box.h dln.$(OBJEXT): $(top_srcdir)/internal/compilers.h -dln.$(OBJEXT): $(top_srcdir)/internal/namespace.h dln.$(OBJEXT): $(top_srcdir)/internal/warnings.h dln.$(OBJEXT): {$(VPATH)}assert.h dln.$(OBJEXT): {$(VPATH)}backward/2/assume.h @@ -4613,6 +4858,7 @@ enumerator.$(OBJEXT): $(top_srcdir)/internal/array.h enumerator.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h enumerator.$(OBJEXT): $(top_srcdir)/internal/bignum.h enumerator.$(OBJEXT): $(top_srcdir)/internal/bits.h +enumerator.$(OBJEXT): $(top_srcdir)/internal/box.h enumerator.$(OBJEXT): $(top_srcdir)/internal/class.h enumerator.$(OBJEXT): $(top_srcdir)/internal/compilers.h enumerator.$(OBJEXT): $(top_srcdir)/internal/enumerator.h @@ -4621,7 +4867,6 @@ enumerator.$(OBJEXT): $(top_srcdir)/internal/fixnum.h enumerator.$(OBJEXT): $(top_srcdir)/internal/gc.h enumerator.$(OBJEXT): $(top_srcdir)/internal/hash.h enumerator.$(OBJEXT): $(top_srcdir)/internal/imemo.h -enumerator.$(OBJEXT): $(top_srcdir)/internal/namespace.h enumerator.$(OBJEXT): $(top_srcdir)/internal/numeric.h enumerator.$(OBJEXT): $(top_srcdir)/internal/range.h enumerator.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -4830,6 +5075,7 @@ error.$(OBJEXT): $(hdrdir)/ruby/ruby.h error.$(OBJEXT): $(hdrdir)/ruby/version.h error.$(OBJEXT): $(top_srcdir)/internal/array.h error.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +error.$(OBJEXT): $(top_srcdir)/internal/box.h error.$(OBJEXT): $(top_srcdir)/internal/class.h error.$(OBJEXT): $(top_srcdir)/internal/compilers.h error.$(OBJEXT): $(top_srcdir)/internal/error.h @@ -4839,7 +5085,6 @@ error.$(OBJEXT): $(top_srcdir)/internal/hash.h error.$(OBJEXT): $(top_srcdir)/internal/imemo.h error.$(OBJEXT): $(top_srcdir)/internal/io.h error.$(OBJEXT): $(top_srcdir)/internal/load.h -error.$(OBJEXT): $(top_srcdir)/internal/namespace.h error.$(OBJEXT): $(top_srcdir)/internal/object.h error.$(OBJEXT): $(top_srcdir)/internal/process.h error.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -5055,6 +5300,7 @@ eval.$(OBJEXT): $(hdrdir)/ruby/ruby.h eval.$(OBJEXT): $(hdrdir)/ruby/version.h eval.$(OBJEXT): $(top_srcdir)/internal/array.h eval.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +eval.$(OBJEXT): $(top_srcdir)/internal/box.h eval.$(OBJEXT): $(top_srcdir)/internal/class.h eval.$(OBJEXT): $(top_srcdir)/internal/compilers.h eval.$(OBJEXT): $(top_srcdir)/internal/cont.h @@ -5065,7 +5311,6 @@ eval.$(OBJEXT): $(top_srcdir)/internal/hash.h eval.$(OBJEXT): $(top_srcdir)/internal/imemo.h eval.$(OBJEXT): $(top_srcdir)/internal/inits.h eval.$(OBJEXT): $(top_srcdir)/internal/io.h -eval.$(OBJEXT): $(top_srcdir)/internal/namespace.h eval.$(OBJEXT): $(top_srcdir)/internal/object.h eval.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h eval.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -5536,6 +5781,7 @@ gc.$(OBJEXT): $(top_srcdir)/internal/array.h gc.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h gc.$(OBJEXT): $(top_srcdir)/internal/bignum.h gc.$(OBJEXT): $(top_srcdir)/internal/bits.h +gc.$(OBJEXT): $(top_srcdir)/internal/box.h gc.$(OBJEXT): $(top_srcdir)/internal/class.h gc.$(OBJEXT): $(top_srcdir)/internal/compile.h gc.$(OBJEXT): $(top_srcdir)/internal/compilers.h @@ -5549,7 +5795,6 @@ gc.$(OBJEXT): $(top_srcdir)/internal/gc.h gc.$(OBJEXT): $(top_srcdir)/internal/hash.h gc.$(OBJEXT): $(top_srcdir)/internal/imemo.h gc.$(OBJEXT): $(top_srcdir)/internal/io.h -gc.$(OBJEXT): $(top_srcdir)/internal/namespace.h gc.$(OBJEXT): $(top_srcdir)/internal/numeric.h gc.$(OBJEXT): $(top_srcdir)/internal/object.h gc.$(OBJEXT): $(top_srcdir)/internal/proc.h @@ -5811,12 +6056,12 @@ goruby.$(OBJEXT): $(top_srcdir)/internal/array.h goruby.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h goruby.$(OBJEXT): $(top_srcdir)/internal/bignum.h goruby.$(OBJEXT): $(top_srcdir)/internal/bits.h +goruby.$(OBJEXT): $(top_srcdir)/internal/box.h goruby.$(OBJEXT): $(top_srcdir)/internal/compilers.h goruby.$(OBJEXT): $(top_srcdir)/internal/complex.h goruby.$(OBJEXT): $(top_srcdir)/internal/fixnum.h goruby.$(OBJEXT): $(top_srcdir)/internal/gc.h goruby.$(OBJEXT): $(top_srcdir)/internal/imemo.h -goruby.$(OBJEXT): $(top_srcdir)/internal/namespace.h goruby.$(OBJEXT): $(top_srcdir)/internal/numeric.h goruby.$(OBJEXT): $(top_srcdir)/internal/parse.h goruby.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -6052,6 +6297,7 @@ hash.$(OBJEXT): $(top_srcdir)/internal/array.h hash.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h hash.$(OBJEXT): $(top_srcdir)/internal/bignum.h hash.$(OBJEXT): $(top_srcdir)/internal/bits.h +hash.$(OBJEXT): $(top_srcdir)/internal/box.h hash.$(OBJEXT): $(top_srcdir)/internal/class.h hash.$(OBJEXT): $(top_srcdir)/internal/compilers.h hash.$(OBJEXT): $(top_srcdir)/internal/cont.h @@ -6059,7 +6305,6 @@ hash.$(OBJEXT): $(top_srcdir)/internal/error.h hash.$(OBJEXT): $(top_srcdir)/internal/gc.h hash.$(OBJEXT): $(top_srcdir)/internal/hash.h hash.$(OBJEXT): $(top_srcdir)/internal/imemo.h -hash.$(OBJEXT): $(top_srcdir)/internal/namespace.h hash.$(OBJEXT): $(top_srcdir)/internal/object.h hash.$(OBJEXT): $(top_srcdir)/internal/proc.h hash.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -6304,11 +6549,11 @@ imemo.$(OBJEXT): $(CCAN_DIR)/str/str.h imemo.$(OBJEXT): $(hdrdir)/ruby/ruby.h imemo.$(OBJEXT): $(top_srcdir)/internal/array.h imemo.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +imemo.$(OBJEXT): $(top_srcdir)/internal/box.h imemo.$(OBJEXT): $(top_srcdir)/internal/class.h imemo.$(OBJEXT): $(top_srcdir)/internal/compilers.h imemo.$(OBJEXT): $(top_srcdir)/internal/gc.h imemo.$(OBJEXT): $(top_srcdir)/internal/imemo.h -imemo.$(OBJEXT): $(top_srcdir)/internal/namespace.h imemo.$(OBJEXT): $(top_srcdir)/internal/object.h imemo.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h imemo.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -6682,6 +6927,7 @@ io.$(OBJEXT): $(top_srcdir)/internal/array.h io.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h io.$(OBJEXT): $(top_srcdir)/internal/bignum.h io.$(OBJEXT): $(top_srcdir)/internal/bits.h +io.$(OBJEXT): $(top_srcdir)/internal/box.h io.$(OBJEXT): $(top_srcdir)/internal/class.h io.$(OBJEXT): $(top_srcdir)/internal/compilers.h io.$(OBJEXT): $(top_srcdir)/internal/encoding.h @@ -6691,7 +6937,6 @@ io.$(OBJEXT): $(top_srcdir)/internal/gc.h io.$(OBJEXT): $(top_srcdir)/internal/imemo.h io.$(OBJEXT): $(top_srcdir)/internal/inits.h io.$(OBJEXT): $(top_srcdir)/internal/io.h -io.$(OBJEXT): $(top_srcdir)/internal/namespace.h io.$(OBJEXT): $(top_srcdir)/internal/numeric.h io.$(OBJEXT): $(top_srcdir)/internal/object.h io.$(OBJEXT): $(top_srcdir)/internal/process.h @@ -6913,13 +7158,13 @@ io_buffer.$(OBJEXT): $(top_srcdir)/internal/array.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/bignum.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/bits.h +io_buffer.$(OBJEXT): $(top_srcdir)/internal/box.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/compilers.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/error.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/fixnum.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/gc.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/imemo.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/io.h -io_buffer.$(OBJEXT): $(top_srcdir)/internal/namespace.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/numeric.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h io_buffer.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -7127,6 +7372,7 @@ iseq.$(OBJEXT): $(top_srcdir)/internal/array.h iseq.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h iseq.$(OBJEXT): $(top_srcdir)/internal/bignum.h iseq.$(OBJEXT): $(top_srcdir)/internal/bits.h +iseq.$(OBJEXT): $(top_srcdir)/internal/box.h iseq.$(OBJEXT): $(top_srcdir)/internal/class.h iseq.$(OBJEXT): $(top_srcdir)/internal/compile.h iseq.$(OBJEXT): $(top_srcdir)/internal/compilers.h @@ -7138,7 +7384,6 @@ iseq.$(OBJEXT): $(top_srcdir)/internal/gc.h iseq.$(OBJEXT): $(top_srcdir)/internal/hash.h iseq.$(OBJEXT): $(top_srcdir)/internal/imemo.h iseq.$(OBJEXT): $(top_srcdir)/internal/io.h -iseq.$(OBJEXT): $(top_srcdir)/internal/namespace.h iseq.$(OBJEXT): $(top_srcdir)/internal/numeric.h iseq.$(OBJEXT): $(top_srcdir)/internal/parse.h iseq.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -7385,12 +7630,12 @@ jit.$(OBJEXT): $(hdrdir)/ruby/ruby.h jit.$(OBJEXT): $(top_srcdir)/internal/array.h jit.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h jit.$(OBJEXT): $(top_srcdir)/internal/bits.h +jit.$(OBJEXT): $(top_srcdir)/internal/box.h jit.$(OBJEXT): $(top_srcdir)/internal/class.h jit.$(OBJEXT): $(top_srcdir)/internal/compilers.h jit.$(OBJEXT): $(top_srcdir)/internal/fixnum.h jit.$(OBJEXT): $(top_srcdir)/internal/gc.h jit.$(OBJEXT): $(top_srcdir)/internal/imemo.h -jit.$(OBJEXT): $(top_srcdir)/internal/namespace.h jit.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h jit.$(OBJEXT): $(top_srcdir)/internal/serial.h jit.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -7627,6 +7872,7 @@ load.$(OBJEXT): $(top_srcdir)/internal/array.h load.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h load.$(OBJEXT): $(top_srcdir)/internal/bignum.h load.$(OBJEXT): $(top_srcdir)/internal/bits.h +load.$(OBJEXT): $(top_srcdir)/internal/box.h load.$(OBJEXT): $(top_srcdir)/internal/compilers.h load.$(OBJEXT): $(top_srcdir)/internal/complex.h load.$(OBJEXT): $(top_srcdir)/internal/dir.h @@ -7638,7 +7884,6 @@ load.$(OBJEXT): $(top_srcdir)/internal/gc.h load.$(OBJEXT): $(top_srcdir)/internal/hash.h load.$(OBJEXT): $(top_srcdir)/internal/imemo.h load.$(OBJEXT): $(top_srcdir)/internal/load.h -load.$(OBJEXT): $(top_srcdir)/internal/namespace.h load.$(OBJEXT): $(top_srcdir)/internal/numeric.h load.$(OBJEXT): $(top_srcdir)/internal/parse.h load.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -8379,6 +8624,7 @@ marshal.$(OBJEXT): $(top_srcdir)/internal/array.h marshal.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h marshal.$(OBJEXT): $(top_srcdir)/internal/bignum.h marshal.$(OBJEXT): $(top_srcdir)/internal/bits.h +marshal.$(OBJEXT): $(top_srcdir)/internal/box.h marshal.$(OBJEXT): $(top_srcdir)/internal/class.h marshal.$(OBJEXT): $(top_srcdir)/internal/compilers.h marshal.$(OBJEXT): $(top_srcdir)/internal/encoding.h @@ -8387,7 +8633,6 @@ marshal.$(OBJEXT): $(top_srcdir)/internal/fixnum.h marshal.$(OBJEXT): $(top_srcdir)/internal/gc.h marshal.$(OBJEXT): $(top_srcdir)/internal/hash.h marshal.$(OBJEXT): $(top_srcdir)/internal/imemo.h -marshal.$(OBJEXT): $(top_srcdir)/internal/namespace.h marshal.$(OBJEXT): $(top_srcdir)/internal/numeric.h marshal.$(OBJEXT): $(top_srcdir)/internal/object.h marshal.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -8777,11 +9022,11 @@ memory_view.$(OBJEXT): $(CCAN_DIR)/str/str.h memory_view.$(OBJEXT): $(hdrdir)/ruby/ruby.h memory_view.$(OBJEXT): $(top_srcdir)/internal/array.h memory_view.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +memory_view.$(OBJEXT): $(top_srcdir)/internal/box.h memory_view.$(OBJEXT): $(top_srcdir)/internal/compilers.h memory_view.$(OBJEXT): $(top_srcdir)/internal/gc.h memory_view.$(OBJEXT): $(top_srcdir)/internal/hash.h memory_view.$(OBJEXT): $(top_srcdir)/internal/imemo.h -memory_view.$(OBJEXT): $(top_srcdir)/internal/namespace.h memory_view.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h memory_view.$(OBJEXT): $(top_srcdir)/internal/serial.h memory_view.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -8988,13 +9233,13 @@ miniinit.$(OBJEXT): $(top_srcdir)/internal/array.h miniinit.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h miniinit.$(OBJEXT): $(top_srcdir)/internal/bignum.h miniinit.$(OBJEXT): $(top_srcdir)/internal/bits.h +miniinit.$(OBJEXT): $(top_srcdir)/internal/box.h miniinit.$(OBJEXT): $(top_srcdir)/internal/compilers.h miniinit.$(OBJEXT): $(top_srcdir)/internal/complex.h miniinit.$(OBJEXT): $(top_srcdir)/internal/eval.h miniinit.$(OBJEXT): $(top_srcdir)/internal/fixnum.h miniinit.$(OBJEXT): $(top_srcdir)/internal/gc.h miniinit.$(OBJEXT): $(top_srcdir)/internal/imemo.h -miniinit.$(OBJEXT): $(top_srcdir)/internal/namespace.h miniinit.$(OBJEXT): $(top_srcdir)/internal/numeric.h miniinit.$(OBJEXT): $(top_srcdir)/internal/parse.h miniinit.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -9243,251 +9488,6 @@ miniinit.$(OBJEXT): {$(VPATH)}vm_opts.h miniinit.$(OBJEXT): {$(VPATH)}warning.rb miniinit.$(OBJEXT): {$(VPATH)}yjit.rb miniinit.$(OBJEXT): {$(VPATH)}zjit.rb -namespace.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h -namespace.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h -namespace.$(OBJEXT): $(CCAN_DIR)/list/list.h -namespace.$(OBJEXT): $(CCAN_DIR)/str/str.h -namespace.$(OBJEXT): $(hdrdir)/ruby/ruby.h -namespace.$(OBJEXT): $(top_srcdir)/internal/array.h -namespace.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h -namespace.$(OBJEXT): $(top_srcdir)/internal/class.h -namespace.$(OBJEXT): $(top_srcdir)/internal/compilers.h -namespace.$(OBJEXT): $(top_srcdir)/internal/error.h -namespace.$(OBJEXT): $(top_srcdir)/internal/eval.h -namespace.$(OBJEXT): $(top_srcdir)/internal/file.h -namespace.$(OBJEXT): $(top_srcdir)/internal/gc.h -namespace.$(OBJEXT): $(top_srcdir)/internal/hash.h -namespace.$(OBJEXT): $(top_srcdir)/internal/imemo.h -namespace.$(OBJEXT): $(top_srcdir)/internal/load.h -namespace.$(OBJEXT): $(top_srcdir)/internal/namespace.h -namespace.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h -namespace.$(OBJEXT): $(top_srcdir)/internal/serial.h -namespace.$(OBJEXT): $(top_srcdir)/internal/set_table.h -namespace.$(OBJEXT): $(top_srcdir)/internal/st.h -namespace.$(OBJEXT): $(top_srcdir)/internal/static_assert.h -namespace.$(OBJEXT): $(top_srcdir)/internal/string.h -namespace.$(OBJEXT): $(top_srcdir)/internal/variable.h -namespace.$(OBJEXT): $(top_srcdir)/internal/vm.h -namespace.$(OBJEXT): $(top_srcdir)/internal/warnings.h -namespace.$(OBJEXT): $(top_srcdir)/prism/ast.h -namespace.$(OBJEXT): $(top_srcdir)/prism/defines.h -namespace.$(OBJEXT): $(top_srcdir)/prism/diagnostic.h -namespace.$(OBJEXT): $(top_srcdir)/prism/encoding.h -namespace.$(OBJEXT): $(top_srcdir)/prism/node.h -namespace.$(OBJEXT): $(top_srcdir)/prism/options.h -namespace.$(OBJEXT): $(top_srcdir)/prism/pack.h -namespace.$(OBJEXT): $(top_srcdir)/prism/parser.h -namespace.$(OBJEXT): $(top_srcdir)/prism/prettyprint.h -namespace.$(OBJEXT): $(top_srcdir)/prism/prism.h -namespace.$(OBJEXT): $(top_srcdir)/prism/regexp.h -namespace.$(OBJEXT): $(top_srcdir)/prism/static_literals.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_buffer.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_char.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_constant_pool.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_integer.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_list.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_memchr.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_newline_list.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_string.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_strncasecmp.h -namespace.$(OBJEXT): $(top_srcdir)/prism/util/pm_strpbrk.h -namespace.$(OBJEXT): $(top_srcdir)/prism/version.h -namespace.$(OBJEXT): {$(VPATH)}assert.h -namespace.$(OBJEXT): {$(VPATH)}atomic.h -namespace.$(OBJEXT): {$(VPATH)}backward/2/assume.h -namespace.$(OBJEXT): {$(VPATH)}backward/2/attributes.h -namespace.$(OBJEXT): {$(VPATH)}backward/2/bool.h -namespace.$(OBJEXT): {$(VPATH)}backward/2/gcc_version_since.h -namespace.$(OBJEXT): {$(VPATH)}backward/2/inttypes.h -namespace.$(OBJEXT): {$(VPATH)}backward/2/limits.h -namespace.$(OBJEXT): {$(VPATH)}backward/2/long_long.h -namespace.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h -namespace.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h -namespace.$(OBJEXT): {$(VPATH)}config.h -namespace.$(OBJEXT): {$(VPATH)}constant.h -namespace.$(OBJEXT): {$(VPATH)}darray.h -namespace.$(OBJEXT): {$(VPATH)}debug_counter.h -namespace.$(OBJEXT): {$(VPATH)}defines.h -namespace.$(OBJEXT): {$(VPATH)}encoding.h -namespace.$(OBJEXT): {$(VPATH)}eval_intern.h -namespace.$(OBJEXT): {$(VPATH)}id.h -namespace.$(OBJEXT): {$(VPATH)}id_table.h -namespace.$(OBJEXT): {$(VPATH)}intern.h -namespace.$(OBJEXT): {$(VPATH)}internal.h -namespace.$(OBJEXT): {$(VPATH)}internal/abi.h -namespace.$(OBJEXT): {$(VPATH)}internal/anyargs.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/char.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/double.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/fixnum.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/gid_t.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/int.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/intptr_t.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/long.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/long_long.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/mode_t.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/off_t.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/pid_t.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/short.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/size_t.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/st_data_t.h -namespace.$(OBJEXT): {$(VPATH)}internal/arithmetic/uid_t.h -namespace.$(OBJEXT): {$(VPATH)}internal/assume.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/alloc_size.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/artificial.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/cold.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/const.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/constexpr.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/deprecated.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/diagnose_if.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/enum_extensibility.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/error.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/flag_enum.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/forceinline.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/format.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/maybe_unused.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/noalias.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/nodiscard.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/noexcept.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/noinline.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/nonnull.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/noreturn.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/packed_struct.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/pure.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/restrict.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/returns_nonnull.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/warning.h -namespace.$(OBJEXT): {$(VPATH)}internal/attr/weakref.h -namespace.$(OBJEXT): {$(VPATH)}internal/cast.h -namespace.$(OBJEXT): {$(VPATH)}internal/compiler_is.h -namespace.$(OBJEXT): {$(VPATH)}internal/compiler_is/apple.h -namespace.$(OBJEXT): {$(VPATH)}internal/compiler_is/clang.h -namespace.$(OBJEXT): {$(VPATH)}internal/compiler_is/gcc.h -namespace.$(OBJEXT): {$(VPATH)}internal/compiler_is/intel.h -namespace.$(OBJEXT): {$(VPATH)}internal/compiler_is/msvc.h -namespace.$(OBJEXT): {$(VPATH)}internal/compiler_is/sunpro.h -namespace.$(OBJEXT): {$(VPATH)}internal/compiler_since.h -namespace.$(OBJEXT): {$(VPATH)}internal/config.h -namespace.$(OBJEXT): {$(VPATH)}internal/constant_p.h -namespace.$(OBJEXT): {$(VPATH)}internal/core.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rarray.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rbasic.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rbignum.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rclass.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rdata.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rfile.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rhash.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/robject.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rregexp.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rstring.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rstruct.h -namespace.$(OBJEXT): {$(VPATH)}internal/core/rtypeddata.h -namespace.$(OBJEXT): {$(VPATH)}internal/ctype.h -namespace.$(OBJEXT): {$(VPATH)}internal/dllexport.h -namespace.$(OBJEXT): {$(VPATH)}internal/dosish.h -namespace.$(OBJEXT): {$(VPATH)}internal/encoding/coderange.h -namespace.$(OBJEXT): {$(VPATH)}internal/encoding/ctype.h -namespace.$(OBJEXT): {$(VPATH)}internal/encoding/encoding.h -namespace.$(OBJEXT): {$(VPATH)}internal/encoding/pathname.h -namespace.$(OBJEXT): {$(VPATH)}internal/encoding/re.h -namespace.$(OBJEXT): {$(VPATH)}internal/encoding/sprintf.h -namespace.$(OBJEXT): {$(VPATH)}internal/encoding/string.h -namespace.$(OBJEXT): {$(VPATH)}internal/encoding/symbol.h -namespace.$(OBJEXT): {$(VPATH)}internal/encoding/transcode.h -namespace.$(OBJEXT): {$(VPATH)}internal/error.h -namespace.$(OBJEXT): {$(VPATH)}internal/eval.h -namespace.$(OBJEXT): {$(VPATH)}internal/event.h -namespace.$(OBJEXT): {$(VPATH)}internal/fl_type.h -namespace.$(OBJEXT): {$(VPATH)}internal/gc.h -namespace.$(OBJEXT): {$(VPATH)}internal/glob.h -namespace.$(OBJEXT): {$(VPATH)}internal/globals.h -namespace.$(OBJEXT): {$(VPATH)}internal/has/attribute.h -namespace.$(OBJEXT): {$(VPATH)}internal/has/builtin.h -namespace.$(OBJEXT): {$(VPATH)}internal/has/c_attribute.h -namespace.$(OBJEXT): {$(VPATH)}internal/has/cpp_attribute.h -namespace.$(OBJEXT): {$(VPATH)}internal/has/declspec_attribute.h -namespace.$(OBJEXT): {$(VPATH)}internal/has/extension.h -namespace.$(OBJEXT): {$(VPATH)}internal/has/feature.h -namespace.$(OBJEXT): {$(VPATH)}internal/has/warning.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/array.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/bignum.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/class.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/compar.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/complex.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/cont.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/dir.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/enum.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/enumerator.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/error.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/eval.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/file.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/hash.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/io.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/load.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/marshal.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/numeric.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/object.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/parse.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/proc.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/process.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/random.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/range.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/rational.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/re.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/ruby.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/select.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/select/largesize.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/set.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/signal.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/sprintf.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/string.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/struct.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/thread.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/time.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/variable.h -namespace.$(OBJEXT): {$(VPATH)}internal/intern/vm.h -namespace.$(OBJEXT): {$(VPATH)}internal/interpreter.h -namespace.$(OBJEXT): {$(VPATH)}internal/iterator.h -namespace.$(OBJEXT): {$(VPATH)}internal/memory.h -namespace.$(OBJEXT): {$(VPATH)}internal/method.h -namespace.$(OBJEXT): {$(VPATH)}internal/module.h -namespace.$(OBJEXT): {$(VPATH)}internal/newobj.h -namespace.$(OBJEXT): {$(VPATH)}internal/scan_args.h -namespace.$(OBJEXT): {$(VPATH)}internal/special_consts.h -namespace.$(OBJEXT): {$(VPATH)}internal/static_assert.h -namespace.$(OBJEXT): {$(VPATH)}internal/stdalign.h -namespace.$(OBJEXT): {$(VPATH)}internal/stdbool.h -namespace.$(OBJEXT): {$(VPATH)}internal/stdckdint.h -namespace.$(OBJEXT): {$(VPATH)}internal/symbol.h -namespace.$(OBJEXT): {$(VPATH)}internal/value.h -namespace.$(OBJEXT): {$(VPATH)}internal/value_type.h -namespace.$(OBJEXT): {$(VPATH)}internal/variable.h -namespace.$(OBJEXT): {$(VPATH)}internal/warning_push.h -namespace.$(OBJEXT): {$(VPATH)}internal/xmalloc.h -namespace.$(OBJEXT): {$(VPATH)}iseq.h -namespace.$(OBJEXT): {$(VPATH)}method.h -namespace.$(OBJEXT): {$(VPATH)}missing.h -namespace.$(OBJEXT): {$(VPATH)}namespace.c -namespace.$(OBJEXT): {$(VPATH)}node.h -namespace.$(OBJEXT): {$(VPATH)}onigmo.h -namespace.$(OBJEXT): {$(VPATH)}oniguruma.h -namespace.$(OBJEXT): {$(VPATH)}prism/ast.h -namespace.$(OBJEXT): {$(VPATH)}prism/diagnostic.h -namespace.$(OBJEXT): {$(VPATH)}prism/version.h -namespace.$(OBJEXT): {$(VPATH)}prism_compile.h -namespace.$(OBJEXT): {$(VPATH)}ruby_assert.h -namespace.$(OBJEXT): {$(VPATH)}ruby_atomic.h -namespace.$(OBJEXT): {$(VPATH)}rubyparser.h -namespace.$(OBJEXT): {$(VPATH)}shape.h -namespace.$(OBJEXT): {$(VPATH)}st.h -namespace.$(OBJEXT): {$(VPATH)}subst.h -namespace.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h -namespace.$(OBJEXT): {$(VPATH)}thread_native.h -namespace.$(OBJEXT): {$(VPATH)}util.h -namespace.$(OBJEXT): {$(VPATH)}vm_core.h -namespace.$(OBJEXT): {$(VPATH)}vm_debug.h -namespace.$(OBJEXT): {$(VPATH)}vm_opts.h -namespace.$(OBJEXT): {$(VPATH)}vm_sync.h node.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h node.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h node.$(OBJEXT): $(CCAN_DIR)/list/list.h @@ -9495,11 +9495,11 @@ node.$(OBJEXT): $(CCAN_DIR)/str/str.h node.$(OBJEXT): $(hdrdir)/ruby/ruby.h node.$(OBJEXT): $(top_srcdir)/internal/array.h node.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +node.$(OBJEXT): $(top_srcdir)/internal/box.h node.$(OBJEXT): $(top_srcdir)/internal/compilers.h node.$(OBJEXT): $(top_srcdir)/internal/gc.h node.$(OBJEXT): $(top_srcdir)/internal/hash.h node.$(OBJEXT): $(top_srcdir)/internal/imemo.h -node.$(OBJEXT): $(top_srcdir)/internal/namespace.h node.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h node.$(OBJEXT): $(top_srcdir)/internal/serial.h node.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -9702,6 +9702,7 @@ node_dump.$(OBJEXT): $(top_srcdir)/internal/array.h node_dump.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h node_dump.$(OBJEXT): $(top_srcdir)/internal/bignum.h node_dump.$(OBJEXT): $(top_srcdir)/internal/bits.h +node_dump.$(OBJEXT): $(top_srcdir)/internal/box.h node_dump.$(OBJEXT): $(top_srcdir)/internal/class.h node_dump.$(OBJEXT): $(top_srcdir)/internal/compilers.h node_dump.$(OBJEXT): $(top_srcdir)/internal/complex.h @@ -9709,7 +9710,6 @@ node_dump.$(OBJEXT): $(top_srcdir)/internal/fixnum.h node_dump.$(OBJEXT): $(top_srcdir)/internal/gc.h node_dump.$(OBJEXT): $(top_srcdir)/internal/hash.h node_dump.$(OBJEXT): $(top_srcdir)/internal/imemo.h -node_dump.$(OBJEXT): $(top_srcdir)/internal/namespace.h node_dump.$(OBJEXT): $(top_srcdir)/internal/numeric.h node_dump.$(OBJEXT): $(top_srcdir)/internal/parse.h node_dump.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -9918,6 +9918,7 @@ numeric.$(OBJEXT): $(top_srcdir)/internal/array.h numeric.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h numeric.$(OBJEXT): $(top_srcdir)/internal/bignum.h numeric.$(OBJEXT): $(top_srcdir)/internal/bits.h +numeric.$(OBJEXT): $(top_srcdir)/internal/box.h numeric.$(OBJEXT): $(top_srcdir)/internal/class.h numeric.$(OBJEXT): $(top_srcdir)/internal/compilers.h numeric.$(OBJEXT): $(top_srcdir)/internal/complex.h @@ -9926,7 +9927,6 @@ numeric.$(OBJEXT): $(top_srcdir)/internal/fixnum.h numeric.$(OBJEXT): $(top_srcdir)/internal/gc.h numeric.$(OBJEXT): $(top_srcdir)/internal/hash.h numeric.$(OBJEXT): $(top_srcdir)/internal/imemo.h -numeric.$(OBJEXT): $(top_srcdir)/internal/namespace.h numeric.$(OBJEXT): $(top_srcdir)/internal/numeric.h numeric.$(OBJEXT): $(top_srcdir)/internal/object.h numeric.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -10137,6 +10137,7 @@ object.$(OBJEXT): $(top_srcdir)/internal/array.h object.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h object.$(OBJEXT): $(top_srcdir)/internal/bignum.h object.$(OBJEXT): $(top_srcdir)/internal/bits.h +object.$(OBJEXT): $(top_srcdir)/internal/box.h object.$(OBJEXT): $(top_srcdir)/internal/class.h object.$(OBJEXT): $(top_srcdir)/internal/compilers.h object.$(OBJEXT): $(top_srcdir)/internal/error.h @@ -10145,7 +10146,6 @@ object.$(OBJEXT): $(top_srcdir)/internal/fixnum.h object.$(OBJEXT): $(top_srcdir)/internal/gc.h object.$(OBJEXT): $(top_srcdir)/internal/imemo.h object.$(OBJEXT): $(top_srcdir)/internal/inits.h -object.$(OBJEXT): $(top_srcdir)/internal/namespace.h object.$(OBJEXT): $(top_srcdir)/internal/numeric.h object.$(OBJEXT): $(top_srcdir)/internal/object.h object.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -10364,10 +10364,10 @@ pack.$(OBJEXT): $(hdrdir)/ruby/ruby.h pack.$(OBJEXT): $(top_srcdir)/internal/array.h pack.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h pack.$(OBJEXT): $(top_srcdir)/internal/bits.h +pack.$(OBJEXT): $(top_srcdir)/internal/box.h pack.$(OBJEXT): $(top_srcdir)/internal/compilers.h pack.$(OBJEXT): $(top_srcdir)/internal/gc.h pack.$(OBJEXT): $(top_srcdir)/internal/imemo.h -pack.$(OBJEXT): $(top_srcdir)/internal/namespace.h pack.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h pack.$(OBJEXT): $(top_srcdir)/internal/serial.h pack.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -10576,6 +10576,7 @@ parse.$(OBJEXT): $(top_srcdir)/internal/array.h parse.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h parse.$(OBJEXT): $(top_srcdir)/internal/bignum.h parse.$(OBJEXT): $(top_srcdir)/internal/bits.h +parse.$(OBJEXT): $(top_srcdir)/internal/box.h parse.$(OBJEXT): $(top_srcdir)/internal/compile.h parse.$(OBJEXT): $(top_srcdir)/internal/compilers.h parse.$(OBJEXT): $(top_srcdir)/internal/complex.h @@ -10586,7 +10587,6 @@ parse.$(OBJEXT): $(top_srcdir)/internal/gc.h parse.$(OBJEXT): $(top_srcdir)/internal/hash.h parse.$(OBJEXT): $(top_srcdir)/internal/imemo.h parse.$(OBJEXT): $(top_srcdir)/internal/io.h -parse.$(OBJEXT): $(top_srcdir)/internal/namespace.h parse.$(OBJEXT): $(top_srcdir)/internal/numeric.h parse.$(OBJEXT): $(top_srcdir)/internal/parse.h parse.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -12040,6 +12040,7 @@ proc.$(OBJEXT): $(hdrdir)/ruby/ruby.h proc.$(OBJEXT): $(hdrdir)/ruby/version.h proc.$(OBJEXT): $(top_srcdir)/internal/array.h proc.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +proc.$(OBJEXT): $(top_srcdir)/internal/box.h proc.$(OBJEXT): $(top_srcdir)/internal/class.h proc.$(OBJEXT): $(top_srcdir)/internal/compilers.h proc.$(OBJEXT): $(top_srcdir)/internal/error.h @@ -12047,7 +12048,6 @@ proc.$(OBJEXT): $(top_srcdir)/internal/eval.h proc.$(OBJEXT): $(top_srcdir)/internal/gc.h proc.$(OBJEXT): $(top_srcdir)/internal/hash.h proc.$(OBJEXT): $(top_srcdir)/internal/imemo.h -proc.$(OBJEXT): $(top_srcdir)/internal/namespace.h proc.$(OBJEXT): $(top_srcdir)/internal/object.h proc.$(OBJEXT): $(top_srcdir)/internal/proc.h proc.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -12287,6 +12287,7 @@ process.$(OBJEXT): $(top_srcdir)/internal/array.h process.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h process.$(OBJEXT): $(top_srcdir)/internal/bignum.h process.$(OBJEXT): $(top_srcdir)/internal/bits.h +process.$(OBJEXT): $(top_srcdir)/internal/box.h process.$(OBJEXT): $(top_srcdir)/internal/class.h process.$(OBJEXT): $(top_srcdir)/internal/compilers.h process.$(OBJEXT): $(top_srcdir)/internal/dir.h @@ -12297,7 +12298,6 @@ process.$(OBJEXT): $(top_srcdir)/internal/gc.h process.$(OBJEXT): $(top_srcdir)/internal/hash.h process.$(OBJEXT): $(top_srcdir)/internal/imemo.h process.$(OBJEXT): $(top_srcdir)/internal/io.h -process.$(OBJEXT): $(top_srcdir)/internal/namespace.h process.$(OBJEXT): $(top_srcdir)/internal/numeric.h process.$(OBJEXT): $(top_srcdir)/internal/object.h process.$(OBJEXT): $(top_srcdir)/internal/process.h @@ -12518,6 +12518,7 @@ ractor.$(OBJEXT): $(top_srcdir)/internal/array.h ractor.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h ractor.$(OBJEXT): $(top_srcdir)/internal/bignum.h ractor.$(OBJEXT): $(top_srcdir)/internal/bits.h +ractor.$(OBJEXT): $(top_srcdir)/internal/box.h ractor.$(OBJEXT): $(top_srcdir)/internal/compilers.h ractor.$(OBJEXT): $(top_srcdir)/internal/complex.h ractor.$(OBJEXT): $(top_srcdir)/internal/error.h @@ -12525,7 +12526,6 @@ ractor.$(OBJEXT): $(top_srcdir)/internal/fixnum.h ractor.$(OBJEXT): $(top_srcdir)/internal/gc.h ractor.$(OBJEXT): $(top_srcdir)/internal/hash.h ractor.$(OBJEXT): $(top_srcdir)/internal/imemo.h -ractor.$(OBJEXT): $(top_srcdir)/internal/namespace.h ractor.$(OBJEXT): $(top_srcdir)/internal/numeric.h ractor.$(OBJEXT): $(top_srcdir)/internal/object.h ractor.$(OBJEXT): $(top_srcdir)/internal/ractor.h @@ -12750,11 +12750,11 @@ random.$(OBJEXT): $(top_srcdir)/internal/array.h random.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h random.$(OBJEXT): $(top_srcdir)/internal/bignum.h random.$(OBJEXT): $(top_srcdir)/internal/bits.h +random.$(OBJEXT): $(top_srcdir)/internal/box.h random.$(OBJEXT): $(top_srcdir)/internal/compilers.h random.$(OBJEXT): $(top_srcdir)/internal/fixnum.h random.$(OBJEXT): $(top_srcdir)/internal/gc.h random.$(OBJEXT): $(top_srcdir)/internal/imemo.h -random.$(OBJEXT): $(top_srcdir)/internal/namespace.h random.$(OBJEXT): $(top_srcdir)/internal/numeric.h random.$(OBJEXT): $(top_srcdir)/internal/random.h random.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -13159,13 +13159,13 @@ rational.$(OBJEXT): $(top_srcdir)/internal/array.h rational.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h rational.$(OBJEXT): $(top_srcdir)/internal/bignum.h rational.$(OBJEXT): $(top_srcdir)/internal/bits.h +rational.$(OBJEXT): $(top_srcdir)/internal/box.h rational.$(OBJEXT): $(top_srcdir)/internal/class.h rational.$(OBJEXT): $(top_srcdir)/internal/compilers.h rational.$(OBJEXT): $(top_srcdir)/internal/complex.h rational.$(OBJEXT): $(top_srcdir)/internal/fixnum.h rational.$(OBJEXT): $(top_srcdir)/internal/gc.h rational.$(OBJEXT): $(top_srcdir)/internal/imemo.h -rational.$(OBJEXT): $(top_srcdir)/internal/namespace.h rational.$(OBJEXT): $(top_srcdir)/internal/numeric.h rational.$(OBJEXT): $(top_srcdir)/internal/object.h rational.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -13370,13 +13370,13 @@ re.$(OBJEXT): $(hdrdir)/ruby/ruby.h re.$(OBJEXT): $(top_srcdir)/internal/array.h re.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h re.$(OBJEXT): $(top_srcdir)/internal/bits.h +re.$(OBJEXT): $(top_srcdir)/internal/box.h re.$(OBJEXT): $(top_srcdir)/internal/class.h re.$(OBJEXT): $(top_srcdir)/internal/compilers.h re.$(OBJEXT): $(top_srcdir)/internal/encoding.h re.$(OBJEXT): $(top_srcdir)/internal/gc.h re.$(OBJEXT): $(top_srcdir)/internal/hash.h re.$(OBJEXT): $(top_srcdir)/internal/imemo.h -re.$(OBJEXT): $(top_srcdir)/internal/namespace.h re.$(OBJEXT): $(top_srcdir)/internal/object.h re.$(OBJEXT): $(top_srcdir)/internal/ractor.h re.$(OBJEXT): $(top_srcdir)/internal/re.h @@ -14586,6 +14586,7 @@ ruby.$(OBJEXT): $(top_srcdir)/internal/array.h ruby.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h ruby.$(OBJEXT): $(top_srcdir)/internal/bignum.h ruby.$(OBJEXT): $(top_srcdir)/internal/bits.h +ruby.$(OBJEXT): $(top_srcdir)/internal/box.h ruby.$(OBJEXT): $(top_srcdir)/internal/class.h ruby.$(OBJEXT): $(top_srcdir)/internal/cmdlineopt.h ruby.$(OBJEXT): $(top_srcdir)/internal/compilers.h @@ -14601,7 +14602,6 @@ ruby.$(OBJEXT): $(top_srcdir)/internal/io.h ruby.$(OBJEXT): $(top_srcdir)/internal/load.h ruby.$(OBJEXT): $(top_srcdir)/internal/loadpath.h ruby.$(OBJEXT): $(top_srcdir)/internal/missing.h -ruby.$(OBJEXT): $(top_srcdir)/internal/namespace.h ruby.$(OBJEXT): $(top_srcdir)/internal/numeric.h ruby.$(OBJEXT): $(top_srcdir)/internal/object.h ruby.$(OBJEXT): $(top_srcdir)/internal/parse.h @@ -15032,10 +15032,10 @@ scheduler.$(OBJEXT): $(CCAN_DIR)/str/str.h scheduler.$(OBJEXT): $(hdrdir)/ruby/ruby.h scheduler.$(OBJEXT): $(top_srcdir)/internal/array.h scheduler.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +scheduler.$(OBJEXT): $(top_srcdir)/internal/box.h scheduler.$(OBJEXT): $(top_srcdir)/internal/compilers.h scheduler.$(OBJEXT): $(top_srcdir)/internal/gc.h scheduler.$(OBJEXT): $(top_srcdir)/internal/imemo.h -scheduler.$(OBJEXT): $(top_srcdir)/internal/namespace.h scheduler.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h scheduler.$(OBJEXT): $(top_srcdir)/internal/serial.h scheduler.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -15242,12 +15242,12 @@ set.$(OBJEXT): $(hdrdir)/ruby/ruby.h set.$(OBJEXT): $(top_srcdir)/internal/array.h set.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h set.$(OBJEXT): $(top_srcdir)/internal/bits.h +set.$(OBJEXT): $(top_srcdir)/internal/box.h set.$(OBJEXT): $(top_srcdir)/internal/compilers.h set.$(OBJEXT): $(top_srcdir)/internal/error.h set.$(OBJEXT): $(top_srcdir)/internal/gc.h set.$(OBJEXT): $(top_srcdir)/internal/hash.h set.$(OBJEXT): $(top_srcdir)/internal/imemo.h -set.$(OBJEXT): $(top_srcdir)/internal/namespace.h set.$(OBJEXT): $(top_srcdir)/internal/proc.h set.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h set.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -15612,12 +15612,12 @@ shape.$(OBJEXT): $(hdrdir)/ruby/ruby.h shape.$(OBJEXT): $(hdrdir)/ruby/version.h shape.$(OBJEXT): $(top_srcdir)/internal/array.h shape.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +shape.$(OBJEXT): $(top_srcdir)/internal/box.h shape.$(OBJEXT): $(top_srcdir)/internal/class.h shape.$(OBJEXT): $(top_srcdir)/internal/compilers.h shape.$(OBJEXT): $(top_srcdir)/internal/error.h shape.$(OBJEXT): $(top_srcdir)/internal/gc.h shape.$(OBJEXT): $(top_srcdir)/internal/imemo.h -shape.$(OBJEXT): $(top_srcdir)/internal/namespace.h shape.$(OBJEXT): $(top_srcdir)/internal/object.h shape.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h shape.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -15827,12 +15827,12 @@ signal.$(OBJEXT): $(hdrdir)/ruby/ruby.h signal.$(OBJEXT): $(hdrdir)/ruby/version.h signal.$(OBJEXT): $(top_srcdir)/internal/array.h signal.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +signal.$(OBJEXT): $(top_srcdir)/internal/box.h signal.$(OBJEXT): $(top_srcdir)/internal/compilers.h signal.$(OBJEXT): $(top_srcdir)/internal/error.h signal.$(OBJEXT): $(top_srcdir)/internal/eval.h signal.$(OBJEXT): $(top_srcdir)/internal/gc.h signal.$(OBJEXT): $(top_srcdir)/internal/imemo.h -signal.$(OBJEXT): $(top_srcdir)/internal/namespace.h signal.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h signal.$(OBJEXT): $(top_srcdir)/internal/serial.h signal.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -16594,6 +16594,7 @@ string.$(OBJEXT): $(top_srcdir)/internal/array.h string.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h string.$(OBJEXT): $(top_srcdir)/internal/bignum.h string.$(OBJEXT): $(top_srcdir)/internal/bits.h +string.$(OBJEXT): $(top_srcdir)/internal/box.h string.$(OBJEXT): $(top_srcdir)/internal/class.h string.$(OBJEXT): $(top_srcdir)/internal/compar.h string.$(OBJEXT): $(top_srcdir)/internal/compilers.h @@ -16604,7 +16605,6 @@ string.$(OBJEXT): $(top_srcdir)/internal/fixnum.h string.$(OBJEXT): $(top_srcdir)/internal/gc.h string.$(OBJEXT): $(top_srcdir)/internal/hash.h string.$(OBJEXT): $(top_srcdir)/internal/imemo.h -string.$(OBJEXT): $(top_srcdir)/internal/namespace.h string.$(OBJEXT): $(top_srcdir)/internal/numeric.h string.$(OBJEXT): $(top_srcdir)/internal/object.h string.$(OBJEXT): $(top_srcdir)/internal/proc.h @@ -16856,13 +16856,13 @@ struct.$(OBJEXT): $(hdrdir)/ruby/ruby.h struct.$(OBJEXT): $(hdrdir)/ruby/version.h struct.$(OBJEXT): $(top_srcdir)/internal/array.h struct.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +struct.$(OBJEXT): $(top_srcdir)/internal/box.h struct.$(OBJEXT): $(top_srcdir)/internal/class.h struct.$(OBJEXT): $(top_srcdir)/internal/compilers.h struct.$(OBJEXT): $(top_srcdir)/internal/error.h struct.$(OBJEXT): $(top_srcdir)/internal/gc.h struct.$(OBJEXT): $(top_srcdir)/internal/hash.h struct.$(OBJEXT): $(top_srcdir)/internal/imemo.h -struct.$(OBJEXT): $(top_srcdir)/internal/namespace.h struct.$(OBJEXT): $(top_srcdir)/internal/object.h struct.$(OBJEXT): $(top_srcdir)/internal/proc.h struct.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -17072,6 +17072,7 @@ symbol.$(OBJEXT): $(hdrdir)/ruby/ruby.h symbol.$(OBJEXT): $(hdrdir)/ruby/version.h symbol.$(OBJEXT): $(top_srcdir)/internal/array.h symbol.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +symbol.$(OBJEXT): $(top_srcdir)/internal/box.h symbol.$(OBJEXT): $(top_srcdir)/internal/class.h symbol.$(OBJEXT): $(top_srcdir)/internal/compilers.h symbol.$(OBJEXT): $(top_srcdir)/internal/concurrent_set.h @@ -17079,7 +17080,6 @@ symbol.$(OBJEXT): $(top_srcdir)/internal/error.h symbol.$(OBJEXT): $(top_srcdir)/internal/gc.h symbol.$(OBJEXT): $(top_srcdir)/internal/hash.h symbol.$(OBJEXT): $(top_srcdir)/internal/imemo.h -symbol.$(OBJEXT): $(top_srcdir)/internal/namespace.h symbol.$(OBJEXT): $(top_srcdir)/internal/object.h symbol.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h symbol.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -17298,6 +17298,7 @@ thread.$(OBJEXT): $(hdrdir)/ruby/version.h thread.$(OBJEXT): $(top_srcdir)/internal/array.h thread.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h thread.$(OBJEXT): $(top_srcdir)/internal/bits.h +thread.$(OBJEXT): $(top_srcdir)/internal/box.h thread.$(OBJEXT): $(top_srcdir)/internal/class.h thread.$(OBJEXT): $(top_srcdir)/internal/compilers.h thread.$(OBJEXT): $(top_srcdir)/internal/cont.h @@ -17307,7 +17308,6 @@ thread.$(OBJEXT): $(top_srcdir)/internal/gc.h thread.$(OBJEXT): $(top_srcdir)/internal/hash.h thread.$(OBJEXT): $(top_srcdir)/internal/imemo.h thread.$(OBJEXT): $(top_srcdir)/internal/io.h -thread.$(OBJEXT): $(top_srcdir)/internal/namespace.h thread.$(OBJEXT): $(top_srcdir)/internal/object.h thread.$(OBJEXT): $(top_srcdir)/internal/proc.h thread.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -17558,13 +17558,13 @@ time.$(OBJEXT): $(top_srcdir)/internal/array.h time.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h time.$(OBJEXT): $(top_srcdir)/internal/bignum.h time.$(OBJEXT): $(top_srcdir)/internal/bits.h +time.$(OBJEXT): $(top_srcdir)/internal/box.h time.$(OBJEXT): $(top_srcdir)/internal/compar.h time.$(OBJEXT): $(top_srcdir)/internal/compilers.h time.$(OBJEXT): $(top_srcdir)/internal/fixnum.h time.$(OBJEXT): $(top_srcdir)/internal/gc.h time.$(OBJEXT): $(top_srcdir)/internal/hash.h time.$(OBJEXT): $(top_srcdir)/internal/imemo.h -time.$(OBJEXT): $(top_srcdir)/internal/namespace.h time.$(OBJEXT): $(top_srcdir)/internal/numeric.h time.$(OBJEXT): $(top_srcdir)/internal/rational.h time.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -18138,6 +18138,7 @@ variable.$(OBJEXT): $(hdrdir)/ruby/ruby.h variable.$(OBJEXT): $(hdrdir)/ruby/version.h variable.$(OBJEXT): $(top_srcdir)/internal/array.h variable.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +variable.$(OBJEXT): $(top_srcdir)/internal/box.h variable.$(OBJEXT): $(top_srcdir)/internal/class.h variable.$(OBJEXT): $(top_srcdir)/internal/compilers.h variable.$(OBJEXT): $(top_srcdir)/internal/error.h @@ -18145,7 +18146,6 @@ variable.$(OBJEXT): $(top_srcdir)/internal/eval.h variable.$(OBJEXT): $(top_srcdir)/internal/gc.h variable.$(OBJEXT): $(top_srcdir)/internal/hash.h variable.$(OBJEXT): $(top_srcdir)/internal/imemo.h -variable.$(OBJEXT): $(top_srcdir)/internal/namespace.h variable.$(OBJEXT): $(top_srcdir)/internal/object.h variable.$(OBJEXT): $(top_srcdir)/internal/re.h variable.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -18361,11 +18361,11 @@ version.$(OBJEXT): $(hdrdir)/ruby/ruby.h version.$(OBJEXT): $(hdrdir)/ruby/version.h version.$(OBJEXT): $(top_srcdir)/internal/array.h version.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +version.$(OBJEXT): $(top_srcdir)/internal/box.h version.$(OBJEXT): $(top_srcdir)/internal/cmdlineopt.h version.$(OBJEXT): $(top_srcdir)/internal/compilers.h version.$(OBJEXT): $(top_srcdir)/internal/gc.h version.$(OBJEXT): $(top_srcdir)/internal/imemo.h -version.$(OBJEXT): $(top_srcdir)/internal/namespace.h version.$(OBJEXT): $(top_srcdir)/internal/parse.h version.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h version.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -18574,6 +18574,7 @@ vm.$(OBJEXT): $(top_srcdir)/internal/array.h vm.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h vm.$(OBJEXT): $(top_srcdir)/internal/bignum.h vm.$(OBJEXT): $(top_srcdir)/internal/bits.h +vm.$(OBJEXT): $(top_srcdir)/internal/box.h vm.$(OBJEXT): $(top_srcdir)/internal/class.h vm.$(OBJEXT): $(top_srcdir)/internal/compar.h vm.$(OBJEXT): $(top_srcdir)/internal/compile.h @@ -18589,7 +18590,6 @@ vm.$(OBJEXT): $(top_srcdir)/internal/hash.h vm.$(OBJEXT): $(top_srcdir)/internal/imemo.h vm.$(OBJEXT): $(top_srcdir)/internal/inits.h vm.$(OBJEXT): $(top_srcdir)/internal/missing.h -vm.$(OBJEXT): $(top_srcdir)/internal/namespace.h vm.$(OBJEXT): $(top_srcdir)/internal/numeric.h vm.$(OBJEXT): $(top_srcdir)/internal/object.h vm.$(OBJEXT): $(top_srcdir)/internal/parse.h @@ -18860,12 +18860,12 @@ vm_backtrace.$(OBJEXT): $(hdrdir)/ruby/ruby.h vm_backtrace.$(OBJEXT): $(hdrdir)/ruby/version.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/array.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/box.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/class.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/compilers.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/error.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/gc.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/imemo.h -vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/namespace.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/serial.h vm_backtrace.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -19096,10 +19096,10 @@ vm_dump.$(OBJEXT): $(CCAN_DIR)/str/str.h vm_dump.$(OBJEXT): $(hdrdir)/ruby/ruby.h vm_dump.$(OBJEXT): $(top_srcdir)/internal/array.h vm_dump.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +vm_dump.$(OBJEXT): $(top_srcdir)/internal/box.h vm_dump.$(OBJEXT): $(top_srcdir)/internal/compilers.h vm_dump.$(OBJEXT): $(top_srcdir)/internal/gc.h vm_dump.$(OBJEXT): $(top_srcdir)/internal/imemo.h -vm_dump.$(OBJEXT): $(top_srcdir)/internal/namespace.h vm_dump.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h vm_dump.$(OBJEXT): $(top_srcdir)/internal/serial.h vm_dump.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -19330,10 +19330,10 @@ vm_sync.$(OBJEXT): $(CCAN_DIR)/str/str.h vm_sync.$(OBJEXT): $(hdrdir)/ruby/ruby.h vm_sync.$(OBJEXT): $(top_srcdir)/internal/array.h vm_sync.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +vm_sync.$(OBJEXT): $(top_srcdir)/internal/box.h vm_sync.$(OBJEXT): $(top_srcdir)/internal/compilers.h vm_sync.$(OBJEXT): $(top_srcdir)/internal/gc.h vm_sync.$(OBJEXT): $(top_srcdir)/internal/imemo.h -vm_sync.$(OBJEXT): $(top_srcdir)/internal/namespace.h vm_sync.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h vm_sync.$(OBJEXT): $(top_srcdir)/internal/serial.h vm_sync.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -19541,12 +19541,12 @@ vm_trace.$(OBJEXT): $(hdrdir)/ruby/ruby.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/array.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/bits.h +vm_trace.$(OBJEXT): $(top_srcdir)/internal/box.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/class.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/compilers.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/gc.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/hash.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/imemo.h -vm_trace.$(OBJEXT): $(top_srcdir)/internal/namespace.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/serial.h vm_trace.$(OBJEXT): $(top_srcdir)/internal/set_table.h @@ -19783,11 +19783,11 @@ weakmap.$(OBJEXT): $(CCAN_DIR)/str/str.h weakmap.$(OBJEXT): $(hdrdir)/ruby/ruby.h weakmap.$(OBJEXT): $(top_srcdir)/internal/array.h weakmap.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h +weakmap.$(OBJEXT): $(top_srcdir)/internal/box.h weakmap.$(OBJEXT): $(top_srcdir)/internal/compilers.h weakmap.$(OBJEXT): $(top_srcdir)/internal/gc.h weakmap.$(OBJEXT): $(top_srcdir)/internal/hash.h weakmap.$(OBJEXT): $(top_srcdir)/internal/imemo.h -weakmap.$(OBJEXT): $(top_srcdir)/internal/namespace.h weakmap.$(OBJEXT): $(top_srcdir)/internal/proc.h weakmap.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h weakmap.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -19987,6 +19987,7 @@ yjit.$(OBJEXT): $(top_srcdir)/internal/array.h yjit.$(OBJEXT): $(top_srcdir)/internal/basic_operators.h yjit.$(OBJEXT): $(top_srcdir)/internal/bignum.h yjit.$(OBJEXT): $(top_srcdir)/internal/bits.h +yjit.$(OBJEXT): $(top_srcdir)/internal/box.h yjit.$(OBJEXT): $(top_srcdir)/internal/class.h yjit.$(OBJEXT): $(top_srcdir)/internal/compile.h yjit.$(OBJEXT): $(top_srcdir)/internal/compilers.h @@ -19995,7 +19996,6 @@ yjit.$(OBJEXT): $(top_srcdir)/internal/fixnum.h yjit.$(OBJEXT): $(top_srcdir)/internal/gc.h yjit.$(OBJEXT): $(top_srcdir)/internal/hash.h yjit.$(OBJEXT): $(top_srcdir)/internal/imemo.h -yjit.$(OBJEXT): $(top_srcdir)/internal/namespace.h yjit.$(OBJEXT): $(top_srcdir)/internal/numeric.h yjit.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h yjit.$(OBJEXT): $(top_srcdir)/internal/serial.h diff --git a/dln.c b/dln.c index 5f6b1f0564c7b6..6bc4ef199e8479 100644 --- a/dln.c +++ b/dln.c @@ -25,8 +25,8 @@ static void dln_loaderror(const char *format, ...); #endif #include "dln.h" #include "internal.h" +#include "internal/box.h" #include "internal/compilers.h" -#include "internal/namespace.h" #ifdef HAVE_STDLIB_H # include diff --git a/ext/coverage/depend b/ext/coverage/depend index e042bac7c4dc8b..fb7f9a95af8e93 100644 --- a/ext/coverage/depend +++ b/ext/coverage/depend @@ -183,11 +183,11 @@ coverage.o: $(top_srcdir)/id_table.h coverage.o: $(top_srcdir)/internal.h coverage.o: $(top_srcdir)/internal/array.h coverage.o: $(top_srcdir)/internal/basic_operators.h +coverage.o: $(top_srcdir)/internal/box.h coverage.o: $(top_srcdir)/internal/compilers.h coverage.o: $(top_srcdir)/internal/gc.h coverage.o: $(top_srcdir)/internal/hash.h coverage.o: $(top_srcdir)/internal/imemo.h -coverage.o: $(top_srcdir)/internal/namespace.h coverage.o: $(top_srcdir)/internal/sanitizers.h coverage.o: $(top_srcdir)/internal/serial.h coverage.o: $(top_srcdir)/internal/set_table.h diff --git a/ext/objspace/depend b/ext/objspace/depend index 3c11511575ff52..bc1565aa49c367 100644 --- a/ext/objspace/depend +++ b/ext/objspace/depend @@ -182,10 +182,10 @@ object_tracing.o: $(top_srcdir)/id_table.h object_tracing.o: $(top_srcdir)/internal.h object_tracing.o: $(top_srcdir)/internal/array.h object_tracing.o: $(top_srcdir)/internal/basic_operators.h +object_tracing.o: $(top_srcdir)/internal/box.h object_tracing.o: $(top_srcdir)/internal/compilers.h object_tracing.o: $(top_srcdir)/internal/gc.h object_tracing.o: $(top_srcdir)/internal/imemo.h -object_tracing.o: $(top_srcdir)/internal/namespace.h object_tracing.o: $(top_srcdir)/internal/sanitizers.h object_tracing.o: $(top_srcdir)/internal/serial.h object_tracing.o: $(top_srcdir)/internal/set_table.h @@ -391,12 +391,12 @@ objspace.o: $(top_srcdir)/id_table.h objspace.o: $(top_srcdir)/internal.h objspace.o: $(top_srcdir)/internal/array.h objspace.o: $(top_srcdir)/internal/basic_operators.h +objspace.o: $(top_srcdir)/internal/box.h objspace.o: $(top_srcdir)/internal/class.h objspace.o: $(top_srcdir)/internal/compilers.h objspace.o: $(top_srcdir)/internal/gc.h objspace.o: $(top_srcdir)/internal/hash.h objspace.o: $(top_srcdir)/internal/imemo.h -objspace.o: $(top_srcdir)/internal/namespace.h objspace.o: $(top_srcdir)/internal/sanitizers.h objspace.o: $(top_srcdir)/internal/serial.h objspace.o: $(top_srcdir)/internal/set_table.h @@ -605,13 +605,13 @@ objspace_dump.o: $(top_srcdir)/id_table.h objspace_dump.o: $(top_srcdir)/internal.h objspace_dump.o: $(top_srcdir)/internal/array.h objspace_dump.o: $(top_srcdir)/internal/basic_operators.h +objspace_dump.o: $(top_srcdir)/internal/box.h objspace_dump.o: $(top_srcdir)/internal/class.h objspace_dump.o: $(top_srcdir)/internal/compilers.h objspace_dump.o: $(top_srcdir)/internal/gc.h objspace_dump.o: $(top_srcdir)/internal/hash.h objspace_dump.o: $(top_srcdir)/internal/imemo.h objspace_dump.o: $(top_srcdir)/internal/io.h -objspace_dump.o: $(top_srcdir)/internal/namespace.h objspace_dump.o: $(top_srcdir)/internal/sanitizers.h objspace_dump.o: $(top_srcdir)/internal/serial.h objspace_dump.o: $(top_srcdir)/internal/set_table.h diff --git a/ext/ripper/depend b/ext/ripper/depend index c8ba34962c6da2..0086708d23b0a6 100644 --- a/ext/ripper/depend +++ b/ext/ripper/depend @@ -584,6 +584,7 @@ ripper.o: $(top_srcdir)/internal/array.h ripper.o: $(top_srcdir)/internal/basic_operators.h ripper.o: $(top_srcdir)/internal/bignum.h ripper.o: $(top_srcdir)/internal/bits.h +ripper.o: $(top_srcdir)/internal/box.h ripper.o: $(top_srcdir)/internal/compile.h ripper.o: $(top_srcdir)/internal/compilers.h ripper.o: $(top_srcdir)/internal/complex.h @@ -594,7 +595,6 @@ ripper.o: $(top_srcdir)/internal/gc.h ripper.o: $(top_srcdir)/internal/hash.h ripper.o: $(top_srcdir)/internal/imemo.h ripper.o: $(top_srcdir)/internal/io.h -ripper.o: $(top_srcdir)/internal/namespace.h ripper.o: $(top_srcdir)/internal/numeric.h ripper.o: $(top_srcdir)/internal/parse.h ripper.o: $(top_srcdir)/internal/rational.h diff --git a/ext/socket/depend b/ext/socket/depend index 6f2d280bfd1d8f..3573dc45e2fa9f 100644 --- a/ext/socket/depend +++ b/ext/socket/depend @@ -197,12 +197,12 @@ ancdata.o: $(top_srcdir)/id_table.h ancdata.o: $(top_srcdir)/internal.h ancdata.o: $(top_srcdir)/internal/array.h ancdata.o: $(top_srcdir)/internal/basic_operators.h +ancdata.o: $(top_srcdir)/internal/box.h ancdata.o: $(top_srcdir)/internal/compilers.h ancdata.o: $(top_srcdir)/internal/error.h ancdata.o: $(top_srcdir)/internal/gc.h ancdata.o: $(top_srcdir)/internal/imemo.h ancdata.o: $(top_srcdir)/internal/io.h -ancdata.o: $(top_srcdir)/internal/namespace.h ancdata.o: $(top_srcdir)/internal/sanitizers.h ancdata.o: $(top_srcdir)/internal/serial.h ancdata.o: $(top_srcdir)/internal/set_table.h @@ -412,12 +412,12 @@ basicsocket.o: $(top_srcdir)/id_table.h basicsocket.o: $(top_srcdir)/internal.h basicsocket.o: $(top_srcdir)/internal/array.h basicsocket.o: $(top_srcdir)/internal/basic_operators.h +basicsocket.o: $(top_srcdir)/internal/box.h basicsocket.o: $(top_srcdir)/internal/compilers.h basicsocket.o: $(top_srcdir)/internal/error.h basicsocket.o: $(top_srcdir)/internal/gc.h basicsocket.o: $(top_srcdir)/internal/imemo.h basicsocket.o: $(top_srcdir)/internal/io.h -basicsocket.o: $(top_srcdir)/internal/namespace.h basicsocket.o: $(top_srcdir)/internal/sanitizers.h basicsocket.o: $(top_srcdir)/internal/serial.h basicsocket.o: $(top_srcdir)/internal/set_table.h @@ -627,12 +627,12 @@ constants.o: $(top_srcdir)/id_table.h constants.o: $(top_srcdir)/internal.h constants.o: $(top_srcdir)/internal/array.h constants.o: $(top_srcdir)/internal/basic_operators.h +constants.o: $(top_srcdir)/internal/box.h constants.o: $(top_srcdir)/internal/compilers.h constants.o: $(top_srcdir)/internal/error.h constants.o: $(top_srcdir)/internal/gc.h constants.o: $(top_srcdir)/internal/imemo.h constants.o: $(top_srcdir)/internal/io.h -constants.o: $(top_srcdir)/internal/namespace.h constants.o: $(top_srcdir)/internal/sanitizers.h constants.o: $(top_srcdir)/internal/serial.h constants.o: $(top_srcdir)/internal/set_table.h @@ -843,12 +843,12 @@ ifaddr.o: $(top_srcdir)/id_table.h ifaddr.o: $(top_srcdir)/internal.h ifaddr.o: $(top_srcdir)/internal/array.h ifaddr.o: $(top_srcdir)/internal/basic_operators.h +ifaddr.o: $(top_srcdir)/internal/box.h ifaddr.o: $(top_srcdir)/internal/compilers.h ifaddr.o: $(top_srcdir)/internal/error.h ifaddr.o: $(top_srcdir)/internal/gc.h ifaddr.o: $(top_srcdir)/internal/imemo.h ifaddr.o: $(top_srcdir)/internal/io.h -ifaddr.o: $(top_srcdir)/internal/namespace.h ifaddr.o: $(top_srcdir)/internal/sanitizers.h ifaddr.o: $(top_srcdir)/internal/serial.h ifaddr.o: $(top_srcdir)/internal/set_table.h @@ -1058,12 +1058,12 @@ init.o: $(top_srcdir)/id_table.h init.o: $(top_srcdir)/internal.h init.o: $(top_srcdir)/internal/array.h init.o: $(top_srcdir)/internal/basic_operators.h +init.o: $(top_srcdir)/internal/box.h init.o: $(top_srcdir)/internal/compilers.h init.o: $(top_srcdir)/internal/error.h init.o: $(top_srcdir)/internal/gc.h init.o: $(top_srcdir)/internal/imemo.h init.o: $(top_srcdir)/internal/io.h -init.o: $(top_srcdir)/internal/namespace.h init.o: $(top_srcdir)/internal/sanitizers.h init.o: $(top_srcdir)/internal/serial.h init.o: $(top_srcdir)/internal/set_table.h @@ -1273,12 +1273,12 @@ ipsocket.o: $(top_srcdir)/id_table.h ipsocket.o: $(top_srcdir)/internal.h ipsocket.o: $(top_srcdir)/internal/array.h ipsocket.o: $(top_srcdir)/internal/basic_operators.h +ipsocket.o: $(top_srcdir)/internal/box.h ipsocket.o: $(top_srcdir)/internal/compilers.h ipsocket.o: $(top_srcdir)/internal/error.h ipsocket.o: $(top_srcdir)/internal/gc.h ipsocket.o: $(top_srcdir)/internal/imemo.h ipsocket.o: $(top_srcdir)/internal/io.h -ipsocket.o: $(top_srcdir)/internal/namespace.h ipsocket.o: $(top_srcdir)/internal/sanitizers.h ipsocket.o: $(top_srcdir)/internal/serial.h ipsocket.o: $(top_srcdir)/internal/set_table.h @@ -1488,12 +1488,12 @@ option.o: $(top_srcdir)/id_table.h option.o: $(top_srcdir)/internal.h option.o: $(top_srcdir)/internal/array.h option.o: $(top_srcdir)/internal/basic_operators.h +option.o: $(top_srcdir)/internal/box.h option.o: $(top_srcdir)/internal/compilers.h option.o: $(top_srcdir)/internal/error.h option.o: $(top_srcdir)/internal/gc.h option.o: $(top_srcdir)/internal/imemo.h option.o: $(top_srcdir)/internal/io.h -option.o: $(top_srcdir)/internal/namespace.h option.o: $(top_srcdir)/internal/sanitizers.h option.o: $(top_srcdir)/internal/serial.h option.o: $(top_srcdir)/internal/set_table.h @@ -1703,12 +1703,12 @@ raddrinfo.o: $(top_srcdir)/id_table.h raddrinfo.o: $(top_srcdir)/internal.h raddrinfo.o: $(top_srcdir)/internal/array.h raddrinfo.o: $(top_srcdir)/internal/basic_operators.h +raddrinfo.o: $(top_srcdir)/internal/box.h raddrinfo.o: $(top_srcdir)/internal/compilers.h raddrinfo.o: $(top_srcdir)/internal/error.h raddrinfo.o: $(top_srcdir)/internal/gc.h raddrinfo.o: $(top_srcdir)/internal/imemo.h raddrinfo.o: $(top_srcdir)/internal/io.h -raddrinfo.o: $(top_srcdir)/internal/namespace.h raddrinfo.o: $(top_srcdir)/internal/sanitizers.h raddrinfo.o: $(top_srcdir)/internal/serial.h raddrinfo.o: $(top_srcdir)/internal/set_table.h @@ -1918,12 +1918,12 @@ socket.o: $(top_srcdir)/id_table.h socket.o: $(top_srcdir)/internal.h socket.o: $(top_srcdir)/internal/array.h socket.o: $(top_srcdir)/internal/basic_operators.h +socket.o: $(top_srcdir)/internal/box.h socket.o: $(top_srcdir)/internal/compilers.h socket.o: $(top_srcdir)/internal/error.h socket.o: $(top_srcdir)/internal/gc.h socket.o: $(top_srcdir)/internal/imemo.h socket.o: $(top_srcdir)/internal/io.h -socket.o: $(top_srcdir)/internal/namespace.h socket.o: $(top_srcdir)/internal/sanitizers.h socket.o: $(top_srcdir)/internal/serial.h socket.o: $(top_srcdir)/internal/set_table.h @@ -2133,12 +2133,12 @@ sockssocket.o: $(top_srcdir)/id_table.h sockssocket.o: $(top_srcdir)/internal.h sockssocket.o: $(top_srcdir)/internal/array.h sockssocket.o: $(top_srcdir)/internal/basic_operators.h +sockssocket.o: $(top_srcdir)/internal/box.h sockssocket.o: $(top_srcdir)/internal/compilers.h sockssocket.o: $(top_srcdir)/internal/error.h sockssocket.o: $(top_srcdir)/internal/gc.h sockssocket.o: $(top_srcdir)/internal/imemo.h sockssocket.o: $(top_srcdir)/internal/io.h -sockssocket.o: $(top_srcdir)/internal/namespace.h sockssocket.o: $(top_srcdir)/internal/sanitizers.h sockssocket.o: $(top_srcdir)/internal/serial.h sockssocket.o: $(top_srcdir)/internal/set_table.h @@ -2348,12 +2348,12 @@ tcpserver.o: $(top_srcdir)/id_table.h tcpserver.o: $(top_srcdir)/internal.h tcpserver.o: $(top_srcdir)/internal/array.h tcpserver.o: $(top_srcdir)/internal/basic_operators.h +tcpserver.o: $(top_srcdir)/internal/box.h tcpserver.o: $(top_srcdir)/internal/compilers.h tcpserver.o: $(top_srcdir)/internal/error.h tcpserver.o: $(top_srcdir)/internal/gc.h tcpserver.o: $(top_srcdir)/internal/imemo.h tcpserver.o: $(top_srcdir)/internal/io.h -tcpserver.o: $(top_srcdir)/internal/namespace.h tcpserver.o: $(top_srcdir)/internal/sanitizers.h tcpserver.o: $(top_srcdir)/internal/serial.h tcpserver.o: $(top_srcdir)/internal/set_table.h @@ -2563,12 +2563,12 @@ tcpsocket.o: $(top_srcdir)/id_table.h tcpsocket.o: $(top_srcdir)/internal.h tcpsocket.o: $(top_srcdir)/internal/array.h tcpsocket.o: $(top_srcdir)/internal/basic_operators.h +tcpsocket.o: $(top_srcdir)/internal/box.h tcpsocket.o: $(top_srcdir)/internal/compilers.h tcpsocket.o: $(top_srcdir)/internal/error.h tcpsocket.o: $(top_srcdir)/internal/gc.h tcpsocket.o: $(top_srcdir)/internal/imemo.h tcpsocket.o: $(top_srcdir)/internal/io.h -tcpsocket.o: $(top_srcdir)/internal/namespace.h tcpsocket.o: $(top_srcdir)/internal/sanitizers.h tcpsocket.o: $(top_srcdir)/internal/serial.h tcpsocket.o: $(top_srcdir)/internal/set_table.h @@ -2778,12 +2778,12 @@ udpsocket.o: $(top_srcdir)/id_table.h udpsocket.o: $(top_srcdir)/internal.h udpsocket.o: $(top_srcdir)/internal/array.h udpsocket.o: $(top_srcdir)/internal/basic_operators.h +udpsocket.o: $(top_srcdir)/internal/box.h udpsocket.o: $(top_srcdir)/internal/compilers.h udpsocket.o: $(top_srcdir)/internal/error.h udpsocket.o: $(top_srcdir)/internal/gc.h udpsocket.o: $(top_srcdir)/internal/imemo.h udpsocket.o: $(top_srcdir)/internal/io.h -udpsocket.o: $(top_srcdir)/internal/namespace.h udpsocket.o: $(top_srcdir)/internal/sanitizers.h udpsocket.o: $(top_srcdir)/internal/serial.h udpsocket.o: $(top_srcdir)/internal/set_table.h @@ -2993,12 +2993,12 @@ unixserver.o: $(top_srcdir)/id_table.h unixserver.o: $(top_srcdir)/internal.h unixserver.o: $(top_srcdir)/internal/array.h unixserver.o: $(top_srcdir)/internal/basic_operators.h +unixserver.o: $(top_srcdir)/internal/box.h unixserver.o: $(top_srcdir)/internal/compilers.h unixserver.o: $(top_srcdir)/internal/error.h unixserver.o: $(top_srcdir)/internal/gc.h unixserver.o: $(top_srcdir)/internal/imemo.h unixserver.o: $(top_srcdir)/internal/io.h -unixserver.o: $(top_srcdir)/internal/namespace.h unixserver.o: $(top_srcdir)/internal/sanitizers.h unixserver.o: $(top_srcdir)/internal/serial.h unixserver.o: $(top_srcdir)/internal/set_table.h @@ -3208,12 +3208,12 @@ unixsocket.o: $(top_srcdir)/id_table.h unixsocket.o: $(top_srcdir)/internal.h unixsocket.o: $(top_srcdir)/internal/array.h unixsocket.o: $(top_srcdir)/internal/basic_operators.h +unixsocket.o: $(top_srcdir)/internal/box.h unixsocket.o: $(top_srcdir)/internal/compilers.h unixsocket.o: $(top_srcdir)/internal/error.h unixsocket.o: $(top_srcdir)/internal/gc.h unixsocket.o: $(top_srcdir)/internal/imemo.h unixsocket.o: $(top_srcdir)/internal/io.h -unixsocket.o: $(top_srcdir)/internal/namespace.h unixsocket.o: $(top_srcdir)/internal/sanitizers.h unixsocket.o: $(top_srcdir)/internal/serial.h unixsocket.o: $(top_srcdir)/internal/set_table.h diff --git a/internal/class.h b/internal/class.h index f182211705e1f5..19393eb7c3eeaf 100644 --- a/internal/class.h +++ b/internal/class.h @@ -10,7 +10,7 @@ */ #include "id.h" #include "id_table.h" /* for struct rb_id_table */ -#include "internal/namespace.h" /* for rb_current_namespace */ +#include "internal/box.h" /* for rb_current_namespace */ #include "internal/serial.h" /* for rb_serial_t */ #include "internal/static_assert.h" #include "internal/variable.h" /* for rb_class_ivar_set */ diff --git a/load.c b/load.c index d1d6969039b849..c38a5fbd321672 100644 --- a/load.c +++ b/load.c @@ -5,13 +5,13 @@ #include "dln.h" #include "eval_intern.h" #include "internal.h" +#include "internal/box.h" #include "internal/dir.h" #include "internal/error.h" #include "internal/eval.h" #include "internal/file.h" #include "internal/hash.h" #include "internal/load.h" -#include "internal/namespace.h" #include "internal/ruby_parser.h" #include "internal/thread.h" #include "internal/variable.h" diff --git a/variable.c b/variable.c index f6cfef7b0725e6..5a58f7ed6316d4 100644 --- a/variable.c +++ b/variable.c @@ -20,12 +20,12 @@ #include "id.h" #include "id_table.h" #include "internal.h" +#include "internal/box.h" #include "internal/class.h" #include "internal/compilers.h" #include "internal/error.h" #include "internal/eval.h" #include "internal/hash.h" -#include "internal/namespace.h" #include "internal/object.h" #include "internal/gc.h" #include "internal/re.h" diff --git a/vm.c b/vm.c index 5b706dc6c5e227..351951408d13e7 100644 --- a/vm.c +++ b/vm.c @@ -12,6 +12,7 @@ #include "eval_intern.h" #include "internal.h" +#include "internal/box.h" #include "internal/class.h" #include "internal/compile.h" #include "internal/cont.h" @@ -21,7 +22,6 @@ #include "internal/gc.h" #include "internal/inits.h" #include "internal/missing.h" -#include "internal/namespace.h" #include "internal/object.h" #include "internal/proc.h" #include "internal/re.h" @@ -98,7 +98,7 @@ rb_vm_search_cf_from_ep(const rb_execution_context_t *ec, const rb_control_frame } #if VM_CHECK_MODE > 0 -// ruby_namespace_crashed defined in internal/namespace.h +// ruby_namespace_crashed defined in internal/box.h #define VM_NAMESPACE_CRASHED() {ruby_namespace_crashed = true;} #define VM_NAMESPACE_ASSERT(expr, msg) \ if (!(expr)) { ruby_namespace_crashed = true; rb_bug(msg); } diff --git a/vm_core.h b/vm_core.h index ded0280387b834..599c7ada9fa9d1 100644 --- a/vm_core.h +++ b/vm_core.h @@ -118,7 +118,7 @@ extern int ruby_assert_critical_section_entered; #include "internal.h" #include "internal/array.h" #include "internal/basic_operators.h" -#include "internal/namespace.h" +#include "internal/box.h" #include "internal/sanitizers.h" #include "internal/serial.h" #include "internal/set_table.h" From d2a587c79156275f66035d60bcc69882be61a3e1 Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Wed, 5 Nov 2025 16:09:45 +0900 Subject: [PATCH 04/11] renaming internal data structures and functions from namespace to box --- box.c | 589 ++++++++++++++++++++++---------------------- builtin.c | 2 +- class.c | 212 ++++++++-------- dln.c | 2 +- eval.c | 4 +- eval_intern.h | 10 +- gc.c | 20 +- inits.c | 2 +- insns.def | 4 +- internal/box.h | 72 +++--- internal/class.h | 176 ++++++------- internal/inits.h | 10 +- internal/variable.h | 4 +- iseq.c | 2 +- load.c | 269 ++++++++++---------- method.h | 2 +- mini_builtin.c | 2 +- proc.c | 22 +- ruby.c | 24 +- shape.c | 2 +- shape.h | 4 +- variable.c | 80 +++--- vm.c | 166 ++++++------- vm_core.h | 30 +-- vm_dump.c | 76 +++--- vm_eval.c | 16 +- vm_method.c | 4 +- 27 files changed, 900 insertions(+), 906 deletions(-) diff --git a/box.c b/box.c index a9368ca7440d91..f1290f60aa228e 100644 --- a/box.c +++ b/box.c @@ -24,7 +24,7 @@ VALUE rb_cNamespace = 0; VALUE rb_cNamespaceEntry = 0; VALUE rb_mNamespaceLoader = 0; -static rb_namespace_t root_namespace_data = { +static rb_box_t root_box_data = { /* Initialize values lazily in Init_namespace() */ (VALUE)NULL, 0, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, @@ -32,12 +32,12 @@ static rb_namespace_t root_namespace_data = { false, false }; -static rb_namespace_t * root_namespace = &root_namespace_data; -static rb_namespace_t * main_namespace = 0; +static rb_box_t * root_box = &root_box_data; +static rb_box_t * main_box = 0; static char *tmp_dir; static bool tmp_dir_has_dirsep; -#define NAMESPACE_TMP_PREFIX "_ruby_ns_" +#define BOX_TMP_PREFIX "_ruby_box_" #ifndef MAXPATHLEN # define MAXPATHLEN 1024 @@ -49,156 +49,156 @@ static bool tmp_dir_has_dirsep; # define DIRSEP "/" #endif -bool ruby_namespace_enabled = false; // extern -bool ruby_namespace_init_done = false; // extern -bool ruby_namespace_crashed = false; // extern, changed only in vm.c +bool ruby_box_enabled = false; // extern +bool ruby_box_init_done = false; // extern +bool ruby_box_crashed = false; // extern, changed only in vm.c VALUE rb_resolve_feature_path(VALUE klass, VALUE fname); -static VALUE rb_namespace_inspect(VALUE obj); +static VALUE rb_box_inspect(VALUE obj); void -rb_namespace_init_done(void) +rb_box_init_done(void) { - ruby_namespace_init_done = true; + ruby_box_init_done = true; } -const rb_namespace_t * -rb_root_namespace(void) +const rb_box_t * +rb_root_box(void) { - return root_namespace; + return root_box; } -const rb_namespace_t * -rb_main_namespace(void) +const rb_box_t * +rb_main_box(void) { - return main_namespace; + return main_box; } -const rb_namespace_t * -rb_current_namespace(void) +const rb_box_t * +rb_current_box(void) { /* - * If RUBY_NAMESPACE is not set, the root namespace is the only available one. + * If RUBY_NAMESPACE is not set, the root box is the only available one. * - * Until the main_namespace is not initialized, the root namespace is - * the only valid namespace. + * Until the main_box is not initialized, the root box is + * the only valid box. * This early return is to avoid accessing EC before its setup. */ - if (!main_namespace) - return root_namespace; + if (!main_box) + return root_box; - return rb_vm_current_namespace(GET_EC()); + return rb_vm_current_box(GET_EC()); } -const rb_namespace_t * -rb_loading_namespace(void) +const rb_box_t * +rb_loading_box(void) { - if (!main_namespace) - return root_namespace; + if (!main_box) + return root_box; - return rb_vm_loading_namespace(GET_EC()); + return rb_vm_loading_box(GET_EC()); } -const rb_namespace_t * -rb_current_namespace_in_crash_report(void) +const rb_box_t * +rb_current_box_in_crash_report(void) { - if (ruby_namespace_crashed) + if (ruby_box_crashed) return NULL; - return rb_current_namespace(); + return rb_current_box(); } -static long namespace_id_counter = 0; +static long box_id_counter = 0; static long -namespace_generate_id(void) +box_generate_id(void) { long id; RB_VM_LOCKING() { - id = ++namespace_id_counter; + id = ++box_id_counter; } return id; } static VALUE -namespace_main_to_s(VALUE obj) +box_main_to_s(VALUE obj) { return rb_str_new2("main"); } static void -namespace_entry_initialize(rb_namespace_t *ns) +box_entry_initialize(rb_box_t *box) { - const rb_namespace_t *root = rb_root_namespace(); + const rb_box_t *root = rb_root_box(); // These will be updated immediately - ns->ns_object = 0; - ns->ns_id = 0; - - ns->top_self = rb_obj_alloc(rb_cObject); - rb_define_singleton_method(ns->top_self, "to_s", namespace_main_to_s, 0); - rb_define_alias(rb_singleton_class(ns->top_self), "inspect", "to_s"); - ns->load_path = rb_ary_dup(root->load_path); - ns->expanded_load_path = rb_ary_dup(root->expanded_load_path); - ns->load_path_snapshot = rb_ary_new(); - ns->load_path_check_cache = 0; - ns->loaded_features = rb_ary_dup(root->loaded_features); - ns->loaded_features_snapshot = rb_ary_new(); - ns->loaded_features_index = st_init_numtable(); - ns->loaded_features_realpaths = rb_hash_dup(root->loaded_features_realpaths); - ns->loaded_features_realpath_map = rb_hash_dup(root->loaded_features_realpath_map); - ns->loading_table = st_init_strtable(); - ns->ruby_dln_libmap = rb_hash_new_with_size(0); - ns->gvar_tbl = rb_hash_new_with_size(0); - - ns->is_user = true; - ns->is_optional = true; + box->box_object = 0; + box->box_id = 0; + + box->top_self = rb_obj_alloc(rb_cObject); + rb_define_singleton_method(box->top_self, "to_s", box_main_to_s, 0); + rb_define_alias(rb_singleton_class(box->top_self), "inspect", "to_s"); + box->load_path = rb_ary_dup(root->load_path); + box->expanded_load_path = rb_ary_dup(root->expanded_load_path); + box->load_path_snapshot = rb_ary_new(); + box->load_path_check_cache = 0; + box->loaded_features = rb_ary_dup(root->loaded_features); + box->loaded_features_snapshot = rb_ary_new(); + box->loaded_features_index = st_init_numtable(); + box->loaded_features_realpaths = rb_hash_dup(root->loaded_features_realpaths); + box->loaded_features_realpath_map = rb_hash_dup(root->loaded_features_realpath_map); + box->loading_table = st_init_strtable(); + box->ruby_dln_libmap = rb_hash_new_with_size(0); + box->gvar_tbl = rb_hash_new_with_size(0); + + box->is_user = true; + box->is_optional = true; } void -rb_namespace_gc_update_references(void *ptr) +rb_box_gc_update_references(void *ptr) { - rb_namespace_t *ns = (rb_namespace_t *)ptr; - if (!ns) return; - - if (ns->ns_object) - ns->ns_object = rb_gc_location(ns->ns_object); - if (ns->top_self) - ns->top_self = rb_gc_location(ns->top_self); - ns->load_path = rb_gc_location(ns->load_path); - ns->expanded_load_path = rb_gc_location(ns->expanded_load_path); - ns->load_path_snapshot = rb_gc_location(ns->load_path_snapshot); - if (ns->load_path_check_cache) { - ns->load_path_check_cache = rb_gc_location(ns->load_path_check_cache); + rb_box_t *box = (rb_box_t *)ptr; + if (!box) return; + + if (box->box_object) + box->box_object = rb_gc_location(box->box_object); + if (box->top_self) + box->top_self = rb_gc_location(box->top_self); + box->load_path = rb_gc_location(box->load_path); + box->expanded_load_path = rb_gc_location(box->expanded_load_path); + box->load_path_snapshot = rb_gc_location(box->load_path_snapshot); + if (box->load_path_check_cache) { + box->load_path_check_cache = rb_gc_location(box->load_path_check_cache); } - ns->loaded_features = rb_gc_location(ns->loaded_features); - ns->loaded_features_snapshot = rb_gc_location(ns->loaded_features_snapshot); - ns->loaded_features_realpaths = rb_gc_location(ns->loaded_features_realpaths); - ns->loaded_features_realpath_map = rb_gc_location(ns->loaded_features_realpath_map); - ns->ruby_dln_libmap = rb_gc_location(ns->ruby_dln_libmap); - ns->gvar_tbl = rb_gc_location(ns->gvar_tbl); + box->loaded_features = rb_gc_location(box->loaded_features); + box->loaded_features_snapshot = rb_gc_location(box->loaded_features_snapshot); + box->loaded_features_realpaths = rb_gc_location(box->loaded_features_realpaths); + box->loaded_features_realpath_map = rb_gc_location(box->loaded_features_realpath_map); + box->ruby_dln_libmap = rb_gc_location(box->ruby_dln_libmap); + box->gvar_tbl = rb_gc_location(box->gvar_tbl); } void -rb_namespace_entry_mark(void *ptr) +rb_box_entry_mark(void *ptr) { - const rb_namespace_t *ns = (rb_namespace_t *)ptr; - if (!ns) return; - - rb_gc_mark(ns->ns_object); - rb_gc_mark(ns->top_self); - rb_gc_mark(ns->load_path); - rb_gc_mark(ns->expanded_load_path); - rb_gc_mark(ns->load_path_snapshot); - rb_gc_mark(ns->load_path_check_cache); - rb_gc_mark(ns->loaded_features); - rb_gc_mark(ns->loaded_features_snapshot); - rb_gc_mark(ns->loaded_features_realpaths); - rb_gc_mark(ns->loaded_features_realpath_map); - if (ns->loading_table) { - rb_mark_tbl(ns->loading_table); + const rb_box_t *box = (rb_box_t *)ptr; + if (!box) return; + + rb_gc_mark(box->box_object); + rb_gc_mark(box->top_self); + rb_gc_mark(box->load_path); + rb_gc_mark(box->expanded_load_path); + rb_gc_mark(box->load_path_snapshot); + rb_gc_mark(box->load_path_check_cache); + rb_gc_mark(box->loaded_features); + rb_gc_mark(box->loaded_features_snapshot); + rb_gc_mark(box->loaded_features_realpaths); + rb_gc_mark(box->loaded_features_realpath_map); + if (box->loading_table) { + rb_mark_tbl(box->loading_table); } - rb_gc_mark(ns->ruby_dln_libmap); - rb_gc_mark(ns->gvar_tbl); + rb_gc_mark(box->ruby_dln_libmap); + rb_gc_mark(box->gvar_tbl); } static int @@ -218,186 +218,185 @@ free_loaded_feature_index_i(st_data_t key, st_data_t value, st_data_t arg) } static void -namespace_root_free(void *ptr) +box_root_free(void *ptr) { - rb_namespace_t *ns = (rb_namespace_t *)ptr; - if (ns->loading_table) { - st_foreach(ns->loading_table, free_loading_table_entry, 0); - st_free_table(ns->loading_table); - ns->loading_table = 0; + rb_box_t *box = (rb_box_t *)ptr; + if (box->loading_table) { + st_foreach(box->loading_table, free_loading_table_entry, 0); + st_free_table(box->loading_table); + box->loading_table = 0; } - if (ns->loaded_features_index) { - st_foreach(ns->loaded_features_index, free_loaded_feature_index_i, 0); - st_free_table(ns->loaded_features_index); + if (box->loaded_features_index) { + st_foreach(box->loaded_features_index, free_loaded_feature_index_i, 0); + st_free_table(box->loaded_features_index); } } static void -namespace_entry_free(void *ptr) +box_entry_free(void *ptr) { - namespace_root_free(ptr); + box_root_free(ptr); xfree(ptr); } static size_t -namespace_entry_memsize(const void *ptr) +box_entry_memsize(const void *ptr) { - const rb_namespace_t *ns = (const rb_namespace_t *)ptr; - return sizeof(rb_namespace_t) + \ - rb_st_memsize(ns->loaded_features_index) + \ - rb_st_memsize(ns->loading_table); + const rb_box_t *box = (const rb_box_t *)ptr; + return sizeof(rb_box_t) + \ + rb_st_memsize(box->loaded_features_index) + \ + rb_st_memsize(box->loading_table); } -const rb_data_type_t rb_namespace_data_type = { +const rb_data_type_t rb_box_data_type = { "Namespace::Entry", { - rb_namespace_entry_mark, - namespace_entry_free, - namespace_entry_memsize, - rb_namespace_gc_update_references, + rb_box_entry_mark, + box_entry_free, + box_entry_memsize, + rb_box_gc_update_references, }, 0, 0, RUBY_TYPED_FREE_IMMEDIATELY // TODO: enable RUBY_TYPED_WB_PROTECTED when inserting write barriers }; -const rb_data_type_t rb_root_namespace_data_type = { +const rb_data_type_t rb_root_box_data_type = { "Namespace::Root", { - rb_namespace_entry_mark, - namespace_root_free, - namespace_entry_memsize, - rb_namespace_gc_update_references, + rb_box_entry_mark, + box_root_free, + box_entry_memsize, + rb_box_gc_update_references, }, - &rb_namespace_data_type, 0, RUBY_TYPED_FREE_IMMEDIATELY // TODO: enable RUBY_TYPED_WB_PROTECTED when inserting write barriers + &rb_box_data_type, 0, RUBY_TYPED_FREE_IMMEDIATELY // TODO: enable RUBY_TYPED_WB_PROTECTED when inserting write barriers }; VALUE -rb_namespace_entry_alloc(VALUE klass) +rb_box_entry_alloc(VALUE klass) { - rb_namespace_t *entry; - VALUE obj = TypedData_Make_Struct(klass, rb_namespace_t, &rb_namespace_data_type, entry); - namespace_entry_initialize(entry); + rb_box_t *entry; + VALUE obj = TypedData_Make_Struct(klass, rb_box_t, &rb_box_data_type, entry); + box_entry_initialize(entry); return obj; } -static rb_namespace_t * -get_namespace_struct_internal(VALUE entry) +static rb_box_t * +get_box_struct_internal(VALUE entry) { - rb_namespace_t *sval; - TypedData_Get_Struct(entry, rb_namespace_t, &rb_namespace_data_type, sval); + rb_box_t *sval; + TypedData_Get_Struct(entry, rb_box_t, &rb_box_data_type, sval); return sval; } -rb_namespace_t * -rb_get_namespace_t(VALUE namespace) +rb_box_t * +rb_get_box_t(VALUE box) { VALUE entry; - ID id_namespace_entry; + ID id_box_entry; - VM_ASSERT(namespace); + VM_ASSERT(box); - if (NIL_P(namespace)) - return root_namespace; + if (NIL_P(box)) + return root_box; - VM_ASSERT(NAMESPACE_OBJ_P(namespace)); + VM_ASSERT(BOX_OBJ_P(box)); - CONST_ID(id_namespace_entry, "__namespace_entry__"); - entry = rb_attr_get(namespace, id_namespace_entry); - return get_namespace_struct_internal(entry); + CONST_ID(id_box_entry, "__box_entry__"); + entry = rb_attr_get(box, id_box_entry); + return get_box_struct_internal(entry); } VALUE -rb_get_namespace_object(rb_namespace_t *ns) +rb_get_box_object(rb_box_t *box) { - VM_ASSERT(ns && ns->ns_object); - return ns->ns_object; + VM_ASSERT(box && box->box_object); + return box->box_object; } /* * call-seq: - * Namespace.new -> new_namespace + * Namespace.new -> new_box * - * Returns a new Namespace object. + * Returns a new Ruby::Box object. */ static VALUE -namespace_initialize(VALUE namespace) +box_initialize(VALUE box_value) { - rb_namespace_t *ns; + rb_box_t *box; rb_classext_t *object_classext; VALUE entry; - ID id_namespace_entry; - CONST_ID(id_namespace_entry, "__namespace_entry__"); + ID id_box_entry; + CONST_ID(id_box_entry, "__box_entry__"); - if (!rb_namespace_available()) { + if (!rb_box_available()) { rb_raise(rb_eRuntimeError, "Namespace is disabled. Set RUBY_NAMESPACE=1 environment variable to use Namespace."); } entry = rb_class_new_instance_pass_kw(0, NULL, rb_cNamespaceEntry); - ns = get_namespace_struct_internal(entry); + box = get_box_struct_internal(entry); - ns->ns_object = namespace; - ns->ns_id = namespace_generate_id(); - rb_define_singleton_method(ns->load_path, "resolve_feature_path", rb_resolve_feature_path, 1); + box->box_object = box_value; + box->box_id = box_generate_id(); + rb_define_singleton_method(box->load_path, "resolve_feature_path", rb_resolve_feature_path, 1); - // Set the Namespace object unique/consistent from any namespaces to have just single - // constant table from any view of every (including main) namespace. - // If a code in the namespace adds a constant, the constant will be visible even from root/main. - RCLASS_SET_PRIME_CLASSEXT_WRITABLE(namespace, true); + // Set the Ruby::Box object unique/consistent from any boxes to have just single + // constant table from any view of every (including main) box. + // If a code in the box adds a constant, the constant will be visible even from root/main. + RCLASS_SET_PRIME_CLASSEXT_WRITABLE(box_value, true); // Get a clean constant table of Object even by writable one // because ns was just created, so it has not touched any constants yet. - object_classext = RCLASS_EXT_WRITABLE_IN_NS(rb_cObject, ns); - RCLASS_SET_CONST_TBL(namespace, RCLASSEXT_CONST_TBL(object_classext), true); + object_classext = RCLASS_EXT_WRITABLE_IN_BOX(rb_cObject, box); + RCLASS_SET_CONST_TBL(box_value, RCLASSEXT_CONST_TBL(object_classext), true); - rb_ivar_set(namespace, id_namespace_entry, entry); + rb_ivar_set(box_value, id_box_entry, entry); - return namespace; + return box_value; } /* * call-seq: * Namespace.enabled? -> true or false * - * Returns +true+ if namespace is enabled. + * Returns +true+ if Ruby::Box is enabled. */ static VALUE -rb_namespace_s_getenabled(VALUE recv) +rb_box_s_getenabled(VALUE recv) { - return RBOOL(rb_namespace_available()); + return RBOOL(rb_box_available()); } /* * call-seq: - * Namespace.current -> namespace, nil or false + * Namespace.current -> box, nil or false * - * Returns the current namespace. - * Returns +nil+ if it is the built-in namespace. - * Returns +false+ if namespace is not enabled. + * Returns the current box. + * Returns +nil+ if Ruby Box is not enabled. */ static VALUE -rb_namespace_s_current(VALUE recv) +rb_box_s_current(VALUE recv) { - const rb_namespace_t *ns; + const rb_box_t *box; - if (!rb_namespace_available()) + if (!rb_box_available()) return Qnil; - ns = rb_vm_current_namespace(GET_EC()); - VM_ASSERT(ns && ns->ns_object); - return ns->ns_object; + box = rb_vm_current_box(GET_EC()); + VM_ASSERT(box && box->box_object); + return box->box_object; } /* * call-seq: * load_path -> array * - * Returns namespace local load path. + * Returns box local load path. */ static VALUE -rb_namespace_load_path(VALUE namespace) +rb_box_load_path(VALUE box) { - VM_ASSERT(NAMESPACE_OBJ_P(namespace)); - return rb_get_namespace_t(namespace)->load_path; + VM_ASSERT(BOX_OBJ_P(box)); + return rb_get_box_t(box)->load_path; } #ifdef _WIN32 @@ -480,12 +479,12 @@ system_tmpdir(void) /* end of copy */ static int -sprint_ext_filename(char *str, size_t size, long namespace_id, const char *prefix, const char *basename) +sprint_ext_filename(char *str, size_t size, long box_id, const char *prefix, const char *basename) { if (tmp_dir_has_dirsep) { - return snprintf(str, size, "%s%sp%"PRI_PIDT_PREFIX"u_%ld_%s", tmp_dir, prefix, getpid(), namespace_id, basename); + return snprintf(str, size, "%s%sp%"PRI_PIDT_PREFIX"u_%ld_%s", tmp_dir, prefix, getpid(), box_id, basename); } - return snprintf(str, size, "%s%s%sp%"PRI_PIDT_PREFIX"u_%ld_%s", tmp_dir, DIRSEP, prefix, getpid(), namespace_id, basename); + return snprintf(str, size, "%s%s%sp%"PRI_PIDT_PREFIX"u_%ld_%s", tmp_dir, DIRSEP, prefix, getpid(), box_id, basename); } #ifdef _WIN32 @@ -661,19 +660,19 @@ escaped_basename(const char *path, const char *fname, char *rvalue, size_t rsize } VALUE -rb_namespace_local_extension(VALUE namespace, VALUE fname, VALUE path) +rb_box_local_extension(VALUE box_value, VALUE fname, VALUE path) { char ext_path[MAXPATHLEN], fname2[MAXPATHLEN], basename[MAXPATHLEN]; int copy_error, wrote; char *src_path = RSTRING_PTR(path), *fname_ptr = RSTRING_PTR(fname); - rb_namespace_t *ns = rb_get_namespace_t(namespace); + rb_box_t *box = rb_get_box_t(box_value); fname_without_suffix(fname_ptr, fname2, sizeof(fname2)); escaped_basename(src_path, fname2, basename, sizeof(basename)); - wrote = sprint_ext_filename(ext_path, sizeof(ext_path), ns->ns_id, NAMESPACE_TMP_PREFIX, basename); + wrote = sprint_ext_filename(ext_path, sizeof(ext_path), box->box_id, BOX_TMP_PREFIX, basename); if (wrote >= (int)sizeof(ext_path)) { - rb_bug("Extension file path in namespace was too long"); + rb_bug("Extension file path in the box was too long"); } copy_error = copy_ext_file(src_path, ext_path); if (copy_error) { @@ -683,7 +682,7 @@ rb_namespace_local_extension(VALUE namespace, VALUE fname, VALUE path) #else copy_ext_file_error(message, sizeof(message), copy_error, src_path, ext_path); #endif - rb_raise(rb_eLoadError, "can't prepare the extension file for namespaces (%s from %s): %s", ext_path, src_path, message); + rb_raise(rb_eLoadError, "can't prepare the extension file for Ruby Box (%s from %s): %s", ext_path, src_path, message); } // TODO: register the path to be clean-uped return rb_str_new_cstr(ext_path); @@ -694,40 +693,40 @@ rb_namespace_local_extension(VALUE namespace, VALUE fname, VALUE path) // And it requires calling dlclose before deleting it. static VALUE -rb_namespace_load(int argc, VALUE *argv, VALUE namespace) +rb_box_load(int argc, VALUE *argv, VALUE box) { VALUE fname, wrap; rb_scan_args(argc, argv, "11", &fname, &wrap); - rb_vm_frame_flag_set_ns_require(GET_EC()); + rb_vm_frame_flag_set_box_require(GET_EC()); VALUE args = rb_ary_new_from_args(2, fname, wrap); return rb_load_entrypoint(args); } static VALUE -rb_namespace_require(VALUE namespace, VALUE fname) +rb_box_require(VALUE box, VALUE fname) { - rb_vm_frame_flag_set_ns_require(GET_EC()); + rb_vm_frame_flag_set_box_require(GET_EC()); return rb_require_string(fname); } static VALUE -rb_namespace_require_relative(VALUE namespace, VALUE fname) +rb_box_require_relative(VALUE box, VALUE fname) { - rb_vm_frame_flag_set_ns_require(GET_EC()); + rb_vm_frame_flag_set_box_require(GET_EC()); return rb_require_relative_entrypoint(fname); } static void -initialize_root_namespace(void) +initialize_root_box(void) { - VALUE root_namespace, entry; - ID id_namespace_entry; + VALUE root_box, entry; + ID id_box_entry; rb_vm_t *vm = GET_VM(); - rb_namespace_t *root = (rb_namespace_t *)rb_root_namespace(); + rb_box_t *root = (rb_box_t *)rb_root_box(); root->load_path = rb_ary_new(); root->expanded_load_path = rb_ary_hidden_new(0); @@ -746,98 +745,98 @@ initialize_root_namespace(void) root->ruby_dln_libmap = rb_hash_new_with_size(0); root->gvar_tbl = rb_hash_new_with_size(0); - vm->root_namespace = root; + vm->root_box = root; - if (rb_namespace_available()) { - CONST_ID(id_namespace_entry, "__namespace_entry__"); + if (rb_box_available()) { + CONST_ID(id_box_entry, "__box_entry__"); - root_namespace = rb_obj_alloc(rb_cNamespace); - RCLASS_SET_PRIME_CLASSEXT_WRITABLE(root_namespace, true); - RCLASS_SET_CONST_TBL(root_namespace, RCLASSEXT_CONST_TBL(RCLASS_EXT_PRIME(rb_cObject)), true); + root_box = rb_obj_alloc(rb_cNamespace); + RCLASS_SET_PRIME_CLASSEXT_WRITABLE(root_box, true); + RCLASS_SET_CONST_TBL(root_box, RCLASSEXT_CONST_TBL(RCLASS_EXT_PRIME(rb_cObject)), true); - root->ns_id = namespace_generate_id(); - root->ns_object = root_namespace; + root->box_id = box_generate_id(); + root->box_object = root_box; - entry = TypedData_Wrap_Struct(rb_cNamespaceEntry, &rb_root_namespace_data_type, root); - rb_ivar_set(root_namespace, id_namespace_entry, entry); + entry = TypedData_Wrap_Struct(rb_cNamespaceEntry, &rb_root_box_data_type, root); + rb_ivar_set(root_box, id_box_entry, entry); } else { - root->ns_id = 1; - root->ns_object = Qnil; + root->box_id = 1; + root->box_object = Qnil; } } static VALUE -rb_namespace_eval(VALUE namespace, VALUE str) +rb_box_eval(VALUE box_value, VALUE str) { const rb_iseq_t *iseq; - const rb_namespace_t *ns; + const rb_box_t *box; StringValue(str); iseq = rb_iseq_compile_iseq(str, rb_str_new_cstr("eval")); VM_ASSERT(iseq); - ns = (const rb_namespace_t *)rb_get_namespace_t(namespace); + box = (const rb_box_t *)rb_get_box_t(box_value); - return rb_iseq_eval(iseq, ns); + return rb_iseq_eval(iseq, box); } -static int namespace_experimental_warned = 0; +static int box_experimental_warned = 0; void -rb_initialize_main_namespace(void) +rb_initialize_main_box(void) { - rb_namespace_t *ns; - VALUE main_ns; + rb_box_t *box; + VALUE main_box_value; rb_vm_t *vm = GET_VM(); - VM_ASSERT(rb_namespace_available()); + VM_ASSERT(rb_box_available()); - if (!namespace_experimental_warned) { + if (!box_experimental_warned) { rb_category_warn(RB_WARN_CATEGORY_EXPERIMENTAL, - "Namespace is experimental, and the behavior may change in the future!\n" - "See doc/namespace.md for known issues, etc."); - namespace_experimental_warned = 1; + "Ruby::Box is experimental, and the behavior may change in the future!\n" + "See doc/box.md for known issues, etc."); + box_experimental_warned = 1; } - main_ns = rb_class_new_instance(0, NULL, rb_cNamespace); - VM_ASSERT(NAMESPACE_OBJ_P(main_ns)); - ns = rb_get_namespace_t(main_ns); - ns->ns_object = main_ns; - ns->is_user = true; - ns->is_optional = false; + main_box_value = rb_class_new_instance(0, NULL, rb_cNamespace); + VM_ASSERT(BOX_OBJ_P(main_box_value)); + box = rb_get_box_t(main_box_value); + box->box_object = main_box_value; + box->is_user = true; + box->is_optional = false; - rb_const_set(rb_cNamespace, rb_intern("MAIN"), main_ns); + rb_const_set(rb_cNamespace, rb_intern("MAIN"), main_box_value); - vm->main_namespace = main_namespace = ns; + vm->main_box = main_box = box; // create the writable classext of ::Object explicitly to finalize the set of visible top-level constants - RCLASS_EXT_WRITABLE_IN_NS(rb_cObject, ns); + RCLASS_EXT_WRITABLE_IN_BOX(rb_cObject, box); } static VALUE -rb_namespace_inspect(VALUE obj) +rb_box_inspect(VALUE obj) { - rb_namespace_t *ns; + rb_box_t *box; VALUE r; if (obj == Qfalse) { r = rb_str_new_cstr("#"); return r; } - ns = rb_get_namespace_t(obj); + box = rb_get_box_t(obj); r = rb_str_new_cstr("#ns_id), rb_intern("to_s"), 0)); - if (NAMESPACE_ROOT_P(ns)) { + rb_str_concat(r, rb_funcall(LONG2NUM(box->box_id), rb_intern("to_s"), 0)); + if (BOX_ROOT_P(box)) { rb_str_cat_cstr(r, ",root"); } - if (NAMESPACE_USER_P(ns)) { + if (BOX_USER_P(box)) { rb_str_cat_cstr(r, ",user"); } - if (NAMESPACE_MAIN_P(ns)) { + if (BOX_MAIN_P(box)) { rb_str_cat_cstr(r, ",main"); } - else if (NAMESPACE_OPTIONAL_P(ns)) { + else if (BOX_OPTIONAL_P(box)) { rb_str_cat_cstr(r, ",optional"); } rb_str_cat_cstr(r, ">"); @@ -845,65 +844,65 @@ rb_namespace_inspect(VALUE obj) } static VALUE -rb_namespace_loading_func(int argc, VALUE *argv, VALUE _self) +rb_box_loading_func(int argc, VALUE *argv, VALUE _self) { - rb_vm_frame_flag_set_ns_require(GET_EC()); + rb_vm_frame_flag_set_box_require(GET_EC()); return rb_call_super(argc, argv); } static void -namespace_define_loader_method(const char *name) +box_define_loader_method(const char *name) { - rb_define_private_method(rb_mNamespaceLoader, name, rb_namespace_loading_func, -1); - rb_define_singleton_method(rb_mNamespaceLoader, name, rb_namespace_loading_func, -1); + rb_define_private_method(rb_mNamespaceLoader, name, rb_box_loading_func, -1); + rb_define_singleton_method(rb_mNamespaceLoader, name, rb_box_loading_func, -1); } void -Init_root_namespace(void) +Init_root_box(void) { - root_namespace->loading_table = st_init_strtable(); + root_box->loading_table = st_init_strtable(); } void -Init_enable_namespace(void) +Init_enable_box(void) { const char *env = getenv("RUBY_NAMESPACE"); if (env && strlen(env) == 1 && env[0] == '1') { - ruby_namespace_enabled = true; + ruby_box_enabled = true; } else { - ruby_namespace_init_done = true; + ruby_box_init_done = true; } } /* :nodoc: */ static VALUE -rb_namespace_s_root(VALUE recv) +rb_box_s_root(VALUE recv) { - return root_namespace->ns_object; + return root_box->box_object; } /* :nodoc: */ static VALUE -rb_namespace_s_main(VALUE recv) +rb_box_s_main(VALUE recv) { - return main_namespace->ns_object; + return main_box->box_object; } /* :nodoc: */ static VALUE -rb_namespace_root_p(VALUE namespace) +rb_box_root_p(VALUE box_value) { - const rb_namespace_t *ns = (const rb_namespace_t *)rb_get_namespace_t(namespace); - return RBOOL(NAMESPACE_ROOT_P(ns)); + const rb_box_t *box = (const rb_box_t *)rb_get_box_t(box_value); + return RBOOL(BOX_ROOT_P(box)); } /* :nodoc: */ static VALUE -rb_namespace_main_p(VALUE namespace) +rb_box_main_p(VALUE box_value) { - const rb_namespace_t *ns = (const rb_namespace_t *)rb_get_namespace_t(namespace); - return RBOOL(NAMESPACE_MAIN_P(ns)); + const rb_box_t *box = (const rb_box_t *)rb_get_box_t(box_value); + return RBOOL(BOX_MAIN_P(box)); } #if RUBY_DEBUG @@ -940,14 +939,14 @@ dump_classext_constants_i(ID mid, VALUE _val, void *data) } static void -dump_classext_i(rb_classext_t *ext, bool is_prime, VALUE _ns, void *data) +dump_classext_i(rb_classext_t *ext, bool is_prime, VALUE _recv, void *data) { char buf[4096]; struct rb_id_table *tbl; VALUE ary, res = (VALUE)data; - snprintf(buf, 4096, "Namespace %ld:%s classext %p\n", - RCLASSEXT_NS(ext)->ns_id, is_prime ? " prime" : "", (void *)ext); + snprintf(buf, 4096, "Ruby::Box %ld:%s classext %p\n", + RCLASSEXT_BOX(ext)->box_id, is_prime ? " prime" : "", (void *)ext); rb_str_cat_cstr(res, buf); snprintf(buf, 2048, " Super: %s\n", classname(RCLASSEXT_SUPER(ext))); @@ -989,13 +988,13 @@ rb_f_dump_classext(VALUE recv, VALUE klass) /* * The desired output String value is: * Class: 0x88800932 (String) [singleton] - * Prime classext namespace(2,main), readable(t), writable(f) + * Prime classext box(2,main), readable(t), writable(f) * Non-prime classexts: 3 - * Namespace 2: prime classext 0x88800933 + * Box 2: prime classext 0x88800933 * Super: Object * Methods(43): aaaaa, bbbb, cccc, dddd, eeeee, ffff, gggg, hhhhh, ... * Constants(12): FOO, Bar, ... - * Namespace 5: classext 0x88800934 + * Box 5: classext 0x88800934 * Super: Object * Methods(43): aaaaa, bbbb, cccc, dddd, eeeee, ffff, gggg, hhhhh, ... * Constants(12): FOO, Bar, ... @@ -1003,7 +1002,7 @@ rb_f_dump_classext(VALUE recv, VALUE klass) char buf[2048]; VALUE res; const rb_classext_t *ext; - const rb_namespace_t *ns; + const rb_box_t *box; st_table *classext_tbl; if (!(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE))) { @@ -1021,10 +1020,10 @@ rb_f_dump_classext(VALUE recv, VALUE klass) res = rb_str_new_cstr(buf); ext = RCLASS_EXT_PRIME(klass); - ns = RCLASSEXT_NS(ext); - snprintf(buf, 2048, "Prime classext namespace(%ld,%s), readable(%s), writable(%s)\n", - ns->ns_id, - NAMESPACE_ROOT_P(ns) ? "root" : (NAMESPACE_MAIN_P(ns) ? "main" : "optional"), + box = RCLASSEXT_BOX(ext); + snprintf(buf, 2048, "Prime classext box(%ld,%s), readable(%s), writable(%s)\n", + box->box_id, + BOX_ROOT_P(box) ? "root" : (BOX_MAIN_P(box) ? "main" : "optional"), RCLASS_PRIME_CLASSEXT_READABLE_P(klass) ? "t" : "f", RCLASS_PRIME_CLASSEXT_WRITABLE_P(klass) ? "t" : "f"); rb_str_cat_cstr(res, buf); @@ -1046,54 +1045,54 @@ rb_f_dump_classext(VALUE recv, VALUE klass) #endif /* RUBY_DEBUG */ /* - * Document-class: Namespace + * Document-class: Ruby::Box * - * Namespace is designed to provide separated spaces in a Ruby + * Ruby::Box is designed to provide separated spaces in a Ruby * process, to isolate applications and libraries. - * See {Namespace}[rdoc-ref:namespace.md]. + * See {Ruby::Box}[rdoc-ref:box.md]. */ void -Init_Namespace(void) +Init_Box(void) { tmp_dir = system_tmpdir(); tmp_dir_has_dirsep = (strcmp(tmp_dir + (strlen(tmp_dir) - strlen(DIRSEP)), DIRSEP) == 0); rb_cNamespace = rb_define_class("Namespace", rb_cModule); - rb_define_method(rb_cNamespace, "initialize", namespace_initialize, 0); + rb_define_method(rb_cNamespace, "initialize", box_initialize, 0); /* :nodoc: */ rb_cNamespaceEntry = rb_define_class_under(rb_cNamespace, "Entry", rb_cObject); - rb_define_alloc_func(rb_cNamespaceEntry, rb_namespace_entry_alloc); + rb_define_alloc_func(rb_cNamespaceEntry, rb_box_entry_alloc); - initialize_root_namespace(); + initialize_root_box(); /* :nodoc: */ rb_mNamespaceLoader = rb_define_module_under(rb_cNamespace, "Loader"); - namespace_define_loader_method("require"); - namespace_define_loader_method("require_relative"); - namespace_define_loader_method("load"); + box_define_loader_method("require"); + box_define_loader_method("require_relative"); + box_define_loader_method("load"); - if (rb_namespace_available()) { + if (rb_box_available()) { rb_include_module(rb_cObject, rb_mNamespaceLoader); - rb_define_singleton_method(rb_cNamespace, "root", rb_namespace_s_root, 0); - rb_define_singleton_method(rb_cNamespace, "main", rb_namespace_s_main, 0); - rb_define_method(rb_cNamespace, "root?", rb_namespace_root_p, 0); - rb_define_method(rb_cNamespace, "main?", rb_namespace_main_p, 0); + rb_define_singleton_method(rb_cNamespace, "root", rb_box_s_root, 0); + rb_define_singleton_method(rb_cNamespace, "main", rb_box_s_main, 0); + rb_define_method(rb_cNamespace, "root?", rb_box_root_p, 0); + rb_define_method(rb_cNamespace, "main?", rb_box_main_p, 0); #if RUBY_DEBUG rb_define_global_function("dump_classext", rb_f_dump_classext, 1); #endif } - rb_define_singleton_method(rb_cNamespace, "enabled?", rb_namespace_s_getenabled, 0); - rb_define_singleton_method(rb_cNamespace, "current", rb_namespace_s_current, 0); + rb_define_singleton_method(rb_cNamespace, "enabled?", rb_box_s_getenabled, 0); + rb_define_singleton_method(rb_cNamespace, "current", rb_box_s_current, 0); - rb_define_method(rb_cNamespace, "load_path", rb_namespace_load_path, 0); - rb_define_method(rb_cNamespace, "load", rb_namespace_load, -1); - rb_define_method(rb_cNamespace, "require", rb_namespace_require, 1); - rb_define_method(rb_cNamespace, "require_relative", rb_namespace_require_relative, 1); - rb_define_method(rb_cNamespace, "eval", rb_namespace_eval, 1); + rb_define_method(rb_cNamespace, "load_path", rb_box_load_path, 0); + rb_define_method(rb_cNamespace, "load", rb_box_load, -1); + rb_define_method(rb_cNamespace, "require", rb_box_require, 1); + rb_define_method(rb_cNamespace, "require_relative", rb_box_require_relative, 1); + rb_define_method(rb_cNamespace, "eval", rb_box_eval, 1); - rb_define_method(rb_cNamespace, "inspect", rb_namespace_inspect, 0); + rb_define_method(rb_cNamespace, "inspect", rb_box_inspect, 0); } diff --git a/builtin.c b/builtin.c index 657143a739f649..6cc9790466a9f1 100644 --- a/builtin.c +++ b/builtin.c @@ -51,7 +51,7 @@ load_with_builtin_functions(const char *feature_name, const struct rb_builtin_fu vm->builtin_function_table = NULL; // exec - rb_iseq_eval(rb_iseq_check(iseq), rb_root_namespace()); // builtin functions are loaded in the root namespace + rb_iseq_eval(rb_iseq_check(iseq), rb_root_box()); // builtin functions are loaded in the root box } void diff --git a/class.c b/class.c index 8c3c91cf7a92b4..16ebd3b88965ea 100644 --- a/class.c +++ b/class.c @@ -41,21 +41,21 @@ * 1: RUBY_FL_SINGLETON * This class is a singleton class. * 2: RCLASS_PRIME_CLASSEXT_PRIME_WRITABLE - * This class's prime classext is the only classext and writable from any namespaces. - * If unset, the prime classext is writable only from the root namespace. + * This class's prime classext is the only classext and writable from any boxes. + * If unset, the prime classext is writable only from the root box. * 3: RCLASS_IS_INITIALIZED * Class has been initialized. - * 4: RCLASS_NAMESPACEABLE - * Is a builtin class that may be namespaced. It larger than a normal class. + * 4: RCLASS_BOXABLE + * Is a builtin class that may be boxed. It larger than a normal class. */ /* Flags of T_ICLASS * * 2: RCLASS_PRIME_CLASSEXT_PRIME_WRITABLE - * This module's prime classext is the only classext and writable from any namespaces. - * If unset, the prime classext is writable only from the root namespace. - * 4: RCLASS_NAMESPACEABLE - * Is a builtin class that may be namespaced. It larger than a normal class. + * This module's prime classext is the only classext and writable from any boxes. + * If unset, the prime classext is writable only from the root box. + * 4: RCLASS_BOXABLE + * Is a builtin class that may be boxed. It larger than a normal class. */ /* Flags of T_MODULE @@ -66,12 +66,12 @@ * 1: * Ensures that RUBY_FL_SINGLETON is never set on a T_MODULE. See `rb_class_real`. * 2: RCLASS_PRIME_CLASSEXT_PRIME_WRITABLE - * This module's prime classext is the only classext and writable from any namespaces. - * If unset, the prime classext is writable only from the root namespace. + * This module's prime classext is the only classext and writable from any boxes. + * If unset, the prime classext is writable only from the root box. * 3: RCLASS_IS_INITIALIZED * Module has been initialized. - * 4: RCLASS_NAMESPACEABLE - * Is a builtin class that may be namespaced. It larger than a normal class. + * 4: RCLASS_BOXABLE + * Is a builtin class that may be boxed. It larger than a normal class. * 5: RMODULE_IS_REFINEMENT * Module is used for refinements. */ @@ -150,15 +150,15 @@ iclass_free_orphan_classext(VALUE klass, rb_classext_t *ext) xfree(ext); } -struct rb_class_set_namespace_classext_args { +struct rb_class_set_box_classext_args { VALUE obj; rb_classext_t *ext; }; static int -rb_class_set_namespace_classext_update(st_data_t *key_ptr, st_data_t *val_ptr, st_data_t a, int existing) +rb_class_set_box_classext_update(st_data_t *key_ptr, st_data_t *val_ptr, st_data_t a, int existing) { - struct rb_class_set_namespace_classext_args *args = (struct rb_class_set_namespace_classext_args *)a; + struct rb_class_set_box_classext_args *args = (struct rb_class_set_box_classext_args *)a; if (existing) { if (LIKELY(BUILTIN_TYPE(args->obj) == T_ICLASS)) { @@ -175,14 +175,14 @@ rb_class_set_namespace_classext_update(st_data_t *key_ptr, st_data_t *val_ptr, s } void -rb_class_set_namespace_classext(VALUE obj, const rb_namespace_t *ns, rb_classext_t *ext) +rb_class_set_box_classext(VALUE obj, const rb_box_t *box, rb_classext_t *ext) { - struct rb_class_set_namespace_classext_args args = { + struct rb_class_set_box_classext_args args = { .obj = obj, .ext = ext, }; - st_update(RCLASS_CLASSEXT_TBL(obj), (st_data_t)ns->ns_object, rb_class_set_namespace_classext_update, (st_data_t)&args); + st_update(RCLASS_CLASSEXT_TBL(obj), (st_data_t)box->box_object, rb_class_set_box_classext_update, (st_data_t)&args); } RUBY_EXTERN rb_serial_t ruby_vm_global_cvar_state; @@ -289,12 +289,12 @@ duplicate_classext_const_tbl(struct rb_id_table *src, VALUE klass) } static VALUE -namespace_subclasses_tbl_key(const rb_namespace_t *ns) +box_subclasses_tbl_key(const rb_box_t *box) { - if (!ns){ + if (!box){ return 0; } - return (VALUE)ns->ns_id; + return (VALUE)box->box_id; } static void @@ -302,16 +302,16 @@ duplicate_classext_subclasses(rb_classext_t *orig, rb_classext_t *copy) { rb_subclass_anchor_t *anchor, *orig_anchor; rb_subclass_entry_t *head, *cur, *cdr, *entry, *first = NULL; - rb_ns_subclasses_t *ns_subclasses; + rb_box_subclasses_t *box_subclasses; struct st_table *tbl; if (RCLASSEXT_SUBCLASSES(orig)) { orig_anchor = RCLASSEXT_SUBCLASSES(orig); - ns_subclasses = orig_anchor->ns_subclasses; - tbl = ((rb_ns_subclasses_t *)ns_subclasses)->tbl; + box_subclasses = orig_anchor->box_subclasses; + tbl = ((rb_box_subclasses_t *)box_subclasses)->tbl; anchor = ZALLOC(rb_subclass_anchor_t); - anchor->ns_subclasses = rb_ns_subclasses_ref_inc(ns_subclasses); + anchor->box_subclasses = rb_box_subclasses_ref_inc(box_subclasses); head = ZALLOC(rb_subclass_entry_t); anchor->head = head; @@ -333,28 +333,28 @@ duplicate_classext_subclasses(rb_classext_t *orig, rb_classext_t *copy) cdr->prev = cur; cur->next = cdr; if (!first) { - VALUE ns_id = namespace_subclasses_tbl_key(RCLASSEXT_NS(copy)); + VALUE box_id = box_subclasses_tbl_key(RCLASSEXT_BOX(copy)); first = cdr; - st_insert(tbl, ns_id, (st_data_t)first); + st_insert(tbl, box_id, (st_data_t)first); } cur = cdr; entry = entry->next; } } - if (RCLASSEXT_NS_SUPER_SUBCLASSES(orig)) - RCLASSEXT_NS_SUPER_SUBCLASSES(copy) = rb_ns_subclasses_ref_inc(RCLASSEXT_NS_SUPER_SUBCLASSES(orig)); - if (RCLASSEXT_NS_MODULE_SUBCLASSES(orig)) - RCLASSEXT_NS_MODULE_SUBCLASSES(copy) = rb_ns_subclasses_ref_inc(RCLASSEXT_NS_MODULE_SUBCLASSES(orig)); + if (RCLASSEXT_BOX_SUPER_SUBCLASSES(orig)) + RCLASSEXT_BOX_SUPER_SUBCLASSES(copy) = rb_box_subclasses_ref_inc(RCLASSEXT_BOX_SUPER_SUBCLASSES(orig)); + if (RCLASSEXT_BOX_MODULE_SUBCLASSES(orig)) + RCLASSEXT_BOX_MODULE_SUBCLASSES(copy) = rb_box_subclasses_ref_inc(RCLASSEXT_BOX_MODULE_SUBCLASSES(orig)); } static void -class_duplicate_iclass_classext(VALUE iclass, rb_classext_t *mod_ext, const rb_namespace_t *ns) +class_duplicate_iclass_classext(VALUE iclass, rb_classext_t *mod_ext, const rb_box_t *box) { RUBY_ASSERT(RB_TYPE_P(iclass, T_ICLASS)); rb_classext_t *src = RCLASS_EXT_PRIME(iclass); - rb_classext_t *ext = RCLASS_EXT_TABLE_LOOKUP_INTERNAL(iclass, ns); + rb_classext_t *ext = RCLASS_EXT_TABLE_LOOKUP_INTERNAL(iclass, box); int first_set = 0; if (ext) { @@ -364,7 +364,7 @@ class_duplicate_iclass_classext(VALUE iclass, rb_classext_t *mod_ext, const rb_n ext = ZALLOC(rb_classext_t); - RCLASSEXT_NS(ext) = ns; + RCLASSEXT_BOX(ext) = box; RCLASSEXT_SUPER(ext) = RCLASSEXT_SUPER(src); @@ -383,7 +383,7 @@ class_duplicate_iclass_classext(VALUE iclass, rb_classext_t *mod_ext, const rb_n // RCLASSEXT_CALLABLE_M_TBL(ext) = NULL; // RCLASSEXT_CC_TBL(ext) = NULL; - // subclasses, namespace_super_subclasses_tbl, namespace_module_subclasses_tbl + // subclasses, box_super_subclasses_tbl, box_module_subclasses_tbl duplicate_classext_subclasses(src, ext); RCLASSEXT_SET_ORIGIN(ext, iclass, RCLASSEXT_ORIGIN(src)); @@ -392,23 +392,23 @@ class_duplicate_iclass_classext(VALUE iclass, rb_classext_t *mod_ext, const rb_n RCLASSEXT_SET_INCLUDER(ext, iclass, RCLASSEXT_INCLUDER(src)); - VM_ASSERT(FL_TEST_RAW(iclass, RCLASS_NAMESPACEABLE)); + VM_ASSERT(FL_TEST_RAW(iclass, RCLASS_BOXABLE)); - first_set = RCLASS_SET_NAMESPACE_CLASSEXT(iclass, ns, ext); + first_set = RCLASS_SET_BOX_CLASSEXT(iclass, box, ext); if (first_set) { RCLASS_SET_PRIME_CLASSEXT_WRITABLE(iclass, false); } } rb_classext_t * -rb_class_duplicate_classext(rb_classext_t *orig, VALUE klass, const rb_namespace_t *ns) +rb_class_duplicate_classext(rb_classext_t *orig, VALUE klass, const rb_box_t *box) { VM_ASSERT(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE) || RB_TYPE_P(klass, T_ICLASS)); rb_classext_t *ext = ZALLOC(rb_classext_t); bool dup_iclass = RB_TYPE_P(klass, T_MODULE) ? true : false; - RCLASSEXT_NS(ext) = ns; + RCLASSEXT_BOX(ext) = box; RCLASSEXT_SUPER(ext) = RCLASSEXT_SUPER(orig); @@ -433,7 +433,7 @@ rb_class_duplicate_classext(rb_classext_t *orig, VALUE klass, const rb_namespace * so initially, it can be NULL and let it be created lazily. * RCLASSEXT_CALLABLE_M_TBL(ext) = NULL; * - * cc_tbl is for method inline cache, and method calls from different namespaces never occur on + * cc_tbl is for method inline cache, and method calls from different boxes never occur on * the same code, so the copied classext should have a different cc_tbl from the prime one. * RCLASSEXT_CC_TBL(copy) = NULL */ @@ -445,7 +445,7 @@ rb_class_duplicate_classext(rb_classext_t *orig, VALUE klass, const rb_namespace RCLASSEXT_SET_ORIGIN(ext, klass, RCLASSEXT_ORIGIN(orig)); /* - * Members not copied to namespace classext values + * Members not copied to box's classext values * * refined_class * * as.class.allocator / as.singleton_class.attached_object * * includer @@ -463,7 +463,7 @@ rb_class_duplicate_classext(rb_classext_t *orig, VALUE klass, const rb_namespace /* * ICLASS has the same m_tbl/const_tbl/cvc_tbl with the included module. * So the module's classext is copied, its tables should be also referred - * by the ICLASS's classext for the namespace. + * by the ICLASS's classext for the box. */ rb_subclass_anchor_t *anchor = RCLASSEXT_SUBCLASSES(ext); rb_subclass_entry_t *subclass_entry = anchor->head; @@ -472,9 +472,9 @@ rb_class_duplicate_classext(rb_classext_t *orig, VALUE klass, const rb_namespace iclass = subclass_entry->klass; if (RBASIC_CLASS(iclass) == klass) { // Is the subclass an ICLASS including this module into another class - // If so we need to re-associate it under our namespace with the new ext - VM_ASSERT(FL_TEST_RAW(iclass, RCLASS_NAMESPACEABLE)); - class_duplicate_iclass_classext(iclass, ext, ns); + // If so we need to re-associate it under our box with the new ext + VM_ASSERT(FL_TEST_RAW(iclass, RCLASS_BOXABLE)); + class_duplicate_iclass_classext(iclass, ext, box); } } subclass_entry = subclass_entry->next; @@ -541,9 +541,9 @@ push_subclass_entry_to_list(VALUE super, VALUE klass, bool is_module) { rb_subclass_entry_t *entry, *head; rb_subclass_anchor_t *anchor; - rb_ns_subclasses_t *ns_subclasses; + rb_box_subclasses_t *box_subclasses; struct st_table *tbl; - const rb_namespace_t *ns = rb_current_namespace(); + const rb_box_t *box = rb_current_box(); entry = ZALLOC(rb_subclass_entry_t); entry->klass = klass; @@ -551,9 +551,9 @@ push_subclass_entry_to_list(VALUE super, VALUE klass, bool is_module) RB_VM_LOCKING() { anchor = RCLASS_WRITABLE_SUBCLASSES(super); VM_ASSERT(anchor); - ns_subclasses = (rb_ns_subclasses_t *)anchor->ns_subclasses; - VM_ASSERT(ns_subclasses); - tbl = ns_subclasses->tbl; + box_subclasses = (rb_box_subclasses_t *)anchor->box_subclasses; + VM_ASSERT(box_subclasses); + tbl = box_subclasses->tbl; VM_ASSERT(tbl); head = anchor->head; @@ -563,14 +563,14 @@ push_subclass_entry_to_list(VALUE super, VALUE klass, bool is_module) } head->next = entry; entry->prev = head; - st_insert(tbl, namespace_subclasses_tbl_key(ns), (st_data_t)entry); + st_insert(tbl, box_subclasses_tbl_key(box), (st_data_t)entry); } if (is_module) { - RCLASS_WRITE_NS_MODULE_SUBCLASSES(klass, anchor->ns_subclasses); + RCLASS_WRITE_BOX_MODULE_SUBCLASSES(klass, anchor->box_subclasses); } else { - RCLASS_WRITE_NS_SUPER_SUBCLASSES(klass, anchor->ns_subclasses); + RCLASS_WRITE_BOX_SUPER_SUBCLASSES(klass, anchor->box_subclasses); } } @@ -598,10 +598,10 @@ rb_class_remove_subclass_head(VALUE klass) } static struct rb_subclass_entry * -class_get_subclasses_for_ns(struct st_table *tbl, VALUE ns_id) +class_get_subclasses_for_ns(struct st_table *tbl, VALUE box_id) { st_data_t value; - if (st_lookup(tbl, (st_data_t)ns_id, &value)) { + if (st_lookup(tbl, (st_data_t)box_id, &value)) { return (struct rb_subclass_entry *)value; } return NULL; @@ -615,9 +615,9 @@ remove_class_from_subclasses_replace_first_entry(st_data_t *key, st_data_t *valu } static void -remove_class_from_subclasses(struct st_table *tbl, VALUE ns_id, VALUE klass) +remove_class_from_subclasses(struct st_table *tbl, VALUE box_id, VALUE klass) { - rb_subclass_entry_t *entry = class_get_subclasses_for_ns(tbl, ns_id); + rb_subclass_entry_t *entry = class_get_subclasses_for_ns(tbl, box_id); bool first_entry = true; while (entry) { if (entry->klass == klass) { @@ -632,11 +632,11 @@ remove_class_from_subclasses(struct st_table *tbl, VALUE ns_id, VALUE klass) if (first_entry) { if (next) { - st_update(tbl, ns_id, remove_class_from_subclasses_replace_first_entry, (st_data_t)next); + st_update(tbl, box_id, remove_class_from_subclasses_replace_first_entry, (st_data_t)next); } else { // no subclass entries in this ns after the deletion - st_delete(tbl, &ns_id, NULL); + st_delete(tbl, &box_id, NULL); } } @@ -655,32 +655,32 @@ void rb_class_remove_from_super_subclasses(VALUE klass) { rb_classext_t *ext = RCLASS_EXT_WRITABLE(klass); - rb_ns_subclasses_t *ns_subclasses = RCLASSEXT_NS_SUPER_SUBCLASSES(ext); + rb_box_subclasses_t *box_subclasses = RCLASSEXT_BOX_SUPER_SUBCLASSES(ext); - if (!ns_subclasses) return; - remove_class_from_subclasses(ns_subclasses->tbl, namespace_subclasses_tbl_key(RCLASSEXT_NS(ext)), klass); - rb_ns_subclasses_ref_dec(ns_subclasses); - RCLASSEXT_NS_SUPER_SUBCLASSES(ext) = 0; + if (!box_subclasses) return; + remove_class_from_subclasses(box_subclasses->tbl, box_subclasses_tbl_key(RCLASSEXT_BOX(ext)), klass); + rb_box_subclasses_ref_dec(box_subclasses); + RCLASSEXT_BOX_SUPER_SUBCLASSES(ext) = 0; } void rb_class_remove_from_module_subclasses(VALUE klass) { rb_classext_t *ext = RCLASS_EXT_WRITABLE(klass); - rb_ns_subclasses_t *ns_subclasses = RCLASSEXT_NS_MODULE_SUBCLASSES(ext); + rb_box_subclasses_t *box_subclasses = RCLASSEXT_BOX_MODULE_SUBCLASSES(ext); - if (!ns_subclasses) return; - remove_class_from_subclasses(ns_subclasses->tbl, namespace_subclasses_tbl_key(RCLASSEXT_NS(ext)), klass); - rb_ns_subclasses_ref_dec(ns_subclasses); - RCLASSEXT_NS_MODULE_SUBCLASSES(ext) = 0; + if (!box_subclasses) return; + remove_class_from_subclasses(box_subclasses->tbl, box_subclasses_tbl_key(RCLASSEXT_BOX(ext)), klass); + rb_box_subclasses_ref_dec(box_subclasses); + RCLASSEXT_BOX_MODULE_SUBCLASSES(ext) = 0; } void rb_class_classext_free_subclasses(rb_classext_t *ext, VALUE klass, bool replacing) { rb_subclass_anchor_t *anchor = RCLASSEXT_SUBCLASSES(ext); - struct st_table *tbl = anchor->ns_subclasses->tbl; - VALUE ns_id = namespace_subclasses_tbl_key(RCLASSEXT_NS(ext)); + struct st_table *tbl = anchor->box_subclasses->tbl; + VALUE box_id = box_subclasses_tbl_key(RCLASSEXT_BOX(ext)); rb_subclass_entry_t *next, *entry = anchor->head; while (entry) { @@ -689,21 +689,21 @@ rb_class_classext_free_subclasses(rb_classext_t *ext, VALUE klass, bool replacin entry = next; } VM_ASSERT( - rb_ns_subclasses_ref_count(anchor->ns_subclasses) > 0, - "ns_subclasses refcount (%p) %d", anchor->ns_subclasses, rb_ns_subclasses_ref_count(anchor->ns_subclasses)); - st_delete(tbl, &ns_id, NULL); - rb_ns_subclasses_ref_dec(anchor->ns_subclasses); + rb_box_subclasses_ref_count(anchor->box_subclasses) > 0, + "box_subclasses refcount (%p) %d", anchor->box_subclasses, rb_box_subclasses_ref_count(anchor->box_subclasses)); + st_delete(tbl, &box_id, NULL); + rb_box_subclasses_ref_dec(anchor->box_subclasses); xfree(anchor); - if (!replacing && RCLASSEXT_NS_SUPER_SUBCLASSES(ext)) { - rb_ns_subclasses_t *ns_sub = RCLASSEXT_NS_SUPER_SUBCLASSES(ext); - remove_class_from_subclasses(ns_sub->tbl, ns_id, klass); - rb_ns_subclasses_ref_dec(ns_sub); + if (!replacing && RCLASSEXT_BOX_SUPER_SUBCLASSES(ext)) { + rb_box_subclasses_t *box_sub = RCLASSEXT_BOX_SUPER_SUBCLASSES(ext); + remove_class_from_subclasses(box_sub->tbl, box_id, klass); + rb_box_subclasses_ref_dec(box_sub); } - if (!replacing && RCLASSEXT_NS_MODULE_SUBCLASSES(ext)) { - rb_ns_subclasses_t *ns_sub = RCLASSEXT_NS_MODULE_SUBCLASSES(ext); - remove_class_from_subclasses(ns_sub->tbl, ns_id, klass); - rb_ns_subclasses_ref_dec(ns_sub); + if (!replacing && RCLASSEXT_BOX_MODULE_SUBCLASSES(ext)) { + rb_box_subclasses_t *box_sub = RCLASSEXT_BOX_MODULE_SUBCLASSES(ext); + remove_class_from_subclasses(box_sub->tbl, box_id, klass); + rb_box_subclasses_ref_dec(box_sub); } } @@ -766,19 +766,19 @@ class_switch_superclass(VALUE super, VALUE klass) * @note this function is not Class#allocate. */ static VALUE -class_alloc0(enum ruby_value_type type, VALUE klass, bool namespaceable) +class_alloc0(enum ruby_value_type type, VALUE klass, bool boxable) { - rb_ns_subclasses_t *ns_subclasses; + rb_box_subclasses_t *box_subclasses; rb_subclass_anchor_t *anchor; - const rb_namespace_t *ns = rb_current_namespace(); + const rb_box_t *box = rb_current_box(); - if (!ruby_namespace_init_done) { - namespaceable = true; + if (!ruby_box_init_done) { + boxable = true; } size_t alloc_size = sizeof(struct RClass_and_rb_classext_t); - if (namespaceable) { - alloc_size = sizeof(struct RClass_namespaceable); + if (boxable) { + alloc_size = sizeof(struct RClass_boxable); } // class_alloc is supposed to return a new object that is not promoted yet. @@ -787,18 +787,18 @@ class_alloc0(enum ruby_value_type type, VALUE klass, bool namespaceable) // // TODO: Note that this could cause memory leak. // If NEWOBJ_OF fails with out of memory, these buffers will leak. - ns_subclasses = ZALLOC(rb_ns_subclasses_t); - ns_subclasses->refcount = 1; - ns_subclasses->tbl = st_init_numtable(); + box_subclasses = ZALLOC(rb_box_subclasses_t); + box_subclasses->refcount = 1; + box_subclasses->tbl = st_init_numtable(); anchor = ZALLOC(rb_subclass_anchor_t); - anchor->ns_subclasses = ns_subclasses; + anchor->box_subclasses = box_subclasses; anchor->head = ZALLOC(rb_subclass_entry_t); RUBY_ASSERT(type == T_CLASS || type == T_ICLASS || type == T_MODULE); VALUE flags = type | FL_SHAREABLE; if (RGENGC_WB_PROTECTED_CLASS) flags |= FL_WB_PROTECTED; - if (namespaceable) flags |= RCLASS_NAMESPACEABLE; + if (boxable) flags |= RCLASS_BOXABLE; NEWOBJ_OF(obj, struct RClass, klass, flags, alloc_size, 0); @@ -813,14 +813,14 @@ class_alloc0(enum ruby_value_type type, VALUE klass, bool namespaceable) RCLASS_SET_SUPER((VALUE)obj, 0); */ - if (namespaceable) { - ((struct RClass_namespaceable *)obj)->ns_classext_tbl = NULL; + if (boxable) { + ((struct RClass_boxable *)obj)->box_classext_tbl = NULL; } - RCLASS_PRIME_NS((VALUE)obj) = ns; - // Classes/Modules defined in user namespaces are - // writable directly because it exists only in a namespace. - RCLASS_SET_PRIME_CLASSEXT_WRITABLE((VALUE)obj, !namespaceable || NAMESPACE_USER_P(ns)); + RCLASS_PRIME_BOX((VALUE)obj) = box; + // Classes/Modules defined in user boxes are + // writable directly because it exists only in a box. + RCLASS_SET_PRIME_CLASSEXT_WRITABLE((VALUE)obj, !boxable || BOX_USER_P(box)); RCLASS_SET_ORIGIN((VALUE)obj, (VALUE)obj); RCLASS_SET_REFINED_CLASS((VALUE)obj, Qnil); @@ -872,9 +872,9 @@ class_clear_method_table(VALUE c) } static VALUE -class_boot_namespaceable(VALUE super, bool namespaceable) +class_boot_boxable(VALUE super, bool boxable) { - VALUE klass = class_alloc0(T_CLASS, rb_cClass, namespaceable); + VALUE klass = class_alloc0(T_CLASS, rb_cClass, boxable); // initialize method table prior to class_associate_super() // because class_associate_super() may cause GC and promote klass @@ -900,7 +900,7 @@ class_boot_namespaceable(VALUE super, bool namespaceable) VALUE rb_class_boot(VALUE super) { - return class_boot_namespaceable(super, false); + return class_boot_boxable(super, false); } static VALUE * @@ -1387,7 +1387,7 @@ static inline VALUE make_metaclass(VALUE klass) { VALUE super; - VALUE metaclass = class_boot_namespaceable(Qundef, FL_TEST_RAW(klass, RCLASS_NAMESPACEABLE)); + VALUE metaclass = class_boot_boxable(Qundef, FL_TEST_RAW(klass, RCLASS_BOXABLE)); FL_SET(metaclass, FL_SINGLETON); rb_singleton_class_attached(metaclass, klass); @@ -1423,7 +1423,7 @@ static inline VALUE make_singleton_class(VALUE obj) { VALUE orig_class = METACLASS_OF(obj); - VALUE klass = class_boot_namespaceable(orig_class, FL_TEST_RAW(orig_class, RCLASS_NAMESPACEABLE)); + VALUE klass = class_boot_boxable(orig_class, FL_TEST_RAW(orig_class, RCLASS_BOXABLE)); FL_SET(klass, FL_SINGLETON); RBASIC_SET_CLASS(obj, klass); diff --git a/dln.c b/dln.c index 6bc4ef199e8479..2549f031835844 100644 --- a/dln.c +++ b/dln.c @@ -389,7 +389,7 @@ dln_open(const char *file) # endif /* Load file */ - int mode = rb_namespace_available() ? RTLD_LAZY|RTLD_LOCAL : RTLD_LAZY|RTLD_GLOBAL; + int mode = rb_box_available() ? RTLD_LAZY|RTLD_LOCAL : RTLD_LAZY|RTLD_GLOBAL; handle = dlopen(file, mode); if (handle == NULL) { error = dln_strerror(); diff --git a/eval.c b/eval.c index 0ff59efd988975..4fbb0e799735d4 100644 --- a/eval.c +++ b/eval.c @@ -78,9 +78,9 @@ ruby_setup(void) #endif Init_BareVM(); rb_vm_encoded_insn_data_table_init(); - Init_enable_namespace(); + Init_enable_box(); Init_vm_objects(); - Init_root_namespace(); + Init_root_box(); Init_fstring_table(); EC_PUSH_TAG(GET_EC()); diff --git a/eval_intern.h b/eval_intern.h index 4ac950e23813cb..91808f1f29aa43 100644 --- a/eval_intern.h +++ b/eval_intern.h @@ -296,11 +296,11 @@ VALUE rb_vm_make_jump_tag_but_local_jump(enum ruby_tag_type state, VALUE val); rb_cref_t *rb_vm_cref(void); rb_cref_t *rb_vm_cref_replace_with_duplicated_cref(void); VALUE rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, VALUE block_handler, VALUE filename); -VALUE rb_vm_call_cfunc_in_namespace(VALUE recv, VALUE (*func)(VALUE, VALUE), VALUE arg1, VALUE arg2, VALUE filename, const rb_namespace_t *ns); -void rb_vm_frame_flag_set_ns_require(const rb_execution_context_t *ec); -const rb_namespace_t *rb_vm_current_namespace(const rb_execution_context_t *ec); -const rb_namespace_t *rb_vm_caller_namespace(const rb_execution_context_t *ec); -const rb_namespace_t *rb_vm_loading_namespace(const rb_execution_context_t *ec); +VALUE rb_vm_call_cfunc_in_box(VALUE recv, VALUE (*func)(VALUE, VALUE), VALUE arg1, VALUE arg2, VALUE filename, const rb_box_t *box); +void rb_vm_frame_flag_set_box_require(const rb_execution_context_t *ec); +const rb_box_t *rb_vm_current_box(const rb_execution_context_t *ec); +const rb_box_t *rb_vm_caller_box(const rb_execution_context_t *ec); +const rb_box_t *rb_vm_loading_box(const rb_execution_context_t *ec); void rb_vm_set_progname(VALUE filename); VALUE rb_vm_cbase(void); diff --git a/gc.c b/gc.c index d1e542de2c6ecb..92ba02809abb90 100644 --- a/gc.c +++ b/gc.c @@ -1228,7 +1228,7 @@ struct classext_foreach_args { }; static void -classext_free(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg) +classext_free(rb_classext_t *ext, bool is_prime, VALUE box_value, void *arg) { struct classext_foreach_args *args = (struct classext_foreach_args *)arg; @@ -1236,7 +1236,7 @@ classext_free(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg) } static void -classext_iclass_free(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg) +classext_iclass_free(rb_classext_t *ext, bool is_prime, VALUE box_value, void *arg) { struct classext_foreach_args *args = (struct classext_foreach_args *)arg; @@ -1918,8 +1918,8 @@ object_id(VALUE obj) switch (BUILTIN_TYPE(obj)) { case T_CLASS: case T_MODULE: - // With namespaces, classes and modules have different fields - // in different namespaces, so we cannot store the object id + // With Ruby Box, classes and modules have different fields + // in different boxes, so we cannot store the object id // in fields. return class_object_id(obj); case T_IMEMO: @@ -2271,7 +2271,7 @@ rb_gc_after_updating_jit_code(void) } static void -classext_memsize(rb_classext_t *ext, bool prime, VALUE namespace, void *arg) +classext_memsize(rb_classext_t *ext, bool prime, VALUE box_value, void *arg) { size_t *size = (size_t *)arg; size_t s = 0; @@ -2295,7 +2295,7 @@ classext_memsize(rb_classext_t *ext, bool prime, VALUE namespace, void *arg) } static void -classext_superclasses_memsize(rb_classext_t *ext, bool prime, VALUE namespace, void *arg) +classext_superclasses_memsize(rb_classext_t *ext, bool prime, VALUE box_value, void *arg) { size_t *size = (size_t *)arg; size_t array_size; @@ -3075,7 +3075,7 @@ struct gc_mark_classext_foreach_arg { }; static void -gc_mark_classext_module(rb_classext_t *ext, bool prime, VALUE namespace, void *arg) +gc_mark_classext_module(rb_classext_t *ext, bool prime, VALUE box_value, void *arg) { struct gc_mark_classext_foreach_arg *foreach_arg = (struct gc_mark_classext_foreach_arg *)arg; rb_objspace_t *objspace = foreach_arg->objspace; @@ -3100,7 +3100,7 @@ gc_mark_classext_module(rb_classext_t *ext, bool prime, VALUE namespace, void *a } static void -gc_mark_classext_iclass(rb_classext_t *ext, bool prime, VALUE namespace, void *arg) +gc_mark_classext_iclass(rb_classext_t *ext, bool prime, VALUE box_value, void *arg) { struct gc_mark_classext_foreach_arg *foreach_arg = (struct gc_mark_classext_foreach_arg *)arg; rb_objspace_t *objspace = foreach_arg->objspace; @@ -3774,7 +3774,7 @@ update_classext_values(rb_objspace_t *objspace, rb_classext_t *ext, bool is_icla } static void -update_classext(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg) +update_classext(rb_classext_t *ext, bool is_prime, VALUE box_value, void *arg) { struct classext_foreach_args *args = (struct classext_foreach_args *)arg; rb_objspace_t *objspace = args->objspace; @@ -3798,7 +3798,7 @@ update_classext(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg) } static void -update_iclass_classext(rb_classext_t *ext, bool is_prime, VALUE namespace, void *arg) +update_iclass_classext(rb_classext_t *ext, bool is_prime, VALUE box_value, void *arg) { struct classext_foreach_args *args = (struct classext_foreach_args *)arg; rb_objspace_t *objspace = args->objspace; diff --git a/inits.c b/inits.c index 5209e429f996e9..4569362b95b8b7 100644 --- a/inits.c +++ b/inits.c @@ -52,7 +52,7 @@ rb_call_inits(void) CALL(Time); CALL(Random); CALL(load); - CALL(Namespace); + CALL(Box); CALL(Proc); CALL(Binding); CALL(Math); diff --git a/insns.def b/insns.def index 8c16a67717bbb0..f282b5a8e7084c 100644 --- a/insns.def +++ b/insns.def @@ -803,13 +803,13 @@ defineclass (VALUE val) { VALUE klass = vm_find_or_create_class_by_id(id, flags, cbase, super); - const rb_namespace_t *ns = rb_current_namespace(); + const rb_box_t *box = rb_current_box(); rb_iseq_check(class_iseq); /* enter scope */ vm_push_frame(ec, class_iseq, VM_FRAME_MAGIC_CLASS | VM_ENV_FLAG_LOCAL, klass, - GC_GUARDED_PTR(ns), + GC_GUARDED_PTR(box), (VALUE)vm_cref_push(ec, klass, NULL, FALSE, FALSE), ISEQ_BODY(class_iseq)->iseq_encoded, GET_SP(), ISEQ_BODY(class_iseq)->local_table_size, diff --git a/internal/box.h b/internal/box.h index c5a495fdf003ba..36844ebf19b24a 100644 --- a/internal/box.h +++ b/internal/box.h @@ -1,5 +1,5 @@ -#ifndef INTERNAL_NAMESPACE_H /*-*-C-*-vi:se ft=c:*/ -#define INTERNAL_NAMESPACE_H +#ifndef INTERNAL_BOX_H /*-*-C-*-vi:se ft=c:*/ +#define INTERNAL_BOX_H #include "ruby/ruby.h" /* for VALUE */ @@ -9,15 +9,15 @@ * Permission is hereby granted, to either redistribute and/or * modify this file, provided that the conditions mentioned in the * file COPYING are met. Consult the file for details. - * @brief Internal header for Namespace. + * @brief Internal header for Ruby Box. */ -struct rb_namespace_struct { +struct rb_box_struct { /* - * To retrieve Namespace object that provides #require and so on. - * That is used from load.c, etc., that uses rb_namespace_t internally. + * To retrieve Ruby::Box object that provides #require and so on. + * That is used from load.c, etc., that uses rb_box_t internally. */ - VALUE ns_object; - long ns_id; // namespace id to generate ext filenames + VALUE box_object; + long box_id; // box_id to generate ext filenames VALUE top_self; @@ -38,44 +38,44 @@ struct rb_namespace_struct { bool is_user; bool is_optional; }; -typedef struct rb_namespace_struct rb_namespace_t; +typedef struct rb_box_struct rb_box_t; -#define NAMESPACE_OBJ_P(obj) (rb_obj_class(obj) == rb_cNamespace) +#define BOX_OBJ_P(obj) (rb_obj_class(obj) == rb_cNamespace) -#define NAMESPACE_ROOT_P(ns) (ns && !ns->is_user) -#define NAMESPACE_USER_P(ns) (ns && ns->is_user) -#define NAMESPACE_OPTIONAL_P(ns) (ns && ns->is_optional) -#define NAMESPACE_MAIN_P(ns) (ns && ns->is_user && !ns->is_optional) +#define BOX_ROOT_P(box) (box && !box->is_user) +#define BOX_USER_P(box) (box && box->is_user) +#define BOX_OPTIONAL_P(box) (box && box->is_optional) +#define BOX_MAIN_P(box) (box && box->is_user && !box->is_optional) -#define NAMESPACE_METHOD_DEFINITION(mdef) (mdef ? mdef->ns : NULL) -#define NAMESPACE_METHOD_ENTRY(me) (me ? NAMESPACE_METHOD_DEFINITION(me->def) : NULL) -#define NAMESPACE_CC(cc) (cc ? NAMESPACE_METHOD_ENTRY(cc->cme_) : NULL) -#define NAMESPACE_CC_ENTRIES(ccs) (ccs ? NAMESPACE_METHOD_ENTRY(ccs->cme) : NULL) +#define BOX_METHOD_DEFINITION(mdef) (mdef ? mdef->ns : NULL) +#define BOX_METHOD_ENTRY(me) (me ? BOX_METHOD_DEFINITION(me->def) : NULL) +#define BOX_CC(cc) (cc ? BOX_METHOD_ENTRY(cc->cme_) : NULL) +#define BOX_CC_ENTRIES(ccs) (ccs ? BOX_METHOD_ENTRY(ccs->cme) : NULL) -RUBY_EXTERN bool ruby_namespace_enabled; -RUBY_EXTERN bool ruby_namespace_init_done; -RUBY_EXTERN bool ruby_namespace_crashed; +RUBY_EXTERN bool ruby_box_enabled; +RUBY_EXTERN bool ruby_box_init_done; +RUBY_EXTERN bool ruby_box_crashed; static inline bool -rb_namespace_available(void) +rb_box_available(void) { - return ruby_namespace_enabled; + return ruby_box_enabled; } -const rb_namespace_t * rb_root_namespace(void); -const rb_namespace_t * rb_main_namespace(void); -const rb_namespace_t * rb_current_namespace(void); -const rb_namespace_t * rb_loading_namespace(void); -const rb_namespace_t * rb_current_namespace_in_crash_report(void); +const rb_box_t * rb_root_box(void); +const rb_box_t * rb_main_box(void); +const rb_box_t * rb_current_box(void); +const rb_box_t * rb_loading_box(void); +const rb_box_t * rb_current_box_in_crash_report(void); -void rb_namespace_entry_mark(void *); -void rb_namespace_gc_update_references(void *ptr); +void rb_box_entry_mark(void *); +void rb_box_gc_update_references(void *ptr); -rb_namespace_t * rb_get_namespace_t(VALUE ns); -VALUE rb_get_namespace_object(rb_namespace_t *ns); +rb_box_t * rb_get_box_t(VALUE ns); +VALUE rb_get_box_object(rb_box_t *ns); -VALUE rb_namespace_local_extension(VALUE namespace, VALUE fname, VALUE path); +VALUE rb_box_local_extension(VALUE box, VALUE fname, VALUE path); -void rb_initialize_main_namespace(void); -void rb_namespace_init_done(void); -#endif /* INTERNAL_NAMESPACE_H */ +void rb_initialize_main_box(void); +void rb_box_init_done(void); +#endif /* INTERNAL_BOX_H */ diff --git a/internal/class.h b/internal/class.h index 19393eb7c3eeaf..04d2849656222b 100644 --- a/internal/class.h +++ b/internal/class.h @@ -10,7 +10,7 @@ */ #include "id.h" #include "id_table.h" /* for struct rb_id_table */ -#include "internal/box.h" /* for rb_current_namespace */ +#include "internal/box.h" #include "internal/serial.h" /* for rb_serial_t */ #include "internal/static_assert.h" #include "internal/variable.h" /* for rb_class_ivar_set */ @@ -27,37 +27,37 @@ # undef RCLASS_SUPER #endif -struct rb_ns_subclasses { +struct rb_box_subclasses { rb_atomic_t refcount; struct st_table *tbl; }; -typedef struct rb_ns_subclasses rb_ns_subclasses_t; +typedef struct rb_box_subclasses rb_box_subclasses_t; static inline rb_atomic_t -rb_ns_subclasses_ref_count(rb_ns_subclasses_t *ns_sub) +rb_box_subclasses_ref_count(rb_box_subclasses_t *box_sub) { - return ATOMIC_LOAD_RELAXED(ns_sub->refcount); + return ATOMIC_LOAD_RELAXED(box_sub->refcount); } -static inline rb_ns_subclasses_t * -rb_ns_subclasses_ref_inc(rb_ns_subclasses_t *ns_sub) +static inline rb_box_subclasses_t * +rb_box_subclasses_ref_inc(rb_box_subclasses_t *box_sub) { - RUBY_ATOMIC_FETCH_ADD(ns_sub->refcount, 1); - return ns_sub; + RUBY_ATOMIC_FETCH_ADD(box_sub->refcount, 1); + return box_sub; } static inline void -rb_ns_subclasses_ref_dec(rb_ns_subclasses_t *ns_sub) +rb_box_subclasses_ref_dec(rb_box_subclasses_t *box_sub) { - rb_atomic_t was = RUBY_ATOMIC_FETCH_SUB(ns_sub->refcount, 1); + rb_atomic_t was = RUBY_ATOMIC_FETCH_SUB(box_sub->refcount, 1); if (was == 1) { - st_free_table(ns_sub->tbl); - xfree(ns_sub); + st_free_table(box_sub->tbl); + xfree(box_sub); } } struct rb_subclass_anchor { - rb_ns_subclasses_t *ns_subclasses; + rb_box_subclasses_t *box_subclasses; struct rb_subclass_entry *head; }; typedef struct rb_subclass_anchor rb_subclass_anchor_t; @@ -77,7 +77,7 @@ struct rb_cvar_class_tbl_entry { }; struct rb_classext_struct { - const rb_namespace_t *ns; + const rb_box_t *box; VALUE super; VALUE fields_obj; // Fields are either ivar or other internal properties stored inline struct rb_id_table *m_tbl; @@ -92,19 +92,19 @@ struct rb_classext_struct { */ struct rb_subclass_anchor *subclasses; /** - * The `ns_super_subclasses` points the `ns_subclasses` struct to retreive the subclasses - * of the super class in a specific namespace. + * The `box_super_subclasses` points the `box_subclasses` struct to retreive the subclasses + * of the super class in a specific box. * In compaction GCs, collecting a classext should trigger the deletion of a rb_subclass_entry * from the super's subclasses. But it may be prevented by the read barrier. * Fetching the super's subclasses for a ns is to avoid the read barrier in that process. */ - rb_ns_subclasses_t *ns_super_subclasses; + rb_box_subclasses_t *box_super_subclasses; /** - * In the case that this is an `ICLASS`, `ns_module_subclasses` points to the link + * In the case that this is an `ICLASS`, `box_module_subclasses` points to the link * in the module's `subclasses` list that indicates that the klass has been * included. Hopefully that makes sense. */ - rb_ns_subclasses_t *ns_module_subclasses; + rb_box_subclasses_t *box_module_subclasses; const VALUE origin_; const VALUE refined_class; @@ -138,7 +138,7 @@ struct RClass { struct RBasic basic; VALUE object_id; /* - * If ns_classext_tbl is NULL, then the prime classext is readable (because no other classext exists). + * If box_classext_tbl is NULL, then the prime classext is readable (because no other classext exists). * For the check whether writable or not, check flag RCLASS_PRIME_CLASSEXT_WRITABLE */ }; @@ -154,9 +154,9 @@ struct RClass_and_rb_classext_t { STATIC_ASSERT(sizeof_rb_classext_t, sizeof(struct RClass_and_rb_classext_t) <= 4 * RVALUE_SIZE); #endif -struct RClass_namespaceable { +struct RClass_boxable { struct RClass_and_rb_classext_t base; - st_table *ns_classext_tbl; // ns_object -> (rb_classext_t *) + st_table *box_classext_tbl; // box_object -> (rb_classext_t *) }; static const uint16_t RCLASS_MAX_SUPERCLASS_DEPTH = ((uint16_t)-1); @@ -170,13 +170,13 @@ static inline void RCLASS_SET_PRIME_CLASSEXT_WRITABLE(VALUE obj, bool writable); #define RCLASS_EXT_PRIME(c) (&((struct RClass_and_rb_classext_t*)(c))->classext) #define RCLASS_EXT_PRIME_P(ext, c) (&((struct RClass_and_rb_classext_t*)(c))->classext == ext) -static inline rb_classext_t * RCLASS_EXT_READABLE_IN_NS(VALUE obj, const rb_namespace_t *ns); +static inline rb_classext_t * RCLASS_EXT_READABLE_IN_BOX(VALUE obj, const rb_box_t *box); static inline rb_classext_t * RCLASS_EXT_READABLE(VALUE obj); -static inline rb_classext_t * RCLASS_EXT_WRITABLE_IN_NS(VALUE obj, const rb_namespace_t *ns); +static inline rb_classext_t * RCLASS_EXT_WRITABLE_IN_BOX(VALUE obj, const rb_box_t *box); static inline rb_classext_t * RCLASS_EXT_WRITABLE(VALUE obj); // Raw accessor -#define RCLASSEXT_NS(ext) (ext->ns) +#define RCLASSEXT_BOX(ext) (ext->box) #define RCLASSEXT_SUPER(ext) (ext->super) #define RCLASSEXT_FIELDS(ext) (ext->fields_obj ? ROBJECT_FIELDS(ext->fields_obj) : NULL) #define RCLASSEXT_FIELDS_OBJ(ext) (ext->fields_obj) @@ -188,8 +188,8 @@ static inline rb_classext_t * RCLASS_EXT_WRITABLE(VALUE obj); #define RCLASSEXT_SUPERCLASS_DEPTH(ext) (ext->superclass_depth) #define RCLASSEXT_SUPERCLASSES(ext) (ext->superclasses) #define RCLASSEXT_SUBCLASSES(ext) (ext->subclasses) -#define RCLASSEXT_NS_SUPER_SUBCLASSES(ext) (ext->ns_super_subclasses) -#define RCLASSEXT_NS_MODULE_SUBCLASSES(ext) (ext->ns_module_subclasses) +#define RCLASSEXT_BOX_SUPER_SUBCLASSES(ext) (ext->box_super_subclasses) +#define RCLASSEXT_BOX_MODULE_SUBCLASSES(ext) (ext->box_module_subclasses) #define RCLASSEXT_ORIGIN(ext) (ext->origin_) #define RCLASSEXT_REFINED_CLASS(ext) (ext->refined_class) // class.allocator/singleton_class.attached_object are not accessed directly via RCLASSEXT_* @@ -206,7 +206,7 @@ static inline void RCLASSEXT_SET_ORIGIN(rb_classext_t *ext, VALUE klass, VALUE o static inline void RCLASSEXT_SET_INCLUDER(rb_classext_t *ext, VALUE klass, VALUE includer); /* Prime classext entry accessor for very specific reason */ -#define RCLASS_PRIME_NS(c) (RCLASS_EXT_PRIME(c)->ns) +#define RCLASS_PRIME_BOX(c) (RCLASS_EXT_PRIME(c)->box) // To invalidate CC by inserting&invalidating method entry into tables containing the target cme // See clear_method_cache_by_id_in_class() #define RCLASS_PRIME_FIELDS_OBJ(c) (RCLASS_EXT_PRIME(c)->fields_obj) @@ -218,7 +218,7 @@ static inline void RCLASSEXT_SET_INCLUDER(rb_classext_t *ext, VALUE klass, VALUE #define RCLASS_CALLABLE_M_TBL_NOT_PRIME_P(c, tbl) (RCLASS_EXT_PRIME(c)->callable_m_tbl != tbl) #define RCLASS_CC_TBL_NOT_PRIME_P(c, tbl) (RCLASS_EXT_PRIME(c)->cc_tbl != tbl) -// Read accessor, regarding namespaces +// Read accessor, regarding box #define RCLASS_SUPER(c) (RCLASS_EXT_READABLE(c)->super) #define RCLASS_M_TBL(c) (RCLASS_EXT_READABLE(c)->m_tbl) #define RCLASS_CONST_TBL(c) (RCLASS_EXT_READABLE(c)->const_tbl) @@ -240,12 +240,12 @@ static inline void RCLASSEXT_SET_INCLUDER(rb_classext_t *ext, VALUE klass, VALUE #define RCLASS_SUPERCLASSES(c) (RCLASS_EXT_PRIME(c)->superclasses) #define RCLASS_SUPERCLASSES_WITH_SELF_P(c) (RCLASS_EXT_PRIME(c)->superclasses_with_self) -// namespaces don't make changes on these refined_class/attached_object/includer +// Ruby Box doesn't make changes on these refined_class/attached_object/includer #define RCLASS_REFINED_CLASS(c) (RCLASS_EXT_PRIME(c)->refined_class) #define RCLASS_ATTACHED_OBJECT(c) (RCLASS_EXT_PRIME(c)->as.singleton_class.attached_object) #define RCLASS_INCLUDER(c) (RCLASS_EXT_PRIME(c)->as.iclass.includer) -// max IV count and variation count are just hints, so they don't need to be per-namespace +// max IV count and variation count are just hints, so they don't need to be per-box #define RCLASS_MAX_IV_COUNT(ext) (RCLASS_EXT_PRIME(ext)->max_iv_count) #define RCLASS_VARIATION_COUNT(ext) (RCLASS_EXT_PRIME(ext)->variation_count) @@ -268,8 +268,8 @@ static inline void RCLASS_WRITE_CVC_TBL(VALUE klass, struct rb_id_table *table); static inline void RCLASS_WRITE_SUPERCLASSES(VALUE klass, size_t depth, VALUE *superclasses, bool with_self); static inline void RCLASS_SET_SUBCLASSES(VALUE klass, rb_subclass_anchor_t *anchor); -static inline void RCLASS_WRITE_NS_SUPER_SUBCLASSES(VALUE klass, rb_ns_subclasses_t *ns_subclasses); -static inline void RCLASS_WRITE_NS_MODULE_SUBCLASSES(VALUE klass, rb_ns_subclasses_t *ns_subclasses); +static inline void RCLASS_WRITE_BOX_SUPER_SUBCLASSES(VALUE klass, rb_box_subclasses_t *box_subclasses); +static inline void RCLASS_WRITE_BOX_MODULE_SUBCLASSES(VALUE klass, rb_box_subclasses_t *box_subclasses); static inline void RCLASS_SET_ORIGIN(VALUE klass, VALUE origin); static inline void RCLASS_WRITE_ORIGIN(VALUE klass, VALUE origin); @@ -293,14 +293,14 @@ static inline void RCLASS_WRITE_CLASSPATH(VALUE klass, VALUE classpath, bool per #define RCLASS_PRIME_CLASSEXT_WRITABLE FL_USER2 #define RCLASS_IS_INITIALIZED FL_USER3 // 3 is RMODULE_IS_REFINEMENT for RMODULE -#define RCLASS_NAMESPACEABLE FL_USER4 +#define RCLASS_BOXABLE FL_USER4 static inline st_table * RCLASS_CLASSEXT_TBL(VALUE klass) { - if (FL_TEST_RAW(klass, RCLASS_NAMESPACEABLE)) { - struct RClass_namespaceable *ns_klass = (struct RClass_namespaceable *)klass; - return ns_klass->ns_classext_tbl; + if (FL_TEST_RAW(klass, RCLASS_BOXABLE)) { + struct RClass_boxable *box_klass = (struct RClass_boxable *)klass; + return box_klass->box_classext_tbl; } return NULL; } @@ -308,25 +308,25 @@ RCLASS_CLASSEXT_TBL(VALUE klass) static inline void RCLASS_SET_CLASSEXT_TBL(VALUE klass, st_table *tbl) { - RUBY_ASSERT(FL_TEST_RAW(klass, RCLASS_NAMESPACEABLE)); - struct RClass_namespaceable *ns_klass = (struct RClass_namespaceable *)klass; - ns_klass->ns_classext_tbl = tbl; + RUBY_ASSERT(FL_TEST_RAW(klass, RCLASS_BOXABLE)); + struct RClass_boxable *box_klass = (struct RClass_boxable *)klass; + box_klass->box_classext_tbl = tbl; } /* class.c */ -rb_classext_t * rb_class_duplicate_classext(rb_classext_t *orig, VALUE obj, const rb_namespace_t *ns); +rb_classext_t * rb_class_duplicate_classext(rb_classext_t *orig, VALUE obj, const rb_box_t *box); void rb_class_ensure_writable(VALUE obj); -void rb_class_set_namespace_classext(VALUE obj, const rb_namespace_t *ns, rb_classext_t *ext); +void rb_class_set_box_classext(VALUE obj, const rb_box_t *box, rb_classext_t *ext); static inline int -RCLASS_SET_NAMESPACE_CLASSEXT(VALUE obj, const rb_namespace_t *ns, rb_classext_t *ext) +RCLASS_SET_BOX_CLASSEXT(VALUE obj, const rb_box_t *box, rb_classext_t *ext) { int first_set = 0; st_table *tbl = RCLASS_CLASSEXT_TBL(obj); - VM_ASSERT(NAMESPACE_USER_P(ns)); // non-prime classext is only for user namespace, with ns_object - VM_ASSERT(ns->ns_object); - VM_ASSERT(RCLASSEXT_NS(ext) == ns); + VM_ASSERT(BOX_USER_P(box)); // non-prime classext is only for user box, with box_object + VM_ASSERT(box->box_object); + VM_ASSERT(RCLASSEXT_BOX(ext) == box); if (!tbl) { tbl = st_init_numtable_with_size(1); RCLASS_SET_CLASSEXT_TBL(obj, tbl); @@ -335,28 +335,28 @@ RCLASS_SET_NAMESPACE_CLASSEXT(VALUE obj, const rb_namespace_t *ns, rb_classext_t first_set = 1; } - rb_class_set_namespace_classext(obj, ns, ext); + rb_class_set_box_classext(obj, box, ext); return first_set; } -#define VM_ASSERT_NAMESPACEABLE_TYPE(klass) \ - VM_ASSERT(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE) || RB_TYPE_P(klass, T_ICLASS), "%s is not namespaceable type", rb_type_str(BUILTIN_TYPE(klass))) +#define VM_ASSERT_BOXABLE_TYPE(klass) \ + VM_ASSERT(RB_TYPE_P(klass, T_CLASS) || RB_TYPE_P(klass, T_MODULE) || RB_TYPE_P(klass, T_ICLASS), "%s is not boxable type", rb_type_str(BUILTIN_TYPE(klass))) static inline bool RCLASS_PRIME_CLASSEXT_READABLE_P(VALUE klass) { VM_ASSERT(klass != 0, "klass should be a valid object"); - VM_ASSERT_NAMESPACEABLE_TYPE(klass); + VM_ASSERT_BOXABLE_TYPE(klass); // if the lookup table exists, then it means the prime classext is NOT directly readable. - return !FL_TEST_RAW(klass, RCLASS_NAMESPACEABLE) || RCLASS_CLASSEXT_TBL(klass) == NULL; + return !FL_TEST_RAW(klass, RCLASS_BOXABLE) || RCLASS_CLASSEXT_TBL(klass) == NULL; } static inline bool RCLASS_PRIME_CLASSEXT_WRITABLE_P(VALUE klass) { VM_ASSERT(klass != 0, "klass should be a valid object"); - VM_ASSERT_NAMESPACEABLE_TYPE(klass); + VM_ASSERT_BOXABLE_TYPE(klass); return FL_TEST(klass, RCLASS_PRIME_CLASSEXT_WRITABLE); } @@ -364,7 +364,7 @@ static inline void RCLASS_SET_PRIME_CLASSEXT_WRITABLE(VALUE klass, bool writable) { VM_ASSERT(klass != 0, "klass should be a valid object"); - VM_ASSERT_NAMESPACEABLE_TYPE(klass); + VM_ASSERT_BOXABLE_TYPE(klass); if (writable) { FL_SET(klass, RCLASS_PRIME_CLASSEXT_WRITABLE); } @@ -374,12 +374,12 @@ RCLASS_SET_PRIME_CLASSEXT_WRITABLE(VALUE klass, bool writable) } static inline rb_classext_t * -RCLASS_EXT_TABLE_LOOKUP_INTERNAL(VALUE obj, const rb_namespace_t *ns) +RCLASS_EXT_TABLE_LOOKUP_INTERNAL(VALUE obj, const rb_box_t *box) { st_data_t classext_ptr; st_table *classext_tbl = RCLASS_CLASSEXT_TBL(obj); if (classext_tbl) { - if (rb_st_lookup(classext_tbl, (st_data_t)ns->ns_object, &classext_ptr)) { + if (rb_st_lookup(classext_tbl, (st_data_t)box->box_object, &classext_ptr)) { return (rb_classext_t *)classext_ptr; } } @@ -387,9 +387,9 @@ RCLASS_EXT_TABLE_LOOKUP_INTERNAL(VALUE obj, const rb_namespace_t *ns) } static inline rb_classext_t * -RCLASS_EXT_READABLE_LOOKUP(VALUE obj, const rb_namespace_t *ns) +RCLASS_EXT_READABLE_LOOKUP(VALUE obj, const rb_box_t *box) { - rb_classext_t *ext = RCLASS_EXT_TABLE_LOOKUP_INTERNAL(obj, ns); + rb_classext_t *ext = RCLASS_EXT_TABLE_LOOKUP_INTERNAL(obj, box); if (ext) return ext; // Classext for the ns not found. Refer the prime one instead. @@ -397,46 +397,46 @@ RCLASS_EXT_READABLE_LOOKUP(VALUE obj, const rb_namespace_t *ns) } static inline rb_classext_t * -RCLASS_EXT_READABLE_IN_NS(VALUE obj, const rb_namespace_t *ns) +RCLASS_EXT_READABLE_IN_BOX(VALUE obj, const rb_box_t *box) { - if (NAMESPACE_ROOT_P(ns) + if (BOX_ROOT_P(box) || RCLASS_PRIME_CLASSEXT_READABLE_P(obj)) { return RCLASS_EXT_PRIME(obj); } - return RCLASS_EXT_READABLE_LOOKUP(obj, ns); + return RCLASS_EXT_READABLE_LOOKUP(obj, box); } static inline rb_classext_t * RCLASS_EXT_READABLE(VALUE obj) { - const rb_namespace_t *ns; + const rb_box_t *box; if (RCLASS_PRIME_CLASSEXT_READABLE_P(obj)) { return RCLASS_EXT_PRIME(obj); } - // delay determining the current namespace to optimize for unmodified classes - ns = rb_current_namespace(); - if (NAMESPACE_ROOT_P(ns)) { + // delay determining the current box to optimize for unmodified classes + box = rb_current_box(); + if (BOX_ROOT_P(box)) { return RCLASS_EXT_PRIME(obj); } - return RCLASS_EXT_READABLE_LOOKUP(obj, ns); + return RCLASS_EXT_READABLE_LOOKUP(obj, box); } static inline rb_classext_t * -RCLASS_EXT_WRITABLE_LOOKUP(VALUE obj, const rb_namespace_t *ns) +RCLASS_EXT_WRITABLE_LOOKUP(VALUE obj, const rb_box_t *box) { rb_classext_t *ext; int first_set = 0; - ext = RCLASS_EXT_TABLE_LOOKUP_INTERNAL(obj, ns); + ext = RCLASS_EXT_TABLE_LOOKUP_INTERNAL(obj, box); if (ext) return ext; RB_VM_LOCKING() { // re-check the classext is not created to avoid the multi-thread race - ext = RCLASS_EXT_TABLE_LOOKUP_INTERNAL(obj, ns); + ext = RCLASS_EXT_TABLE_LOOKUP_INTERNAL(obj, box); if (!ext) { - ext = rb_class_duplicate_classext(RCLASS_EXT_PRIME(obj), obj, ns); - first_set = RCLASS_SET_NAMESPACE_CLASSEXT(obj, ns, ext); + ext = rb_class_duplicate_classext(RCLASS_EXT_PRIME(obj), obj, box); + first_set = RCLASS_SET_BOX_CLASSEXT(obj, box, ext); if (first_set) { // TODO: are there any case that a class/module become non-writable after its birthtime? RCLASS_SET_PRIME_CLASSEXT_WRITABLE(obj, false); @@ -447,28 +447,28 @@ RCLASS_EXT_WRITABLE_LOOKUP(VALUE obj, const rb_namespace_t *ns) } static inline rb_classext_t * -RCLASS_EXT_WRITABLE_IN_NS(VALUE obj, const rb_namespace_t *ns) +RCLASS_EXT_WRITABLE_IN_BOX(VALUE obj, const rb_box_t *box) { - if (NAMESPACE_ROOT_P(ns) + if (BOX_ROOT_P(box) || RCLASS_PRIME_CLASSEXT_WRITABLE_P(obj)) { return RCLASS_EXT_PRIME(obj); } - return RCLASS_EXT_WRITABLE_LOOKUP(obj, ns); + return RCLASS_EXT_WRITABLE_LOOKUP(obj, box); } static inline rb_classext_t * RCLASS_EXT_WRITABLE(VALUE obj) { - const rb_namespace_t *ns; + const rb_box_t *box; if (LIKELY(RCLASS_PRIME_CLASSEXT_WRITABLE_P(obj))) { return RCLASS_EXT_PRIME(obj); } - // delay determining the current namespace to optimize for unmodified classes - ns = rb_current_namespace(); - if (NAMESPACE_ROOT_P(ns)) { + // delay determining the current box to optimize for unmodified classes + box = rb_current_box(); + if (BOX_ROOT_P(box)) { return RCLASS_EXT_PRIME(obj); } - return RCLASS_EXT_WRITABLE_LOOKUP(obj, ns); + return RCLASS_EXT_WRITABLE_LOOKUP(obj, box); } static inline void @@ -485,7 +485,7 @@ RCLASSEXT_SET_INCLUDER(rb_classext_t *ext, VALUE klass, VALUE includer) } /* class.c */ -typedef void rb_class_classext_foreach_callback_func(rb_classext_t *classext, bool is_prime, VALUE namespace, void *arg); +typedef void rb_class_classext_foreach_callback_func(rb_classext_t *classext, bool is_prime, VALUE box_value, void *arg); void rb_class_classext_foreach(VALUE klass, rb_class_classext_foreach_callback_func *func, void *arg); void rb_class_subclass_add(VALUE super, VALUE klass); void rb_class_remove_from_super_subclasses(VALUE); @@ -739,21 +739,21 @@ RCLASS_SET_SUBCLASSES(VALUE klass, struct rb_subclass_anchor *anchor) } static inline void -RCLASS_WRITE_NS_SUPER_SUBCLASSES(VALUE klass, rb_ns_subclasses_t *ns_subclasses) +RCLASS_WRITE_BOX_SUPER_SUBCLASSES(VALUE klass, rb_box_subclasses_t *box_subclasses) { rb_classext_t *ext = RCLASS_EXT_WRITABLE(klass); - if (RCLASSEXT_NS_SUPER_SUBCLASSES(ext)) - rb_ns_subclasses_ref_dec(RCLASSEXT_NS_SUPER_SUBCLASSES(ext)); - RCLASSEXT_NS_SUPER_SUBCLASSES(ext) = rb_ns_subclasses_ref_inc(ns_subclasses); + if (RCLASSEXT_BOX_SUPER_SUBCLASSES(ext)) + rb_box_subclasses_ref_dec(RCLASSEXT_BOX_SUPER_SUBCLASSES(ext)); + RCLASSEXT_BOX_SUPER_SUBCLASSES(ext) = rb_box_subclasses_ref_inc(box_subclasses); } static inline void -RCLASS_WRITE_NS_MODULE_SUBCLASSES(VALUE klass, rb_ns_subclasses_t *ns_subclasses) +RCLASS_WRITE_BOX_MODULE_SUBCLASSES(VALUE klass, rb_box_subclasses_t *box_subclasses) { rb_classext_t *ext = RCLASS_EXT_WRITABLE(klass); - if (RCLASSEXT_NS_MODULE_SUBCLASSES(ext)) - rb_ns_subclasses_ref_dec(RCLASSEXT_NS_MODULE_SUBCLASSES(ext)); - RCLASSEXT_NS_MODULE_SUBCLASSES(ext) = rb_ns_subclasses_ref_inc(ns_subclasses); + if (RCLASSEXT_BOX_MODULE_SUBCLASSES(ext)) + rb_box_subclasses_ref_dec(RCLASSEXT_BOX_MODULE_SUBCLASSES(ext)); + RCLASSEXT_BOX_MODULE_SUBCLASSES(ext) = rb_box_subclasses_ref_inc(box_subclasses); } static inline void diff --git a/internal/inits.h b/internal/inits.h index c1cf3db94d664c..dee818285c75ad 100644 --- a/internal/inits.h +++ b/internal/inits.h @@ -9,6 +9,10 @@ * @brief Internal header aggregating init functions. */ +/* box.c */ +void Init_enable_box(void); +void Init_root_box(void); + /* class.c */ void Init_class_hierarchy(void); @@ -25,16 +29,10 @@ int Init_enc_set_filesystem_encoding(void); /* newline.c */ void Init_newline(void); -/* namespace.c */ -void Init_enable_namespace(void); - /* vm.c */ void Init_BareVM(void); void Init_vm_objects(void); -/* namespace.c */ -void Init_root_namespace(void); - /* vm_backtrace.c */ void Init_vm_backtrace(void); diff --git a/internal/variable.h b/internal/variable.h index 5e2bcceb61875c..ca5e189c904fe3 100644 --- a/internal/variable.h +++ b/internal/variable.h @@ -22,13 +22,13 @@ VALUE rb_search_class_path(VALUE); VALUE rb_attr_delete(VALUE, ID); void rb_autoload_str(VALUE mod, ID id, VALUE file); VALUE rb_autoload_at_p(VALUE, ID, int); -void rb_autoload_copy_table_for_namespace(st_table *, const rb_namespace_t *); +void rb_autoload_copy_table_for_box(st_table *, const rb_box_t *); NORETURN(VALUE rb_mod_const_missing(VALUE,VALUE)); rb_gvar_getter_t *rb_gvar_getter_function_of(ID); rb_gvar_setter_t *rb_gvar_setter_function_of(ID); void rb_gvar_readonly_setter(VALUE v, ID id, VALUE *_); void rb_gvar_ractor_local(const char *name); -void rb_gvar_namespace_ready(const char *name); +void rb_gvar_box_ready(const char *name); /** * Sets the name of a module. diff --git a/iseq.c b/iseq.c index df849d05215a6d..9bf56ad6557545 100644 --- a/iseq.c +++ b/iseq.c @@ -2003,7 +2003,7 @@ iseqw_eval(VALUE self) if (0 == ISEQ_BODY(iseq)->iseq_size) { rb_raise(rb_eTypeError, "attempt to evaluate dummy InstructionSequence"); } - return rb_iseq_eval(iseq, rb_current_namespace()); + return rb_iseq_eval(iseq, rb_current_box()); } /* diff --git a/load.c b/load.c index c38a5fbd321672..69f1d365f269a0 100644 --- a/load.c +++ b/load.c @@ -65,10 +65,10 @@ enum expand_type { string objects in $LOAD_PATH are frozen. */ static void -rb_construct_expanded_load_path(rb_namespace_t *ns, enum expand_type type, int *has_relative, int *has_non_cache) +rb_construct_expanded_load_path(rb_box_t *box, enum expand_type type, int *has_relative, int *has_non_cache) { - VALUE load_path = ns->load_path; - VALUE expanded_load_path = ns->expanded_load_path; + VALUE load_path = box->load_path; + VALUE expanded_load_path = box->expanded_load_path; VALUE snapshot; VALUE ary; long i; @@ -108,39 +108,39 @@ rb_construct_expanded_load_path(rb_namespace_t *ns, enum expand_type type, int * rb_ary_push(ary, rb_fstring(expanded_path)); } rb_ary_freeze(ary); - ns->expanded_load_path = ary; - snapshot = ns->load_path_snapshot; - load_path = ns->load_path; + box->expanded_load_path = ary; + snapshot = box->load_path_snapshot; + load_path = box->load_path; rb_ary_replace(snapshot, load_path); } static VALUE -get_expanded_load_path(rb_namespace_t *ns) +get_expanded_load_path(rb_box_t *box) { VALUE check_cache; const VALUE non_cache = Qtrue; - const VALUE load_path_snapshot = ns->load_path_snapshot; - const VALUE load_path = ns->load_path; + const VALUE load_path_snapshot = box->load_path_snapshot; + const VALUE load_path = box->load_path; if (!rb_ary_shared_with_p(load_path_snapshot, load_path)) { /* The load path was modified. Rebuild the expanded load path. */ int has_relative = 0, has_non_cache = 0; - rb_construct_expanded_load_path(ns, EXPAND_ALL, &has_relative, &has_non_cache); + rb_construct_expanded_load_path(box, EXPAND_ALL, &has_relative, &has_non_cache); if (has_relative) { - ns->load_path_check_cache = rb_dir_getwd_ospath(); + box->load_path_check_cache = rb_dir_getwd_ospath(); } else if (has_non_cache) { /* Non string object. */ - ns->load_path_check_cache = non_cache; + box->load_path_check_cache = non_cache; } else { - ns->load_path_check_cache = 0; + box->load_path_check_cache = 0; } } - else if ((check_cache = ns->load_path_check_cache) == non_cache) { + else if ((check_cache = box->load_path_check_cache) == non_cache) { int has_relative = 1, has_non_cache = 1; /* Expand only non-cacheable objects. */ - rb_construct_expanded_load_path(ns, EXPAND_NON_CACHE, + rb_construct_expanded_load_path(box, EXPAND_NON_CACHE, &has_relative, &has_non_cache); } else if (check_cache) { @@ -149,49 +149,49 @@ get_expanded_load_path(rb_namespace_t *ns) if (!rb_str_equal(check_cache, cwd)) { /* Current working directory or filesystem encoding was changed. Expand relative load path and non-cacheable objects again. */ - ns->load_path_check_cache = cwd; - rb_construct_expanded_load_path(ns, EXPAND_RELATIVE, + box->load_path_check_cache = cwd; + rb_construct_expanded_load_path(box, EXPAND_RELATIVE, &has_relative, &has_non_cache); } else { /* Expand only tilde (User HOME) and non-cacheable objects. */ - rb_construct_expanded_load_path(ns, EXPAND_HOME, + rb_construct_expanded_load_path(box, EXPAND_HOME, &has_relative, &has_non_cache); } } - return ns->expanded_load_path; + return box->expanded_load_path; } VALUE rb_get_expanded_load_path(void) { - return get_expanded_load_path((rb_namespace_t *)rb_loading_namespace()); + return get_expanded_load_path((rb_box_t *)rb_loading_box()); } static VALUE load_path_getter(ID _x, VALUE * _y) { - return rb_loading_namespace()->load_path; + return rb_loading_box()->load_path; } static VALUE get_LOADED_FEATURES(ID _x, VALUE *_y) { - return rb_loading_namespace()->loaded_features; + return rb_loading_box()->loaded_features; } static void -reset_loaded_features_snapshot(const rb_namespace_t *ns) +reset_loaded_features_snapshot(const rb_box_t *box) { - VALUE snapshot = ns->loaded_features_snapshot; - VALUE loaded_features = ns->loaded_features; + VALUE snapshot = box->loaded_features_snapshot; + VALUE loaded_features = box->loaded_features; rb_ary_replace(snapshot, loaded_features); } static struct st_table * -get_loaded_features_index_raw(const rb_namespace_t *ns) +get_loaded_features_index_raw(const rb_box_t *box) { - return ns->loaded_features_index; + return box->loaded_features_index; } static st_data_t @@ -212,7 +212,7 @@ is_rbext_path(VALUE feature_path) typedef rb_darray(long) feature_indexes_t; struct features_index_add_single_args { - const rb_namespace_t *ns; + const rb_box_t *box; VALUE offset; bool rb; }; @@ -221,7 +221,7 @@ static int features_index_add_single_callback(st_data_t *key, st_data_t *value, st_data_t raw_args, int existing) { struct features_index_add_single_args *args = (struct features_index_add_single_args *)raw_args; - const rb_namespace_t *ns = args->ns; + const rb_box_t *box = args->box; VALUE offset = args->offset; bool rb = args->rb; @@ -229,7 +229,7 @@ features_index_add_single_callback(st_data_t *key, st_data_t *value, st_data_t r VALUE this_feature_index = *value; if (FIXNUM_P(this_feature_index)) { - VALUE loaded_features = ns->loaded_features; + VALUE loaded_features = box->loaded_features; VALUE this_feature_path = RARRAY_AREF(loaded_features, FIX2LONG(this_feature_index)); feature_indexes_t feature_indexes; @@ -249,7 +249,7 @@ features_index_add_single_callback(st_data_t *key, st_data_t *value, st_data_t r long pos = -1; if (rb) { - VALUE loaded_features = ns->loaded_features; + VALUE loaded_features = box->loaded_features; for (size_t i = 0; i < rb_darray_size(feature_indexes); ++i) { long idx = rb_darray_get(feature_indexes, i); VALUE this_feature_path = RARRAY_AREF(loaded_features, idx); @@ -281,7 +281,7 @@ features_index_add_single_callback(st_data_t *key, st_data_t *value, st_data_t r } static void -features_index_add_single(const rb_namespace_t *ns, const char* str, size_t len, VALUE offset, bool rb) +features_index_add_single(const rb_box_t *box, const char* str, size_t len, VALUE offset, bool rb) { struct st_table *features_index; st_data_t short_feature_key; @@ -289,10 +289,10 @@ features_index_add_single(const rb_namespace_t *ns, const char* str, size_t len, Check_Type(offset, T_FIXNUM); short_feature_key = feature_key(str, len); - features_index = get_loaded_features_index_raw(ns); + features_index = get_loaded_features_index_raw(box); struct features_index_add_single_args args = { - .ns = ns, + .box = box, .offset = offset, .rb = rb, }; @@ -309,7 +309,7 @@ features_index_add_single(const rb_namespace_t *ns, const char* str, size_t len, relies on for its fast lookup. */ static void -features_index_add(const rb_namespace_t *ns, VALUE feature, VALUE offset) +features_index_add(const rb_box_t *box, VALUE feature, VALUE offset) { RUBY_ASSERT(rb_ractor_main_p()); @@ -337,14 +337,14 @@ features_index_add(const rb_namespace_t *ns, VALUE feature, VALUE offset) if (p < feature_str) break; /* Now *p == '/'. We reach this point for every '/' in `feature`. */ - features_index_add_single(ns, p + 1, feature_end - p - 1, offset, false); + features_index_add_single(box, p + 1, feature_end - p - 1, offset, false); if (ext) { - features_index_add_single(ns, p + 1, ext - p - 1, offset, rb); + features_index_add_single(box, p + 1, ext - p - 1, offset, rb); } } - features_index_add_single(ns, feature_str, feature_end - feature_str, offset, false); + features_index_add_single(box, feature_str, feature_end - feature_str, offset, false); if (ext) { - features_index_add_single(ns, feature_str, ext - feature_str, offset, rb); + features_index_add_single(box, feature_str, ext - feature_str, offset, rb); } } @@ -359,19 +359,19 @@ loaded_features_index_clear_i(st_data_t key, st_data_t val, st_data_t arg) } static st_table * -get_loaded_features_index(const rb_namespace_t *ns) +get_loaded_features_index(const rb_box_t *box) { int i; - VALUE features = ns->loaded_features; - const VALUE snapshot = ns->loaded_features_snapshot; + VALUE features = box->loaded_features; + const VALUE snapshot = box->loaded_features_snapshot; if (!rb_ary_shared_with_p(snapshot, features)) { /* The sharing was broken; something (other than us in rb_provide_feature()) modified loaded_features. Rebuild the index. */ - st_foreach(ns->loaded_features_index, loaded_features_index_clear_i, 0); + st_foreach(box->loaded_features_index, loaded_features_index_clear_i, 0); - VALUE realpaths = ns->loaded_features_realpaths; - VALUE realpath_map = ns->loaded_features_realpath_map; + VALUE realpaths = box->loaded_features_realpaths; + VALUE realpath_map = box->loaded_features_realpath_map; VALUE previous_realpath_map = rb_hash_dup(realpath_map); rb_hash_clear(realpaths); rb_hash_clear(realpath_map); @@ -387,15 +387,15 @@ get_loaded_features_index(const rb_namespace_t *ns) as_str = rb_fstring(as_str); if (as_str != entry) rb_ary_store(features, i, as_str); - features_index_add(ns, as_str, INT2FIX(i)); + features_index_add(box, as_str, INT2FIX(i)); } /* The user modified $LOADED_FEATURES, so we should restore the changes. */ - if (!rb_ary_shared_with_p(features, ns->loaded_features)) { - rb_ary_replace(ns->loaded_features, features); + if (!rb_ary_shared_with_p(features, box->loaded_features)) { + rb_ary_replace(box->loaded_features, features); } - reset_loaded_features_snapshot(ns); + reset_loaded_features_snapshot(box); - features = ns->loaded_features_snapshot; + features = box->loaded_features_snapshot; long j = RARRAY_LEN(features); for (i = 0; i < j; i++) { VALUE as_str = rb_ary_entry(features, i); @@ -409,7 +409,7 @@ get_loaded_features_index(const rb_namespace_t *ns) rb_hash_aset(realpath_map, as_str, realpath); } } - return ns->loaded_features_index; + return box->loaded_features_index; } /* This searches `load_path` for a value such that @@ -494,7 +494,7 @@ loaded_feature_path_i(st_data_t v, st_data_t b, st_data_t f) * 'u': unsuffixed */ static int -rb_feature_p(const rb_namespace_t *ns, const char *feature, const char *ext, int rb, int expanded, const char **fn) +rb_feature_p(const rb_box_t *box, const char *feature, const char *ext, int rb, int expanded, const char **fn) { VALUE features, this_feature_index = Qnil, v, p, load_path = 0; const char *f, *e; @@ -515,8 +515,8 @@ rb_feature_p(const rb_namespace_t *ns, const char *feature, const char *ext, int elen = 0; type = 0; } - features = ns->loaded_features; - features_index = get_loaded_features_index(ns); + features = box->loaded_features; + features_index = get_loaded_features_index(box); key = feature_key(feature, strlen(feature)); /* We search `features` for an entry such that either @@ -564,7 +564,7 @@ rb_feature_p(const rb_namespace_t *ns, const char *feature, const char *ext, int if ((n = RSTRING_LEN(v)) < len) continue; if (strncmp(f, feature, len) != 0) { if (expanded) continue; - if (!load_path) load_path = get_expanded_load_path((rb_namespace_t *)ns); + if (!load_path) load_path = get_expanded_load_path((rb_box_t *)box); if (!(p = loaded_feature_path(f, n, feature, len, type, load_path))) continue; expanded = 1; @@ -584,14 +584,14 @@ rb_feature_p(const rb_namespace_t *ns, const char *feature, const char *ext, int } } - loading_tbl = ns->loading_table; + loading_tbl = box->loading_table; f = 0; if (!expanded && !rb_is_absolute_path(feature)) { struct loaded_feature_searching fs; fs.name = feature; fs.len = len; fs.type = type; - fs.load_path = load_path ? load_path : get_expanded_load_path((rb_namespace_t *)ns); + fs.load_path = load_path ? load_path : get_expanded_load_path((rb_box_t *)box); fs.result = 0; st_foreach(loading_tbl, loaded_feature_path_i, (st_data_t)&fs); if ((f = fs.result) != 0) { @@ -646,7 +646,7 @@ rb_provided(const char *feature) } static int -feature_provided(rb_namespace_t *ns, const char *feature, const char **loading) +feature_provided(rb_box_t *box, const char *feature, const char **loading) { const char *ext = strrchr(feature, '.'); VALUE fullpath = 0; @@ -658,15 +658,15 @@ feature_provided(rb_namespace_t *ns, const char *feature, const char **loading) } if (ext && !strchr(ext, '/')) { if (IS_RBEXT(ext)) { - if (rb_feature_p(ns, feature, ext, TRUE, FALSE, loading)) return TRUE; + if (rb_feature_p(box, feature, ext, TRUE, FALSE, loading)) return TRUE; return FALSE; } else if (IS_SOEXT(ext) || IS_DLEXT(ext)) { - if (rb_feature_p(ns, feature, ext, FALSE, FALSE, loading)) return TRUE; + if (rb_feature_p(box, feature, ext, FALSE, FALSE, loading)) return TRUE; return FALSE; } } - if (rb_feature_p(ns, feature, 0, TRUE, FALSE, loading)) + if (rb_feature_p(box, feature, 0, TRUE, FALSE, loading)) return TRUE; RB_GC_GUARD(fullpath); return FALSE; @@ -675,40 +675,40 @@ feature_provided(rb_namespace_t *ns, const char *feature, const char **loading) int rb_feature_provided(const char *feature, const char **loading) { - rb_namespace_t *ns = (rb_namespace_t *)rb_current_namespace(); - return feature_provided(ns, feature, loading); + rb_box_t *box = (rb_box_t *)rb_current_box(); + return feature_provided(box, feature, loading); } static void -rb_provide_feature(const rb_namespace_t *ns, VALUE feature) +rb_provide_feature(const rb_box_t *box, VALUE feature) { VALUE features; - features = ns->loaded_features; + features = box->loaded_features; if (OBJ_FROZEN(features)) { rb_raise(rb_eRuntimeError, "$LOADED_FEATURES is frozen; cannot append feature"); } feature = rb_fstring(feature); - get_loaded_features_index(ns); + get_loaded_features_index(box); // If loaded_features and loaded_features_snapshot share the same backing // array, pushing into it would cause the whole array to be copied. // To avoid this we first clear loaded_features_snapshot. - rb_ary_clear(ns->loaded_features_snapshot); + rb_ary_clear(box->loaded_features_snapshot); rb_ary_push(features, feature); - features_index_add(ns, feature, INT2FIX(RARRAY_LEN(features)-1)); - reset_loaded_features_snapshot(ns); + features_index_add(box, feature, INT2FIX(RARRAY_LEN(features)-1)); + reset_loaded_features_snapshot(box); } void rb_provide(const char *feature) { /* - * rb_provide() must use rb_current_namespace to store provided features - * in the current namespace's loaded_features, etc. + * rb_provide() must use rb_current_box to store provided features + * in the current box's loaded_features, etc. */ - rb_provide_feature(rb_current_namespace(), rb_fstring_cstr(feature)); + rb_provide_feature(rb_current_box(), rb_fstring_cstr(feature)); } NORETURN(static void load_failed(VALUE)); @@ -729,14 +729,14 @@ realpath_internal_cached(VALUE hash, VALUE path) static inline void load_iseq_eval(rb_execution_context_t *ec, VALUE fname) { - const rb_namespace_t *ns = rb_loading_namespace(); + const rb_box_t *box = rb_loading_box(); const rb_iseq_t *iseq = rb_iseq_load_iseq(fname); if (!iseq) { rb_execution_context_t *ec = GET_EC(); VALUE v = rb_vm_push_frame_fname(ec, fname); - VALUE realpath_map = ns->loaded_features_realpath_map; + VALUE realpath_map = box->loaded_features_realpath_map; if (rb_ruby_prism_p()) { pm_parse_result_t result = { 0 }; @@ -781,14 +781,14 @@ load_iseq_eval(rb_execution_context_t *ec, VALUE fname) } rb_exec_event_hook_script_compiled(ec, iseq, Qnil); - rb_iseq_eval(iseq, ns); + rb_iseq_eval(iseq, box); } static inline enum ruby_tag_type load_wrapping(rb_execution_context_t *ec, VALUE fname, VALUE load_wrapper) { enum ruby_tag_type state; - rb_namespace_t *ns; + rb_box_t *box; rb_thread_t *th = rb_ec_thread_ptr(ec); volatile VALUE wrapper = th->top_wrapper; volatile VALUE self = th->top_self; @@ -799,12 +799,12 @@ load_wrapping(rb_execution_context_t *ec, VALUE fname, VALUE load_wrapper) ec->errinfo = Qnil; /* ensure */ /* load in module as toplevel */ - if (NAMESPACE_OBJ_P(load_wrapper)) { - ns = rb_get_namespace_t(load_wrapper); - if (!ns->top_self) { - ns->top_self = rb_obj_clone(rb_vm_top_self()); + if (BOX_OBJ_P(load_wrapper)) { + box = rb_get_box_t(load_wrapper); + if (!box->top_self) { + box->top_self = rb_obj_clone(rb_vm_top_self()); } - th->top_self = ns->top_self; + th->top_self = box->top_self; } else { th->top_self = rb_obj_clone(rb_vm_top_self()); @@ -843,9 +843,9 @@ raise_load_if_failed(rb_execution_context_t *ec, enum ruby_tag_type state) static void rb_load_internal(VALUE fname, VALUE wrap) { - VALUE namespace; + VALUE box_value; rb_execution_context_t *ec = GET_EC(); - const rb_namespace_t *ns = rb_loading_namespace(); + const rb_box_t *box = rb_loading_box(); enum ruby_tag_type state = TAG_NONE; if (RTEST(wrap)) { if (!RB_TYPE_P(wrap, T_MODULE)) { @@ -853,9 +853,9 @@ rb_load_internal(VALUE fname, VALUE wrap) } state = load_wrapping(ec, fname, wrap); } - else if (NAMESPACE_OPTIONAL_P(ns)) { - namespace = ns->ns_object; - state = load_wrapping(ec, fname, namespace); + else if (BOX_OPTIONAL_P(box)) { + box_value = box->box_object; + state = load_wrapping(ec, fname, box_value); } else { load_iseq_eval(ec, fname); @@ -958,10 +958,10 @@ rb_f_load(int argc, VALUE *argv, VALUE _) } static char * -load_lock(const rb_namespace_t *ns, const char *ftptr, bool warn) +load_lock(const rb_box_t *box, const char *ftptr, bool warn) { st_data_t data; - st_table *loading_tbl = ns->loading_table; + st_table *loading_tbl = box->loading_table; if (!st_lookup(loading_tbl, (st_data_t)ftptr, &data)) { /* partial state */ @@ -1003,11 +1003,11 @@ release_thread_shield(st_data_t *key, st_data_t *value, st_data_t done, int exis } static void -load_unlock(const rb_namespace_t *ns, const char *ftptr, int done) +load_unlock(const rb_box_t *box, const char *ftptr, int done) { if (ftptr) { st_data_t key = (st_data_t)ftptr; - st_table *loading_tbl = ns->loading_table; + st_table *loading_tbl = box->loading_table; st_update(loading_tbl, key, release_thread_shield, done); } @@ -1055,8 +1055,6 @@ static VALUE rb_require_string_internal(VALUE fname, bool resurrect); VALUE rb_f_require(VALUE obj, VALUE fname) { - // const rb_namespace_t *ns = rb_loading_namespace(); - // printf("F:current loading ns: %ld\n", ns->ns_id); return rb_require_string(fname); } @@ -1086,10 +1084,10 @@ rb_f_require_relative(VALUE obj, VALUE fname) return rb_require_relative_entrypoint(fname); } -typedef int (*feature_func)(const rb_namespace_t *ns, const char *feature, const char *ext, int rb, int expanded, const char **fn); +typedef int (*feature_func)(const rb_box_t *box, const char *feature, const char *ext, int rb, int expanded, const char **fn); static int -search_required(const rb_namespace_t *ns, VALUE fname, volatile VALUE *path, feature_func rb_feature_p) +search_required(const rb_box_t *box, VALUE fname, volatile VALUE *path, feature_func rb_feature_p) { VALUE tmp; char *ext, *ftptr; @@ -1100,20 +1098,20 @@ search_required(const rb_namespace_t *ns, VALUE fname, volatile VALUE *path, fea ext = strrchr(ftptr = RSTRING_PTR(fname), '.'); if (ext && !strchr(ext, '/')) { if (IS_RBEXT(ext)) { - if (rb_feature_p(ns, ftptr, ext, TRUE, FALSE, &loading)) { + if (rb_feature_p(box, ftptr, ext, TRUE, FALSE, &loading)) { if (loading) *path = rb_filesystem_str_new_cstr(loading); return 'r'; } if ((tmp = rb_find_file(fname)) != 0) { ext = strrchr(ftptr = RSTRING_PTR(tmp), '.'); - if (!rb_feature_p(ns, ftptr, ext, TRUE, TRUE, &loading) || loading) + if (!rb_feature_p(box, ftptr, ext, TRUE, TRUE, &loading) || loading) *path = tmp; return 'r'; } return 0; } else if (IS_SOEXT(ext)) { - if (rb_feature_p(ns, ftptr, ext, FALSE, FALSE, &loading)) { + if (rb_feature_p(box, ftptr, ext, FALSE, FALSE, &loading)) { if (loading) *path = rb_filesystem_str_new_cstr(loading); return 's'; } @@ -1122,25 +1120,25 @@ search_required(const rb_namespace_t *ns, VALUE fname, volatile VALUE *path, fea OBJ_FREEZE(tmp); if ((tmp = rb_find_file(tmp)) != 0) { ext = strrchr(ftptr = RSTRING_PTR(tmp), '.'); - if (!rb_feature_p(ns, ftptr, ext, FALSE, TRUE, &loading) || loading) + if (!rb_feature_p(box, ftptr, ext, FALSE, TRUE, &loading) || loading) *path = tmp; return 's'; } } else if (IS_DLEXT(ext)) { - if (rb_feature_p(ns, ftptr, ext, FALSE, FALSE, &loading)) { + if (rb_feature_p(box, ftptr, ext, FALSE, FALSE, &loading)) { if (loading) *path = rb_filesystem_str_new_cstr(loading); return 's'; } if ((tmp = rb_find_file(fname)) != 0) { ext = strrchr(ftptr = RSTRING_PTR(tmp), '.'); - if (!rb_feature_p(ns, ftptr, ext, FALSE, TRUE, &loading) || loading) + if (!rb_feature_p(box, ftptr, ext, FALSE, TRUE, &loading) || loading) *path = tmp; return 's'; } } } - else if ((ft = rb_feature_p(ns, ftptr, 0, FALSE, FALSE, &loading)) == 'r') { + else if ((ft = rb_feature_p(box, ftptr, 0, FALSE, FALSE, &loading)) == 'r') { if (loading) *path = rb_filesystem_str_new_cstr(loading); return 'r'; } @@ -1174,7 +1172,7 @@ search_required(const rb_namespace_t *ns, VALUE fname, volatile VALUE *path, fea if (ft) goto feature_present; ftptr = RSTRING_PTR(tmp); - return rb_feature_p(ns, ftptr, 0, FALSE, TRUE, 0); + return rb_feature_p(box, ftptr, 0, FALSE, TRUE, 0); default: if (ft) { @@ -1183,7 +1181,7 @@ search_required(const rb_namespace_t *ns, VALUE fname, volatile VALUE *path, fea /* fall through */ case loadable_ext_rb: ext = strrchr(ftptr = RSTRING_PTR(tmp), '.'); - if (rb_feature_p(ns, ftptr, ext, type == loadable_ext_rb, TRUE, &loading) && !loading) + if (rb_feature_p(box, ftptr, ext, type == loadable_ext_rb, TRUE, &loading) && !loading) break; *path = tmp; } @@ -1204,9 +1202,9 @@ static VALUE load_ext(VALUE path, VALUE fname) { VALUE loaded = path; - const rb_namespace_t *ns = rb_loading_namespace(); - if (NAMESPACE_USER_P(ns)) { - loaded = rb_namespace_local_extension(ns->ns_object, fname, path); + const rb_box_t *box = rb_loading_box(); + if (BOX_USER_P(box)) { + loaded = rb_box_local_extension(box->box_object, fname, path); } rb_scope_visibility_set(METHOD_VISI_PUBLIC); return (VALUE)dln_load_feature(RSTRING_PTR(loaded), RSTRING_PTR(fname)); @@ -1228,7 +1226,7 @@ run_static_ext_init(VALUE vm_ptr, VALUE feature_value) } static int -no_feature_p(const rb_namespace_t *ns, const char *feature, const char *ext, int rb, int expanded, const char **fn) +no_feature_p(const rb_box_t *box, const char *feature, const char *ext, int rb, int expanded, const char **fn) { return 0; } @@ -1240,11 +1238,11 @@ rb_resolve_feature_path(VALUE klass, VALUE fname) VALUE path; int found; VALUE sym; - const rb_namespace_t *ns = rb_loading_namespace(); + const rb_box_t *box = rb_loading_box(); fname = rb_get_path(fname); path = rb_str_encode_ospath(fname); - found = search_required(ns, path, &path, no_feature_p); + found = search_required(box, path, &path, no_feature_p); switch (found) { case 'r': @@ -1291,22 +1289,22 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa { volatile int result = -1; rb_thread_t *th = rb_ec_thread_ptr(ec); - const rb_namespace_t *ns = rb_loading_namespace(); + const rb_box_t *box = rb_loading_box(); volatile const struct { VALUE wrapper, self, errinfo; rb_execution_context_t *ec; - const rb_namespace_t *ns; + const rb_box_t *box; } saved = { th->top_wrapper, th->top_self, ec->errinfo, - ec, ns, + ec, box, }; enum ruby_tag_type state; char *volatile ftptr = 0; VALUE path; volatile VALUE saved_path; volatile VALUE realpath = 0; - VALUE realpaths = ns->loaded_features_realpaths; - VALUE realpath_map = ns->loaded_features_realpath_map; + VALUE realpaths = box->loaded_features_realpaths; + VALUE realpath_map = box->loaded_features_realpath_map; volatile bool reset_ext_config = false; volatile struct rb_ext_config prev_ext_config; @@ -1322,18 +1320,18 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa int found; RUBY_DTRACE_HOOK(FIND_REQUIRE_ENTRY, RSTRING_PTR(fname)); - found = search_required(ns, path, &saved_path, rb_feature_p); + found = search_required(box, path, &saved_path, rb_feature_p); RUBY_DTRACE_HOOK(FIND_REQUIRE_RETURN, RSTRING_PTR(fname)); path = saved_path; if (found) { - if (!path || !(ftptr = load_lock(ns, RSTRING_PTR(path), warn))) { + if (!path || !(ftptr = load_lock(box, RSTRING_PTR(path), warn))) { result = 0; } else if (!*ftptr) { result = TAG_RETURN; } - else if (found == 's' && RTEST(rb_vm_call_cfunc_in_namespace(Qnil, run_static_ext_init, (VALUE)th->vm, path, path, ns))) { + else if (found == 's' && RTEST(rb_vm_call_cfunc_in_box(Qnil, run_static_ext_init, (VALUE)th->vm, path, path, box))) { result = TAG_RETURN; } else if (RTEST(rb_hash_aref(realpaths, @@ -1343,11 +1341,12 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa else { switch (found) { case 'r': - // iseq_eval_in_namespace will be called with the loading namespace eventually - if (NAMESPACE_OPTIONAL_P(ns)) { - // check with NAMESPACE_OPTIONAL_P (not NAMESPACE_USER_P) for NS1::xxx naming - // it is not expected for the main namespace - load_wrapping(saved.ec, path, ns->ns_object); + // iseq_eval_in_box will be called with the loading box eventually + if (BOX_OPTIONAL_P(box)) { + // check with BOX_OPTIONAL_P (not BOX_USER_P) for NS1::xxx naming + // it is not expected for the main box + // TODO: no need to use load_wrapping() here? + load_wrapping(saved.ec, path, box->box_object); } else { load_iseq_eval(saved.ec, path); @@ -1357,8 +1356,8 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa case 's': reset_ext_config = true; ext_config_push(th, &prev_ext_config); - handle = rb_vm_call_cfunc_in_namespace(ns->top_self, load_ext, path, fname, path, ns); - rb_hash_aset(ns->ruby_dln_libmap, path, SVALUE2NUM((SIGNED_VALUE)handle)); + handle = rb_vm_call_cfunc_in_box(box->top_self, load_ext, path, fname, path, box); + rb_hash_aset(box->ruby_dln_libmap, path, SVALUE2NUM((SIGNED_VALUE)handle)); break; } result = TAG_RETURN; @@ -1368,14 +1367,14 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa EC_POP_TAG(); ec = saved.ec; - ns = saved.ns; + box = saved.box; rb_thread_t *th2 = rb_ec_thread_ptr(ec); th2->top_self = saved.self; th2->top_wrapper = saved.wrapper; if (reset_ext_config) ext_config_pop(th2, &prev_ext_config); path = saved_path; - if (ftptr) load_unlock(ns, RSTRING_PTR(path), !state); + if (ftptr) load_unlock(box, RSTRING_PTR(path), !state); if (state) { if (state == TAG_FATAL || state == TAG_THROW) { @@ -1401,7 +1400,7 @@ require_internal(rb_execution_context_t *ec, VALUE fname, int exception, bool wa } if (result == TAG_RETURN) { - rb_provide_feature(ns, path); + rb_provide_feature(box, path); VALUE real = realpath; if (real) { real = rb_fstring(real); @@ -1505,9 +1504,9 @@ ruby_init_ext(const char *name, void (*init)(void)) { st_table *inits_table; rb_vm_t *vm = GET_VM(); - const rb_namespace_t *ns = rb_loading_namespace(); + const rb_box_t *box = rb_loading_box(); - if (feature_provided((rb_namespace_t *)ns, name, 0)) + if (feature_provided((rb_box_t *)box, name, 0)) return; inits_table = vm->static_ext_inits; @@ -1658,7 +1657,7 @@ rb_ext_resolve_symbol(const char* fname, const char* symbol) VALUE path; char *ext; VALUE fname_str = rb_str_new_cstr(fname); - const rb_namespace_t *ns = rb_loading_namespace(); + const rb_box_t *box = rb_loading_box(); resolved = rb_resolve_feature_path((VALUE)NULL, fname_str); if (NIL_P(resolved)) { @@ -1666,7 +1665,7 @@ rb_ext_resolve_symbol(const char* fname, const char* symbol) if (!ext || !IS_SOEXT(ext)) { rb_str_cat_cstr(fname_str, ".so"); } - if (rb_feature_p(ns, fname, 0, FALSE, FALSE, 0)) { + if (rb_feature_p(box, fname, 0, FALSE, FALSE, 0)) { return dln_symbol(NULL, symbol); } return NULL; @@ -1675,7 +1674,7 @@ rb_ext_resolve_symbol(const char* fname, const char* symbol) return NULL; } path = rb_ary_entry(resolved, 1); - handle = rb_hash_lookup(ns->ruby_dln_libmap, path); + handle = rb_hash_lookup(box->ruby_dln_libmap, path); if (NIL_P(handle)) { return NULL; } @@ -1689,14 +1688,14 @@ Init_load(void) ID id_load_path = rb_intern2(var_load_path, sizeof(var_load_path)-1); rb_define_hooked_variable(var_load_path, 0, load_path_getter, rb_gvar_readonly_setter); - rb_gvar_namespace_ready(var_load_path); + rb_gvar_box_ready(var_load_path); rb_alias_variable(rb_intern_const("$-I"), id_load_path); rb_alias_variable(rb_intern_const("$LOAD_PATH"), id_load_path); rb_define_virtual_variable("$\"", get_LOADED_FEATURES, 0); - rb_gvar_namespace_ready("$\""); + rb_gvar_box_ready("$\""); rb_define_virtual_variable("$LOADED_FEATURES", get_LOADED_FEATURES, 0); // TODO: rb_alias_variable ? - rb_gvar_namespace_ready("$LOADED_FEATURES"); + rb_gvar_box_ready("$LOADED_FEATURES"); rb_define_global_function("load", rb_f_load, -1); rb_define_global_function("require", rb_f_require, 1); diff --git a/method.h b/method.h index 9e2fd249683c0c..87fb2498a054d7 100644 --- a/method.h +++ b/method.h @@ -204,7 +204,7 @@ struct rb_method_definition_struct { ID original_id; uintptr_t method_serial; - const rb_namespace_t *ns; + const rb_box_t *box; }; struct rb_id_table; diff --git a/mini_builtin.c b/mini_builtin.c index 3ff3dc5c1d2a08..48f401e78aa471 100644 --- a/mini_builtin.c +++ b/mini_builtin.c @@ -100,5 +100,5 @@ void rb_load_with_builtin_functions(const char *feature_name, const struct rb_builtin_function *table) { const rb_iseq_t *iseq = builtin_iseq_load(feature_name, table); - rb_iseq_eval(iseq, rb_root_namespace()); + rb_iseq_eval(iseq, rb_root_box()); } diff --git a/proc.c b/proc.c index 9c1a7a7fff2916..2b14c38938b8f0 100644 --- a/proc.c +++ b/proc.c @@ -735,7 +735,6 @@ sym_proc_new(VALUE klass, VALUE sym) GetProcPtr(procval, proc); vm_block_type_set(&proc->block, block_type_symbol); - // No namespace specified: similar to built-in methods proc->is_lambda = TRUE; RB_OBJ_WRITE(procval, &proc->block.as.symbol, sym); return procval; @@ -2029,23 +2028,22 @@ method_owner(VALUE obj) /* * call-see: - * meth.namespace -> namespace or nil + * meth.box -> box or nil * - * Returns the namespace where +meth+ is defined in. + * Returns the Ruby::Box where +meth+ is defined in. */ static VALUE -method_namespace(VALUE obj) +method_box(VALUE obj) { struct METHOD *data; - const rb_namespace_t *ns; + const rb_box_t *box; TypedData_Get_Struct(obj, struct METHOD, &method_data_type, data); - ns = data->me->def->ns; - if (!ns) return Qfalse; - if (ns->ns_object) return ns->ns_object; - // This should not happen - rb_bug("Unexpected namespace on the method definition: %p", (void*) ns); - return Qtrue; + box = data->me->def->box; + if (!box) return Qnil; + if (box->box_object) return box->box_object; + rb_bug("Unexpected box on the method definition: %p", (void*) box); + UNREACHABLE_RETURN(Qnil); } void @@ -4520,7 +4518,7 @@ Init_Proc(void) rb_define_method(rb_mKernel, "public_method", rb_obj_public_method, 1); rb_define_method(rb_mKernel, "singleton_method", rb_obj_singleton_method, 1); - rb_define_method(rb_cMethod, "namespace", method_namespace, 0); + rb_define_method(rb_cMethod, "box", method_box, 0); /* UnboundMethod */ rb_cUnboundMethod = rb_define_class("UnboundMethod", rb_cObject); diff --git a/ruby.c b/ruby.c index 0f5e6d60f7f22b..c319fd1237a132 100644 --- a/ruby.c +++ b/ruby.c @@ -449,7 +449,7 @@ ruby_push_include(const char *path, VALUE (*filter)(VALUE)) { const char sep = PATH_SEP_CHAR; const char *p, *s; - VALUE load_path = rb_root_namespace()->load_path; + VALUE load_path = rb_root_box()->load_path; #ifdef __CYGWIN__ char rubylib[FILENAME_MAX]; VALUE buf = 0; @@ -754,7 +754,7 @@ ruby_init_loadpath(void) rb_gc_register_address(&ruby_archlibdir_path); ruby_archlibdir_path = archlibdir; - load_path = rb_root_namespace()->load_path; + load_path = rb_root_box()->load_path; ruby_push_include(getenv("RUBYLIB"), identical_path); @@ -1831,11 +1831,11 @@ ruby_opt_init(ruby_cmdline_options_t *opt) ruby_init_prelude(); - /* Initialize the main namespace after loading libraries (including rubygems) + /* Initialize the main box after loading libraries (including rubygems) * to enable those in both root and main */ - if (rb_namespace_available()) - rb_initialize_main_namespace(); - rb_namespace_init_done(); + if (rb_box_available()) + rb_initialize_main_box(); + rb_box_init_done(); // Initialize JITs after ruby_init_prelude() because JITing prelude is typically not optimal. #if USE_YJIT @@ -2334,8 +2334,8 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) char fbuf[MAXPATHLEN]; int i = (int)proc_options(argc, argv, opt, 0); unsigned int dump = opt->dump & dump_exit_bits; - const rb_namespace_t *ns = rb_root_namespace(); - const long loaded_before_enc = RARRAY_LEN(ns->loaded_features); + const rb_box_t *box = rb_root_box(); + const long loaded_before_enc = RARRAY_LEN(box->loaded_features); if (opt->dump & (DUMP_BIT(usage)|DUMP_BIT(help))) { const char *const progname = @@ -2483,7 +2483,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) rb_obj_freeze(opt->script_name); if (IF_UTF8_PATH(uenc != lenc, 1)) { long i; - VALUE load_path = ns->load_path; + VALUE load_path = box->load_path; const ID id_initial_load_path_mark = INITIAL_LOAD_PATH_MARK; int modifiable = FALSE; @@ -2506,11 +2506,11 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) RARRAY_ASET(load_path, i, path); } if (modifiable) { - rb_ary_replace(ns->load_path_snapshot, load_path); + rb_ary_replace(box->load_path_snapshot, load_path); } } { - VALUE loaded_features = ns->loaded_features; + VALUE loaded_features = box->loaded_features; bool modified = false; for (long i = loaded_before_enc; i < RARRAY_LEN(loaded_features); ++i) { VALUE path = RARRAY_AREF(loaded_features, i); @@ -2522,7 +2522,7 @@ process_options(int argc, char **argv, ruby_cmdline_options_t *opt) RARRAY_ASET(loaded_features, i, path); } if (modified) { - rb_ary_replace(ns->loaded_features_snapshot, loaded_features); + rb_ary_replace(box->loaded_features_snapshot, loaded_features); } } diff --git a/shape.c b/shape.c index d6b5c3040881d2..7acfe72930a09f 100644 --- a/shape.c +++ b/shape.c @@ -744,7 +744,7 @@ rb_shape_transition_heap(VALUE obj, size_t heap_index) } void -rb_set_namespaced_class_shape_id(VALUE obj, shape_id_t shape_id) +rb_set_boxed_class_shape_id(VALUE obj, shape_id_t shape_id) { RBASIC_SET_SHAPE_ID(RCLASS_WRITABLE_ENSURE_FIELDS_OBJ(obj), shape_id); // FIXME: How to do multi-shape? diff --git a/shape.h b/shape.h index a20da1baa55668..6e4a1f079b44f3 100644 --- a/shape.h +++ b/shape.h @@ -177,7 +177,7 @@ RBASIC_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id) RUBY_ASSERT(rb_shape_verify_consistency(obj, shape_id)); } -void rb_set_namespaced_class_shape_id(VALUE obj, shape_id_t shape_id); +void rb_set_boxed_class_shape_id(VALUE obj, shape_id_t shape_id); static inline void RB_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id) @@ -185,7 +185,7 @@ RB_SET_SHAPE_ID(VALUE obj, shape_id_t shape_id) switch (BUILTIN_TYPE(obj)) { case T_CLASS: case T_MODULE: - rb_set_namespaced_class_shape_id(obj, shape_id); + rb_set_boxed_class_shape_id(obj, shape_id); break; default: RBASIC_SET_SHAPE_ID(obj, shape_id); diff --git a/variable.c b/variable.c index 5a58f7ed6316d4..d7e04265c4276b 100644 --- a/variable.c +++ b/variable.c @@ -533,7 +533,7 @@ struct rb_global_variable { rb_gvar_marker_t *marker; rb_gvar_compact_t *compactor; struct trace_var *trace; - bool namespace_ready; + bool box_ready; }; struct rb_global_entry { @@ -612,10 +612,10 @@ rb_gvar_ractor_local(const char *name) } void -rb_gvar_namespace_ready(const char *name) +rb_gvar_box_ready(const char *name) { struct rb_global_entry *entry = rb_find_global_entry(rb_intern(name)); - entry->var->namespace_ready = true; + entry->var->box_ready = true; } static void @@ -645,7 +645,7 @@ rb_global_entry(ID id) var->block_trace = 0; var->trace = 0; - var->namespace_ready = false; + var->box_ready = false; rb_id_table_insert(rb_global_tbl, id, (VALUE)entry); } } @@ -1000,30 +1000,30 @@ rb_gvar_set_entry(struct rb_global_entry *entry, VALUE val) return val; } -#define USE_NAMESPACE_GVAR_TBL(ns,entry) \ - (NAMESPACE_USER_P(ns) && \ - (!entry || !entry->var->namespace_ready || entry->var->setter != rb_gvar_readonly_setter)) +#define USE_BOX_GVAR_TBL(ns,entry) \ + (BOX_USER_P(ns) && \ + (!entry || !entry->var->box_ready || entry->var->setter != rb_gvar_readonly_setter)) VALUE rb_gvar_set(ID id, VALUE val) { VALUE retval; struct rb_global_entry *entry; - const rb_namespace_t *ns = rb_current_namespace(); - bool use_namespace_tbl = false; + const rb_box_t *box = rb_current_box(); + bool use_box_tbl = false; RB_VM_LOCKING() { entry = rb_global_entry(id); - if (USE_NAMESPACE_GVAR_TBL(ns, entry)) { - use_namespace_tbl = true; - rb_hash_aset(ns->gvar_tbl, rb_id2sym(entry->id), val); + if (USE_BOX_GVAR_TBL(box, entry)) { + use_box_tbl = true; + rb_hash_aset(box->gvar_tbl, rb_id2sym(entry->id), val); retval = val; // TODO: think about trace } } - if (!use_namespace_tbl) { + if (!use_box_tbl) { retval = rb_gvar_set_entry(entry, val); } return retval; @@ -1039,8 +1039,8 @@ VALUE rb_gvar_get(ID id) { VALUE retval, gvars, key; - const rb_namespace_t *ns = rb_current_namespace(); - bool use_namespace_tbl = false; + const rb_box_t *box = rb_current_box(); + bool use_box_tbl = false; struct rb_global_entry *entry; struct rb_global_variable *var; // TODO: use lock-free rb_id_table when it's available for use (doesn't yet exist) @@ -1048,9 +1048,9 @@ rb_gvar_get(ID id) entry = rb_global_entry(id); var = entry->var; - if (USE_NAMESPACE_GVAR_TBL(ns, entry)) { - use_namespace_tbl = true; - gvars = ns->gvar_tbl; + if (USE_BOX_GVAR_TBL(box, entry)) { + use_box_tbl = true; + gvars = box->gvar_tbl; key = rb_id2sym(entry->id); if (RTEST(rb_hash_has_key(gvars, key))) { // this gvar is already cached retval = rb_hash_aref(gvars, key); @@ -1068,7 +1068,7 @@ rb_gvar_get(ID id) } } } - if (!use_namespace_tbl) { + if (!use_box_tbl) { retval = (*var->getter)(entry->id, var->data); } return retval; @@ -1125,7 +1125,7 @@ rb_f_global_variables(void) if (!rb_ractor_main_p()) { rb_raise(rb_eRactorIsolationError, "can not access global variables from non-main Ractors"); } - /* gvar access (get/set) in namespaces creates gvar entries globally */ + /* gvar access (get/set) in boxes creates gvar entries globally */ rb_id_table_foreach(rb_global_tbl, gvar_i, (void *)ary); if (!NIL_P(backref)) { @@ -2619,9 +2619,9 @@ struct autoload_const { // The shared "autoload_data" if multiple constants are defined from the same feature. VALUE autoload_data_value; - // The namespace object when the autoload is called in a user namespace - // Otherwise, Qnil means the builtin namespace, Qfalse means unspecified. - VALUE namespace; + // The box object when the autoload is called in a user box + // Otherwise, Qnil means the root box + VALUE box_value; // The module we are loading a constant into. VALUE module; @@ -2698,7 +2698,7 @@ autoload_const_mark_and_move(void *ptr) rb_gc_mark_and_move(&ac->autoload_data_value); rb_gc_mark_and_move(&ac->value); rb_gc_mark_and_move(&ac->file); - rb_gc_mark_and_move(&ac->namespace); + rb_gc_mark_and_move(&ac->box_value); } static size_t @@ -2744,17 +2744,17 @@ get_autoload_data(VALUE autoload_const_value, struct autoload_const **autoload_c struct autoload_copy_table_data { VALUE dst_tbl_value; struct st_table *dst_tbl; - const rb_namespace_t *ns; + const rb_box_t *box; }; static int -autoload_copy_table_for_namespace_i(st_data_t key, st_data_t value, st_data_t arg) +autoload_copy_table_for_box_i(st_data_t key, st_data_t value, st_data_t arg) { struct autoload_const *autoload_const; struct autoload_copy_table_data *data = (struct autoload_copy_table_data *)arg; struct st_table *tbl = data->dst_tbl; VALUE tbl_value = data->dst_tbl_value; - const rb_namespace_t *ns = data->ns; + const rb_box_t *box = data->box; VALUE src_value = (VALUE)value; struct autoload_const *src_const = rb_check_typeddata(src_value, &autoload_const_type); @@ -2763,7 +2763,7 @@ autoload_copy_table_for_namespace_i(st_data_t key, st_data_t value, st_data_t ar struct autoload_data *autoload_data = rb_check_typeddata(autoload_data_value, &autoload_data_type); VALUE new_value = TypedData_Make_Struct(0, struct autoload_const, &autoload_const_type, autoload_const); - autoload_const->namespace = rb_get_namespace_object((rb_namespace_t *)ns); + autoload_const->box_value = rb_get_box_object((rb_box_t *)box); autoload_const->module = src_const->module; autoload_const->name = src_const->name; autoload_const->value = src_const->value; @@ -2778,7 +2778,7 @@ autoload_copy_table_for_namespace_i(st_data_t key, st_data_t value, st_data_t ar } void -rb_autoload_copy_table_for_namespace(st_table *iv_ptr, const rb_namespace_t *ns) +rb_autoload_copy_table_for_box(st_table *iv_ptr, const rb_box_t *box) { struct st_table *src_tbl, *dst_tbl; VALUE src_tbl_value, dst_tbl_value; @@ -2798,10 +2798,10 @@ rb_autoload_copy_table_for_namespace(st_table *iv_ptr, const rb_namespace_t *ns) struct autoload_copy_table_data data = { .dst_tbl_value = dst_tbl_value, .dst_tbl = dst_tbl, - .ns = ns, + .box = box, }; - st_foreach(src_tbl, autoload_copy_table_for_namespace_i, (st_data_t)&data); + st_foreach(src_tbl, autoload_copy_table_for_box_i, (st_data_t)&data); st_insert(iv_ptr, (st_data_t)autoload, (st_data_t)dst_tbl_value); } @@ -2822,7 +2822,7 @@ struct autoload_arguments { VALUE module; ID name; VALUE feature; - VALUE namespace; + VALUE box_value; }; static VALUE @@ -2892,7 +2892,7 @@ autoload_synchronized(VALUE _arguments) { struct autoload_const *autoload_const; VALUE autoload_const_value = TypedData_Make_Struct(0, struct autoload_const, &autoload_const_type, autoload_const); - autoload_const->namespace = arguments->namespace; + autoload_const->box_value = arguments->box_value; autoload_const->module = arguments->module; autoload_const->name = arguments->name; autoload_const->value = Qundef; @@ -2909,8 +2909,8 @@ autoload_synchronized(VALUE _arguments) void rb_autoload_str(VALUE module, ID name, VALUE feature) { - const rb_namespace_t *ns = rb_current_namespace(); - VALUE current_namespace = rb_get_namespace_object((rb_namespace_t *)ns); + const rb_box_t *box = rb_current_box(); + VALUE current_box_value = rb_get_box_object((rb_box_t *)box); if (!rb_is_const_id(name)) { rb_raise(rb_eNameError, "autoload must be constant name: %"PRIsVALUE"", QUOTE_ID(name)); @@ -2925,7 +2925,7 @@ rb_autoload_str(VALUE module, ID name, VALUE feature) .module = module, .name = name, .feature = feature, - .namespace = current_namespace, + .box_value = current_box_value, }; VALUE result = rb_mutex_synchronize(autoload_mutex, autoload_synchronized, (VALUE)&arguments); @@ -3192,17 +3192,17 @@ autoload_feature_require(VALUE _arguments) struct autoload_load_arguments *arguments = (struct autoload_load_arguments*)_arguments; struct autoload_const *autoload_const = arguments->autoload_const; - VALUE autoload_namespace = autoload_const->namespace; + VALUE autoload_box_value = autoload_const->box_value; // We save this for later use in autoload_apply_constants: arguments->autoload_data = rb_check_typeddata(autoload_const->autoload_data_value, &autoload_data_type); - if (rb_namespace_available() && NAMESPACE_OBJ_P(autoload_namespace)) - receiver = autoload_namespace; + if (rb_box_available() && BOX_OBJ_P(autoload_box_value)) + receiver = autoload_box_value; /* * Clear the global cc cache table because the require method can be different from the current - * namespace's one and it may cause inconsistent cc-cme states. + * box's one and it may cause inconsistent cc-cme states. * For example, the assertion below may fail in gccct_method_search(); * VM_ASSERT(vm_cc_check_cme(cc, rb_callable_method_entry(klass, mid))) */ diff --git a/vm.c b/vm.c index 351951408d13e7..4bd6147fc504e9 100644 --- a/vm.c +++ b/vm.c @@ -98,19 +98,19 @@ rb_vm_search_cf_from_ep(const rb_execution_context_t *ec, const rb_control_frame } #if VM_CHECK_MODE > 0 -// ruby_namespace_crashed defined in internal/box.h -#define VM_NAMESPACE_CRASHED() {ruby_namespace_crashed = true;} -#define VM_NAMESPACE_ASSERT(expr, msg) \ - if (!(expr)) { ruby_namespace_crashed = true; rb_bug(msg); } +// ruby_box_crashed defined in internal/box.h +#define VM_BOX_CRASHED() {ruby_box_crashed = true;} +#define VM_BOX_ASSERT(expr, msg) \ + if (!(expr)) { ruby_box_crashed = true; rb_bug(msg); } #else -#define VM_NAMESPACE_CRASHED() {} -#define VM_NAMESPACE_ASSERT(expr, msg) ((void)0) +#define VM_BOX_CRASHED() {} +#define VM_BOX_ASSERT(expr, msg) ((void)0) #endif static const VALUE * VM_EP_RUBY_LEP(const rb_execution_context_t *ec, const rb_control_frame_t *current_cfp) { - // rb_vmdebug_namespace_env_dump_raw() simulates this function + // rb_vmdebug_box_env_dump_raw() simulates this function const VALUE *ep = current_cfp->ep; const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec); /* end of control frame pointer */ const rb_control_frame_t *cfp = current_cfp; @@ -120,20 +120,20 @@ VM_EP_RUBY_LEP(const rb_execution_context_t *ec, const rb_control_frame_t *curre /** * Returns CFUNC frame only in this case. * - * Usually CFUNC frame doesn't represent the current namespace and it should operate - * the caller namespace. See the example: + * Usually CFUNC frame doesn't represent the current box and it should operate + * the caller box. See the example: * - * # in the main namespace + * # in the main box * module Kernel * def foo = "foo" * module_function :foo * end * - * In the case above, `module_function` is defined in the root namespace. - * If `module_function` worked in the root namespace, `Kernel#foo` is invisible + * In the case above, `module_function` is defined in the root box. + * If `module_function` worked in the root box, `Kernel#foo` is invisible * from it and it causes NameError: undefined method `foo` for module `Kernel`. * - * But in cases of IFUNC (blocks written in C), IFUNC doesn't have its own namespace + * But in cases of IFUNC (blocks written in C), IFUNC doesn't have its own box * and its local env frame will be CFUNC frame. * For example, `Enumerator#chunk` calls IFUNC blocks, written as `chunk_i` function. * @@ -142,7 +142,7 @@ VM_EP_RUBY_LEP(const rb_execution_context_t *ec, const rb_control_frame_t *curre * Before calling the Ruby block `{ it.even? }`, `#chunk` calls `chunk_i` as IFUNC * to iterate the array's members (it's just like `#each`). * We expect that `chunk_i` works as expected by the implementation of `#chunk` - * without any overwritten definitions from namespaces. + * without any overwritten definitions from boxes. * So the definitions on IFUNC frames should be equal to the caller CFUNC. */ VM_ASSERT(VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_CFUNC)); @@ -152,13 +152,13 @@ VM_EP_RUBY_LEP(const rb_execution_context_t *ec, const rb_control_frame_t *curre while (VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_CFUNC)) { cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp); - VM_NAMESPACE_ASSERT(cfp, "CFUNC should have a valid previous control frame"); - VM_NAMESPACE_ASSERT(cfp < eocfp, "CFUNC should have a valid caller frame"); + VM_BOX_ASSERT(cfp, "CFUNC should have a valid previous control frame"); + VM_BOX_ASSERT(cfp < eocfp, "CFUNC should have a valid caller frame"); if (!cfp || cfp >= eocfp) { return NULL; } - VM_NAMESPACE_ASSERT(cfp->ep, "CFUNC should have a valid caller frame with env"); + VM_BOX_ASSERT(cfp->ep, "CFUNC should have a valid caller frame with env"); ep = cfp->ep; if (!ep) { return NULL; @@ -196,10 +196,10 @@ static inline VALUE VM_CF_BLOCK_HANDLER(const rb_control_frame_t * const cfp) { const VALUE *ep; - if (VM_ENV_NAMESPACED_P(cfp->ep)) { + if (VM_ENV_BOXED_P(cfp->ep)) { VM_ASSERT(VM_ENV_LOCAL_P(cfp->ep)); /* Never set black_handler for VM_FRAME_MAGIC_TOP or VM_FRAME_MAGIC_CLASS - * and the specval is used for namespace (rb_namespace_t) in these case + * and the specval is used for boxes (rb_box_t) in these case */ return VM_BLOCK_HANDLER_NONE; } @@ -882,7 +882,7 @@ vm_stat(int argc, VALUE *argv, VALUE self) /* control stack frame */ static void -vm_set_top_stack(rb_execution_context_t *ec, const rb_iseq_t *iseq, const rb_namespace_t *ns) +vm_set_top_stack(rb_execution_context_t *ec, const rb_iseq_t *iseq, const rb_box_t *box) { if (ISEQ_BODY(iseq)->type != ISEQ_TYPE_TOP) { rb_raise(rb_eTypeError, "Not a toplevel InstructionSequence"); @@ -891,7 +891,7 @@ vm_set_top_stack(rb_execution_context_t *ec, const rb_iseq_t *iseq, const rb_nam /* for return */ vm_push_frame(ec, iseq, VM_FRAME_MAGIC_TOP | VM_ENV_FLAG_LOCAL | VM_FRAME_FLAG_FINISH, rb_ec_thread_ptr(ec)->top_self, - GC_GUARDED_PTR(ns), + GC_GUARDED_PTR(box), (VALUE)vm_cref_new_toplevel(ec), /* cref or me */ ISEQ_BODY(iseq)->iseq_encoded, ec->cfp->sp, ISEQ_BODY(iseq)->local_table_size, ISEQ_BODY(iseq)->stack_max); @@ -3032,11 +3032,11 @@ vm_exec_handle_exception(rb_execution_context_t *ec, enum ruby_tag_type state, V /* misc */ VALUE -rb_iseq_eval(const rb_iseq_t *iseq, const rb_namespace_t *ns) +rb_iseq_eval(const rb_iseq_t *iseq, const rb_box_t *box) { rb_execution_context_t *ec = GET_EC(); VALUE val; - vm_set_top_stack(ec, iseq, ns); + vm_set_top_stack(ec, iseq, box); val = vm_exec(ec); return val; } @@ -3086,11 +3086,11 @@ rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, rb_execution_context_t *ec = GET_EC(); const rb_control_frame_t *reg_cfp = ec->cfp; const rb_iseq_t *iseq = rb_iseq_new(Qnil, filename, filename, Qnil, 0, ISEQ_TYPE_TOP); - const rb_namespace_t *ns = rb_current_namespace(); + const rb_box_t *box = rb_current_box(); VALUE val; vm_push_frame(ec, iseq, VM_FRAME_MAGIC_TOP | VM_ENV_FLAG_LOCAL | VM_FRAME_FLAG_FINISH, - recv, GC_GUARDED_PTR(ns), + recv, GC_GUARDED_PTR(box), (VALUE)vm_cref_new_toplevel(ec), /* cref or me */ 0, reg_cfp->sp, 0, 0); @@ -3100,11 +3100,11 @@ rb_vm_call_cfunc(VALUE recv, VALUE (*func)(VALUE), VALUE arg, return val; } -/* namespace */ +/* Ruby::Box */ VALUE -rb_vm_call_cfunc_in_namespace(VALUE recv, VALUE (*func)(VALUE, VALUE), VALUE arg1, VALUE arg2, - VALUE filename, const rb_namespace_t *ns) +rb_vm_call_cfunc_in_box(VALUE recv, VALUE (*func)(VALUE, VALUE), VALUE arg1, VALUE arg2, + VALUE filename, const rb_box_t *box) { rb_execution_context_t *ec = GET_EC(); const rb_control_frame_t *reg_cfp = ec->cfp; @@ -3112,7 +3112,7 @@ rb_vm_call_cfunc_in_namespace(VALUE recv, VALUE (*func)(VALUE, VALUE), VALUE arg VALUE val; vm_push_frame(ec, iseq, VM_FRAME_MAGIC_TOP | VM_ENV_FLAG_LOCAL | VM_FRAME_FLAG_FINISH, - recv, GC_GUARDED_PTR(ns), + recv, GC_GUARDED_PTR(box), (VALUE)vm_cref_new_toplevel(ec), /* cref or me */ 0, reg_cfp->sp, 0, 0); @@ -3123,50 +3123,50 @@ rb_vm_call_cfunc_in_namespace(VALUE recv, VALUE (*func)(VALUE, VALUE), VALUE arg } void -rb_vm_frame_flag_set_ns_require(const rb_execution_context_t *ec) +rb_vm_frame_flag_set_box_require(const rb_execution_context_t *ec) { - VM_ASSERT(rb_namespace_available()); - VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_NS_REQUIRE); + VM_ASSERT(rb_box_available()); + VM_ENV_FLAGS_SET(ec->cfp->ep, VM_FRAME_FLAG_BOX_REQUIRE); } -static const rb_namespace_t * -current_namespace_on_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp) +static const rb_box_t * +current_box_on_cfp(const rb_execution_context_t *ec, const rb_control_frame_t *cfp) { rb_callable_method_entry_t *cme; - const rb_namespace_t *ns; + const rb_box_t *box; const VALUE *lep = VM_EP_RUBY_LEP(ec, cfp); - VM_NAMESPACE_ASSERT(lep, "lep should be valid"); - VM_NAMESPACE_ASSERT(rb_namespace_available(), "namespace should be available here"); + VM_BOX_ASSERT(lep, "lep should be valid"); + VM_BOX_ASSERT(rb_box_available(), "box should be available here"); if (VM_ENV_FRAME_TYPE_P(lep, VM_FRAME_MAGIC_METHOD) || VM_ENV_FRAME_TYPE_P(lep, VM_FRAME_MAGIC_CFUNC)) { cme = check_method_entry(lep[VM_ENV_DATA_INDEX_ME_CREF], TRUE); - VM_NAMESPACE_ASSERT(cme, "cme should be valid"); - VM_NAMESPACE_ASSERT(cme->def, "cme->def shold be valid"); - return cme->def->ns; + VM_BOX_ASSERT(cme, "cme should be valid"); + VM_BOX_ASSERT(cme->def, "cme->def shold be valid"); + return cme->def->box; } else if (VM_ENV_FRAME_TYPE_P(lep, VM_FRAME_MAGIC_TOP) || VM_ENV_FRAME_TYPE_P(lep, VM_FRAME_MAGIC_CLASS)) { - VM_NAMESPACE_ASSERT(VM_ENV_LOCAL_P(lep), "lep should be local on MAGIC_TOP or MAGIC_CLASS frames"); - return VM_ENV_NAMESPACE(lep); + VM_BOX_ASSERT(VM_ENV_LOCAL_P(lep), "lep should be local on MAGIC_TOP or MAGIC_CLASS frames"); + return VM_ENV_BOX(lep); } else if (VM_ENV_FRAME_TYPE_P(lep, VM_FRAME_MAGIC_DUMMY)) { // No valid local ep found (just after process boot?) - // return the root namespace (the only valid namespace) until the main is initialized - ns = rb_main_namespace(); - if (ns) - return ns; - return rb_root_namespace(); + // return the root box (the only valid box) until the main is initialized + box = rb_main_box(); + if (box) + return box; + return rb_root_box(); } else { - VM_NAMESPACE_CRASHED(); - rb_bug("BUG: Local ep without cme/namespace, flags: %08lX", (unsigned long)lep[VM_ENV_DATA_INDEX_FLAGS]); + VM_BOX_CRASHED(); + rb_bug("BUG: Local ep without cme/box, flags: %08lX", (unsigned long)lep[VM_ENV_DATA_INDEX_FLAGS]); } UNREACHABLE_RETURN(0); } -const rb_namespace_t * -rb_vm_current_namespace(const rb_execution_context_t *ec) +const rb_box_t * +rb_vm_current_box(const rb_execution_context_t *ec) { - return current_namespace_on_cfp(ec, ec->cfp); + return current_box_on_cfp(ec, ec->cfp); } static const rb_control_frame_t * @@ -3175,7 +3175,7 @@ find_loader_control_frame(const rb_execution_context_t *ec, const rb_control_fra while (RUBY_VM_VALID_CONTROL_FRAME_P(cfp, end_cfp)) { if (!VM_ENV_FRAME_TYPE_P(cfp->ep, VM_FRAME_MAGIC_CFUNC)) break; - if (!NAMESPACE_ROOT_P(current_namespace_on_cfp(ec, cfp))) + if (!BOX_ROOT_P(current_box_on_cfp(ec, cfp))) break; cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp); } @@ -3183,32 +3183,32 @@ find_loader_control_frame(const rb_execution_context_t *ec, const rb_control_fra return cfp; } -const rb_namespace_t * -rb_vm_loading_namespace(const rb_execution_context_t *ec) +const rb_box_t * +rb_vm_loading_box(const rb_execution_context_t *ec) { const rb_control_frame_t *cfp, *current_cfp, *end_cfp; - if (!rb_namespace_available() || !ec) - return rb_root_namespace(); + if (!rb_box_available() || !ec) + return rb_root_box(); cfp = ec->cfp; current_cfp = cfp; end_cfp = RUBY_VM_END_CONTROL_FRAME(ec); while (RUBY_VM_VALID_CONTROL_FRAME_P(cfp, end_cfp)) { - if (VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_NS_REQUIRE)) { - if (RTEST(cfp->self) && NAMESPACE_OBJ_P(cfp->self)) { - // Namespace#require, #require_relative, #load - return rb_get_namespace_t(cfp->self); + if (VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_BOX_REQUIRE)) { + if (RTEST(cfp->self) && BOX_OBJ_P(cfp->self)) { + // Box#require, #require_relative, #load + return rb_get_box_t(cfp->self); } // Kernel#require, #require_relative, #load cfp = find_loader_control_frame(ec, cfp, end_cfp); - return current_namespace_on_cfp(ec, cfp); + return current_box_on_cfp(ec, cfp); } cfp = RUBY_VM_PREVIOUS_CONTROL_FRAME(cfp); } - // no require/load with explicit namespaces. - return current_namespace_on_cfp(ec, current_cfp); + // no require/load with explicit boxes. + return current_box_on_cfp(ec, current_cfp); } /* vm */ @@ -3223,10 +3223,10 @@ rb_vm_update_references(void *ptr) vm->mark_object_ary = rb_gc_location(vm->mark_object_ary); vm->orig_progname = rb_gc_location(vm->orig_progname); - if (vm->root_namespace) - rb_namespace_gc_update_references(vm->root_namespace); - if (vm->main_namespace) - rb_namespace_gc_update_references(vm->main_namespace); + if (vm->root_box) + rb_box_gc_update_references(vm->root_box); + if (vm->main_box) + rb_box_gc_update_references(vm->main_box); rb_gc_update_values(RUBY_NSIG, vm->trap_list.cmd); @@ -3299,11 +3299,11 @@ rb_vm_mark(void *ptr) rb_gc_mark_movable(vm->self); - if (vm->root_namespace) { - rb_namespace_entry_mark(vm->root_namespace); + if (vm->root_box) { + rb_box_entry_mark(vm->root_box); } - if (vm->main_namespace) { - rb_namespace_entry_mark(vm->main_namespace); + if (vm->main_box) { + rb_box_entry_mark(vm->main_box); } rb_gc_mark_movable(vm->mark_object_ary); @@ -3886,7 +3886,7 @@ rb_ec_clear_vm_stack(rb_execution_context_t *ec) static void th_init(rb_thread_t *th, VALUE self, rb_vm_t *vm) { - const rb_namespace_t *ns = rb_current_namespace(); + const rb_box_t *box = rb_current_box(); th->self = self; @@ -3911,8 +3911,8 @@ th_init(rb_thread_t *th, VALUE self, rb_vm_t *vm) th->status = THREAD_RUNNABLE; th->last_status = Qnil; th->top_wrapper = 0; - if (ns->top_self) { - th->top_self = ns->top_self; + if (box->top_self) { + th->top_self = box->top_self; } else { th->top_self = 0; @@ -4745,20 +4745,20 @@ main_to_s(VALUE obj) VALUE rb_vm_top_self(void) { - const rb_namespace_t *ns = rb_current_namespace(); - VM_ASSERT(ns); - VM_ASSERT(ns->top_self); - return ns->top_self; + const rb_box_t *box = rb_current_box(); + VM_ASSERT(box); + VM_ASSERT(box->top_self); + return box->top_self; } void Init_top_self(void) { rb_vm_t *vm = GET_VM(); - vm->root_namespace = (rb_namespace_t *)rb_root_namespace(); - vm->root_namespace->top_self = rb_obj_alloc(rb_cObject); - rb_define_singleton_method(vm->root_namespace->top_self, "to_s", main_to_s, 0); - rb_define_alias(rb_singleton_class(vm->root_namespace->top_self), "inspect", "to_s"); + vm->root_box = (rb_box_t *)rb_root_box(); + vm->root_box->top_self = rb_obj_alloc(rb_cObject); + rb_define_singleton_method(vm->root_box->top_self, "to_s", main_to_s, 0); + rb_define_alias(rb_singleton_class(vm->root_box->top_self), "inspect", "to_s"); } VALUE * diff --git a/vm_core.h b/vm_core.h index 599c7ada9fa9d1..79d12f9ee44ad6 100644 --- a/vm_core.h +++ b/vm_core.h @@ -754,9 +754,9 @@ typedef struct rb_vm_struct { struct global_object_list *global_object_list; const VALUE special_exceptions[ruby_special_error_count]; - /* namespace */ - rb_namespace_t *root_namespace; - rb_namespace_t *main_namespace; + /* Ruby Box */ + rb_box_t *root_box; + rb_box_t *main_box; /* load */ // For running the init function of statically linked @@ -1389,7 +1389,7 @@ enum vm_frame_env_flags { VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM = 0x0200, VM_FRAME_FLAG_CFRAME_KW = 0x0400, VM_FRAME_FLAG_PASSED = 0x0800, - VM_FRAME_FLAG_NS_REQUIRE = 0x1000, + VM_FRAME_FLAG_BOX_REQUIRE = 0x1000, /* env flag */ VM_ENV_FLAG_LOCAL = 0x0002, @@ -1528,7 +1528,7 @@ VM_FRAME_RUBYFRAME_P_UNCHECKED(const rb_control_frame_t *cfp) static inline int VM_FRAME_NS_REQUIRE_P(const rb_control_frame_t *cfp) { - return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_NS_REQUIRE) != 0; + return VM_ENV_FLAGS(cfp->ep, VM_FRAME_FLAG_BOX_REQUIRE) != 0; } #define RUBYVM_CFUNC_FRAME_P(cfp) \ @@ -1563,7 +1563,7 @@ VM_ENV_PREV_EP(const VALUE *ep) } static inline bool -VM_ENV_NAMESPACED_P(const VALUE *ep) +VM_ENV_BOXED_P(const VALUE *ep) { return VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_CLASS) || VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_TOP); } @@ -1571,7 +1571,7 @@ VM_ENV_NAMESPACED_P(const VALUE *ep) static inline VALUE VM_ENV_BLOCK_HANDLER(const VALUE *ep) { - if (VM_ENV_NAMESPACED_P(ep)) { + if (VM_ENV_BOXED_P(ep)) { VM_ASSERT(VM_ENV_LOCAL_P(ep)); return VM_BLOCK_HANDLER_NONE; } @@ -1580,18 +1580,18 @@ VM_ENV_BLOCK_HANDLER(const VALUE *ep) return ep[VM_ENV_DATA_INDEX_SPECVAL]; } -static inline const rb_namespace_t * -VM_ENV_NAMESPACE(const VALUE *ep) +static inline const rb_box_t * +VM_ENV_BOX(const VALUE *ep) { - VM_ASSERT(VM_ENV_NAMESPACED_P(ep)); + VM_ASSERT(VM_ENV_BOXED_P(ep)); VM_ASSERT(VM_ENV_LOCAL_P(ep)); - return (const rb_namespace_t *)GC_GUARDED_PTR_REF(ep[VM_ENV_DATA_INDEX_SPECVAL]); + return (const rb_box_t *)GC_GUARDED_PTR_REF(ep[VM_ENV_DATA_INDEX_SPECVAL]); } -static inline const rb_namespace_t * -VM_ENV_NAMESPACE_UNCHECKED(const VALUE *ep) +static inline const rb_box_t * +VM_ENV_BOX_UNCHECKED(const VALUE *ep) { - return (const rb_namespace_t *)GC_GUARDED_PTR_REF(ep[VM_ENV_DATA_INDEX_SPECVAL]); + return (const rb_box_t *)GC_GUARDED_PTR_REF(ep[VM_ENV_DATA_INDEX_SPECVAL]); } #if VM_CHECK_MODE > 0 @@ -1914,7 +1914,7 @@ NORETURN(void rb_bug_for_fatal_signal(ruby_sighandler_t default_sighandler, int /* functions about thread/vm execution */ RUBY_SYMBOL_EXPORT_BEGIN -VALUE rb_iseq_eval(const rb_iseq_t *iseq, const rb_namespace_t *ns); +VALUE rb_iseq_eval(const rb_iseq_t *iseq, const rb_box_t *box); VALUE rb_iseq_eval_main(const rb_iseq_t *iseq); VALUE rb_iseq_path(const rb_iseq_t *iseq); VALUE rb_iseq_realpath(const rb_iseq_t *iseq); diff --git a/vm_dump.c b/vm_dump.c index 2ed1f955b3445e..ece04f563e8f88 100644 --- a/vm_dump.c +++ b/vm_dump.c @@ -62,7 +62,7 @@ control_frame_dump(const rb_execution_context_t *ec, const rb_control_frame_t *c VALUE tmp; const rb_iseq_t *iseq = NULL; const rb_callable_method_entry_t *me = rb_vm_frame_method_entry_unchecked(cfp); - const rb_namespace_t *ns = NULL; + const rb_box_t *box = NULL; if (ep < 0 || (size_t)ep > ec->vm_stack_size) { ep = (ptrdiff_t)cfp->ep; @@ -72,17 +72,17 @@ control_frame_dump(const rb_execution_context_t *ec, const rb_control_frame_t *c switch (VM_FRAME_TYPE_UNCHECKED(cfp)) { case VM_FRAME_MAGIC_TOP: magic = "TOP"; - ns = VM_ENV_NAMESPACE_UNCHECKED(cfp->ep); + box = VM_ENV_BOX_UNCHECKED(cfp->ep); break; case VM_FRAME_MAGIC_METHOD: magic = "METHOD"; if (me) { - ns = me->def->ns; + box = me->def->box; } break; case VM_FRAME_MAGIC_CLASS: magic = "CLASS"; - ns = VM_ENV_NAMESPACE_UNCHECKED(cfp->ep); + box = VM_ENV_BOX_UNCHECKED(cfp->ep); break; case VM_FRAME_MAGIC_BLOCK: magic = "BLOCK"; @@ -163,11 +163,11 @@ control_frame_dump(const rb_execution_context_t *ec, const rb_control_frame_t *c kprintf("s:%04"PRIdPTRDIFF" ", cfp->sp - ec->vm_stack); kprintf(ep_in_heap == ' ' ? "e:%06"PRIdPTRDIFF" " : "E:%06"PRIxPTRDIFF" ", ep % 10000); kprintf("l:%s ", VM_ENV_LOCAL_P(cfp->ep) ? "y" : "n"); - if (ns) { - kprintf("n:%04ld ", ns->ns_id % 10000); + if (box) { + kprintf("b:%04ld ", box->box_id % 10000); } else { - kprintf("n:---- "); + kprintf("b:---- "); } kprintf("%-6s", magic); if (line) { @@ -274,7 +274,7 @@ vmdebug_frame_method_entry_unchecked(const VALUE *ep) } static bool -namespace_env_dump(const rb_execution_context_t *ec, const VALUE *env, const rb_control_frame_t *checkpoint_cfp, FILE *errout) +box_env_dump(const rb_execution_context_t *ec, const VALUE *env, const rb_control_frame_t *checkpoint_cfp, FILE *errout) { ptrdiff_t pc = -1; ptrdiff_t ep = env - ec->vm_stack; @@ -284,7 +284,7 @@ namespace_env_dump(const rb_execution_context_t *ec, const VALUE *env, const rb_ const char *magic, *iseq_name = "-"; VALUE tmp; const rb_iseq_t *iseq = NULL; - const rb_namespace_t *ns = NULL; + const rb_box_t *box = NULL; const rb_control_frame_t *cfp = vmdebug_search_cf_from_ep(ec, checkpoint_cfp, env); const rb_callable_method_entry_t *me = vmdebug_frame_method_entry_unchecked(env); @@ -298,17 +298,17 @@ namespace_env_dump(const rb_execution_context_t *ec, const VALUE *env, const rb_ switch (VM_ENV_FLAGS_UNCHECKED(env, VM_FRAME_MAGIC_MASK)) { case VM_FRAME_MAGIC_TOP: magic = "TOP"; - ns = VM_ENV_NAMESPACE_UNCHECKED(env); + box = VM_ENV_BOX_UNCHECKED(env); break; case VM_FRAME_MAGIC_METHOD: magic = "METHOD"; if (me) { - ns = me->def->ns; + box = me->def->box; } break; case VM_FRAME_MAGIC_CLASS: magic = "CLASS"; - ns = VM_ENV_NAMESPACE_UNCHECKED(env); + box = VM_ENV_BOX_UNCHECKED(env); break; case VM_FRAME_MAGIC_BLOCK: magic = "BLOCK"; @@ -316,7 +316,7 @@ namespace_env_dump(const rb_execution_context_t *ec, const VALUE *env, const rb_ case VM_FRAME_MAGIC_CFUNC: magic = "CFUNC"; if (me) { - ns = me->def->ns; + box = me->def->box; } break; case VM_FRAME_MAGIC_IFUNC: @@ -382,11 +382,11 @@ namespace_env_dump(const rb_execution_context_t *ec, const VALUE *env, const rb_ } kprintf(ep_in_heap == ' ' ? "e:%06"PRIdPTRDIFF" " : "E:%06"PRIxPTRDIFF" ", ep % 10000); kprintf("l:%s ", VM_ENV_LOCAL_P(env) ? "y" : "n"); - if (ns) { - kprintf("n:%04ld ", ns->ns_id % 10000); + if (box) { + kprintf("b:%04ld ", box->box_id % 10000); } else { - kprintf("n:---- "); + kprintf("b:---- "); } kprintf("%-6s", magic); if (line) { @@ -402,36 +402,36 @@ namespace_env_dump(const rb_execution_context_t *ec, const VALUE *env, const rb_ } static bool -namespace_env_dump_unchecked(const rb_execution_context_t *ec, const VALUE *env, const rb_control_frame_t *checkpoint_cfp, FILE *errout) +box_env_dump_unchecked(const rb_execution_context_t *ec, const VALUE *env, const rb_control_frame_t *checkpoint_cfp, FILE *errout) { if (env == NULL) { - kprintf("c:---- e:000000 l:- n:---- (none)\n"); + kprintf("c:---- e:000000 l:- b:---- (none)\n"); return true; } else { - return namespace_env_dump(ec, env, checkpoint_cfp, errout); + return box_env_dump(ec, env, checkpoint_cfp, errout); } error: return false; } bool -rb_vmdebug_namespace_env_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *current_cfp, FILE *errout) +rb_vmdebug_box_env_dump_raw(const rb_execution_context_t *ec, const rb_control_frame_t *current_cfp, FILE *errout) { // See VM_EP_RUBY_LEP for the original logic const VALUE *ep = current_cfp->ep; const rb_control_frame_t * const eocfp = RUBY_VM_END_CONTROL_FRAME(ec); /* end of control frame pointer */ const rb_control_frame_t *cfp = current_cfp, *checkpoint_cfp = current_cfp; - kprintf("-- Namespace detection information " + kprintf("-- Ruby Box detection information " "-----------------------------------------\n"); - namespace_env_dump_unchecked(ec, ep, checkpoint_cfp, errout); + box_env_dump_unchecked(ec, ep, checkpoint_cfp, errout); if (VM_ENV_FRAME_TYPE_P(ep, VM_FRAME_MAGIC_IFUNC)) { while (!VM_ENV_LOCAL_P(ep)) { ep = VM_ENV_PREV_EP(ep); - namespace_env_dump_unchecked(ec, ep, checkpoint_cfp, errout); + box_env_dump_unchecked(ec, ep, checkpoint_cfp, errout); } goto stop; } @@ -446,7 +446,7 @@ rb_vmdebug_namespace_env_dump_raw(const rb_execution_context_t *ec, const rb_con goto stop; } ep = cfp->ep; - namespace_env_dump_unchecked(ec, ep, checkpoint_cfp, errout); + box_env_dump_unchecked(ec, ep, checkpoint_cfp, errout); if (!ep) { goto stop; } @@ -454,7 +454,7 @@ rb_vmdebug_namespace_env_dump_raw(const rb_execution_context_t *ec, const rb_con while (!VM_ENV_LOCAL_P(ep)) { ep = VM_ENV_PREV_EP(ep); - namespace_env_dump_unchecked(ec, ep, checkpoint_cfp, errout); + box_env_dump_unchecked(ec, ep, checkpoint_cfp, errout); } stop: @@ -1408,21 +1408,21 @@ rb_vm_bugreport(const void *ctx, FILE *errout) enum {other_runtime_info = 0}; #endif const rb_vm_t *const vm = GET_VM(); - const rb_namespace_t *current_ns = rb_current_namespace_in_crash_report(); + const rb_box_t *current_box = rb_current_box_in_crash_report(); const rb_execution_context_t *ec = rb_current_execution_context(false); VALUE loaded_features; - if (current_ns) { - loaded_features = current_ns->loaded_features; + if (current_box) { + loaded_features = current_box->loaded_features; } else { - loaded_features = rb_root_namespace()->loaded_features; + loaded_features = rb_root_box()->loaded_features; } if (vm && ec) { rb_vmdebug_stack_dump_raw(ec, ec->cfp, errout); if (ns_env) { - rb_vmdebug_namespace_env_dump_raw(ec, ec->cfp, errout); + rb_vmdebug_box_env_dump_raw(ec, ec->cfp, errout); } rb_backtrace_print_as_bugreport(errout); kputs("\n"); @@ -1468,19 +1468,19 @@ rb_vm_bugreport(const void *ctx, FILE *errout) LIMITED_NAME_LENGTH(name), RSTRING_PTR(name)); kprintf("\n"); } - if (rb_namespace_available()) { - kprintf("* Namespace: enabled\n"); - if (current_ns) { - kprintf("* Current namespace id: %ld, type: %s\n", - current_ns->ns_id, - NAMESPACE_USER_P(current_ns) ? (NAMESPACE_MAIN_P(current_ns) ? "main" : "user") : "root"); + if (rb_box_available()) { + kprintf("* Ruby Box: enabled\n"); + if (current_box) { + kprintf("* Current box id: %ld, type: %s\n", + current_box->box_id, + BOX_USER_P(current_box) ? (BOX_MAIN_P(current_box) ? "main" : "user") : "root"); } else { - kprintf("* Current namespace: NULL (crashed)\n"); + kprintf("* Current box: NULL (crashed)\n"); } } else { - kprintf("* Namespace: disabled\n"); + kprintf("* Ruby Box: disabled\n"); } if (loaded_features) { kprintf("* Loaded features:\n\n"); diff --git a/vm_eval.c b/vm_eval.c index cd3f1bbafa4c57..281d63a1b8268a 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -400,9 +400,9 @@ static inline const rb_callable_method_entry_t *rb_search_method_entry(VALUE rec static inline enum method_missing_reason rb_method_call_status(rb_execution_context_t *ec, const rb_callable_method_entry_t *me, call_type scope, VALUE self); static VALUE -gccct_hash(VALUE klass, VALUE namespace, ID mid) +gccct_hash(VALUE klass, VALUE box_value, ID mid) { - return ((klass ^ namespace) >> 3) ^ (VALUE)mid; + return ((klass ^ box_value) >> 3) ^ (VALUE)mid; } NOINLINE(static const struct rb_callcache *gccct_method_search_slowpath(rb_vm_t *vm, VALUE klass, unsigned int index, const struct rb_callinfo * ci)); @@ -447,8 +447,8 @@ scope_to_ci(call_type scope, ID mid, int argc, struct rb_callinfo *ci) static inline const struct rb_callcache * gccct_method_search(rb_execution_context_t *ec, VALUE recv, ID mid, const struct rb_callinfo *ci) { - VALUE klass, ns_value; - const rb_namespace_t *ns = rb_current_namespace(); + VALUE klass, box_value; + const rb_box_t *box = rb_current_box(); if (!SPECIAL_CONST_P(recv)) { klass = RBASIC_CLASS(recv); @@ -458,14 +458,14 @@ gccct_method_search(rb_execution_context_t *ec, VALUE recv, ID mid, const struct klass = CLASS_OF(recv); } - if (NAMESPACE_USER_P(ns)) { - ns_value = ns->ns_object; + if (BOX_USER_P(box)) { + box_value = box->box_object; } else { - ns_value = 0; + box_value = 0; } // search global method cache - unsigned int index = (unsigned int)(gccct_hash(klass, ns_value, mid) % VM_GLOBAL_CC_CACHE_TABLE_SIZE); + unsigned int index = (unsigned int)(gccct_hash(klass, box_value, mid) % VM_GLOBAL_CC_CACHE_TABLE_SIZE); rb_vm_t *vm = rb_ec_vm_ptr(ec); const struct rb_callcache *cc = vm->global_cc_cache_table[index]; diff --git a/vm_method.c b/vm_method.c index f5ad38e07c10fe..506a2919b77cd0 100644 --- a/vm_method.c +++ b/vm_method.c @@ -384,7 +384,7 @@ struct invalidate_callable_method_entry_foreach_arg { }; static void -invalidate_callable_method_entry_in_every_m_table_i(rb_classext_t *ext, bool is_prime, VALUE namespace, void *data) +invalidate_callable_method_entry_in_every_m_table_i(rb_classext_t *ext, bool is_prime, VALUE box_value, void *data) { st_data_t me; struct invalidate_callable_method_entry_foreach_arg *arg = (struct invalidate_callable_method_entry_foreach_arg *)data; @@ -1089,7 +1089,7 @@ rb_method_definition_create(rb_method_type_t type, ID mid) def->type = type; def->original_id = mid; def->method_serial = (uintptr_t)RUBY_ATOMIC_FETCH_ADD(method_serial, 1); - def->ns = rb_current_namespace(); + def->box = rb_current_box(); return def; } From 95a110a9af0b5bfe393934fa177abea58c0fee46 Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Thu, 6 Nov 2025 15:33:58 +0900 Subject: [PATCH 05/11] Define ::Ruby module earlier to define classes under it --- inits.c | 1 + version.c | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/inits.c b/inits.c index 4569362b95b8b7..4988fa09d0b6f6 100644 --- a/inits.c +++ b/inits.c @@ -52,6 +52,7 @@ rb_call_inits(void) CALL(Time); CALL(Random); CALL(load); + CALL(Ruby_module); CALL(Box); CALL(Proc); CALL(Binding); diff --git a/version.c b/version.c index d634755efd16c0..0a3bc7bf9b91ae 100644 --- a/version.c +++ b/version.c @@ -12,6 +12,7 @@ #include "internal/cmdlineopt.h" #include "internal/parse.h" #include "internal/gc.h" +#include "ruby/internal/globals.h" #include "ruby/ruby.h" #include "version.h" #include "vm_core.h" @@ -112,6 +113,12 @@ define_ruby_const(VALUE mod, const char *name, VALUE value, bool toplevel) #define rb_define_const(mod, name, value) \ define_ruby_const(mod, (mod == mRuby ? "RUBY_" name : name), value, (mod == mRuby)) +void +Init_Ruby_module(void) +{ + rb_define_module("Ruby"); +} + /*! Defines platform-depended Ruby-level constants */ void Init_version(void) @@ -123,7 +130,7 @@ Init_version(void) * The constants defined here are aliased in the toplevel with * +RUBY_+ prefix. */ - VALUE mRuby = rb_define_module("Ruby"); + VALUE mRuby = rb_path2class("Ruby"); enum {ruby_patchlevel = RUBY_PATCHLEVEL}; VALUE version = MKSTR(version); From c4691ef061d8783de970a93c6c6e3a048677181f Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Thu, 6 Nov 2025 15:34:16 +0900 Subject: [PATCH 06/11] Rename Namespace to Ruby::Box --- box.c | 60 +++++++++++++++++---------------- include/ruby/internal/globals.h | 3 +- internal/box.h | 2 +- 3 files changed, 33 insertions(+), 32 deletions(-) diff --git a/box.c b/box.c index f1290f60aa228e..fd9402c8e56db2 100644 --- a/box.c +++ b/box.c @@ -20,12 +20,12 @@ #include -VALUE rb_cNamespace = 0; -VALUE rb_cNamespaceEntry = 0; -VALUE rb_mNamespaceLoader = 0; +VALUE rb_cBox = 0; +VALUE rb_cBoxEntry = 0; +VALUE rb_mBoxLoader = 0; static rb_box_t root_box_data = { - /* Initialize values lazily in Init_namespace() */ + /* Initialize values lazily in Init_Box() */ (VALUE)NULL, 0, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (VALUE)NULL, (struct st_table *)NULL, (struct st_table *)NULL, (VALUE)NULL, (VALUE)NULL, @@ -332,7 +332,7 @@ box_initialize(VALUE box_value) rb_raise(rb_eRuntimeError, "Namespace is disabled. Set RUBY_NAMESPACE=1 environment variable to use Namespace."); } - entry = rb_class_new_instance_pass_kw(0, NULL, rb_cNamespaceEntry); + entry = rb_class_new_instance_pass_kw(0, NULL, rb_cBoxEntry); box = get_box_struct_internal(entry); box->box_object = box_value; @@ -750,14 +750,14 @@ initialize_root_box(void) if (rb_box_available()) { CONST_ID(id_box_entry, "__box_entry__"); - root_box = rb_obj_alloc(rb_cNamespace); + root_box = rb_obj_alloc(rb_cBox); RCLASS_SET_PRIME_CLASSEXT_WRITABLE(root_box, true); RCLASS_SET_CONST_TBL(root_box, RCLASSEXT_CONST_TBL(RCLASS_EXT_PRIME(rb_cObject)), true); root->box_id = box_generate_id(); root->box_object = root_box; - entry = TypedData_Wrap_Struct(rb_cNamespaceEntry, &rb_root_box_data_type, root); + entry = TypedData_Wrap_Struct(rb_cBoxEntry, &rb_root_box_data_type, root); rb_ivar_set(root_box, id_box_entry, entry); } else { @@ -800,14 +800,14 @@ rb_initialize_main_box(void) box_experimental_warned = 1; } - main_box_value = rb_class_new_instance(0, NULL, rb_cNamespace); + main_box_value = rb_class_new_instance(0, NULL, rb_cBox); VM_ASSERT(BOX_OBJ_P(main_box_value)); box = rb_get_box_t(main_box_value); box->box_object = main_box_value; box->is_user = true; box->is_optional = false; - rb_const_set(rb_cNamespace, rb_intern("MAIN"), main_box_value); + rb_const_set(rb_cBox, rb_intern("MAIN"), main_box_value); vm->main_box = main_box = box; @@ -853,8 +853,8 @@ rb_box_loading_func(int argc, VALUE *argv, VALUE _self) static void box_define_loader_method(const char *name) { - rb_define_private_method(rb_mNamespaceLoader, name, rb_box_loading_func, -1); - rb_define_singleton_method(rb_mNamespaceLoader, name, rb_box_loading_func, -1); + rb_define_private_method(rb_mBoxLoader, name, rb_box_loading_func, -1); + rb_define_singleton_method(rb_mBoxLoader, name, rb_box_loading_func, -1); } void @@ -1057,42 +1057,44 @@ Init_Box(void) tmp_dir = system_tmpdir(); tmp_dir_has_dirsep = (strcmp(tmp_dir + (strlen(tmp_dir) - strlen(DIRSEP)), DIRSEP) == 0); - rb_cNamespace = rb_define_class("Namespace", rb_cModule); - rb_define_method(rb_cNamespace, "initialize", box_initialize, 0); + VALUE mRuby = rb_path2class("Ruby"); + + rb_cBox = rb_define_class_under(mRuby, "Box", rb_cModule); + rb_define_method(rb_cBox, "initialize", box_initialize, 0); /* :nodoc: */ - rb_cNamespaceEntry = rb_define_class_under(rb_cNamespace, "Entry", rb_cObject); - rb_define_alloc_func(rb_cNamespaceEntry, rb_box_entry_alloc); + rb_cBoxEntry = rb_define_class_under(rb_cBox, "Entry", rb_cObject); + rb_define_alloc_func(rb_cBoxEntry, rb_box_entry_alloc); initialize_root_box(); /* :nodoc: */ - rb_mNamespaceLoader = rb_define_module_under(rb_cNamespace, "Loader"); + rb_mBoxLoader = rb_define_module_under(rb_cBox, "Loader"); box_define_loader_method("require"); box_define_loader_method("require_relative"); box_define_loader_method("load"); if (rb_box_available()) { - rb_include_module(rb_cObject, rb_mNamespaceLoader); + rb_include_module(rb_cObject, rb_mBoxLoader); - rb_define_singleton_method(rb_cNamespace, "root", rb_box_s_root, 0); - rb_define_singleton_method(rb_cNamespace, "main", rb_box_s_main, 0); - rb_define_method(rb_cNamespace, "root?", rb_box_root_p, 0); - rb_define_method(rb_cNamespace, "main?", rb_box_main_p, 0); + rb_define_singleton_method(rb_cBox, "root", rb_box_s_root, 0); + rb_define_singleton_method(rb_cBox, "main", rb_box_s_main, 0); + rb_define_method(rb_cBox, "root?", rb_box_root_p, 0); + rb_define_method(rb_cBox, "main?", rb_box_main_p, 0); #if RUBY_DEBUG rb_define_global_function("dump_classext", rb_f_dump_classext, 1); #endif } - rb_define_singleton_method(rb_cNamespace, "enabled?", rb_box_s_getenabled, 0); - rb_define_singleton_method(rb_cNamespace, "current", rb_box_s_current, 0); + rb_define_singleton_method(rb_cBox, "enabled?", rb_box_s_getenabled, 0); + rb_define_singleton_method(rb_cBox, "current", rb_box_s_current, 0); - rb_define_method(rb_cNamespace, "load_path", rb_box_load_path, 0); - rb_define_method(rb_cNamespace, "load", rb_box_load, -1); - rb_define_method(rb_cNamespace, "require", rb_box_require, 1); - rb_define_method(rb_cNamespace, "require_relative", rb_box_require_relative, 1); - rb_define_method(rb_cNamespace, "eval", rb_box_eval, 1); + rb_define_method(rb_cBox, "load_path", rb_box_load_path, 0); + rb_define_method(rb_cBox, "load", rb_box_load, -1); + rb_define_method(rb_cBox, "require", rb_box_require, 1); + rb_define_method(rb_cBox, "require_relative", rb_box_require_relative, 1); + rb_define_method(rb_cBox, "eval", rb_box_eval, 1); - rb_define_method(rb_cNamespace, "inspect", rb_box_inspect, 0); + rb_define_method(rb_cBox, "inspect", rb_box_inspect, 0); } diff --git a/include/ruby/internal/globals.h b/include/ruby/internal/globals.h index 528371abbb5923..9beb215c0ce03b 100644 --- a/include/ruby/internal/globals.h +++ b/include/ruby/internal/globals.h @@ -68,6 +68,7 @@ RUBY_EXTERN VALUE rb_cBasicObject; /**< `BasicObject` class. */ RUBY_EXTERN VALUE rb_cObject; /**< `Object` class. */ RUBY_EXTERN VALUE rb_cArray; /**< `Array` class. */ RUBY_EXTERN VALUE rb_cBinding; /**< `Binding` class. */ +RUBY_EXTERN VALUE rb_cBox; /**< `Ruby::Box` class. */ RUBY_EXTERN VALUE rb_cClass; /**< `Class` class. */ RUBY_EXTERN VALUE rb_cDir; /**< `Dir` class. */ RUBY_EXTERN VALUE rb_cEncoding; /**< `Encoding` class. */ @@ -84,8 +85,6 @@ RUBY_EXTERN VALUE rb_cMethod; /**< `Method` class. */ RUBY_EXTERN VALUE rb_cModule; /**< `Module` class. */ RUBY_EXTERN VALUE rb_cRefinement; /**< `Refinement` class. */ RUBY_EXTERN VALUE rb_cNameErrorMesg; /**< `NameError::Message` class. */ -RUBY_EXTERN VALUE rb_cNamespace; /**< `Namespace` class. */ -RUBY_EXTERN VALUE rb_mNamespaceRefiner; /**< `Namespace::Refiner` module. */ RUBY_EXTERN VALUE rb_cNilClass; /**< `NilClass` class. */ RUBY_EXTERN VALUE rb_cNumeric; /**< `Numeric` class. */ RUBY_EXTERN VALUE rb_cProc; /**< `Proc` class. */ diff --git a/internal/box.h b/internal/box.h index 36844ebf19b24a..41cad634823f71 100644 --- a/internal/box.h +++ b/internal/box.h @@ -40,7 +40,7 @@ struct rb_box_struct { }; typedef struct rb_box_struct rb_box_t; -#define BOX_OBJ_P(obj) (rb_obj_class(obj) == rb_cNamespace) +#define BOX_OBJ_P(obj) (rb_obj_class(obj) == rb_cBox) #define BOX_ROOT_P(box) (box && !box->is_user) #define BOX_USER_P(box) (box && box->is_user) From ccad753c64f2e8410e69a272c55b793a6d6c5e79 Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Thu, 6 Nov 2025 16:03:56 +0900 Subject: [PATCH 07/11] Re-rename files wrongly renamed --- doc/{box.h => box.md} | 0 test/ruby/{test_box.c => test_box.rb} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename doc/{box.h => box.md} (100%) rename test/ruby/{test_box.c => test_box.rb} (100%) diff --git a/doc/box.h b/doc/box.md similarity index 100% rename from doc/box.h rename to doc/box.md diff --git a/test/ruby/test_box.c b/test/ruby/test_box.rb similarity index 100% rename from test/ruby/test_box.c rename to test/ruby/test_box.rb From 19d4663d2f6b7da4a975dbfe83fb0d0a4ad8ae8b Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Thu, 6 Nov 2025 16:04:40 +0900 Subject: [PATCH 08/11] Use RUBY_BOX environment variable instead of RUBY_NAMESPACE --- box.c | 6 +++--- class.c | 2 +- vm_dump.c | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/box.c b/box.c index fd9402c8e56db2..bdb80a788cb59a 100644 --- a/box.c +++ b/box.c @@ -78,7 +78,7 @@ const rb_box_t * rb_current_box(void) { /* - * If RUBY_NAMESPACE is not set, the root box is the only available one. + * If RUBY_BOX is not set, the root box is the only available one. * * Until the main_box is not initialized, the root box is * the only valid box. @@ -329,7 +329,7 @@ box_initialize(VALUE box_value) CONST_ID(id_box_entry, "__box_entry__"); if (!rb_box_available()) { - rb_raise(rb_eRuntimeError, "Namespace is disabled. Set RUBY_NAMESPACE=1 environment variable to use Namespace."); + rb_raise(rb_eRuntimeError, "Ruby Box is disabled. Set RUBY_BOX=1 environment variable to use Ruby::Box."); } entry = rb_class_new_instance_pass_kw(0, NULL, rb_cBoxEntry); @@ -866,7 +866,7 @@ Init_root_box(void) void Init_enable_box(void) { - const char *env = getenv("RUBY_NAMESPACE"); + const char *env = getenv("RUBY_BOX"); if (env && strlen(env) == 1 && env[0] == '1') { ruby_box_enabled = true; } diff --git a/class.c b/class.c index 16ebd3b88965ea..23e1188bb2f369 100644 --- a/class.c +++ b/class.c @@ -990,7 +990,7 @@ rb_class_new(VALUE super) RCLASS_SET_MAX_IV_COUNT(klass, RCLASS_MAX_IV_COUNT(super)); } - RUBY_ASSERT(getenv("RUBY_NAMESPACE") || RCLASS_PRIME_CLASSEXT_WRITABLE_P(klass)); + RUBY_ASSERT(getenv("RUBY_BOX") || RCLASS_PRIME_CLASSEXT_WRITABLE_P(klass)); return klass; } diff --git a/vm_dump.c b/vm_dump.c index ece04f563e8f88..c51c6cca81ea5a 100644 --- a/vm_dump.c +++ b/vm_dump.c @@ -1377,7 +1377,7 @@ rb_dump_machine_register(FILE *errout, const ucontext_t *ctx) bool rb_vm_bugreport(const void *ctx, FILE *errout) { - const char *ns_env = getenv("RUBY_BUGREPORT_NAMESPACE_ENV"); + const char *box_env = getenv("RUBY_BUGREPORT_BOX_ENV"); const char *cmd = getenv("RUBY_ON_BUG"); if (cmd) { char buf[0x100]; @@ -1421,7 +1421,7 @@ rb_vm_bugreport(const void *ctx, FILE *errout) if (vm && ec) { rb_vmdebug_stack_dump_raw(ec, ec->cfp, errout); - if (ns_env) { + if (box_env) { rb_vmdebug_box_env_dump_raw(ec, ec->cfp, errout); } rb_backtrace_print_as_bugreport(errout); From 49c0502f5deccbf5ba788a9387770bfff2ef5794 Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Thu, 6 Nov 2025 17:28:57 +0900 Subject: [PATCH 09/11] Apply renaming to Ruby::Box in test codes --- test/ruby/test_autoload.rb | 6 +- test/ruby/test_box.rb | 195 +++++++++++++++++++------------------ 2 files changed, 104 insertions(+), 97 deletions(-) diff --git a/test/ruby/test_autoload.rb b/test/ruby/test_autoload.rb index 7b6a0b5712556d..50949274a362f8 100644 --- a/test/ruby/test_autoload.rb +++ b/test/ruby/test_autoload.rb @@ -224,7 +224,7 @@ def ruby_impl_require Kernel.module_eval do alias old_require require end - Namespace.module_eval do + Ruby::Box.module_eval do alias old_require require end called_with = [] @@ -232,7 +232,7 @@ def ruby_impl_require called_with << path old_require path end - Namespace.send :define_method, :require do |path| + Ruby::Box.send :define_method, :require do |path| called_with << path old_require path end @@ -243,7 +243,7 @@ def ruby_impl_require alias require old_require undef old_require end - Namespace.module_eval do + Ruby::Box.module_eval do undef require alias require old_require undef old_require diff --git a/test/ruby/test_box.rb b/test/ruby/test_box.rb index 4241ce62ff4a92..9b87f9b5bc458a 100644 --- a/test/ruby/test_box.rb +++ b/test/ruby/test_box.rb @@ -2,41 +2,48 @@ require 'test/unit' -class TestNamespace < Test::Unit::TestCase +class TestBox < Test::Unit::TestCase EXPERIMENTAL_WARNINGS = [ - "warning: Namespace is experimental, and the behavior may change in the future!", - "See doc/namespace.md for known issues, etc." + "warning: Ruby::Box is experimental, and the behavior may change in the future!", + "See doc/box.md for known issues, etc." ].join("\n") - ENV_ENABLE_NAMESPACE = {'RUBY_NAMESPACE' => '1'} + ENV_ENABLE_BOX = {'RUBY_BOX' => '1', 'TEST_DIR' => __dir__} def setup - @n = Namespace.new if Namespace.enabled? + @n = nil + @dir = __dir__ end def teardown @n = nil end - def test_namespace_availability - env_has_RUBY_NAMESPACE = (ENV['RUBY_NAMESPACE'].to_i == 1) - assert_equal env_has_RUBY_NAMESPACE, Namespace.enabled? + def test_box_availability_in_default + assert_separately([], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) + begin; + assert_nil ENV['RUBY_BOX'] + assert !Ruby::Box.enabled? + end; end - def test_current_namespace - pend unless Namespace.enabled? - - main = Namespace.current - assert main.inspect.include?("main") - - @n.require_relative('namespace/current') + def test_box_availability_when_enabled + assert_separately([ENV_ENABLE_BOX], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) + begin; + assert '1', ENV['RUBY_BOX'] + assert Ruby::Box.enabled? + end; + end - assert_equal @n, @n::CurrentNamespace.in_require - assert_equal @n, @n::CurrentNamespace.in_method_call - assert_equal main, Namespace.current + def test_current_box_in_main + assert_separately([ENV_ENABLE_BOX], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) + begin; + assert_equal Ruby::Box.main, Ruby::Box.current + assert Ruby::Box.main.main? + end; end def test_require_rb_separately - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? assert_raise(NameError) { NS_A } assert_raise(NameError) { NS_B } @@ -55,7 +62,7 @@ def test_require_rb_separately end def test_require_relative_rb_separately - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? assert_raise(NameError) { NS_A } assert_raise(NameError) { NS_B } @@ -74,7 +81,7 @@ def test_require_relative_rb_separately end def test_load_separately - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? assert_raise(NameError) { NS_A } assert_raise(NameError) { NS_B } @@ -92,8 +99,8 @@ def test_load_separately assert_raise(NameError) { NS_B } end - def test_namespace_in_namespace - pend unless Namespace.enabled? + def test_box_in_box + pend unless Ruby::Box.enabled? assert_raise(NameError) { NS1 } assert_raise(NameError) { NS_A } @@ -115,7 +122,7 @@ def test_namespace_in_namespace end def test_require_rb_2versions - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? assert_raise(NameError) { NS_A } @@ -136,14 +143,14 @@ def test_require_rb_2versions end def test_raising_errors_in_require - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? assert_raise(RuntimeError, "Yay!") { @n.require(File.join(__dir__, 'namespace', 'raise')) } assert Namespace.current.inspect.include?("main") end - def test_autoload_in_namespace - pend unless Namespace.enabled? + def test_autoload_in_box + pend unless Ruby::Box.enabled? assert_raise(NameError) { NS_A } @@ -160,8 +167,8 @@ def test_autoload_in_namespace assert_raise(NameError) { NS_B } end - def test_continuous_top_level_method_in_a_namespace - pend unless Namespace.enabled? + def test_continuous_top_level_method_in_a_box + pend unless Ruby::Box.enabled? @n.require_relative('namespace/define_toplevel') @n.require_relative('namespace/call_toplevel') @@ -169,18 +176,18 @@ def test_continuous_top_level_method_in_a_namespace assert_raise(NameError) { foo } end - def test_top_level_methods_in_namespace - pend # TODO: fix loading/current namespace detection - pend unless Namespace.enabled? - @n.require_relative('namespace/top_level') + def test_top_level_methods_in_box + pend # TODO: fix loading/current box detection + pend unless Ruby::Box.enabled? + @n.require_relative('box/top_level') assert_equal "yay!", @n::Foo.foo assert_raise(NameError) { yaaay } assert_equal "foo", @n::Bar.bar assert_raise_with_message(RuntimeError, "boooo") { @n::Baz.baz } end - def test_proc_defined_in_namespace_refers_module_in_namespace - pend unless Namespace.enabled? + def test_proc_defined_in_box_refers_module_in_box + pend unless Ruby::Box.enabled? # require_relative dosn't work well in assert_separately even with __FILE__ and __LINE__ assert_separately([ENV_ENABLE_NAMESPACE], __FILE__, __LINE__, "here = '#{__dir__}'; #{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) @@ -202,7 +209,7 @@ def test_proc_defined_in_namespace_refers_module_in_namespace end def test_proc_defined_globally_refers_global_module - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? # require_relative dosn't work well in assert_separately even with __FILE__ and __LINE__ assert_separately([ENV_ENABLE_NAMESPACE], __FILE__, __LINE__, "here = '#{__dir__}'; #{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) @@ -227,7 +234,7 @@ def Target.foo end def test_instance_variable - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? @n.require_relative('namespace/instance_variables') @@ -246,8 +253,8 @@ def test_instance_variable assert_equal [], String.instance_variables end - def test_methods_added_in_namespace_are_invisible_globally - pend unless Namespace.enabled? + def test_methods_added_in_box_are_invisible_globally + pend unless Ruby::Box.enabled? @n.require_relative('namespace/string_ext') @@ -256,8 +263,8 @@ def test_methods_added_in_namespace_are_invisible_globally assert_raise(NoMethodError){ String.new.yay } end - def test_continuous_method_definitions_in_a_namespace - pend unless Namespace.enabled? + def test_continuous_method_definitions_in_a_box + pend unless Ruby::Box.enabled? @n.require_relative('namespace/string_ext') assert_equal "yay", @n::Bar.yay @@ -268,8 +275,8 @@ def test_continuous_method_definitions_in_a_namespace @n.require_relative('namespace/string_ext_calling') end - def test_methods_added_in_namespace_later_than_caller_code - pend unless Namespace.enabled? + def test_methods_added_in_box_later_than_caller_code + pend unless Ruby::Box.enabled? @n.require_relative('namespace/string_ext_caller') @n.require_relative('namespace/string_ext') @@ -278,8 +285,8 @@ def test_methods_added_in_namespace_later_than_caller_code assert_equal "yay", @n::Foo.yay end - def test_method_added_in_namespace_are_available_on_eval - pend unless Namespace.enabled? + def test_method_added_in_box_are_available_on_eval + pend unless Ruby::Box.enabled? @n.require_relative('namespace/string_ext') @n.require_relative('namespace/string_ext_eval_caller') @@ -287,8 +294,8 @@ def test_method_added_in_namespace_are_available_on_eval assert_equal "yay", @n::Baz.yay end - def test_method_added_in_namespace_are_available_on_eval_with_binding - pend unless Namespace.enabled? + def test_method_added_in_box_are_available_on_eval_with_binding + pend unless Ruby::Box.enabled? @n.require_relative('namespace/string_ext') @n.require_relative('namespace/string_ext_eval_caller') @@ -297,7 +304,7 @@ def test_method_added_in_namespace_are_available_on_eval_with_binding end def test_methods_and_constants_added_by_include - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? @n.require_relative('namespace/open_class_with_include') @@ -317,13 +324,13 @@ module B end end -class TestNamespace < Test::Unit::TestCase +class TestBox < Test::Unit::TestCase def make_proc_from_block(&b) b end def test_proc_from_main_works_with_global_definitions - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? @n.require_relative('namespace/procs') @@ -358,8 +365,8 @@ def test_proc_from_main_works_with_global_definitions end end - def test_proc_from_namespace_works_with_definitions_in_namespace - pend unless Namespace.enabled? + def test_proc_from_box_works_with_definitions_in_box + pend unless Ruby::Box.enabled? @n.require_relative('namespace/procs') @@ -379,7 +386,7 @@ def test_proc_from_namespace_works_with_definitions_in_namespace end def test_class_module_singleton_methods - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? @n.require_relative('namespace/singleton_methods') @@ -397,8 +404,8 @@ def test_class_module_singleton_methods assert_raise(NoMethodError) { Hash.http_200 } end - def test_add_constants_in_namespace - pend unless Namespace.enabled? + def test_add_constants_in_box + pend unless Ruby::Box.enabled? String.const_set(:STR_CONST0, 999) assert_equal 999, String::STR_CONST0 @@ -479,7 +486,7 @@ def test_global_variables default_l = $-0 default_f = $, - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? assert_equal "\n", $-0 # equal to $/, line splitter assert_equal nil, $, # field splitter @@ -517,7 +524,7 @@ def test_global_variables end def test_load_path_and_loaded_features - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? assert $LOAD_PATH.respond_to?(:resolve_feature_path) @@ -539,7 +546,7 @@ def test_load_path_and_loaded_features end def test_eval_basic - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? # Test basic evaluation result = @n.eval("1 + 1") @@ -551,7 +558,7 @@ def test_eval_basic end def test_eval_with_constants - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? # Define a constant in the namespace via eval @n.eval("TEST_CONST = 42") @@ -562,7 +569,7 @@ def test_eval_with_constants end def test_eval_with_classes - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? # Define a class in the namespace via eval @n.eval("class TestClass; def hello; 'from namespace'; end; end") @@ -576,7 +583,7 @@ def test_eval_with_classes end def test_eval_isolation - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? # Create another namespace n2 = Namespace.new @@ -594,7 +601,7 @@ def test_eval_isolation end def test_eval_with_variables - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? # Test local variable access (should work within the eval context) result = @n.eval("x = 10; y = 20; x + y") @@ -602,7 +609,7 @@ def test_eval_with_variables end def test_eval_error_handling - pend unless Namespace.enabled? + pend unless Ruby::Box.enabled? # Test syntax error assert_raise(SyntaxError) { @n.eval("1 +") } @@ -620,10 +627,10 @@ def test_eval_error_handling end end - # Tests which run always (w/o RUBY_NAMESPACE=1 globally) + # Tests which run always (w/o RUBY_BOX=1 globally) def test_prelude_gems_and_loaded_features - assert_in_out_err([ENV_ENABLE_NAMESPACE, "--enable=gems"], "#{<<-"begin;"}\n#{<<-'end;'}") do |output, error| + assert_in_out_err([ENV_ENABLE_BOX, "--enable=gems"], "#{<<-"begin;"}\n#{<<-'end;'}") do |output, error| begin; puts ["before:", $LOADED_FEATURES.select{ it.end_with?("/bundled_gems.rb") }&.first].join puts ["before:", $LOADED_FEATURES.select{ it.end_with?("/error_highlight.rb") }&.first].join @@ -646,7 +653,7 @@ def test_prelude_gems_and_loaded_features end def test_prelude_gems_and_loaded_features_with_disable_gems - assert_in_out_err([ENV_ENABLE_NAMESPACE, "--disable=gems"], "#{<<-"begin;"}\n#{<<-'end;'}") do |output, error| + assert_in_out_err([ENV_ENABLE_BOX, "--disable=gems"], "#{<<-"begin;"}\n#{<<-'end;'}") do |output, error| begin; puts ["before:", $LOADED_FEATURES.select{ it.end_with?("/bundled_gems.rb") }&.first].join puts ["before:", $LOADED_FEATURES.select{ it.end_with?("/error_highlight.rb") }&.first].join @@ -668,23 +675,23 @@ def test_prelude_gems_and_loaded_features_with_disable_gems end def test_root_and_main_methods - assert_separately([ENV_ENABLE_NAMESPACE], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) + assert_separately([ENV_ENABLE_BOX], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) begin; - pend unless Namespace.respond_to?(:root) and Namespace.respond_to?(:main) # for RUBY_DEBUG > 0 + pend unless Ruby::Box.respond_to?(:root) and Ruby::Box.respond_to?(:main) # for RUBY_DEBUG > 0 - assert Namespace.root.respond_to?(:root?) - assert Namespace.main.respond_to?(:main?) + assert Ruby::Box.root.respond_to?(:root?) + assert Ruby::Box.main.respond_to?(:main?) - assert Namespace.root.root? - assert Namespace.main.main? - assert_equal Namespace.main, Namespace.current + assert Ruby::Box.root.root? + assert Ruby::Box.main.main? + assert_equal Ruby::Box.main, Ruby::Box.current $a = 1 $LOADED_FEATURES.push("/tmp/foobar") - assert_equal 2, Namespace.root.eval('$a = 2; $a') - assert !Namespace.root.eval('$LOADED_FEATURES.push("/tmp/barbaz"); $LOADED_FEATURES.include?("/tmp/foobar")') - assert "FooClass", Namespace.root.eval('class FooClass; end; Object.const_get(:FooClass).to_s') + assert_equal 2, Ruby::Box.root.eval('$a = 2; $a') + assert !Ruby::Box.root.eval('$LOADED_FEATURES.push("/tmp/barbaz"); $LOADED_FEATURES.include?("/tmp/foobar")') + assert "FooClass", Ruby::Box.root.eval('class FooClass; end; Object.const_get(:FooClass).to_s') assert_equal 1, $a assert !$LOADED_FEATURES.include?("/tmp/barbaz") @@ -696,30 +703,30 @@ def test_root_and_main_methods File.unlink(*Dir.glob(pat, base: tmp).map {|so| "#{tmp}/#{so}"}) end - def test_basic_namespace_detections - assert_separately([ENV_ENABLE_NAMESPACE], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) + def test_basic_box_detections + assert_separately([ENV_ENABLE_BOX], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) begin; - ns = Namespace.new + ns = Ruby::Box.new $gvar1 = 'bar' code = <<~EOC - NS1 = Namespace.current + NS1 = Ruby::Box.current $gvar1 = 'foo' def toplevel = $gvar1 class Foo - NS2 = Namespace.current + NS2 = Ruby::Box.current NS2_proc = ->(){ NS2 } - NS3_proc = ->(){ Namespace.current } + NS3_proc = ->(){ Ruby::Box.current } - def ns4 = Namespace.current + def ns4 = Ruby::Box.current def self.ns5 = NS2 - def self.ns6 = Namespace.current - def self.ns6_proc = ->(){ Namespace.current } + def self.ns6 = Ruby::Box.current + def self.ns6_proc = ->(){ Ruby::Box.current } def self.ns7 res = [] [1,2].chunk{ it.even? }.each do |bool, members| - res << Namespace.current.object_id.to_s + ":" + bool.to_s + ":" + members.map(&:to_s).join(",") + res << Ruby::Box.current.object_id.to_s + ":" + bool.to_s + ":" + members.map(&:to_s).join(",") end res end @@ -733,15 +740,15 @@ def self.call_toplevel = toplevel FOO_NAME = Foo.name module Kernel - def foo_namespace = Namespace.current - module_function :foo_namespace + def foo_box = Ruby::Box.current + module_function :foo_box end NS_X = Foo.new.ns4 - NS_Y = foo_namespace + NS_Y = foo_box EOC ns.eval(code) - outer = Namespace.current + outer = Ruby::Box.current assert_equal ns, ns::NS1 # on TOP frame assert_equal ns, ns::Foo::NS2 # on CLASS frame assert_equal ns, ns::Foo::NS2_proc.call # proc -> a const on CLASS @@ -754,8 +761,8 @@ def foo_namespace = Namespace.current # a block after CFUNC/IFUNC in a method -> the current assert_equal ["#{ns.object_id}:false:1", "#{ns.object_id}:true:2"], ns::Foo.ns7 - assert_equal outer, ns::Foo.yield_block{ Namespace.current } # method yields - assert_equal outer, ns::Foo.call_block{ Namespace.current } # method calls a block + assert_equal outer, ns::Foo.yield_block{ Ruby::Box.current } # method yields + assert_equal outer, ns::Foo.call_block{ Ruby::Box.current } # method calls a block assert_equal 'foo', ns::Foo.gvar1 # method refers gvar assert_equal 'bar', $gvar1 # gvar value out of the ns @@ -769,9 +776,9 @@ def foo_namespace = Namespace.current end; end - def test_loading_extension_libs_in_main_namespace + def test_loading_extension_libs_in_main_box pend if /mswin|mingw/ =~ RUBY_PLATFORM # timeout on windows environments - assert_separately([ENV_ENABLE_NAMESPACE], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) + assert_separately([ENV_ENABLE_BOX], __FILE__, __LINE__, "#{<<~"begin;"}\n#{<<~'end;'}", ignore_stderr: true) begin; require "prism" require "optparse" From 8ebeb751eeb706a18c52033da27a0c45cbfc6630 Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Thu, 6 Nov 2025 18:01:40 +0900 Subject: [PATCH 10/11] Update Ruby Box document, delete problems/discussions already resolved --- doc/box.md | 260 ++++++++++++++++++++--------------------------------- 1 file changed, 97 insertions(+), 163 deletions(-) diff --git a/doc/box.md b/doc/box.md index eee6b940725bbb..96c0db26a9a853 100644 --- a/doc/box.md +++ b/doc/box.md @@ -1,45 +1,42 @@ -# Namespace - Ruby's in-process separation of Classes and Modules +# Ruby Box - Ruby's in-process separation of Classes and Modules -Namespace is designed to provide separated spaces in a Ruby process, to isolate applications and libraries. +Ruby Box is designed to provide separated spaces in a Ruby process, to isolate applications and libraries. ## Known issues -* Experimental warning is shown when ruby starts with `RUBY_NAMESPACE=1` (specify `-W:no-experimental` option to hide it) +* Experimental warning is shown when ruby starts with `RUBY_BOX=1` (specify `-W:no-experimental` option to hide it) * `bundle install` may fail * `require 'active_support'` may fail * A wrong current namespace detection happens sometimes in the root namespace ## TODOs -* Identify the CI failure cause and restore temporarily skipped tests (mmtk, test/ruby/test_allocation on i686) -* Reconstruct current/loading namespace management based on control frames * Add the loaded namespace on iseq to check if another namespace tries running the iseq (add a field only when VM_CHECK_MODE?) -* Delete per-namespace extension files (.so) lazily or process exit -* Collect rb_classext_t entries for a namespace when the namespace is collected -* Allocate an rb_namespace_t entry as the root namespace at first, then construct the contents and wrap it as rb_cNamespace instance later (to eliminate root/builtin two namespaces situation) -* Assign its own TOPLEVEL_BINDING in namespaces -* Fix `warn` in namespaces to refer `$VERBOSE` in the namespace -* Make an internal data container `Namespace::Entry` invisible +* Delete per-box extension files (.so) lazily or process exit +* Collect `rb_classext_t` entries for a box when GC collects the box +* Assign its own TOPLEVEL_BINDING in boxes +* Fix calling `warn` in boxes to refer `$VERBOSE` and `Warning.warn` in the box +* Make an internal data container `Ruby::Box::Entry` invisible * More test cases about `$LOAD_PATH` and `$LOADED_FEATURES` * Return classpath and nesting without the namespace prefix in the namespace itself [#21316](https://bugs.ruby-lang.org/issues/21316), [#21318](https://bugs.ruby-lang.org/issues/21318) ## How to use -### Enabling namespace +### Enabling Ruby Box -First, an environment variable should be set at the ruby process bootup: `RUBY_NAMESPACE=1`. -The only valid value is `1` to enable namespace. Other values (or unset `RUBY_NAMESPACE`) means disabling namespace. And setting the value after Ruby program starts doesn't work. +First, an environment variable should be set at the ruby process bootup: `RUBY_BOX=1`. +The only valid value is `1` to enable namespace. Other values (or unset `RUBY_BOX`) means disabling namespace. And setting the value after Ruby program starts doesn't work. -### Using namespace +### Using Ruby Box -`Namespace` class is the entrypoint of namespaces. +`Ruby::Box` class is the entrypoint of Ruby Box. ```ruby -ns = Namespace.new -ns.require('something') # or require_relative, load +box = Ruby::Box.new +box.require('something') # or require_relative, load ``` -The required file (either .rb or .so/.dll/.bundle) is loaded in the namespace (`ns` here). The required/loaded files from `something` will be loaded in the namespace recursively. +The required file (either .rb or .so/.dll/.bundle) is loaded in the box (`box` here). The required/loaded files from `something` will be loaded in the box recursively. ```ruby # something.rb @@ -52,7 +49,7 @@ class Something end ``` -Classes/modules, those methods and constants defined in the namespace can be accessed via `ns` object. +Classes/modules, those methods and constants defined in the box can be accessed via `ns` object. ```ruby p ns::Something.x # 1 @@ -60,50 +57,48 @@ p ns::Something.x # 1 X = 2 p X # 2 p ::X # 2 -p ns::Something.x # 1 -p ns::X # 1 +p box::Something.x # 1 +p box::X # 1 ``` -Instance methods defined in the namespace also run with definitions in the namespace. +Instance methods defined in the box also run with definitions in the box. ```ruby -s = ns::Something.new +s = box::Something.new p s.x # 1 ``` ## Specifications -### Namespace types - -There are two namespace types: +### Ruby Box types -* Root namespace -* User namespace +There are two box types: -There is the root namespace, just a single namespace in a Ruby process. Ruby bootstrap runs in the root namespace, and all builtin classes/modules are defined in the root namespace. (See "Builtin classes and modules".) +* Root box +* User boxes -User namespaces are to run user-written programs and libraries loaded from user programs. The user's main program (specified by the `ruby` command line argument) is executed in the "main" namespace, which is a user namespace automatically created at the end of Ruby's bootstrap, copied from the root namespace. +There is the root box, just a single box in a Ruby process. Ruby bootstrap runs in the root box, and all builtin classes/modules are defined in the root box. (See "Builtin classes and modules".) -When `Namespace.new` is called, an "optional" namespace (a user, non-main namespace) is created, copied from the root namespace. All user namespaces are flat, copied from the root namespace. +User boxes are to run user-written programs and libraries loaded from user programs. The user's main program (specified by the `ruby` command line argument) is executed in the "main" box, which is a user namespace automatically created at the end of Ruby's bootstrap, copied from the root box. -### Namespace class and instances +When `Ruby::Box.new` is called, an "optional" box (a user, non-main box) is created, copied from the root box. All user boxes are flat, copied from the root box. -`Namespace` is a top level class, as a subclass of `Module`, and `Namespace` instances are a kind of `Module`. +### Ruby Box class and instances -### Classes and modules defined in namespace +`Ruby::Box` is a class, as a subclass of `Module`. `Ruby::Box` instances are a kind of `Module`. -The classes and modules, newly defined in a namespace `ns`, are defined under `ns`. For example, if a class `A` is defined in `ns`, it is actually defined as `ns::A`. +### Classes and modules defined in boxes -In the namespace `ns`, `ns::A` can be referred to as `A` (and `::A`). From outside of `ns`, it can be referred to as `ns::A`. +The classes and modules, newly defined in a box `box`, are accessible via `box`. For example, if a class `A` is defined in `box`, it is accessible as `box::A` from outside of the box. -The main namespace is exceptional. Top level classes and modules defined in the main namespace are just top level classes and modules. +In the box `box`, `A` can be referred to as `A` (and `::A`). -### Classes and modules reopened in namespace +### Built-in classes and modules reopened in boxes -In namespaces, builtin classes/modules are visible and can be reopened. Those classes/modules can be reopened using `class` or `module` clauses, and class/module definitions can be changed. +In boxes, builtin classes/modules are visible and can be reopened. Those classes/modules can be reopened using `class` or `module` clauses, and class/module definitions can be changed. -The changed definitions are visible only in the namespace. In other namespaces, builtin classes/modules and those instances work without changed definitions. +The changed definitions are visible only in the box. In other boxes, builtin classes/modules and those instances work without changed definitions. ```ruby # in foo.rb @@ -126,21 +121,20 @@ Foo.foo.blank? #=> false "foo".blank? #=> false # in main.rb -ns = Namespace.new -ns.require('foo') +box = Ruby::Box.new +box.require('foo') -Foo.foo_is_blank? #=> false (#blank? called in ns) +box::Foo.foo_is_blank? #=> false (#blank? called in box) -Foo.foo.blank? # NoMethodError -"foo".blank? # NoMethodError +"foo".blank? # NoMethodError String::BLANK_PATTERN # NameError ``` -The main namespace and `ns` are different namespaces, so monkey patches in main are also invisible in `ns`. +The main box and `box` are different boxes, so monkey patches in main are also invisible in `box`. ### Builtin classes and modules -In the namespace context, "builtin" classes and modules are classes and modules: +In the box context, "builtin" classes and modules are classes and modules: * Accessible without any `require` calls in user scripts * Defined before any user program start running @@ -148,11 +142,11 @@ In the namespace context, "builtin" classes and modules are classes and modules: Hereafter, "builtin classes and modules" will be referred to as just "builtin classes". -### Builtin classes referred via namespace objects +### Builtin classes referred via box objects -Builtin classes in a namespace `ns` can be referred from other namespace. For example, `ns::String` is a valid reference, and `String` and `ns::String` are identical (`String == ns::String`, `String.object_id == ns::String.object_id`). +Builtin classes in a box `box` can be referred from other boxes. For example, `box::String` is a valid reference, and `String` and `box::String` are identical (`String == box::String`, `String.object_id == box::String.object_id`). -`ns::String`-like reference returns just a `String` in the current namespace, so its definition is `String` in the namespace, not in `ns`. +`box::String`-like reference returns just a `String` in the current box, so its definition is `String` in the box, not in `box`. ```ruby # foo.rb @@ -161,15 +155,15 @@ class String end # main.rb -ns = Namespace.new -ns.require('foo') +box = Ruby::Box.new +box.require('foo') -ns::String.foo # NoMethodError +box::String.foo # NoMethodError ``` ### Class instance variables, class variables, constants -Builtin classes can have different sets of class instance variables, class variables and constants between namespaces. +Builtin classes can have different sets of class instance variables, class variables and constants between boxes. ```ruby # foo.rb @@ -184,8 +178,8 @@ Array.class_variable_get(:@@v) #=> "_foo_" Array.const_get(:V) #=> "FOO" # main.rb -ns = Namespace.new -ns.require('foo') +box = Ruby::Box.new +box.require('foo') Array.instance_variable_get(:@v) #=> nil Array.class_variable_get(:@@v) # NameError @@ -194,7 +188,7 @@ Array.const_get(:V) # NameError ### Global variables -In namespaces, changes on global variables are also isolated in the namespace. Changes on global variables in a namespace are visible/applied only in the namespace. +In boxes, changes on global variables are also isolated in the boxes. Changes on global variables in a box are visible/applied only in the box. ```ruby # foo.rb @@ -207,8 +201,8 @@ puts "This appears: '#{$foo}'" p $foo #=> nil p $VERBOSE #=> false -ns = Namespace.new -ns.require('foo') # "This appears: 'foo'" +box = Ruby::Box.new +box.require('foo') # "This appears: 'foo'" p $foo #=> nil p $VERBOSE #=> false @@ -216,7 +210,7 @@ p $VERBOSE #=> false ### Top level constants -Usually, top level constants are defined as constants of `Object`. In namespaces, top level constants are constants of `Object` in the namespace. And the namespace object `ns`'s constants are strictly equal to constants of `Object`. +Usually, top level constants are defined as constants of `Object`. In boxes, top level constants are constants of `Object` in the box. And the box object `box`'s constants are strictly equal to constants of `Object`. ```ruby # foo.rb @@ -226,10 +220,10 @@ FOO #=> 100 Object::FOO #=> 100 # main.rb -ns = Namespace.new -ns.require('foo') +box = Ruby::Box.new +box.require('foo') -ns::FOO #=> 100 +box::FOO #=> 100 FOO # NameError Object::FOO # NameError @@ -237,7 +231,7 @@ Object::FOO # NameError ### Top level methods -Top level methods are private instance methods of `Object`, in each namespace. +Top level methods are private instance methods of `Object`, in each box. ```ruby # foo.rb @@ -251,115 +245,74 @@ Foo.say #=> "foo" yay #=> "foo" # main.rb -ns = Namespace.new -ns.require('foo') +box = Ruby::Box.new +box.require('foo') -ns.Foo.say #=> "foo" +box.Foo.say #=> "foo" yay # NoMethodError ``` -There is no way to expose top level methods in namespaces to another namespace. -(See "Expose top level methods as a method of the namespace object" in "Discussions" section below) +There is no way to expose top level methods in boxes to others. +(See "Expose top level methods as a method of the box object" in "Discussions" section below) -### Namespace scopes +### Ruby Box scopes -Namespace works in file scope. One `.rb` file runs in a single namespace. +Ruby Box works in file scope. One `.rb` file runs in a single box. -Once a file is loaded in a namespace `ns`, all methods/procs defined/created in the file run in `ns`. +Once a file is loaded in a box `box`, all methods/procs defined/created in the file run in `box`. ## Implementation details -#### Object Shapes - -Once builtin classes are copied and modified in namespaces, its instance variable management fallbacks from Object Shapes to a traditional iv table (st_table) because RClass stores the shape in its `flags`, not in `rb_classext_t`. - -#### Size of RClass and rb_classext_t - -Namespace requires to move some fields from RClass to `rb_classext_t`, then the size of RClass and `rb_classext_t` is now larger than `4 * RVALUE_SIZE`. It's against the expectation of [Variable Width Allocation](https://rubykaigi.org/2021-takeout/presentations/peterzhu2118.html). - -Now the `STATIC_ASSERT` to check the size is commented-out. (See "Minimize the size of RClass and rb_classext_t" in "Discussion" section below) - #### ISeq inline method/constant cache -As described above in "Namespace scopes", an ".rb" file runs in a namespace. So method/constant resolution will be done in a namespace consistently. +As described above in "Ruby Box scopes", an ".rb" file runs in a box. So method/constant resolution will be done in a box consistently. -That means ISeq inline caches work well even with namespaces. Otherwise, it's a bug. +That means ISeq inline caches work well even with boxes. Otherwise, it's a bug. #### Method call global cache (gccct) -`rb_funcall()` C function refers to the global cc cache table (gccct), and the cache key is calculated with the current namespace. +`rb_funcall()` C function refers to the global cc cache table (gccct), and the cache key is calculated with the current box. -So, `rb_funcall()` calls have a performance penalty when namespace is enabled. +So, `rb_funcall()` calls have a performance penalty when Ruby Box is enabled. -#### Current namespace and loading namespace +#### Current box and loading box -The current namespace is the namespace that the executing code is in. `Namespace.current` returns the current namespace object. +The current box is the box that the executing code is in. `Ruby::Box.current` returns the current box object. -The loading namespace is an internally managed namespace to determine the namespace to load newly required/loaded files. For example, `ns` is the loading namespace when `ns.require("foo")` is called. +The loading box is an internally managed box to determine the box to load newly required/loaded files. For example, `box` is the loading box when `box.require("foo")` is called. ## Discussions -#### Namespace#inspect - -Currently, `Namespace#inspect` returns values like `"#"`. This results in the very redundant and poorly visible classpath outside the namespace. - -```ruby -# foo.rb -class C; end - -# main.rb -ns = Namespace.new -ns.require('foo') - -p ns::C # "#::C" -``` - -And currently, if a namespace is assigned to a constant `NS1`, the classpath output will be `NS1::C`. But the namespace object can be brought to another namespace and the constant `NS1` in the namespace is something different. So the constant-based classpath for namespace is not safe basically. - -So we should find a better format to show namespaces. Options are: - -* `NS1::C` (only when this namespace is created and assigned to NS1 in the current namespace) -* `#::C` (with namespace type and without preceding 0) -* or something else - -#### Namespace#eval - -Testing namespace features needs to create files to be loaded in namespaces. It's not easy nor casual. - -If `Namespace` class has an instance method `#eval` to evaluate code in the namespace, it can be helpful. - #### More builtin methods written in Ruby -If namespace is enabled by default, builtin methods can be written in Ruby because it can't be overridden by users' monkey patches. Builtin Ruby methods can be JIT-ed, and it could bring performance reward. +If Ruby Box is enabled by default, builtin methods can be written in Ruby because it can't be overridden by users' monkey patches. Builtin Ruby methods can be JIT-ed, and it could bring performance reward. #### Monkey patching methods called by builtin methods -Builtin methods sometimes call other builtin methods. For example, `Hash#map` calls `Hash#each` to retrieve entries to be mapped. Without namespace, Ruby users can overwrite `Hash#each` and expect the behavior change of `Hash#map` as a result. +Builtin methods sometimes call other builtin methods. For example, `Hash#map` calls `Hash#each` to retrieve entries to be mapped. Without Ruby Box, Ruby users can overwrite `Hash#each` and expect the behavior change of `Hash#map` as a result. -But with namespaces, `Hash#map` runs in the root namespace. Ruby users can define `Hash#each` only in user namespaces, so users cannot change `Hash#map`'s behavior in this case. To achieve it, users should override both`Hash#map` and `Hash#each` (or only `Hash#map`). +But with boxes, `Hash#map` runs in the root box. Ruby users can define `Hash#each` only in user boxes, so users cannot change `Hash#map`'s behavior in this case. To achieve it, users should override both`Hash#map` and `Hash#each` (or only `Hash#map`). It is a breaking change. -It's an option to change the behavior of methods in the root namespace to refer to definitions in user namespaces. But if we do so, that means we can't proceed with "More builtin methods written in Ruby". +Users can define methods using `Ruby::Box.root.eval(...)`, but it's clearly not ideal API. -#### Context of \$LOAD\_PATH and \$LOADED\_FEATURES +#### Context of `$LOAD_PATH` and `$LOADED_FEATURES` -Global variables `$LOAD_PATH` and `$LOADED_FEATURES` control `require` method behaviors. So those namespaces are determined by the loading namespace instead of the current namespace. +Global variables `$LOAD_PATH` and `$LOADED_FEATURES` control `require` method behaviors. So those variables are determined by the loading box instead of the current box. This could potentially conflict with the user's expectations. We should find the solution. -#### Expose top level methods as a method of the namespace object +#### Expose top level methods as a method of the box object -Currently, top level methods in namespaces are not accessible from outside of the namespace. But there might be a use case to call other namespace's top level methods. +Currently, top level methods in boxes are not accessible from outside of the box. But there might be a use case to call other box's top level methods. -#### Split root and builtin namespace +#### Split root and builtin box -NOTE: "builtin" namespace is a different one from the "builtin" namespace in the current implementation +Currently, the single "root" box is the source of classext CoW. And also, the "root" box can load additional files after starting main script evaluation by calling methods which contain lines like `require "openssl"`. -Currently, the single "root" namespace is the source of classext CoW. And also, the "root" namespace can load additional files after starting main script evaluation by calling methods which contain lines like `require "openssl"`. - -That means, user namespaces can have different sets of definitions according to when it is created. +That means, user boxes can have different sets of definitions according to when it is created. ``` [root] @@ -368,51 +321,32 @@ That means, user namespaces can have different sets of definitions according to | |(require "openssl" called in root) | - |----[ns1] having OpenSSL + |----[box1] having OpenSSL | |(remove_const called for OpenSSL in root) | - |----[ns2] without OpenSSL + |----[box2] without OpenSSL ``` -This could cause unexpected behavior differences between user namespaces. It should NOT be a problem because user scripts which refer to `OpenSSL` should call `require "openssl"` by themselves. -But in the worst case, a script (without `require "openssl"`) runs well in `ns1`, but doesn't run in `ns2`. This situation looks like a "random failure" to users. +This could cause unexpected behavior differences between user boxes. It should NOT be a problem because user scripts which refer to `OpenSSL` should call `require "openssl"` by themselves. +But in the worst case, a script (without `require "openssl"`) runs well in `box1`, but doesn't run in `box2`. This situation looks like a "random failure" to users. -An option possible to prevent this situation is to have "root" and "builtin" namespaces. +An option possible to prevent this situation is to have "root" and "builtin" boxes. * root - * The namespace for the Ruby process bootstrap, then the source of CoW - * After starting the main namespace, no code runs in this namespace + * The box for the Ruby process bootstrap, then the source of CoW + * After starting the main box, no code runs in this box * builtin - * The namespace copied from the root namespace at the same time with "main" - * Methods and procs defined in the "root" namespace run in this namespace - * Classes and modules required will be loaded in this namespace + * The box copied from the root box at the same time with "main" + * Methods and procs defined in the "root" box run in this box + * Classes and modules required will be loaded in this box -This design realizes a consistent source of namespace CoW. +This design realizes a consistent source of box CoW. -#### Separate cc_tbl and callable_m_tbl, cvc_tbl for less classext CoW +#### Separate `cc_tbl` and `callable_m_tbl`, `cvc_tbl` for less classext CoW The fields of `rb_classext_t` contains several cache(-like) data, `cc_tbl`(callcache table), `callable_m_tbl`(table of resolved complemented methods) and `cvc_tbl`(class variable cache table). The classext CoW is triggered when the contents of `rb_classext_t` are changed, including `cc_tbl`, `callable_m_tbl`, and `cvc_tbl`. But those three tables are changed by just calling methods or referring class variables. So, currently, classext CoW is triggered much more times than the original expectation. If we can move those three tables outside of `rb_classext_t`, the number of copied `rb_classext_t` will be much less than the current implementation. - -#### Object Shapes per namespace - -Now the classext CoW requires RClass and `rb_classext_t` to fallback its instance variable management from Object Shapes to the traditional `st_table`. It may have a performance penalty. - -If we can apply Object Shapes on `rb_classext_t` instead of `RClass`, per-namespace classext can have its own shapes, and it may be able to avoid the performance penalty. - -#### Minimize the size of RClass and rb_classext_t - -As described in "Size of RClass and rb_classext_t" section above, the size of RClass and `rb_classext_t` is currently larger than `4 * RVALUE_SIZE` (`20 * VALUE_SIZE`). Now the size is `23 * VALUE_SIZE + 7 bits`. - -The fields possibly removed from `rb_classext_t` are: - -* `cc_tbl`, `callable_m_tbl`, `cvc_tbl` (See the section "Separate cc_tbl and callable_m_tbl, cvc_tbl for less classext CoW" above) -* `ns_super_subclasses`, `module_super_subclasses` - * `RCLASSEXT_SUBCLASSES(RCLASS_EXT_PRIME(RCLASSEXT_SUPER(klass)))->ns_subclasses` can replace it - * These fields are used only in GC, how's the actual performance benefit? - -If we can move or remove those fields, the size satisfies the assertion (`<= 4 * RVALUE_SIZE`). From aaf1f53df0317e3be1cb59b45b8b17179f918042 Mon Sep 17 00:00:00 2001 From: Satoshi Tagomori Date: Thu, 6 Nov 2025 18:12:01 +0900 Subject: [PATCH 11/11] Follow renaming from Namespace to Ruby::Box --- test/-ext-/test_abi.rb | 4 ++-- yjit/src/cruby_bindings.inc.rs | 2 +- zjit/src/cruby_bindings.inc.rs | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/test/-ext-/test_abi.rb b/test/-ext-/test_abi.rb index 307ad9f382542a..7f30feb9449187 100644 --- a/test/-ext-/test_abi.rb +++ b/test/-ext-/test_abi.rb @@ -9,7 +9,7 @@ def test_require_lib_with_incorrect_abi_on_dev_ruby assert_separately [], <<~RUBY err = assert_raise(LoadError) { require "-test-/abi" } assert_match(/incompatible ABI version/, err.message) - if Namespace.enabled? + if Ruby::Box.enabled? assert_include err.message, "_-test-+abi." else assert_include err.message, "/-test-/abi." @@ -31,7 +31,7 @@ def test_enable_abi_check_using_environment_variable assert_separately [{ "RUBY_ABI_CHECK" => "1" }], <<~RUBY err = assert_raise(LoadError) { require "-test-/abi" } assert_match(/incompatible ABI version/, err.message) - if Namespace.enabled? + if Ruby::Box.enabled? assert_include err.message, "_-test-+abi." else assert_include err.message, "/-test-/abi." diff --git a/yjit/src/cruby_bindings.inc.rs b/yjit/src/cruby_bindings.inc.rs index f6e4e0e22f4d22..253598bce1465d 100644 --- a/yjit/src/cruby_bindings.inc.rs +++ b/yjit/src/cruby_bindings.inc.rs @@ -626,7 +626,7 @@ pub const VM_FRAME_FLAG_LAMBDA: vm_frame_env_flags = 256; pub const VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM: vm_frame_env_flags = 512; pub const VM_FRAME_FLAG_CFRAME_KW: vm_frame_env_flags = 1024; pub const VM_FRAME_FLAG_PASSED: vm_frame_env_flags = 2048; -pub const VM_FRAME_FLAG_NS_REQUIRE: vm_frame_env_flags = 4096; +pub const VM_FRAME_FLAG_BOX_REQUIRE: vm_frame_env_flags = 4096; pub const VM_ENV_FLAG_LOCAL: vm_frame_env_flags = 2; pub const VM_ENV_FLAG_ESCAPED: vm_frame_env_flags = 4; pub const VM_ENV_FLAG_WB_REQUIRED: vm_frame_env_flags = 8; diff --git a/zjit/src/cruby_bindings.inc.rs b/zjit/src/cruby_bindings.inc.rs index 86239588292adb..457cd584cf0e01 100644 --- a/zjit/src/cruby_bindings.inc.rs +++ b/zjit/src/cruby_bindings.inc.rs @@ -753,7 +753,7 @@ pub const VM_FRAME_FLAG_LAMBDA: vm_frame_env_flags = 256; pub const VM_FRAME_FLAG_MODIFIED_BLOCK_PARAM: vm_frame_env_flags = 512; pub const VM_FRAME_FLAG_CFRAME_KW: vm_frame_env_flags = 1024; pub const VM_FRAME_FLAG_PASSED: vm_frame_env_flags = 2048; -pub const VM_FRAME_FLAG_NS_REQUIRE: vm_frame_env_flags = 4096; +pub const VM_FRAME_FLAG_BOX_REQUIRE: vm_frame_env_flags = 4096; pub const VM_ENV_FLAG_LOCAL: vm_frame_env_flags = 2; pub const VM_ENV_FLAG_ESCAPED: vm_frame_env_flags = 4; pub const VM_ENV_FLAG_WB_REQUIRED: vm_frame_env_flags = 8;