summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Zhu <peter@peterzhu.ca>2024-07-18 13:36:23 -0400
committerPeter Zhu <peter@peterzhu.ca>2024-07-19 08:53:32 -0400
commite8aa9daa5bcb1993f2cddbf191cc46a7ad6bebed (patch)
treed9fdb5429412e8a92958ee2a65e5a7ced94c939a
parent0936e3d545c99dfec35ea32c8b0206cf54028f27 (diff)
Move return value of rb_define_finalizer out
Moves return value logic of rb_define_finalizer out from rb_gc_impl_define_finalizer.
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/11199
-rw-r--r--gc.c7
-rw-r--r--gc/default.c7
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;
}