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; }