summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
author卜部昌平 <shyouhei@ruby-lang.org>2020-06-12 11:04:46 +0900
committer卜部昌平 <shyouhei@ruby-lang.org>2020-06-29 11:05:41 +0900
commit2d6f8db3d60e0c54cc51d2bd5ed6b86af7ef15ae (patch)
treecd035a3e6bc2c92b01618f7611f088f63f6f79ce /array.c
parent86c869fb5967e1e75691721683c43c1d12f05966 (diff)
add spaces [ci skip]
Notes
Notes: Merged: https://github.com/ruby/ruby/pull/3247
Diffstat (limited to 'array.c')
-rw-r--r--array.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/array.c b/array.c
index 2d16287461..3bbc094509 100644
--- a/array.c
+++ b/array.c
@@ -1573,15 +1573,18 @@ make_room_for_unshift(VALUE ary, const VALUE *head, VALUE *sharedp, int argc, lo
{
if (head - sharedp < argc) {
long room = capa - len - argc;
+
room -= room >> 4;
MEMMOVE((VALUE *)sharedp + argc + room, head, VALUE, len);
head = sharedp + argc + room;
}
ARY_SET_PTR(ary, head - argc);
assert(ARY_SHARED_ROOT_OCCUPIED(ARY_SHARED_ROOT(ary)));
+
ary_verify(ary);
return ARY_SHARED_ROOT(ary);
}
+
static VALUE
ary_modify_for_unshift(VALUE ary, int argc)
{
@@ -1617,11 +1620,13 @@ ary_modify_for_unshift(VALUE ary, int argc)
return ary;
}
}
+
static VALUE
ary_ensure_room_for_unshift(VALUE ary, int argc)
{
long len = RARRAY_LEN(ary);
long new_len = len + argc;
+
if (len > ARY_MAX_SIZE - argc) {
rb_raise(rb_eIndexError, "index %ld too big", new_len);
}
@@ -1631,6 +1636,7 @@ ary_ensure_room_for_unshift(VALUE ary, int argc)
else {
VALUE shared_root = ARY_SHARED_ROOT(ary);
long capa = RARRAY_LEN(shared_root);
+
if (! ARY_SHARED_ROOT_OCCUPIED(shared_root)) {
return ary_modify_for_unshift(ary, argc);
}
@@ -1638,9 +1644,10 @@ ary_ensure_room_for_unshift(VALUE ary, int argc)
return ary_modify_for_unshift(ary, argc);
}
else {
- rb_ary_modify_check(ary);
const VALUE * head = RARRAY_CONST_PTR_TRANSIENT(ary);
void *sharedp = (void *)RARRAY_CONST_PTR_TRANSIENT(shared_root);
+
+ rb_ary_modify_check(ary);
return make_room_for_unshift(ary, head, sharedp, argc, capa, len);
}
}