Simplified rb_obj_copy_ivar implementation
This commit is contained in:
parent
1865ed4ab9
commit
b54c8ba8fc
Notes:
git
2025-05-14 12:41:59 +00:00
34
object.c
34
object.c
@ -268,37 +268,21 @@ rb_obj_singleton_class(VALUE obj)
|
|||||||
MJIT_FUNC_EXPORTED void
|
MJIT_FUNC_EXPORTED void
|
||||||
rb_obj_copy_ivar(VALUE dest, VALUE obj)
|
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 dest_len = ROBJECT_NUMIV(dest);
|
||||||
uint32_t src_len = ROBJECT_NUMIV(obj);
|
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);
|
if (dest_len < src_len) {
|
||||||
|
rb_ensure_iv_list_size(dest, dest_len, src_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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// extended -> extended
|
|
||||||
else {
|
|
||||||
RUBY_ASSERT(!(RBASIC(dest)->flags & ROBJECT_EMBED));
|
RUBY_ASSERT(!(RBASIC(dest)->flags & ROBJECT_EMBED));
|
||||||
dest_buf = ROBJECT(dest)->as.heap.ivptr;
|
}
|
||||||
src_buf = ROBJECT(obj)->as.heap.ivptr;
|
else {
|
||||||
|
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
|
static void
|
||||||
|
Loading…
x
Reference in New Issue
Block a user