From e8aa9daa5bcb1993f2cddbf191cc46a7ad6bebed Mon Sep 17 00:00:00 2001 From: Peter Zhu Date: Thu, 18 Jul 2024 13:36:23 -0400 Subject: [PATCH] Move return value of rb_define_finalizer out Moves return value logic of rb_define_finalizer out from rb_gc_impl_define_finalizer. --- gc.c | 7 ++++++- gc/default.c | 7 ++----- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/gc.c b/gc.c index 9f24ade5c5..2641115f90 100644 --- a/gc.c +++ b/gc.c @@ -1560,7 +1560,12 @@ rb_define_finalizer(VALUE obj, VALUE block) { should_be_finalizable(obj); 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 diff --git a/gc/default.c b/gc/default.c index cdc7961699..597044b5f6 100644 --- a/gc/default.c +++ b/gc/default.c @@ -2983,8 +2983,7 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block) for (i = 0; i < len; i++) { VALUE recv = RARRAY_AREF(table, i); if (rb_equal(recv, block)) { - block = recv; - goto end; + return recv; } } } @@ -2996,9 +2995,7 @@ rb_gc_impl_define_finalizer(void *objspace_ptr, VALUE obj, VALUE block) rb_obj_hide(table); st_add_direct(finalizer_table, obj, table); } - end: - block = rb_ary_new3(2, INT2FIX(0), block); - OBJ_FREEZE(block); + return block; }