зеркало из https://github.com/github/ruby.git
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:
Родитель
0936e3d545
Коммит
e8aa9daa5b
7
gc.c
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче