From 506e1cfc443aac2191ce1ee91fe0198c2884349d Mon Sep 17 00:00:00 2001 From: Jemma Issroff Date: Mon, 17 Oct 2022 14:31:24 -0400 Subject: [PATCH] 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 929968c4cbf13e..d0c0e34f82ae96 100644 --- a/object.c +++ b/object.c @@ -268,37 +268,21 @@ rb_obj_singleton_class(VALUE obj) 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