Use rb_len_t for finalizer counts and tables in the GCs

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
Hiroshi SHIBATAandClaude Opus 5.5 committed 2026-10-10 16:45:25 +09:00
1 parent 9511e08d9e
commit 4ef08fc130
5 files changed
+12 -12
Notes: git 2026-10-10 07:46:21 +00:00

No files matched your search

+3 -3
View File
@@ -293,14 +293,14 @@ rb_gc_get_objspace(void)
}
void
rb_gc_run_obj_finalizer(VALUE objid, long count, VALUE (*callback)(long i, void *data), void *data)
rb_gc_run_obj_finalizer(VALUE objid, rb_len_t count, VALUE (*callback)(rb_len_t i, void *data), void *data)
{
volatile struct {
VALUE errinfo;
VALUE final;
rb_control_frame_t *cfp;
VALUE *sp;
long finished;
rb_len_t finished;
} saved;
rb_execution_context_t * volatile ec = GET_EC();
@@ -330,7 +330,7 @@ rb_gc_run_obj_finalizer(VALUE objid, long count, VALUE (*callback)(long i, void
}
}
for (long i = saved.finished; RESTORE_FINALIZER(), i < count; saved.finished = ++i) {
for (rb_len_t i = saved.finished; RESTORE_FINALIZER(), i < count; saved.finished = ++i) {
saved.final = callback(i, data);
rb_check_funcall(saved.final, idCall, 1, &objid);
}
+1 -1
View File
@@ -4215,7 +4215,7 @@ rb_gc_impl_copy_finalizer(void *objspace_ptr, VALUE dest, VALUE obj)
}
static VALUE
get_final(long i, void *data)
get_final(rb_len_t i, void *data)
{
VALUE table = (VALUE)data;
+1 -1
View File
@@ -101,7 +101,7 @@ MODULAR_GC_FN void rb_gc_update_object_references(void *objspace, VALUE obj);
MODULAR_GC_FN void rb_gc_update_vm_references(void *objspace);
MODULAR_GC_FN void rb_gc_event_hook(VALUE obj, rb_event_flag_t event);
MODULAR_GC_FN void *rb_gc_get_objspace(void);
MODULAR_GC_FN void rb_gc_run_obj_finalizer(VALUE objid, long count, VALUE (*callback)(long i, void *data), void *data);
MODULAR_GC_FN void rb_gc_run_obj_finalizer(VALUE objid, rb_len_t count, VALUE (*callback)(rb_len_t i, void *data), void *data);
MODULAR_GC_FN void rb_gc_set_pending_interrupt(void);
MODULAR_GC_FN void rb_gc_trigger_finalize_deferred(void *objspace, rb_postponed_job_handle_t pjob);
MODULAR_GC_FN void rb_gc_trigger_postponed_job_on_main(rb_postponed_job_handle_t pjob);
+3 -3
View File
@@ -1367,7 +1367,7 @@ rb_gc_impl_each_object(void *objspace_ptr, void (*func)(VALUE, void *), void *da
// Finalizers
static VALUE
gc_run_finalizers_get_final(long i, void *data)
gc_run_finalizers_get_final(rb_len_t i, void *data)
{
VALUE table = (VALUE)data;
@@ -1449,8 +1449,8 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
/* avoid duplicate block, table is usually small */
{
long len = RARRAY_LEN(table);
long i;
rb_len_t len = RARRAY_LEN(table);
rb_len_t i;
for (i = 0; i < len; i++) {
VALUE recv = RARRAY_AREF(table, i);
+4 -4
View File
@@ -1556,8 +1556,8 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
info->finalizers = table;
} else {
/* Check for duplicate finalizers (skip index 0 which is object ID) */
long len = RARRAY_LEN(table);
long i;
rb_len_t len = RARRAY_LEN(table);
rb_len_t i;
for (i = 1; i < len; i++) {
VALUE recv = RARRAY_AREF(table, i);
@@ -1615,7 +1615,7 @@ rb_gc_impl_copy_finalizer(void *objspace_ptr, VALUE dest, VALUE obj)
}
static VALUE
wbcheck_get_final(long i, void *data)
wbcheck_get_final(rb_len_t i, void *data)
{
VALUE table = (VALUE)data;
@@ -1676,7 +1676,7 @@ wbcheck_run_finalizers_for_object(VALUE obj, rb_wbcheck_object_info_t *info)
{
if (info->finalizers) {
VALUE table = info->finalizers;
long count = RARRAY_LEN(table) - 1;
rb_len_t count = RARRAY_LEN(table) - 1;
rb_gc_run_obj_finalizer(RARRAY_AREF(table, 0), count, wbcheck_get_final, (void *)table);
FL_UNSET(obj, FL_FINALIZE);
}