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

ruby-changes:74067

From: Jemma <ko1@a...>
Date: Tue, 18 Oct 2022 06:48:01 +0900 (JST)
Subject: [ruby-changes:74067] b54c8ba8fc (master): Simplified rb_obj_copy_ivar implementation

https://git.ruby-lang.org/ruby.git/commit/?id=b54c8ba8fc

From b54c8ba8fc1a03446fa9ecfd7995ba8fafd20a3e Mon Sep 17 00:00:00 2001
From: Jemma Issroff <jemmaissroff@g...>
Date: Mon, 17 Oct 2022 14:31:24 -0400
Subject: Simplified rb_obj_copy_ivar implementation

---
 object.c | 32 ++++++++------------------------
 1 file changed, 8 insertions(+), 24 deletions(-)

diff --git a/object.c b/object.c
index 929968c4cb..d0c0e34f82 100644
--- a/object.c
+++ b/object.c
@@ -268,37 +268,21 @@ rb_obj_singleton_class(VALUE obj) https://github.com/ruby/ruby/blob/trunk/object.c#L268
 MJIT_FUNC_EXPORTED void
 rb_obj_copy_ivar(VALUE dest, VALUE obj)
 {
-    VALUE *dest_buf = ROBJECT_IVPTR(dest);
-    VALUE *src_buf = ROBJECT_IVPTR(obj);
     uint32_t dest_len = ROBJECT_NUMIV(dest);
     uint32_t src_len = ROBJECT_NUMIV(obj);
-    uint32_t max_len = dest_len < src_len ? src_len : dest_len;
 
-    rb_ensure_iv_list_size(dest, dest_len, max_len);
-
-    dest_len = ROBJECT_NUMIV(dest);
-    uint32_t min_len = dest_len > src_len ? src_len : dest_len;
-
-    if (RBASIC(obj)->flags & ROBJECT_EMBED) {
-        src_buf = ROBJECT(obj)->as.ary;
-
-        // embedded -> embedded
-        if (RBASIC(dest)->flags & ROBJECT_EMBED) {
-            dest_buf = ROBJECT(dest)->as.ary;
-        }
-        // embedded -> extended
-        else {
-            dest_buf = ROBJECT(dest)->as.heap.ivptr;
-        }
+    if (dest_len < src_len) {
+        rb_ensure_iv_list_size(dest, dest_len, src_len);
+        RUBY_ASSERT(!(RBASIC(dest)->flags & ROBJECT_EMBED));
     }
-    // extended -> extended
     else {
-        RUBY_ASSERT(!(RBASIC(dest)->flags & ROBJECT_EMBED));
-        dest_buf = ROBJECT(dest)->as.heap.ivptr;
-        src_buf = ROBJECT(obj)->as.heap.ivptr;
+        RUBY_ASSERT((RBASIC(dest)->flags & ROBJECT_EMBED));
     }
 
-    MEMCPY(dest_buf, src_buf, VALUE, min_len);
+    VALUE * dest_buf = ROBJECT_IVPTR(dest);
+    VALUE * src_buf = ROBJECT_IVPTR(obj);
+
+    MEMCPY(dest_buf, src_buf, VALUE, ROBJECT_IV_COUNT(obj));
 }
 
 static void
-- 
cgit v1.2.3


--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

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