summaryrefslogtreecommitdiff
path: root/object.c
diff options
context:
space:
mode:
Diffstat (limited to 'object.c')
-rw-r--r--object.c33
1 files changed, 6 insertions, 27 deletions
diff --git a/object.c b/object.c
index 6a7b2cbf23..4baf7ffc56 100644
--- a/object.c
+++ b/object.c
@@ -267,34 +267,13 @@ rb_obj_singleton_class(VALUE obj)
MJIT_FUNC_EXPORTED void
rb_obj_copy_ivar(VALUE dest, VALUE obj)
{
- VALUE *dst_buf = 0;
- VALUE *src_buf = 0;
- uint32_t len = ROBJECT_EMBED_LEN_MAX;
+ 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 len = dest_len < src_len ? dest_len : src_len;
- if (RBASIC(obj)->flags & ROBJECT_EMBED) {
- src_buf = ROBJECT(obj)->as.ary;
-
- // embedded -> embedded
- if (RBASIC(dest)->flags & ROBJECT_EMBED) {
- dst_buf = ROBJECT(dest)->as.ary;
- }
- // embedded -> extended
- else {
- dst_buf = ROBJECT(dest)->as.heap.ivptr;
- }
- }
- // extended -> extended
- else {
- RUBY_ASSERT(!(RBASIC(dest)->flags & ROBJECT_EMBED));
- uint32_t src_len = ROBJECT(obj)->as.heap.numiv;
- uint32_t dst_len = ROBJECT(dest)->as.heap.numiv;
-
- len = src_len < dst_len ? src_len : dst_len;
- dst_buf = ROBJECT(dest)->as.heap.ivptr;
- src_buf = ROBJECT(obj)->as.heap.ivptr;
- }
-
- MEMCPY(dst_buf, src_buf, VALUE, len);
+ MEMCPY(dest_buf, src_buf, VALUE, len);
}
static void