From 5a187e26adc8aa32367f294c1496935c7356d386 Mon Sep 17 00:00:00 2001 From: Luke Gruber Date: Sat, 22 Jun 2019 22:22:23 -0400 Subject: array.c add back shared array optimization to ary_ensure_room_for_unshift Bug fix in commit ec8e5f5aa64e2a [Bug #15952] disabled an optimization in this function. Closes: https://github.com/ruby/ruby/pull/2252 --- array.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/array.c b/array.c index 2d68b608c0..403428d361 100644 --- a/array.c +++ b/array.c @@ -1373,18 +1373,18 @@ ary_ensure_room_for_unshift(VALUE ary, int argc) rb_raise(rb_eIndexError, "index %ld too big", new_len); } - rb_ary_modify(ary); - if (ARY_SHARED_P(ary)) { VALUE shared = ARY_SHARED(ary); capa = RARRAY_LEN(shared); if (ARY_SHARED_OCCUPIED(shared) && capa > new_len) { + rb_ary_modify_check(ary); head = RARRAY_CONST_PTR_TRANSIENT(ary); sharedp = RARRAY_CONST_PTR_TRANSIENT(shared); goto makeroom_if_need; } } + rb_ary_modify(ary); capa = ARY_CAPA(ary); if (capa - (capa >> 6) <= new_len) { ary_double_capa(ary, new_len); -- cgit v1.2.3