[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]