Move return value of rb_define_finalizer out

Moves return value logic of rb_define_finalizer out from
rb_gc_impl_define_finalizer.
This commit is contained in:
Peter Zhu 2024-07-18 13:36:23 -04:00
Родитель 0936e3d545
Коммит e8aa9daa5b
2 изменённых файлов: 8 добавлений и 6 удалений

7
gc.c
Просмотреть файл

@ -1560,7 +1560,12 @@ rb_define_finalizer(VALUE obj, VALUE block)
{ {
should_be_finalizable(obj); should_be_finalizable(obj);
should_be_callable(block); should_be_callable(block);
return rb_gc_impl_define_finalizer(rb_gc_get_objspace(), obj, block);
block = rb_gc_impl_define_finalizer(rb_gc_get_objspace(), obj, block);
block = rb_ary_new3(2, INT2FIX(0), block);
OBJ_FREEZE(block);
return block;
} }
void void

Просмотреть файл

@ -2983,8 +2983,7 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
for (i = 0; i < len; i++) { for (i = 0; i < len; i++) {
VALUE recv = RARRAY_AREF(table, i); VALUE recv = RARRAY_AREF(table, i);
if (rb_equal(recv, block)) { if (rb_equal(recv, block)) {
block = recv; return recv;
goto end;
} }
} }
} }
@ -2996,9 +2995,7 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block)
rb_obj_hide(table); rb_obj_hide(table);
st_add_direct(finalizer_table, obj, table); st_add_direct(finalizer_table, obj, table);
} }
end:
block = rb_ary_new3(2, INT2FIX(0), block);
OBJ_FREEZE(block);
return block; return block;
} }