diff options
author | Peter Zhu <[email protected]> | 2024-09-09 12:11:30 -0400 |
---|---|---|
committer | Peter Zhu <[email protected]> | 2024-09-10 10:09:50 -0400 |
commit | 22f12b0a62c512f115cd60d4192e53921b11f0c7 () | |
tree | a88d0324e549f926d18ee94e90a10efc456cb6e0 /imemo.c | |
parent | a79907ed5e8014215a658f4731ff33df3aca9eaa (diff) |
Use rb_id_table_foreach_values for marking CC table
We don't use the key, so we can speed it up by not needing to convert the key to ID in the iterator.
Notes: Merged: https://.com/ruby/ruby/pull/11580
-rw-r--r-- | imemo.c | 14 |
1 files changed, 10 insertions, 4 deletions
@@ -179,11 +179,17 @@ rb_imemo_memsize(VALUE obj) * ========================================================================= */ static enum rb_id_table_iterator_result -cc_table_mark_i(ID id, VALUE ccs_ptr, void *data) { struct rb_class_cc_entries *ccs = (struct rb_class_cc_entries *)ccs_ptr; VM_ASSERT(vm_ccs_p(ccs)); - VM_ASSERT(id == ccs->cme->called_id); if (METHOD_ENTRY_INVALIDATED(ccs->cme)) { rb_vm_ccs_free(ccs); @@ -193,7 +199,7 @@ cc_table_mark_i(ID id, VALUE ccs_ptr, void *data) rb_gc_mark_movable((VALUE)ccs->cme); for (int i=0; i<ccs->len; i++) { - VM_ASSERT((VALUE)data == ccs->entries[i].cc->klass); VM_ASSERT(vm_cc_check_cme(ccs->entries[i].cc, ccs->cme)); rb_gc_mark_movable((VALUE)ccs->entries[i].cc); @@ -207,7 +213,7 @@ rb_cc_table_mark(VALUE klass) { struct rb_id_table *cc_tbl = RCLASS_CC_TBL(klass); if (cc_tbl) { - rb_id_table_foreach(cc_tbl, cc_table_mark_i, (void *)klass); } } |