mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Refactor gc_ref_update_array
This commit is contained in:
parent
3eade59919
commit
2375afb8d6
Notes:
git
2022-07-28 23:02:33 +09:00
1 changed files with 19 additions and 21 deletions
40
gc.c
40
gc.c
|
@ -9957,16 +9957,26 @@ gc_sort_heap_by_empty_slots(rb_objspace_t *objspace)
|
||||||
static void
|
static void
|
||||||
gc_ref_update_array(rb_objspace_t * objspace, VALUE v)
|
gc_ref_update_array(rb_objspace_t * objspace, VALUE v)
|
||||||
{
|
{
|
||||||
long i, len;
|
if (ARY_SHARED_P(v)) {
|
||||||
|
UPDATE_IF_MOVED(objspace, RARRAY(v)->as.heap.aux.shared_root);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
long len = RARRAY_LEN(v);
|
||||||
|
|
||||||
if (ARY_SHARED_P(v)) return;
|
if (len > 0) {
|
||||||
|
VALUE *ptr = (VALUE *)RARRAY_CONST_PTR_TRANSIENT(v);
|
||||||
len = RARRAY_LEN(v);
|
for (long i = 0; i < len; i++) {
|
||||||
if (len > 0) {
|
UPDATE_IF_MOVED(objspace, ptr[i]);
|
||||||
VALUE *ptr = (VALUE *)RARRAY_CONST_PTR_TRANSIENT(v);
|
}
|
||||||
for (i = 0; i < len; i++) {
|
|
||||||
UPDATE_IF_MOVED(objspace, ptr[i]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if USE_RVARGC
|
||||||
|
if ((size_t)GET_HEAP_PAGE(v)->slot_size >= rb_ary_size_as_embedded(v)) {
|
||||||
|
if (rb_ary_embeddable_p(v)) {
|
||||||
|
rb_ary_make_embedded(v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10466,19 +10476,7 @@ gc_update_object_references(rb_objspace_t *objspace, VALUE obj)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case T_ARRAY:
|
case T_ARRAY:
|
||||||
if (ARY_SHARED_P(obj)) {
|
gc_ref_update_array(objspace, obj);
|
||||||
UPDATE_IF_MOVED(objspace, any->as.array.as.heap.aux.shared_root);
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gc_ref_update_array(objspace, obj);
|
|
||||||
}
|
|
||||||
#if USE_RVARGC
|
|
||||||
if ((size_t)GET_HEAP_PAGE(obj)->slot_size >= rb_ary_size_as_embedded(obj)) {
|
|
||||||
if (rb_ary_embeddable_p(obj)) {
|
|
||||||
rb_ary_make_embedded(obj);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case T_HASH:
|
case T_HASH:
|
||||||
|
|
Loading…
Add table
Reference in a new issue