Refactor rb_ensure_iv_list_size
We don't really need obj_ivar_heap_alloc and obj_ivar_heap_realloc since they're just one liners.
This commit is contained in:
parent
8326bf1a21
commit
196116e576
22
variable.c
22
variable.c
@ -1395,36 +1395,20 @@ generic_ivar_set(VALUE obj, ID id, VALUE val)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE *
|
|
||||||
obj_ivar_heap_alloc(VALUE obj, size_t newsize)
|
|
||||||
{
|
|
||||||
return ALLOC_N(VALUE, newsize);
|
|
||||||
}
|
|
||||||
|
|
||||||
static VALUE *
|
|
||||||
obj_ivar_heap_realloc(VALUE obj, int32_t len, size_t newsize)
|
|
||||||
{
|
|
||||||
REALLOC_N(ROBJECT(obj)->as.heap.ivptr, VALUE, newsize);
|
|
||||||
VALUE *newptr = ROBJECT(obj)->as.heap.ivptr;
|
|
||||||
|
|
||||||
return newptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
rb_ensure_iv_list_size(VALUE obj, uint32_t current_capacity, uint32_t new_capacity)
|
rb_ensure_iv_list_size(VALUE obj, uint32_t current_capacity, uint32_t new_capacity)
|
||||||
{
|
{
|
||||||
RUBY_ASSERT(!rb_shape_obj_too_complex(obj));
|
RUBY_ASSERT(!rb_shape_obj_too_complex(obj));
|
||||||
VALUE *ptr = ROBJECT_IVPTR(obj);
|
|
||||||
VALUE *newptr;
|
|
||||||
|
|
||||||
if (RBASIC(obj)->flags & ROBJECT_EMBED) {
|
if (RBASIC(obj)->flags & ROBJECT_EMBED) {
|
||||||
newptr = obj_ivar_heap_alloc(obj, new_capacity);
|
VALUE *ptr = ROBJECT_IVPTR(obj);
|
||||||
|
VALUE *newptr = ALLOC_N(VALUE, new_capacity);
|
||||||
MEMCPY(newptr, ptr, VALUE, current_capacity);
|
MEMCPY(newptr, ptr, VALUE, current_capacity);
|
||||||
RB_FL_UNSET_RAW(obj, ROBJECT_EMBED);
|
RB_FL_UNSET_RAW(obj, ROBJECT_EMBED);
|
||||||
ROBJECT(obj)->as.heap.ivptr = newptr;
|
ROBJECT(obj)->as.heap.ivptr = newptr;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
newptr = obj_ivar_heap_realloc(obj, current_capacity, new_capacity);
|
REALLOC_N(ROBJECT(obj)->as.heap.ivptr, VALUE, new_capacity);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user