ruby-changes:72723
From: Peter <ko1@a...>
Date: Thu, 28 Jul 2022 23:02:28 +0900 (JST)
Subject: [ruby-changes:72723] 2375afb8d6 (master): Refactor gc_ref_update_array
https://git.ruby-lang.org/ruby.git/commit/?id=2375afb8d6 From 2375afb8d6fd218cd9083749d87a7a59946d8938 Mon Sep 17 00:00:00 2001 From: Peter Zhu <peter@p...> Date: Wed, 27 Jul 2022 11:18:29 -0400 Subject: Refactor gc_ref_update_array --- gc.c | 38 ++++++++++++++++++-------------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/gc.c b/gc.c index 75f0658829..84f9aa30f6 100644 --- a/gc.c +++ b/gc.c @@ -9957,16 +9957,26 @@ gc_sort_heap_by_empty_slots(rb_objspace_t *objspace) https://github.com/ruby/ruby/blob/trunk/gc.c#L9957 static void 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); + for (long i = 0; i < len; i++) { + UPDATE_IF_MOVED(objspace, ptr[i]); + } + } - len = RARRAY_LEN(v); - if (len > 0) { - 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) https://github.com/ruby/ruby/blob/trunk/gc.c#L10476 return; case T_ARRAY: - if (ARY_SHARED_P(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 + gc_ref_update_array(objspace, obj); break; case T_HASH: -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/