diff options
| author | Eileen M. Uchitelle <eileencodes@users.noreply.github.com> | 2023-07-25 07:05:27 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-07-25 11:05:27 +0000 |
| commit | cba152ff1f69fad98f4c67747dcf763407cd1883 (patch) | |
| tree | b7a784de2e842a2bfc589b6d4d0909960734aa45 | |
| parent | 7e926c4d8c2e785d174161b38a8a688b19ea4b99 (diff) | |
Backport cvar clone bug fix for 19379 to 3.1 (#7889)
* Copy cvar table on clone
When a class with a class variable is cloned we need to also copy the
cvar cache table from the original table to the clone. I found this bug
while working on fixing [Bug #19379]. While this does not fix that bug
directly it is still a required change to fix another bug revealed by
the fix in https://github.com/ruby/ruby/pull/7265
This needs to be backported to 3.2.x and 3.1.x.
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
* Fix cvar caching when class is cloned
The class variable cache that was added in
https://github.com/ruby/ruby/pull/4544 changed the behavior of class
variables on cloned classes. As reported when a class is cloned AND a
class variable was set, and the class variable was read from the
original class, reading a class variable from the cloned class would
return the value from the original class.
This was happening because the IC (inline cache) is stored on the ISEQ
which is shared between the original and cloned class, therefore they
share the cache too.
To fix this we are now storing the `cref` in the cache so that we can
check if it's equal to the current `cref`. If it's different we don't
want to read from the cache. If it's the same we do. Cloned classes
don't share the same cref with their original class.
This will need to be backported to 3.1 in addition to 3.2 since the bug
exists in both versions.
We also added a marking function which was missing.
Fixes [Bug #19379]
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
* Add missing write barrier
We were missing the write barrier for class_value to cref. This should
fix the segv we were seeing in http://ci.rvm.jp/logfiles/brlog.trunk-gc-asserts.20230601-165052
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
---------
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
| -rw-r--r-- | class.c | 34 | ||||
| -rw-r--r-- | common.mk | 249 | ||||
| -rw-r--r-- | ext/objspace/depend | 14 | ||||
| -rw-r--r-- | gc.c | 30 | ||||
| -rw-r--r-- | internal/class.h | 4 | ||||
| -rw-r--r-- | test/ruby/test_variable.rb | 19 | ||||
| -rw-r--r-- | variable.c | 1 | ||||
| -rw-r--r-- | vm_insnhelper.c | 21 |
8 files changed, 364 insertions, 8 deletions
@@ -348,6 +348,30 @@ class_init_copy_check(VALUE clone, VALUE orig) } } +struct cvc_table_copy_ctx { + VALUE clone; + struct rb_id_table * new_table; +}; + +static enum rb_id_table_iterator_result +cvc_table_copy(ID id, VALUE val, void *data) { + struct cvc_table_copy_ctx *ctx = (struct cvc_table_copy_ctx *)data; + struct rb_cvar_class_tbl_entry * orig_entry; + orig_entry = (struct rb_cvar_class_tbl_entry *)val; + + struct rb_cvar_class_tbl_entry *ent; + + ent = ALLOC(struct rb_cvar_class_tbl_entry); + ent->class_value = ctx->clone; + ent->cref = orig_entry->cref; + ent->global_cvar_state = orig_entry->global_cvar_state; + rb_id_table_insert(ctx->new_table, id, (VALUE)ent); + + RB_OBJ_WRITTEN(ctx->clone, Qundef, ent->cref); + + return ID_TABLE_CONTINUE; +} + static void copy_tables(VALUE clone, VALUE orig) { @@ -359,6 +383,16 @@ copy_tables(VALUE clone, VALUE orig) rb_free_const_table(RCLASS_CONST_TBL(clone)); RCLASS_CONST_TBL(clone) = 0; } + if (RCLASS_CVC_TBL(orig)) { + struct rb_id_table *rb_cvc_tbl = RCLASS_CVC_TBL(orig); + struct rb_id_table *rb_cvc_tbl_dup = rb_id_table_create(rb_id_table_size(rb_cvc_tbl)); + + struct cvc_table_copy_ctx ctx; + ctx.clone = clone; + ctx.new_table = rb_cvc_tbl_dup; + rb_id_table_foreach(rb_cvc_tbl, cvc_table_copy, &ctx); + RCLASS_CVC_TBL(clone) = rb_cvc_tbl_dup; + } RCLASS_M_TBL(clone) = 0; if (RCLASS_IV_TBL(orig)) { st_data_t id; @@ -1763,6 +1763,10 @@ addr2line.$(OBJEXT): {$(VPATH)}internal/stdbool.h addr2line.$(OBJEXT): {$(VPATH)}internal/warning_push.h addr2line.$(OBJEXT): {$(VPATH)}internal/xmalloc.h addr2line.$(OBJEXT): {$(VPATH)}missing.h +array.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +array.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +array.$(OBJEXT): $(CCAN_DIR)/list/list.h +array.$(OBJEXT): $(CCAN_DIR)/str/str.h array.$(OBJEXT): $(hdrdir)/ruby/ruby.h array.$(OBJEXT): $(top_srcdir)/internal/array.h array.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -1774,6 +1778,7 @@ array.$(OBJEXT): $(top_srcdir)/internal/enum.h 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/numeric.h array.$(OBJEXT): $(top_srcdir)/internal/object.h array.$(OBJEXT): $(top_srcdir)/internal/proc.h @@ -1785,6 +1790,7 @@ array.$(OBJEXT): $(top_srcdir)/internal/warnings.h array.$(OBJEXT): {$(VPATH)}array.c array.$(OBJEXT): {$(VPATH)}array.rbinc array.$(OBJEXT): {$(VPATH)}assert.h +array.$(OBJEXT): {$(VPATH)}atomic.h array.$(OBJEXT): {$(VPATH)}backward/2/assume.h array.$(OBJEXT): {$(VPATH)}backward/2/attributes.h array.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -1796,6 +1802,7 @@ array.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h array.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h array.$(OBJEXT): {$(VPATH)}builtin.h array.$(OBJEXT): {$(VPATH)}config.h +array.$(OBJEXT): {$(VPATH)}darray.h array.$(OBJEXT): {$(VPATH)}debug_counter.h array.$(OBJEXT): {$(VPATH)}defines.h array.$(OBJEXT): {$(VPATH)}encoding.h @@ -1951,16 +1958,23 @@ array.$(OBJEXT): {$(VPATH)}internal/value_type.h array.$(OBJEXT): {$(VPATH)}internal/variable.h array.$(OBJEXT): {$(VPATH)}internal/warning_push.h array.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +array.$(OBJEXT): {$(VPATH)}method.h array.$(OBJEXT): {$(VPATH)}missing.h +array.$(OBJEXT): {$(VPATH)}node.h array.$(OBJEXT): {$(VPATH)}onigmo.h array.$(OBJEXT): {$(VPATH)}oniguruma.h array.$(OBJEXT): {$(VPATH)}probes.dmyh array.$(OBJEXT): {$(VPATH)}probes.h array.$(OBJEXT): {$(VPATH)}ruby_assert.h +array.$(OBJEXT): {$(VPATH)}ruby_atomic.h array.$(OBJEXT): {$(VPATH)}st.h array.$(OBJEXT): {$(VPATH)}subst.h +array.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +array.$(OBJEXT): {$(VPATH)}thread_native.h array.$(OBJEXT): {$(VPATH)}transient_heap.h array.$(OBJEXT): {$(VPATH)}util.h +array.$(OBJEXT): {$(VPATH)}vm_core.h +array.$(OBJEXT): {$(VPATH)}vm_opts.h ast.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h ast.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h ast.$(OBJEXT): $(CCAN_DIR)/list/list.h @@ -2161,7 +2175,12 @@ ast.$(OBJEXT): {$(VPATH)}thread_native.h ast.$(OBJEXT): {$(VPATH)}util.h ast.$(OBJEXT): {$(VPATH)}vm_core.h ast.$(OBJEXT): {$(VPATH)}vm_opts.h +bignum.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +bignum.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +bignum.$(OBJEXT): $(CCAN_DIR)/list/list.h +bignum.$(OBJEXT): $(CCAN_DIR)/str/str.h bignum.$(OBJEXT): $(hdrdir)/ruby/ruby.h +bignum.$(OBJEXT): $(top_srcdir)/internal/array.h bignum.$(OBJEXT): $(top_srcdir)/internal/bignum.h bignum.$(OBJEXT): $(top_srcdir)/internal/bits.h bignum.$(OBJEXT): $(top_srcdir)/internal/class.h @@ -2169,6 +2188,7 @@ 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/numeric.h bignum.$(OBJEXT): $(top_srcdir)/internal/object.h bignum.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -2178,6 +2198,7 @@ bignum.$(OBJEXT): $(top_srcdir)/internal/variable.h bignum.$(OBJEXT): $(top_srcdir)/internal/vm.h bignum.$(OBJEXT): $(top_srcdir)/internal/warnings.h bignum.$(OBJEXT): {$(VPATH)}assert.h +bignum.$(OBJEXT): {$(VPATH)}atomic.h bignum.$(OBJEXT): {$(VPATH)}backward/2/assume.h bignum.$(OBJEXT): {$(VPATH)}backward/2/attributes.h bignum.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -2190,6 +2211,7 @@ bignum.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h bignum.$(OBJEXT): {$(VPATH)}bignum.c bignum.$(OBJEXT): {$(VPATH)}config.h bignum.$(OBJEXT): {$(VPATH)}constant.h +bignum.$(OBJEXT): {$(VPATH)}darray.h bignum.$(OBJEXT): {$(VPATH)}defines.h bignum.$(OBJEXT): {$(VPATH)}id.h bignum.$(OBJEXT): {$(VPATH)}id_table.h @@ -2334,12 +2356,19 @@ bignum.$(OBJEXT): {$(VPATH)}internal/value_type.h bignum.$(OBJEXT): {$(VPATH)}internal/variable.h bignum.$(OBJEXT): {$(VPATH)}internal/warning_push.h bignum.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +bignum.$(OBJEXT): {$(VPATH)}method.h bignum.$(OBJEXT): {$(VPATH)}missing.h +bignum.$(OBJEXT): {$(VPATH)}node.h bignum.$(OBJEXT): {$(VPATH)}ruby_assert.h +bignum.$(OBJEXT): {$(VPATH)}ruby_atomic.h bignum.$(OBJEXT): {$(VPATH)}st.h bignum.$(OBJEXT): {$(VPATH)}subst.h bignum.$(OBJEXT): {$(VPATH)}thread.h +bignum.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +bignum.$(OBJEXT): {$(VPATH)}thread_native.h bignum.$(OBJEXT): {$(VPATH)}util.h +bignum.$(OBJEXT): {$(VPATH)}vm_core.h +bignum.$(OBJEXT): {$(VPATH)}vm_opts.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 @@ -3131,6 +3160,10 @@ compile.$(OBJEXT): {$(VPATH)}vm_callinfo.h compile.$(OBJEXT): {$(VPATH)}vm_core.h compile.$(OBJEXT): {$(VPATH)}vm_debug.h compile.$(OBJEXT): {$(VPATH)}vm_opts.h +complex.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +complex.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +complex.$(OBJEXT): $(CCAN_DIR)/list/list.h +complex.$(OBJEXT): $(CCAN_DIR)/str/str.h complex.$(OBJEXT): $(hdrdir)/ruby/ruby.h complex.$(OBJEXT): $(top_srcdir)/internal/array.h complex.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -3140,6 +3173,7 @@ complex.$(OBJEXT): $(top_srcdir)/internal/compilers.h complex.$(OBJEXT): $(top_srcdir)/internal/complex.h 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/numeric.h complex.$(OBJEXT): $(top_srcdir)/internal/object.h @@ -3149,6 +3183,7 @@ complex.$(OBJEXT): $(top_srcdir)/internal/static_assert.h complex.$(OBJEXT): $(top_srcdir)/internal/vm.h complex.$(OBJEXT): $(top_srcdir)/internal/warnings.h complex.$(OBJEXT): {$(VPATH)}assert.h +complex.$(OBJEXT): {$(VPATH)}atomic.h complex.$(OBJEXT): {$(VPATH)}backward/2/assume.h complex.$(OBJEXT): {$(VPATH)}backward/2/attributes.h complex.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -3160,6 +3195,7 @@ complex.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h complex.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h complex.$(OBJEXT): {$(VPATH)}complex.c complex.$(OBJEXT): {$(VPATH)}config.h +complex.$(OBJEXT): {$(VPATH)}darray.h complex.$(OBJEXT): {$(VPATH)}defines.h complex.$(OBJEXT): {$(VPATH)}id.h complex.$(OBJEXT): {$(VPATH)}id_table.h @@ -3304,10 +3340,17 @@ complex.$(OBJEXT): {$(VPATH)}internal/value_type.h complex.$(OBJEXT): {$(VPATH)}internal/variable.h complex.$(OBJEXT): {$(VPATH)}internal/warning_push.h complex.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +complex.$(OBJEXT): {$(VPATH)}method.h complex.$(OBJEXT): {$(VPATH)}missing.h +complex.$(OBJEXT): {$(VPATH)}node.h complex.$(OBJEXT): {$(VPATH)}ruby_assert.h +complex.$(OBJEXT): {$(VPATH)}ruby_atomic.h complex.$(OBJEXT): {$(VPATH)}st.h complex.$(OBJEXT): {$(VPATH)}subst.h +complex.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +complex.$(OBJEXT): {$(VPATH)}thread_native.h +complex.$(OBJEXT): {$(VPATH)}vm_core.h +complex.$(OBJEXT): {$(VPATH)}vm_opts.h cont.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h cont.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h cont.$(OBJEXT): $(CCAN_DIR)/list/list.h @@ -3868,6 +3911,10 @@ debug_counter.$(OBJEXT): {$(VPATH)}missing.h debug_counter.$(OBJEXT): {$(VPATH)}st.h debug_counter.$(OBJEXT): {$(VPATH)}subst.h debug_counter.$(OBJEXT): {$(VPATH)}thread_native.h +dir.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +dir.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +dir.$(OBJEXT): $(CCAN_DIR)/list/list.h +dir.$(OBJEXT): $(CCAN_DIR)/str/str.h dir.$(OBJEXT): $(hdrdir)/ruby/ruby.h dir.$(OBJEXT): $(top_srcdir)/internal/array.h dir.$(OBJEXT): $(top_srcdir)/internal/class.h @@ -3877,6 +3924,7 @@ dir.$(OBJEXT): $(top_srcdir)/internal/encoding.h dir.$(OBJEXT): $(top_srcdir)/internal/error.h 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/object.h dir.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -3885,6 +3933,7 @@ dir.$(OBJEXT): $(top_srcdir)/internal/string.h dir.$(OBJEXT): $(top_srcdir)/internal/vm.h dir.$(OBJEXT): $(top_srcdir)/internal/warnings.h dir.$(OBJEXT): {$(VPATH)}assert.h +dir.$(OBJEXT): {$(VPATH)}atomic.h dir.$(OBJEXT): {$(VPATH)}backward/2/assume.h dir.$(OBJEXT): {$(VPATH)}backward/2/attributes.h dir.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -3896,6 +3945,7 @@ dir.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h dir.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h dir.$(OBJEXT): {$(VPATH)}builtin.h dir.$(OBJEXT): {$(VPATH)}config.h +dir.$(OBJEXT): {$(VPATH)}darray.h dir.$(OBJEXT): {$(VPATH)}defines.h dir.$(OBJEXT): {$(VPATH)}dir.c dir.$(OBJEXT): {$(VPATH)}dir.rbinc @@ -4054,13 +4104,21 @@ dir.$(OBJEXT): {$(VPATH)}internal/variable.h dir.$(OBJEXT): {$(VPATH)}internal/warning_push.h dir.$(OBJEXT): {$(VPATH)}internal/xmalloc.h dir.$(OBJEXT): {$(VPATH)}io.h +dir.$(OBJEXT): {$(VPATH)}method.h dir.$(OBJEXT): {$(VPATH)}missing.h +dir.$(OBJEXT): {$(VPATH)}node.h dir.$(OBJEXT): {$(VPATH)}onigmo.h dir.$(OBJEXT): {$(VPATH)}oniguruma.h +dir.$(OBJEXT): {$(VPATH)}ruby_assert.h +dir.$(OBJEXT): {$(VPATH)}ruby_atomic.h dir.$(OBJEXT): {$(VPATH)}st.h dir.$(OBJEXT): {$(VPATH)}subst.h dir.$(OBJEXT): {$(VPATH)}thread.h +dir.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +dir.$(OBJEXT): {$(VPATH)}thread_native.h 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/compilers.h dln.$(OBJEXT): $(top_srcdir)/internal/warnings.h @@ -5365,12 +5423,18 @@ enc/utf_8.$(OBJEXT): {$(VPATH)}oniguruma.h enc/utf_8.$(OBJEXT): {$(VPATH)}regenc.h enc/utf_8.$(OBJEXT): {$(VPATH)}st.h enc/utf_8.$(OBJEXT): {$(VPATH)}subst.h +encoding.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +encoding.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +encoding.$(OBJEXT): $(CCAN_DIR)/list/list.h +encoding.$(OBJEXT): $(CCAN_DIR)/str/str.h encoding.$(OBJEXT): $(hdrdir)/ruby/ruby.h +encoding.$(OBJEXT): $(top_srcdir)/internal/array.h encoding.$(OBJEXT): $(top_srcdir)/internal/class.h encoding.$(OBJEXT): $(top_srcdir)/internal/compilers.h encoding.$(OBJEXT): $(top_srcdir)/internal/enc.h encoding.$(OBJEXT): $(top_srcdir)/internal/encoding.h encoding.$(OBJEXT): $(top_srcdir)/internal/gc.h +encoding.$(OBJEXT): $(top_srcdir)/internal/imemo.h encoding.$(OBJEXT): $(top_srcdir)/internal/inits.h encoding.$(OBJEXT): $(top_srcdir)/internal/load.h encoding.$(OBJEXT): $(top_srcdir)/internal/object.h @@ -5380,6 +5444,7 @@ encoding.$(OBJEXT): $(top_srcdir)/internal/string.h encoding.$(OBJEXT): $(top_srcdir)/internal/vm.h encoding.$(OBJEXT): $(top_srcdir)/internal/warnings.h encoding.$(OBJEXT): {$(VPATH)}assert.h +encoding.$(OBJEXT): {$(VPATH)}atomic.h encoding.$(OBJEXT): {$(VPATH)}backward/2/assume.h encoding.$(OBJEXT): {$(VPATH)}backward/2/attributes.h encoding.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -5390,11 +5455,13 @@ encoding.$(OBJEXT): {$(VPATH)}backward/2/long_long.h encoding.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h encoding.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h encoding.$(OBJEXT): {$(VPATH)}config.h +encoding.$(OBJEXT): {$(VPATH)}darray.h encoding.$(OBJEXT): {$(VPATH)}debug_counter.h encoding.$(OBJEXT): {$(VPATH)}defines.h encoding.$(OBJEXT): {$(VPATH)}encindex.h encoding.$(OBJEXT): {$(VPATH)}encoding.c encoding.$(OBJEXT): {$(VPATH)}encoding.h +encoding.$(OBJEXT): {$(VPATH)}id.h encoding.$(OBJEXT): {$(VPATH)}id_table.h encoding.$(OBJEXT): {$(VPATH)}intern.h encoding.$(OBJEXT): {$(VPATH)}internal.h @@ -5546,16 +5613,27 @@ encoding.$(OBJEXT): {$(VPATH)}internal/value_type.h encoding.$(OBJEXT): {$(VPATH)}internal/variable.h encoding.$(OBJEXT): {$(VPATH)}internal/warning_push.h encoding.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +encoding.$(OBJEXT): {$(VPATH)}method.h encoding.$(OBJEXT): {$(VPATH)}missing.h +encoding.$(OBJEXT): {$(VPATH)}node.h encoding.$(OBJEXT): {$(VPATH)}onigmo.h encoding.$(OBJEXT): {$(VPATH)}oniguruma.h encoding.$(OBJEXT): {$(VPATH)}regenc.h encoding.$(OBJEXT): {$(VPATH)}ruby_assert.h +encoding.$(OBJEXT): {$(VPATH)}ruby_atomic.h encoding.$(OBJEXT): {$(VPATH)}st.h encoding.$(OBJEXT): {$(VPATH)}subst.h +encoding.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +encoding.$(OBJEXT): {$(VPATH)}thread_native.h encoding.$(OBJEXT): {$(VPATH)}util.h +encoding.$(OBJEXT): {$(VPATH)}vm_core.h encoding.$(OBJEXT): {$(VPATH)}vm_debug.h +encoding.$(OBJEXT): {$(VPATH)}vm_opts.h encoding.$(OBJEXT): {$(VPATH)}vm_sync.h +enum.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +enum.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +enum.$(OBJEXT): $(CCAN_DIR)/list/list.h +enum.$(OBJEXT): $(CCAN_DIR)/str/str.h enum.$(OBJEXT): $(hdrdir)/ruby/ruby.h enum.$(OBJEXT): $(top_srcdir)/internal/array.h enum.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -5578,6 +5656,7 @@ enum.$(OBJEXT): $(top_srcdir)/internal/static_assert.h enum.$(OBJEXT): $(top_srcdir)/internal/vm.h enum.$(OBJEXT): $(top_srcdir)/internal/warnings.h enum.$(OBJEXT): {$(VPATH)}assert.h +enum.$(OBJEXT): {$(VPATH)}atomic.h enum.$(OBJEXT): {$(VPATH)}backward/2/assume.h enum.$(OBJEXT): {$(VPATH)}backward/2/attributes.h enum.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -5588,6 +5667,7 @@ enum.$(OBJEXT): {$(VPATH)}backward/2/long_long.h enum.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h enum.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h enum.$(OBJEXT): {$(VPATH)}config.h +enum.$(OBJEXT): {$(VPATH)}darray.h enum.$(OBJEXT): {$(VPATH)}defines.h enum.$(OBJEXT): {$(VPATH)}encoding.h enum.$(OBJEXT): {$(VPATH)}enum.c @@ -5743,14 +5823,21 @@ enum.$(OBJEXT): {$(VPATH)}internal/value_type.h enum.$(OBJEXT): {$(VPATH)}internal/variable.h enum.$(OBJEXT): {$(VPATH)}internal/warning_push.h enum.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +enum.$(OBJEXT): {$(VPATH)}method.h enum.$(OBJEXT): {$(VPATH)}missing.h +enum.$(OBJEXT): {$(VPATH)}node.h enum.$(OBJEXT): {$(VPATH)}onigmo.h enum.$(OBJEXT): {$(VPATH)}oniguruma.h enum.$(OBJEXT): {$(VPATH)}ruby_assert.h +enum.$(OBJEXT): {$(VPATH)}ruby_atomic.h enum.$(OBJEXT): {$(VPATH)}st.h enum.$(OBJEXT): {$(VPATH)}subst.h enum.$(OBJEXT): {$(VPATH)}symbol.h +enum.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +enum.$(OBJEXT): {$(VPATH)}thread_native.h enum.$(OBJEXT): {$(VPATH)}util.h +enum.$(OBJEXT): {$(VPATH)}vm_core.h +enum.$(OBJEXT): {$(VPATH)}vm_opts.h enumerator.$(OBJEXT): $(hdrdir)/ruby/ruby.h enumerator.$(OBJEXT): $(top_srcdir)/internal/array.h enumerator.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -6390,6 +6477,10 @@ explicit_bzero.$(OBJEXT): {$(VPATH)}internal/config.h explicit_bzero.$(OBJEXT): {$(VPATH)}internal/dllexport.h explicit_bzero.$(OBJEXT): {$(VPATH)}internal/has/attribute.h explicit_bzero.$(OBJEXT): {$(VPATH)}missing.h +file.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +file.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +file.$(OBJEXT): $(CCAN_DIR)/list/list.h +file.$(OBJEXT): $(CCAN_DIR)/str/str.h file.$(OBJEXT): $(hdrdir)/ruby/ruby.h file.$(OBJEXT): $(top_srcdir)/internal/array.h file.$(OBJEXT): $(top_srcdir)/internal/class.h @@ -6410,6 +6501,7 @@ file.$(OBJEXT): $(top_srcdir)/internal/thread.h file.$(OBJEXT): $(top_srcdir)/internal/vm.h file.$(OBJEXT): $(top_srcdir)/internal/warnings.h file.$(OBJEXT): {$(VPATH)}assert.h +file.$(OBJEXT): {$(VPATH)}atomic.h file.$(OBJEXT): {$(VPATH)}backward/2/assume.h file.$(OBJEXT): {$(VPATH)}backward/2/attributes.h file.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -6420,6 +6512,7 @@ file.$(OBJEXT): {$(VPATH)}backward/2/long_long.h file.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h file.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h file.$(OBJEXT): {$(VPATH)}config.h +file.$(OBJEXT): {$(VPATH)}darray.h file.$(OBJEXT): {$(VPATH)}defines.h file.$(OBJEXT): {$(VPATH)}dln.h file.$(OBJEXT): {$(VPATH)}encindex.h @@ -6578,13 +6671,21 @@ file.$(OBJEXT): {$(VPATH)}internal/variable.h file.$(OBJEXT): {$(VPATH)}internal/warning_push.h file.$(OBJEXT): {$(VPATH)}internal/xmalloc.h file.$(OBJEXT): {$(VPATH)}io.h +file.$(OBJEXT): {$(VPATH)}method.h file.$(OBJEXT): {$(VPATH)}missing.h +file.$(OBJEXT): {$(VPATH)}node.h file.$(OBJEXT): {$(VPATH)}onigmo.h file.$(OBJEXT): {$(VPATH)}oniguruma.h +file.$(OBJEXT): {$(VPATH)}ruby_assert.h +file.$(OBJEXT): {$(VPATH)}ruby_atomic.h file.$(OBJEXT): {$(VPATH)}st.h file.$(OBJEXT): {$(VPATH)}subst.h file.$(OBJEXT): {$(VPATH)}thread.h +file.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +file.$(OBJEXT): {$(VPATH)}thread_native.h file.$(OBJEXT): {$(VPATH)}util.h +file.$(OBJEXT): {$(VPATH)}vm_core.h +file.$(OBJEXT): {$(VPATH)}vm_opts.h gc.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h gc.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h gc.$(OBJEXT): $(CCAN_DIR)/list/list.h @@ -7015,6 +7116,10 @@ goruby.$(OBJEXT): {$(VPATH)}thread_native.h goruby.$(OBJEXT): {$(VPATH)}vm_core.h goruby.$(OBJEXT): {$(VPATH)}vm_debug.h goruby.$(OBJEXT): {$(VPATH)}vm_opts.h +hash.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +hash.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +hash.$(OBJEXT): $(CCAN_DIR)/list/list.h +hash.$(OBJEXT): $(CCAN_DIR)/str/str.h hash.$(OBJEXT): $(hdrdir)/ruby/ruby.h hash.$(OBJEXT): $(top_srcdir)/internal/array.h hash.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -7025,6 +7130,7 @@ hash.$(OBJEXT): $(top_srcdir)/internal/cont.h 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/object.h hash.$(OBJEXT): $(top_srcdir)/internal/proc.h hash.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -7035,6 +7141,7 @@ hash.$(OBJEXT): $(top_srcdir)/internal/time.h hash.$(OBJEXT): $(top_srcdir)/internal/vm.h hash.$(OBJEXT): $(top_srcdir)/internal/warnings.h hash.$(OBJEXT): {$(VPATH)}assert.h +hash.$(OBJEXT): {$(VPATH)}atomic.h hash.$(OBJEXT): {$(VPATH)}backward/2/assume.h hash.$(OBJEXT): {$(VPATH)}backward/2/attributes.h hash.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -7045,6 +7152,7 @@ hash.$(OBJEXT): {$(VPATH)}backward/2/long_long.h hash.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h hash.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h hash.$(OBJEXT): {$(VPATH)}config.h +hash.$(OBJEXT): {$(VPATH)}darray.h hash.$(OBJEXT): {$(VPATH)}debug_counter.h hash.$(OBJEXT): {$(VPATH)}defines.h hash.$(OBJEXT): {$(VPATH)}encoding.h @@ -7201,20 +7309,26 @@ hash.$(OBJEXT): {$(VPATH)}internal/value_type.h hash.$(OBJEXT): {$(VPATH)}internal/variable.h hash.$(OBJEXT): {$(VPATH)}internal/warning_push.h hash.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +hash.$(OBJEXT): {$(VPATH)}method.h hash.$(OBJEXT): {$(VPATH)}missing.h +hash.$(OBJEXT): {$(VPATH)}node.h hash.$(OBJEXT): {$(VPATH)}onigmo.h hash.$(OBJEXT): {$(VPATH)}oniguruma.h hash.$(OBJEXT): {$(VPATH)}probes.dmyh hash.$(OBJEXT): {$(VPATH)}probes.h hash.$(OBJEXT): {$(VPATH)}ractor.h hash.$(OBJEXT): {$(VPATH)}ruby_assert.h +hash.$(OBJEXT): {$(VPATH)}ruby_atomic.h hash.$(OBJEXT): {$(VPATH)}st.h hash.$(OBJEXT): {$(VPATH)}subst.h hash.$(OBJEXT): {$(VPATH)}symbol.h +hash.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h hash.$(OBJEXT): {$(VPATH)}thread_native.h hash.$(OBJEXT): {$(VPATH)}transient_heap.h hash.$(OBJEXT): {$(VPATH)}util.h +hash.$(OBJEXT): {$(VPATH)}vm_core.h hash.$(OBJEXT): {$(VPATH)}vm_debug.h +hash.$(OBJEXT): {$(VPATH)}vm_opts.h hash.$(OBJEXT): {$(VPATH)}vm_sync.h inits.$(OBJEXT): $(hdrdir)/ruby.h inits.$(OBJEXT): $(hdrdir)/ruby/ruby.h @@ -8696,6 +8810,10 @@ main.$(OBJEXT): {$(VPATH)}missing.h main.$(OBJEXT): {$(VPATH)}st.h main.$(OBJEXT): {$(VPATH)}subst.h main.$(OBJEXT): {$(VPATH)}vm_debug.h +marshal.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +marshal.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +marshal.$(OBJEXT): $(CCAN_DIR)/list/list.h +marshal.$(OBJEXT): $(CCAN_DIR)/str/str.h marshal.$(OBJEXT): $(hdrdir)/ruby/ruby.h marshal.$(OBJEXT): $(top_srcdir)/internal/array.h marshal.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -8705,6 +8823,7 @@ marshal.$(OBJEXT): $(top_srcdir)/internal/encoding.h marshal.$(OBJEXT): $(top_srcdir)/internal/error.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/object.h marshal.$(OBJEXT): $(top_srcdir)/internal/serial.h marshal.$(OBJEXT): $(top_srcdir)/internal/static_assert.h @@ -8715,6 +8834,7 @@ marshal.$(OBJEXT): $(top_srcdir)/internal/util.h marshal.$(OBJEXT): $(top_srcdir)/internal/vm.h marshal.$(OBJEXT): $(top_srcdir)/internal/warnings.h marshal.$(OBJEXT): {$(VPATH)}assert.h +marshal.$(OBJEXT): {$(VPATH)}atomic.h marshal.$(OBJEXT): {$(VPATH)}backward/2/assume.h marshal.$(OBJEXT): {$(VPATH)}backward/2/attributes.h marshal.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -8726,9 +8846,11 @@ marshal.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h marshal.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h marshal.$(OBJEXT): {$(VPATH)}builtin.h marshal.$(OBJEXT): {$(VPATH)}config.h +marshal.$(OBJEXT): {$(VPATH)}darray.h marshal.$(OBJEXT): {$(VPATH)}defines.h marshal.$(OBJEXT): {$(VPATH)}encindex.h marshal.$(OBJEXT): {$(VPATH)}encoding.h +marshal.$(OBJEXT): {$(VPATH)}id.h marshal.$(OBJEXT): {$(VPATH)}id_table.h marshal.$(OBJEXT): {$(VPATH)}intern.h marshal.$(OBJEXT): {$(VPATH)}internal.h @@ -8883,18 +9005,32 @@ marshal.$(OBJEXT): {$(VPATH)}internal/xmalloc.h marshal.$(OBJEXT): {$(VPATH)}io.h marshal.$(OBJEXT): {$(VPATH)}marshal.c marshal.$(OBJEXT): {$(VPATH)}marshal.rbinc +marshal.$(OBJEXT): {$(VPATH)}method.h marshal.$(OBJEXT): {$(VPATH)}missing.h +marshal.$(OBJEXT): {$(VPATH)}node.h marshal.$(OBJEXT): {$(VPATH)}onigmo.h marshal.$(OBJEXT): {$(VPATH)}oniguruma.h +marshal.$(OBJEXT): {$(VPATH)}ruby_assert.h +marshal.$(OBJEXT): {$(VPATH)}ruby_atomic.h marshal.$(OBJEXT): {$(VPATH)}st.h marshal.$(OBJEXT): {$(VPATH)}subst.h +marshal.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +marshal.$(OBJEXT): {$(VPATH)}thread_native.h marshal.$(OBJEXT): {$(VPATH)}util.h +marshal.$(OBJEXT): {$(VPATH)}vm_core.h +marshal.$(OBJEXT): {$(VPATH)}vm_opts.h +math.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +math.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +math.$(OBJEXT): $(CCAN_DIR)/list/list.h +math.$(OBJEXT): $(CCAN_DIR)/str/str.h math.$(OBJEXT): $(hdrdir)/ruby/ruby.h +math.$(OBJEXT): $(top_srcdir)/internal/array.h math.$(OBJEXT): $(top_srcdir)/internal/bignum.h math.$(OBJEXT): $(top_srcdir)/internal/class.h math.$(OBJEXT): $(top_srcdir)/internal/compilers.h math.$(OBJEXT): $(top_srcdir)/internal/complex.h math.$(OBJEXT): $(top_srcdir)/internal/gc.h +math.$(OBJEXT): $(top_srcdir)/internal/imemo.h math.$(OBJEXT): $(top_srcdir)/internal/math.h math.$(OBJEXT): $(top_srcdir)/internal/object.h math.$(OBJEXT): $(top_srcdir)/internal/serial.h @@ -8902,6 +9038,7 @@ math.$(OBJEXT): $(top_srcdir)/internal/static_assert.h math.$(OBJEXT): $(top_srcdir)/internal/vm.h math.$(OBJEXT): $(top_srcdir)/internal/warnings.h math.$(OBJEXT): {$(VPATH)}assert.h +math.$(OBJEXT): {$(VPATH)}atomic.h math.$(OBJEXT): {$(VPATH)}backward/2/assume.h math.$(OBJEXT): {$(VPATH)}backward/2/attributes.h math.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -8912,7 +9049,9 @@ math.$(OBJEXT): {$(VPATH)}backward/2/long_long.h math.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h math.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h math.$(OBJEXT): {$(VPATH)}config.h +math.$(OBJEXT): {$(VPATH)}darray.h math.$(OBJEXT): {$(VPATH)}defines.h +math.$(OBJEXT): {$(VPATH)}id.h math.$(OBJEXT): {$(VPATH)}id_table.h math.$(OBJEXT): {$(VPATH)}intern.h math.$(OBJEXT): {$(VPATH)}internal.h @@ -9056,9 +9195,17 @@ math.$(OBJEXT): {$(VPATH)}internal/variable.h math.$(OBJEXT): {$(VPATH)}internal/warning_push.h math.$(OBJEXT): {$(VPATH)}internal/xmalloc.h math.$(OBJEXT): {$(VPATH)}math.c +math.$(OBJEXT): {$(VPATH)}method.h math.$(OBJEXT): {$(VPATH)}missing.h +math.$(OBJEXT): {$(VPATH)}node.h +math.$(OBJEXT): {$(VPATH)}ruby_assert.h +math.$(OBJEXT): {$(VPATH)}ruby_atomic.h math.$(OBJEXT): {$(VPATH)}st.h math.$(OBJEXT): {$(VPATH)}subst.h +math.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +math.$(OBJEXT): {$(VPATH)}thread_native.h +math.$(OBJEXT): {$(VPATH)}vm_core.h +math.$(OBJEXT): {$(VPATH)}vm_opts.h memory_view.$(OBJEXT): $(hdrdir)/ruby/ruby.h memory_view.$(OBJEXT): $(top_srcdir)/internal/hash.h memory_view.$(OBJEXT): $(top_srcdir)/internal/variable.h @@ -10045,6 +10192,10 @@ node.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h node.$(OBJEXT): {$(VPATH)}thread_native.h node.$(OBJEXT): {$(VPATH)}vm_core.h node.$(OBJEXT): {$(VPATH)}vm_opts.h +numeric.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +numeric.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +numeric.$(OBJEXT): $(CCAN_DIR)/list/list.h +numeric.$(OBJEXT): $(CCAN_DIR)/str/str.h numeric.$(OBJEXT): $(hdrdir)/ruby/ruby.h numeric.$(OBJEXT): $(top_srcdir)/internal/array.h numeric.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -10056,6 +10207,7 @@ numeric.$(OBJEXT): $(top_srcdir)/internal/enumerator.h 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/numeric.h numeric.$(OBJEXT): $(top_srcdir)/internal/object.h numeric.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -10067,6 +10219,7 @@ numeric.$(OBJEXT): $(top_srcdir)/internal/variable.h numeric.$(OBJEXT): $(top_srcdir)/internal/vm.h numeric.$(OBJEXT): $(top_srcdir)/internal/warnings.h numeric.$(OBJEXT): {$(VPATH)}assert.h +numeric.$(OBJEXT): {$(VPATH)}atomic.h numeric.$(OBJEXT): {$(VPATH)}backward/2/assume.h numeric.$(OBJEXT): {$(VPATH)}backward/2/attributes.h numeric.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -10079,6 +10232,7 @@ numeric.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h numeric.$(OBJEXT): {$(VPATH)}builtin.h numeric.$(OBJEXT): {$(VPATH)}config.h numeric.$(OBJEXT): {$(VPATH)}constant.h +numeric.$(OBJEXT): {$(VPATH)}darray.h numeric.$(OBJEXT): {$(VPATH)}defines.h numeric.$(OBJEXT): {$(VPATH)}encoding.h numeric.$(OBJEXT): {$(VPATH)}id.h @@ -10233,16 +10387,27 @@ numeric.$(OBJEXT): {$(VPATH)}internal/value_type.h numeric.$(OBJEXT): {$(VPATH)}internal/variable.h numeric.$(OBJEXT): {$(VPATH)}internal/warning_push.h numeric.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +numeric.$(OBJEXT): {$(VPATH)}method.h numeric.$(OBJEXT): {$(VPATH)}missing.h +numeric.$(OBJEXT): {$(VPATH)}node.h numeric.$(OBJEXT): {$(VPATH)}numeric.c numeric.$(OBJEXT): {$(VPATH)}numeric.rb numeric.$(OBJEXT): {$(VPATH)}numeric.rbinc numeric.$(OBJEXT): {$(VPATH)}onigmo.h numeric.$(OBJEXT): {$(VPATH)}oniguruma.h numeric.$(OBJEXT): {$(VPATH)}ruby_assert.h +numeric.$(OBJEXT): {$(VPATH)}ruby_atomic.h numeric.$(OBJEXT): {$(VPATH)}st.h numeric.$(OBJEXT): {$(VPATH)}subst.h +numeric.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +numeric.$(OBJEXT): {$(VPATH)}thread_native.h numeric.$(OBJEXT): {$(VPATH)}util.h +numeric.$(OBJEXT): {$(VPATH)}vm_core.h +numeric.$(OBJEXT): {$(VPATH)}vm_opts.h +object.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +object.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +object.$(OBJEXT): $(CCAN_DIR)/list/list.h +object.$(OBJEXT): $(CCAN_DIR)/str/str.h object.$(OBJEXT): $(hdrdir)/ruby/ruby.h object.$(OBJEXT): $(top_srcdir)/internal/array.h object.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -10253,6 +10418,7 @@ object.$(OBJEXT): $(top_srcdir)/internal/error.h object.$(OBJEXT): $(top_srcdir)/internal/eval.h 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/numeric.h object.$(OBJEXT): $(top_srcdir)/internal/object.h @@ -10265,6 +10431,7 @@ object.$(OBJEXT): $(top_srcdir)/internal/variable.h object.$(OBJEXT): $(top_srcdir)/internal/vm.h object.$(OBJEXT): $(top_srcdir)/internal/warnings.h object.$(OBJEXT): {$(VPATH)}assert.h +object.$(OBJEXT): {$(VPATH)}atomic.h object.$(OBJEXT): {$(VPATH)}backward/2/assume.h object.$(OBJEXT): {$(VPATH)}backward/2/attributes.h object.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -10277,6 +10444,7 @@ object.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h object.$(OBJEXT): {$(VPATH)}builtin.h object.$(OBJEXT): {$(VPATH)}config.h object.$(OBJEXT): {$(VPATH)}constant.h +object.$(OBJEXT): {$(VPATH)}darray.h object.$(OBJEXT): {$(VPATH)}defines.h object.$(OBJEXT): {$(VPATH)}encoding.h object.$(OBJEXT): {$(VPATH)}id.h @@ -10433,16 +10601,24 @@ object.$(OBJEXT): {$(VPATH)}internal/warning_push.h object.$(OBJEXT): {$(VPATH)}internal/xmalloc.h object.$(OBJEXT): {$(VPATH)}kernel.rb object.$(OBJEXT): {$(VPATH)}kernel.rbinc +object.$(OBJEXT): {$(VPATH)}method.h object.$(OBJEXT): {$(VPATH)}missing.h object.$(OBJEXT): {$(VPATH)}nilclass.rbinc +object.$(OBJEXT): {$(VPATH)}node.h object.$(OBJEXT): {$(VPATH)}object.c object.$(OBJEXT): {$(VPATH)}onigmo.h object.$(OBJEXT): {$(VPATH)}oniguruma.h object.$(OBJEXT): {$(VPATH)}probes.dmyh object.$(OBJEXT): {$(VPATH)}probes.h +object.$(OBJEXT): {$(VPATH)}ruby_assert.h +object.$(OBJEXT): {$(VPATH)}ruby_atomic.h object.$(OBJEXT): {$(VPATH)}st.h object.$(OBJEXT): {$(VPATH)}subst.h +object.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +object.$(OBJEXT): {$(VPATH)}thread_native.h object.$(OBJEXT): {$(VPATH)}util.h +object.$(OBJEXT): {$(VPATH)}vm_core.h +object.$(OBJEXT): {$(VPATH)}vm_opts.h pack.$(OBJEXT): $(hdrdir)/ruby/ruby.h pack.$(OBJEXT): $(top_srcdir)/internal/array.h pack.$(OBJEXT): $(top_srcdir)/internal/bits.h @@ -11849,6 +12025,10 @@ range.$(OBJEXT): {$(VPATH)}oniguruma.h range.$(OBJEXT): {$(VPATH)}range.c range.$(OBJEXT): {$(VPATH)}st.h range.$(OBJEXT): {$(VPATH)}subst.h +rational.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +rational.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +rational.$(OBJEXT): $(CCAN_DIR)/list/list.h +rational.$(OBJEXT): $(CCAN_DIR)/str/str.h rational.$(OBJEXT): $(hdrdir)/ruby/ruby.h rational.$(OBJEXT): $(top_srcdir)/internal/array.h rational.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -11858,6 +12038,7 @@ 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/numeric.h rational.$(OBJEXT): $(top_srcdir)/internal/object.h rational.$(OBJEXT): $(top_srcdir)/internal/rational.h @@ -11866,6 +12047,7 @@ rational.$(OBJEXT): $(top_srcdir)/internal/static_assert.h rational.$(OBJEXT): $(top_srcdir)/internal/vm.h rational.$(OBJEXT): $(top_srcdir)/internal/warnings.h rational.$(OBJEXT): {$(VPATH)}assert.h +rational.$(OBJEXT): {$(VPATH)}atomic.h rational.$(OBJEXT): {$(VPATH)}backward/2/assume.h rational.$(OBJEXT): {$(VPATH)}backward/2/attributes.h rational.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -11876,6 +12058,7 @@ rational.$(OBJEXT): {$(VPATH)}backward/2/long_long.h rational.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h rational.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h rational.$(OBJEXT): {$(VPATH)}config.h +rational.$(OBJEXT): {$(VPATH)}darray.h rational.$(OBJEXT): {$(VPATH)}defines.h rational.$(OBJEXT): {$(VPATH)}id.h rational.$(OBJEXT): {$(VPATH)}id_table.h @@ -12020,11 +12203,18 @@ rational.$(OBJEXT): {$(VPATH)}internal/value_type.h rational.$(OBJEXT): {$(VPATH)}internal/variable.h rational.$(OBJEXT): {$(VPATH)}internal/warning_push.h rational.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +rational.$(OBJEXT): {$(VPATH)}method.h rational.$(OBJEXT): {$(VPATH)}missing.h +rational.$(OBJEXT): {$(VPATH)}node.h rational.$(OBJEXT): {$(VPATH)}rational.c rational.$(OBJEXT): {$(VPATH)}ruby_assert.h +rational.$(OBJEXT): {$(VPATH)}ruby_atomic.h rational.$(OBJEXT): {$(VPATH)}st.h rational.$(OBJEXT): {$(VPATH)}subst.h +rational.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +rational.$(OBJEXT): {$(VPATH)}thread_native.h +rational.$(OBJEXT): {$(VPATH)}vm_core.h +rational.$(OBJEXT): {$(VPATH)}vm_opts.h re.$(OBJEXT): $(hdrdir)/ruby/ruby.h re.$(OBJEXT): $(top_srcdir)/internal/array.h re.$(OBJEXT): $(top_srcdir)/internal/compilers.h @@ -13959,7 +14149,12 @@ signal.$(OBJEXT): {$(VPATH)}thread_native.h signal.$(OBJEXT): {$(VPATH)}vm_core.h signal.$(OBJEXT): {$(VPATH)}vm_debug.h signal.$(OBJEXT): {$(VPATH)}vm_opts.h +sprintf.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +sprintf.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +sprintf.$(OBJEXT): $(CCAN_DIR)/list/list.h +sprintf.$(OBJEXT): $(CCAN_DIR)/str/str.h sprintf.$(OBJEXT): $(hdrdir)/ruby/ruby.h +sprintf.$(OBJEXT): $(top_srcdir)/internal/array.h sprintf.$(OBJEXT): $(top_srcdir)/internal/bignum.h sprintf.$(OBJEXT): $(top_srcdir)/internal/bits.h sprintf.$(OBJEXT): $(top_srcdir)/internal/class.h @@ -13968,6 +14163,7 @@ sprintf.$(OBJEXT): $(top_srcdir)/internal/error.h sprintf.$(OBJEXT): $(top_srcdir)/internal/fixnum.h sprintf.$(OBJEXT): $(top_srcdir)/internal/gc.h sprintf.$(OBJEXT): $(top_srcdir)/internal/hash.h +sprintf.$(OBJEXT): $(top_srcdir)/internal/imemo.h sprintf.$(OBJEXT): $(top_srcdir)/internal/numeric.h sprintf.$(OBJEXT): $(top_srcdir)/internal/object.h sprintf.$(OBJEXT): $(top_srcdir)/internal/sanitizers.h @@ -13978,6 +14174,7 @@ sprintf.$(OBJEXT): $(top_srcdir)/internal/symbol.h sprintf.$(OBJEXT): $(top_srcdir)/internal/vm.h sprintf.$(OBJEXT): $(top_srcdir)/internal/warnings.h sprintf.$(OBJEXT): {$(VPATH)}assert.h +sprintf.$(OBJEXT): {$(VPATH)}atomic.h sprintf.$(OBJEXT): {$(VPATH)}backward/2/assume.h sprintf.$(OBJEXT): {$(VPATH)}backward/2/attributes.h sprintf.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -13988,6 +14185,7 @@ sprintf.$(OBJEXT): {$(VPATH)}backward/2/long_long.h sprintf.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h sprintf.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h sprintf.$(OBJEXT): {$(VPATH)}config.h +sprintf.$(OBJEXT): {$(VPATH)}darray.h sprintf.$(OBJEXT): {$(VPATH)}defines.h sprintf.$(OBJEXT): {$(VPATH)}encoding.h sprintf.$(OBJEXT): {$(VPATH)}id.h @@ -14143,15 +14341,23 @@ sprintf.$(OBJEXT): {$(VPATH)}internal/value_type.h sprintf.$(OBJEXT): {$(VPATH)}internal/variable.h sprintf.$(OBJEXT): {$(VPATH)}internal/warning_push.h sprintf.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +sprintf.$(OBJEXT): {$(VPATH)}method.h sprintf.$(OBJEXT): {$(VPATH)}missing.h +sprintf.$(OBJEXT): {$(VPATH)}node.h sprintf.$(OBJEXT): {$(VPATH)}onigmo.h sprintf.$(OBJEXT): {$(VPATH)}oniguruma.h sprintf.$(OBJEXT): {$(VPATH)}re.h sprintf.$(OBJEXT): {$(VPATH)}regex.h +sprintf.$(OBJEXT): {$(VPATH)}ruby_assert.h +sprintf.$(OBJEXT): {$(VPATH)}ruby_atomic.h sprintf.$(OBJEXT): {$(VPATH)}sprintf.c sprintf.$(OBJEXT): {$(VPATH)}st.h sprintf.$(OBJEXT): {$(VPATH)}subst.h +sprintf.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +sprintf.$(OBJEXT): {$(VPATH)}thread_native.h sprintf.$(OBJEXT): {$(VPATH)}util.h +sprintf.$(OBJEXT): {$(VPATH)}vm_core.h +sprintf.$(OBJEXT): {$(VPATH)}vm_opts.h sprintf.$(OBJEXT): {$(VPATH)}vsnprintf.c st.$(OBJEXT): $(hdrdir)/ruby/ruby.h st.$(OBJEXT): $(top_srcdir)/internal/bits.h @@ -14494,6 +14700,10 @@ strftime.$(OBJEXT): {$(VPATH)}strftime.c strftime.$(OBJEXT): {$(VPATH)}subst.h strftime.$(OBJEXT): {$(VPATH)}timev.h strftime.$(OBJEXT): {$(VPATH)}util.h +string.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +string.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +string.$(OBJEXT): $(CCAN_DIR)/list/list.h +string.$(OBJEXT): $(CCAN_DIR)/str/str.h string.$(OBJEXT): $(hdrdir)/ruby/ruby.h string.$(OBJEXT): $(top_srcdir)/internal/array.h string.$(OBJEXT): $(top_srcdir)/internal/bignum.h @@ -14505,6 +14715,7 @@ string.$(OBJEXT): $(top_srcdir)/internal/encoding.h string.$(OBJEXT): $(top_srcdir)/internal/error.h string.$(OBJEXT): $(top_srcdir)/internal/fixnum.h string.$(OBJEXT): $(top_srcdir)/internal/gc.h +string.$(OBJEXT): $(top_srcdir)/internal/imemo.h string.$(OBJEXT): $(top_srcdir)/internal/numeric.h string.$(OBJEXT): $(top_srcdir)/internal/object.h string.$(OBJEXT): $(top_srcdir)/internal/proc.h @@ -14528,6 +14739,7 @@ string.$(OBJEXT): {$(VPATH)}backward/2/long_long.h string.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h string.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h string.$(OBJEXT): {$(VPATH)}config.h +string.$(OBJEXT): {$(VPATH)}darray.h string.$(OBJEXT): {$(VPATH)}debug_counter.h string.$(OBJEXT): {$(VPATH)}defines.h string.$(OBJEXT): {$(VPATH)}encindex.h @@ -14686,7 +14898,9 @@ string.$(OBJEXT): {$(VPATH)}internal/value_type.h string.$(OBJEXT): {$(VPATH)}internal/variable.h string.$(OBJEXT): {$(VPATH)}internal/warning_push.h string.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +string.$(OBJEXT): {$(VPATH)}method.h string.$(OBJEXT): {$(VPATH)}missing.h +string.$(OBJEXT): {$(VPATH)}node.h string.$(OBJEXT): {$(VPATH)}onigmo.h string.$(OBJEXT): {$(VPATH)}oniguruma.h string.$(OBJEXT): {$(VPATH)}probes.dmyh @@ -14694,12 +14908,16 @@ string.$(OBJEXT): {$(VPATH)}probes.h string.$(OBJEXT): {$(VPATH)}re.h string.$(OBJEXT): {$(VPATH)}regex.h string.$(OBJEXT): {$(VPATH)}ruby_assert.h +string.$(OBJEXT): {$(VPATH)}ruby_atomic.h string.$(OBJEXT): {$(VPATH)}st.h string.$(OBJEXT): {$(VPATH)}string.c string.$(OBJEXT): {$(VPATH)}subst.h +string.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h string.$(OBJEXT): {$(VPATH)}thread_native.h string.$(OBJEXT): {$(VPATH)}util.h +string.$(OBJEXT): {$(VPATH)}vm_core.h string.$(OBJEXT): {$(VPATH)}vm_debug.h +string.$(OBJEXT): {$(VPATH)}vm_opts.h string.$(OBJEXT): {$(VPATH)}vm_sync.h strlcat.$(OBJEXT): {$(VPATH)}config.h strlcat.$(OBJEXT): {$(VPATH)}internal/attr/format.h @@ -14935,12 +15153,18 @@ struct.$(OBJEXT): {$(VPATH)}thread_native.h struct.$(OBJEXT): {$(VPATH)}transient_heap.h struct.$(OBJEXT): {$(VPATH)}vm_core.h struct.$(OBJEXT): {$(VPATH)}vm_opts.h +symbol.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +symbol.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +symbol.$(OBJEXT): $(CCAN_DIR)/list/list.h +symbol.$(OBJEXT): $(CCAN_DIR)/str/str.h symbol.$(OBJEXT): $(hdrdir)/ruby/ruby.h +symbol.$(OBJEXT): $(top_srcdir)/internal/array.h symbol.$(OBJEXT): $(top_srcdir)/internal/class.h symbol.$(OBJEXT): $(top_srcdir)/internal/compilers.h 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/object.h symbol.$(OBJEXT): $(top_srcdir)/internal/serial.h symbol.$(OBJEXT): $(top_srcdir)/internal/static_assert.h @@ -14949,6 +15173,7 @@ symbol.$(OBJEXT): $(top_srcdir)/internal/symbol.h symbol.$(OBJEXT): $(top_srcdir)/internal/vm.h symbol.$(OBJEXT): $(top_srcdir)/internal/warnings.h symbol.$(OBJEXT): {$(VPATH)}assert.h +symbol.$(OBJEXT): {$(VPATH)}atomic.h symbol.$(OBJEXT): {$(VPATH)}backward/2/assume.h symbol.$(OBJEXT): {$(VPATH)}backward/2/attributes.h symbol.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -14959,6 +15184,7 @@ symbol.$(OBJEXT): {$(VPATH)}backward/2/long_long.h symbol.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h symbol.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h symbol.$(OBJEXT): {$(VPATH)}config.h +symbol.$(OBJEXT): {$(VPATH)}darray.h symbol.$(OBJEXT): {$(VPATH)}debug_counter.h symbol.$(OBJEXT): {$(VPATH)}defines.h symbol.$(OBJEXT): {$(VPATH)}encoding.h @@ -15117,17 +15343,24 @@ symbol.$(OBJEXT): {$(VPATH)}internal/value_type.h symbol.$(OBJEXT): {$(VPATH)}internal/variable.h symbol.$(OBJEXT): {$(VPATH)}internal/warning_push.h symbol.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +symbol.$(OBJEXT): {$(VPATH)}method.h symbol.$(OBJEXT): {$(VPATH)}missing.h +symbol.$(OBJEXT): {$(VPATH)}node.h symbol.$(OBJEXT): {$(VPATH)}onigmo.h symbol.$(OBJEXT): {$(VPATH)}oniguruma.h symbol.$(OBJEXT): {$(VPATH)}probes.dmyh symbol.$(OBJEXT): {$(VPATH)}probes.h symbol.$(OBJEXT): {$(VPATH)}ruby_assert.h +symbol.$(OBJEXT): {$(VPATH)}ruby_atomic.h symbol.$(OBJEXT): {$(VPATH)}st.h symbol.$(OBJEXT): {$(VPATH)}subst.h symbol.$(OBJEXT): {$(VPATH)}symbol.c symbol.$(OBJEXT): {$(VPATH)}symbol.h +symbol.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +symbol.$(OBJEXT): {$(VPATH)}thread_native.h +symbol.$(OBJEXT): {$(VPATH)}vm_core.h symbol.$(OBJEXT): {$(VPATH)}vm_debug.h +symbol.$(OBJEXT): {$(VPATH)}vm_opts.h symbol.$(OBJEXT): {$(VPATH)}vm_sync.h thread.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h thread.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h @@ -15547,19 +15780,26 @@ time.$(OBJEXT): {$(VPATH)}subst.h time.$(OBJEXT): {$(VPATH)}time.c time.$(OBJEXT): {$(VPATH)}timev.h time.$(OBJEXT): {$(VPATH)}timev.rbinc +transcode.$(OBJEXT): $(CCAN_DIR)/check_type/check_type.h +transcode.$(OBJEXT): $(CCAN_DIR)/container_of/container_of.h +transcode.$(OBJEXT): $(CCAN_DIR)/list/list.h +transcode.$(OBJEXT): $(CCAN_DIR)/str/str.h transcode.$(OBJEXT): $(hdrdir)/ruby/ruby.h transcode.$(OBJEXT): $(top_srcdir)/internal/array.h transcode.$(OBJEXT): $(top_srcdir)/internal/class.h transcode.$(OBJEXT): $(top_srcdir)/internal/compilers.h transcode.$(OBJEXT): $(top_srcdir)/internal/gc.h +transcode.$(OBJEXT): $(top_srcdir)/internal/imemo.h transcode.$(OBJEXT): $(top_srcdir)/internal/inits.h transcode.$(OBJEXT): $(top_srcdir)/internal/object.h transcode.$(OBJEXT): $(top_srcdir)/internal/serial.h transcode.$(OBJEXT): $(top_srcdir)/internal/static_assert.h transcode.$(OBJEXT): $(top_srcdir)/internal/string.h transcode.$(OBJEXT): $(top_srcdir)/internal/transcode.h +transcode.$(OBJEXT): $(top_srcdir)/internal/vm.h transcode.$(OBJEXT): $(top_srcdir)/internal/warnings.h transcode.$(OBJEXT): {$(VPATH)}assert.h +transcode.$(OBJEXT): {$(VPATH)}atomic.h transcode.$(OBJEXT): {$(VPATH)}backward/2/assume.h transcode.$(OBJEXT): {$(VPATH)}backward/2/attributes.h transcode.$(OBJEXT): {$(VPATH)}backward/2/bool.h @@ -15570,6 +15810,7 @@ transcode.$(OBJEXT): {$(VPATH)}backward/2/long_long.h transcode.$(OBJEXT): {$(VPATH)}backward/2/stdalign.h transcode.$(OBJEXT): {$(VPATH)}backward/2/stdarg.h transcode.$(OBJEXT): {$(VPATH)}config.h +transcode.$(OBJEXT): {$(VPATH)}darray.h transcode.$(OBJEXT): {$(VPATH)}defines.h transcode.$(OBJEXT): {$(VPATH)}encoding.h transcode.$(OBJEXT): {$(VPATH)}id.h @@ -15724,13 +15965,21 @@ transcode.$(OBJEXT): {$(VPATH)}internal/value_type.h transcode.$(OBJEXT): {$(VPATH)}internal/variable.h transcode.$(OBJEXT): {$(VPATH)}internal/warning_push.h transcode.$(OBJEXT): {$(VPATH)}internal/xmalloc.h +transcode.$(OBJEXT): {$(VPATH)}method.h transcode.$(OBJEXT): {$(VPATH)}missing.h +transcode.$(OBJEXT): {$(VPATH)}node.h transcode.$(OBJEXT): {$(VPATH)}onigmo.h transcode.$(OBJEXT): {$(VPATH)}oniguruma.h +transcode.$(OBJEXT): {$(VPATH)}ruby_assert.h +transcode.$(OBJEXT): {$(VPATH)}ruby_atomic.h transcode.$(OBJEXT): {$(VPATH)}st.h transcode.$(OBJEXT): {$(VPATH)}subst.h +transcode.$(OBJEXT): {$(VPATH)}thread_$(THREAD_MODEL).h +transcode.$(OBJEXT): {$(VPATH)}thread_native.h transcode.$(OBJEXT): {$(VPATH)}transcode.c transcode.$(OBJEXT): {$(VPATH)}transcode_data.h +transcode.$(OBJEXT): {$(VPATH)}vm_core.h +transcode.$(OBJEXT): {$(VPATH)}vm_opts.h transient_heap.$(OBJEXT): $(hdrdir)/ruby/ruby.h transient_heap.$(OBJEXT): $(top_srcdir)/internal/compilers.h transient_heap.$(OBJEXT): $(top_srcdir)/internal/gc.h diff --git a/ext/objspace/depend b/ext/objspace/depend index bea8ba2315..1248308397 100644 --- a/ext/objspace/depend +++ b/ext/objspace/depend @@ -163,6 +163,7 @@ object_tracing.o: objspace.h objspace.o: $(RUBY_EXTCONF_H) objspace.o: $(arch_hdrdir)/ruby/config.h objspace.o: $(hdrdir)/ruby/assert.h +objspace.o: $(hdrdir)/ruby/atomic.h objspace.o: $(hdrdir)/ruby/backward.h objspace.o: $(hdrdir)/ruby/backward/2/assume.h objspace.o: $(hdrdir)/ruby/backward/2/attributes.h @@ -334,6 +335,12 @@ objspace.o: $(hdrdir)/ruby/regex.h objspace.o: $(hdrdir)/ruby/ruby.h objspace.o: $(hdrdir)/ruby/st.h objspace.o: $(hdrdir)/ruby/subst.h +objspace.o: $(hdrdir)/ruby/thread_native.h +objspace.o: $(top_srcdir)/ccan/check_type/check_type.h +objspace.o: $(top_srcdir)/ccan/container_of/container_of.h +objspace.o: $(top_srcdir)/ccan/list/list.h +objspace.o: $(top_srcdir)/ccan/str/str.h +objspace.o: $(top_srcdir)/darray.h objspace.o: $(top_srcdir)/gc.h objspace.o: $(top_srcdir)/id_table.h objspace.o: $(top_srcdir)/internal.h @@ -346,9 +353,16 @@ objspace.o: $(top_srcdir)/internal/imemo.h objspace.o: $(top_srcdir)/internal/sanitizers.h objspace.o: $(top_srcdir)/internal/serial.h objspace.o: $(top_srcdir)/internal/static_assert.h +objspace.o: $(top_srcdir)/internal/vm.h objspace.o: $(top_srcdir)/internal/warnings.h +objspace.o: $(top_srcdir)/method.h objspace.o: $(top_srcdir)/node.h +objspace.o: $(top_srcdir)/ruby_assert.h +objspace.o: $(top_srcdir)/ruby_atomic.h objspace.o: $(top_srcdir)/symbol.h +objspace.o: $(top_srcdir)/thread_pthread.h +objspace.o: $(top_srcdir)/vm_core.h +objspace.o: $(top_srcdir)/vm_opts.h objspace.o: objspace.c objspace.o: {$(VPATH)}id.h objspace_dump.o: $(RUBY_EXTCONF_H) @@ -6881,6 +6881,8 @@ gc_mark_imemo(rb_objspace_t *objspace, VALUE obj) } } +static void mark_cvc_tbl(rb_objspace_t *objspace, VALUE klass); + static void gc_mark_children(rb_objspace_t *objspace, VALUE obj) { @@ -6927,6 +6929,7 @@ gc_mark_children(rb_objspace_t *objspace, VALUE obj) if (!RCLASS_EXT(obj)) break; mark_m_tbl(objspace, RCLASS_M_TBL(obj)); + mark_cvc_tbl(objspace, obj); cc_table_mark(objspace, obj); mark_tbl_no_pin(objspace, RCLASS_IV_TBL(obj)); mark_const_tbl(objspace, RCLASS_CONST_TBL(obj)); @@ -9838,9 +9841,14 @@ static enum rb_id_table_iterator_result update_cvc_tbl_i(ID id, VALUE cvc_entry, void *data) { struct rb_cvar_class_tbl_entry *entry; + rb_objspace_t * objspace = (rb_objspace_t *)data; entry = (struct rb_cvar_class_tbl_entry *)cvc_entry; + if (entry->cref) { + TYPED_UPDATE_IF_MOVED(objspace, rb_cref_t *, entry->cref); + } + entry->class_value = rb_gc_location(entry->class_value); return ID_TABLE_CONTINUE; @@ -9856,6 +9864,28 @@ update_cvc_tbl(rb_objspace_t *objspace, VALUE klass) } static enum rb_id_table_iterator_result +mark_cvc_tbl_i(VALUE cvc_entry, void *data) +{ + struct rb_cvar_class_tbl_entry *entry; + + entry = (struct rb_cvar_class_tbl_entry *)cvc_entry; + + RUBY_ASSERT(entry->cref == 0 || (BUILTIN_TYPE((VALUE)entry->cref) == T_IMEMO && IMEMO_TYPE_P(entry->cref, imemo_cref))); + rb_gc_mark((VALUE) entry->cref); + + return ID_TABLE_CONTINUE; +} + +static void +mark_cvc_tbl(rb_objspace_t *objspace, VALUE klass) +{ + struct rb_id_table *tbl = RCLASS_CVC_TBL(klass); + if (tbl) { + rb_id_table_foreach_values(tbl, mark_cvc_tbl_i, objspace); + } +} + +static enum rb_id_table_iterator_result update_const_table(VALUE value, void *data) { rb_const_entry_t *ce = (rb_const_entry_t *)value; diff --git a/internal/class.h b/internal/class.h index 9edc821701..ac20c205fa 100644 --- a/internal/class.h +++ b/internal/class.h @@ -14,6 +14,9 @@ #include "ruby/internal/stdbool.h" /* for bool */ #include "ruby/intern.h" /* for rb_alloc_func_t */ #include "ruby/ruby.h" /* for struct RBasic */ +#include "ruby_assert.h" +#include "vm_core.h" +#include "method.h" /* for rb_cref_t */ #ifdef RCLASS_SUPER # undef RCLASS_SUPER @@ -34,6 +37,7 @@ struct rb_iv_index_tbl_entry { struct rb_cvar_class_tbl_entry { uint32_t index; rb_serial_t global_cvar_state; + const rb_cref_t * cref; VALUE class_value; }; diff --git a/test/ruby/test_variable.rb b/test/ruby/test_variable.rb index f8a7c68fd3..d425b43b0d 100644 --- a/test/ruby/test_variable.rb +++ b/test/ruby/test_variable.rb @@ -33,6 +33,12 @@ class TestVariable < Test::Unit::TestCase end end + Athena = Gods.clone + + def test_cloned_classes_copy_cvar_cache + assert_equal "Cronus", Athena.new.ruler0 + end + def test_setting_class_variable_on_module_through_inheritance mod = Module.new mod.class_variable_set(:@@foo, 1) @@ -43,6 +49,19 @@ class TestVariable < Test::Unit::TestCase assert_equal(1, c.class_variable_get(:@@foo)) end + Zeus = Gods.clone + + def test_cloned_allows_setting_cvar + Zeus.class_variable_set(:@@rule, "Athena") + + god = Gods.new.ruler0 + zeus = Zeus.new.ruler0 + + assert_equal "Cronus", god + assert_equal "Athena", zeus + assert_not_equal god.object_id, zeus.object_id + end + def test_singleton_class_included_class_variable c = Class.new c.extend(Olympians) diff --git a/variable.c b/variable.c index eaad6eb497..74d5b699b8 100644 --- a/variable.c +++ b/variable.c @@ -3517,6 +3517,7 @@ rb_cvar_set(VALUE klass, ID id, VALUE val) ent = ALLOC(struct rb_cvar_class_tbl_entry); ent->class_value = target; ent->global_cvar_state = GET_GLOBAL_CVAR_STATE(); + ent->cref = 0; rb_id_table_insert(rb_cvc_tbl, id, (VALUE)ent); RB_DEBUG_COUNTER_INC(cvar_inline_miss); } diff --git a/vm_insnhelper.c b/vm_insnhelper.c index aff6baa340..3a4c228e28 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -1283,7 +1283,7 @@ vm_setivar(VALUE obj, ID id, VALUE val, const rb_iseq_t *iseq, IVC ic, const str } static VALUE -update_classvariable_cache(const rb_iseq_t *iseq, VALUE klass, ID id, ICVARC ic) +update_classvariable_cache(const rb_iseq_t *iseq, VALUE klass, ID id, const rb_cref_t * cref, ICVARC ic) { VALUE defined_class = 0; VALUE cvar_value = rb_cvar_find(klass, id, &defined_class); @@ -1303,10 +1303,15 @@ update_classvariable_cache(const rb_iseq_t *iseq, VALUE klass, ID id, ICVARC ic) } struct rb_cvar_class_tbl_entry *ent = (void *)ent_data; - ent->global_cvar_state = GET_GLOBAL_CVAR_STATE(); + ent->global_cvar_state = GET_GLOBAL_CVAR_STATE(); + ent->cref = cref; ic->entry = ent; + + RUBY_ASSERT(BUILTIN_TYPE((VALUE)cref) == T_IMEMO && IMEMO_TYPE_P(cref, imemo_cref)); + RB_OBJ_WRITTEN(iseq, Qundef, ent->cref); RB_OBJ_WRITTEN(iseq, Qundef, ent->class_value); + RB_OBJ_WRITTEN(ent->class_value, Qundef, ent->cref); return cvar_value; } @@ -1315,8 +1320,9 @@ static inline VALUE vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, ICVARC ic) { const rb_cref_t *cref; + cref = vm_get_cref(GET_EP()); - if (ic->entry && ic->entry->global_cvar_state == GET_GLOBAL_CVAR_STATE()) { + if (ic->entry && ic->entry->global_cvar_state == GET_GLOBAL_CVAR_STATE() && ic->entry->cref == cref && LIKELY(rb_ractor_main_p())) { VALUE v = Qundef; RB_DEBUG_COUNTER_INC(cvar_read_inline_hit); @@ -1327,10 +1333,9 @@ vm_getclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID } } - cref = vm_get_cref(GET_EP()); VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1); - return update_classvariable_cache(iseq, klass, id, ic); + return update_classvariable_cache(iseq, klass, id, cref, ic); } VALUE @@ -1343,20 +1348,20 @@ static inline void vm_setclassvariable(const rb_iseq_t *iseq, const rb_control_frame_t *reg_cfp, ID id, VALUE val, ICVARC ic) { const rb_cref_t *cref; + cref = vm_get_cref(GET_EP()); - if (ic->entry && ic->entry->global_cvar_state == GET_GLOBAL_CVAR_STATE()) { + if (ic->entry && ic->entry->global_cvar_state == GET_GLOBAL_CVAR_STATE() && ic->entry->cref == cref && LIKELY(rb_ractor_main_p())) { RB_DEBUG_COUNTER_INC(cvar_write_inline_hit); rb_class_ivar_set(ic->entry->class_value, id, val); return; } - cref = vm_get_cref(GET_EP()); VALUE klass = vm_get_cvar_base(cref, reg_cfp, 1); rb_cvar_set(klass, id, val); - update_classvariable_cache(iseq, klass, id, ic); + update_classvariable_cache(iseq, klass, id, cref, ic); } void |
