summaryrefslogtreecommitdiff
path: root/imemo.c
diff options
context:
space:
mode:
authorPeter Zhu <[email protected]>2024-09-09 12:11:30 -0400
committerPeter Zhu <[email protected]>2024-09-10 10:09:50 -0400
commit22f12b0a62c512f115cd60d4192e53921b11f0c7 ()
treea88d0324e549f926d18ee94e90a10efc456cb6e0 /imemo.c
parenta79907ed5e8014215a658f4731ff33df3aca9eaa (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.c14
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);
}
}