ruby-changes:53232
From: ko1 <ko1@a...>
Date: Wed, 31 Oct 2018 06:02:01 +0900 (JST)
Subject: [ruby-changes:53232] ko1:r65447 (trunk): revert r65444 and r65446 because of commit miss
ko1 2018-10-31 06:01:55 +0900 (Wed, 31 Oct 2018) New Revision: 65447 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=65447 Log: revert r65444 and r65446 because of commit miss Modified files: trunk/array.c trunk/common.mk trunk/compile.c trunk/debug_counter.h trunk/enum.c trunk/gc.c trunk/include/ruby/ruby.h trunk/inits.c trunk/insns.def trunk/internal.h trunk/string.c trunk/test/ruby/test_enum.rb trunk/variable.c trunk/vm_args.c trunk/vm_eval.c trunk/vm_insnhelper.c Index: array.c =================================================================== --- array.c (revision 65446) +++ array.c (revision 65447) @@ -14,14 +14,12 @@ https://github.com/ruby/ruby/blob/trunk/array.c#L14 #include "ruby/encoding.h" #include "ruby/util.h" #include "ruby/st.h" +#include "internal.h" #include "probes.h" #include "id.h" #include "debug_counter.h" -#include "gc.h" -#include "transient_heap.h" -#include "internal.h" -#if !ARRAY_DEBUG +#ifndef ARRAY_DEBUG # define NDEBUG #endif #include "ruby_assert.h" @@ -44,21 +42,17 @@ VALUE rb_cArray; https://github.com/ruby/ruby/blob/trunk/array.c#L42 #define ARY_HEAP_PTR(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.ptr) #define ARY_HEAP_LEN(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.len) -#define ARY_HEAP_CAPA(a) (assert(!ARY_EMBED_P(a)), RARRAY(a)->as.heap.aux.capa) - #define ARY_EMBED_PTR(a) (assert(ARY_EMBED_P(a)), RARRAY(a)->as.ary) #define ARY_EMBED_LEN(a) \ (assert(ARY_EMBED_P(a)), \ (long)((RBASIC(a)->flags >> RARRAY_EMBED_LEN_SHIFT) & \ (RARRAY_EMBED_LEN_MASK >> RARRAY_EMBED_LEN_SHIFT))) -#define ARY_HEAP_SIZE(a) (assert(!ARY_EMBED_P(a)), assert(ARY_OWNS_HEAP_P(a)), ARY_HEAP_CAPA(a) * sizeof(VALUE)) +#define ARY_HEAP_SIZE(a) (assert(!ARY_EMBED_P(a)), assert(ARY_OWNS_HEAP_P(a)), RARRAY(a)->as.heap.aux.capa * sizeof(VALUE)) #define ARY_OWNS_HEAP_P(a) (!FL_TEST((a), ELTS_SHARED|RARRAY_EMBED_FLAG)) #define FL_SET_EMBED(a) do { \ assert(!ARY_SHARED_P(a)); \ FL_SET((a), RARRAY_EMBED_FLAG); \ - FL_UNSET_RAW((a), RARRAY_TRANSIENT_FLAG); \ - ary_verify(a); \ } while (0) #define FL_UNSET_EMBED(ary) FL_UNSET((ary), RARRAY_EMBED_FLAG|RARRAY_EMBED_LEN_MASK) #define FL_SET_SHARED(ary) do { \ @@ -108,7 +102,7 @@ VALUE rb_cArray; https://github.com/ruby/ruby/blob/trunk/array.c#L102 } while (0) #define ARY_CAPA(ary) (ARY_EMBED_P(ary) ? RARRAY_EMBED_LEN_MAX : \ - ARY_SHARED_ROOT_P(ary) ? RARRAY_LEN(ary) : ARY_HEAP_CAPA(ary)) + ARY_SHARED_ROOT_P(ary) ? RARRAY_LEN(ary) : RARRAY(ary)->as.heap.aux.capa) #define ARY_SET_CAPA(ary, n) do { \ assert(!ARY_EMBED_P(ary)); \ assert(!ARY_SHARED_P(ary)); \ @@ -136,82 +130,11 @@ VALUE rb_cArray; https://github.com/ruby/ruby/blob/trunk/array.c#L130 } while (0) #define FL_SET_SHARED_ROOT(ary) do { \ assert(!ARY_EMBED_P(ary)); \ - assert(!RARRAY_TRANSIENT_P(ary)); \ FL_SET((ary), RARRAY_SHARED_ROOT_FLAG); \ } while (0) #define ARY_SET(a, i, v) RARRAY_ASET((assert(!ARY_SHARED_P(a)), (a)), (i), (v)) - -#if ARRAY_DEBUG -#define ary_verify(ary) ary_verify_(ary, __FILE__, __LINE__) - -static VALUE -ary_verify_(VALUE ary, const char *file, int line) -{ - assert(RB_TYPE_P(ary, T_ARRAY)); - - if (FL_TEST(ary, ELTS_SHARED)) { - VALUE root = RARRAY(ary)->as.heap.aux.shared; - const VALUE *ptr = ARY_HEAP_PTR(ary); - const VALUE *root_ptr = RARRAY_CONST_PTR_TRANSIENT(root); - long len = ARY_HEAP_LEN(ary), root_len = RARRAY_LEN(root); - assert(FL_TEST(root, RARRAY_SHARED_ROOT_FLAG)); - assert(root_ptr <= ptr && ptr + len <= root_ptr + root_len); - ary_verify(root); - } - else if (ARY_EMBED_P(ary)) { - assert(!RARRAY_TRANSIENT_P(ary)); - assert(!ARY_SHARED_P(ary)); - assert(RARRAY_LEN(ary) <= RARRAY_EMBED_LEN_MAX); - } - else { -#if 1 - const VALUE *ptr = RARRAY_CONST_PTR_TRANSIENT(ary); - long i, len = RARRAY_LEN(ary); - volatile VALUE v; - if (len > 1) len = 1; /* check only HEAD */ - for (i=0; i<len; i++) { - v = ptr[i]; /* access check */ - } - v = v; -#endif - } - - if (RARRAY_TRANSIENT_P(ary)) { - assert(rb_transient_heap_managed_ptr_p(RARRAY_CONST_PTR_TRANSIENT(ary))); - } - - rb_transient_heap_verify(); - - return ary; -} - -void -rb_ary_verify(VALUE ary){ - ary_verify(ary); -} -#else -#define ary_verify(ary) ((void)0) -#endif - -VALUE * -rb_ary_ptr_use_start(VALUE ary) -{ -#if ARRAY_DEBUG - FL_SET_RAW(ary, RARRAY_PTR_IN_USE_FLAG); -#endif - return (VALUE *)RARRAY_CONST_PTR_TRANSIENT(ary); -} - -void -rb_ary_ptr_use_end(VALUE ary) -{ -#if ARRAY_DEBUG - FL_UNSET_RAW(ary, RARRAY_PTR_IN_USE_FLAG); -#endif -} - void rb_mem_clear(register VALUE *mem, register long size) { @@ -272,167 +195,49 @@ ary_memcpy(VALUE ary, long beg, long arg https://github.com/ruby/ruby/blob/trunk/array.c#L195 ary_memcpy0(ary, beg, argc, argv, ary); } -static VALUE * -ary_heap_alloc(VALUE ary, size_t capa) -{ - VALUE *ptr = rb_transient_heap_alloc(ary, sizeof(VALUE) * capa); - - if (ptr != NULL) { - FL_SET_RAW(ary, RARRAY_TRANSIENT_FLAG); - } - else { - FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG); - ptr = ALLOC_N(VALUE, capa); - } - - return ptr; -} - -static void -ary_heap_free_ptr(VALUE ary, const VALUE *ptr, long size) -{ - if (RARRAY_TRANSIENT_P(ary)) { - /* ignore it */ - } - else { - ruby_sized_xfree((void *)ptr, size); - } -} - -static void -ary_heap_free(VALUE ary) -{ - if (RARRAY_TRANSIENT_P(ary)) { - FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG); - } - else { - ary_heap_free_ptr(ary, ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary)); - } -} - -static void -ary_heap_realloc(VALUE ary, size_t new_capa) -{ - size_t old_capa = ARY_HEAP_CAPA(ary); - - if (RARRAY_TRANSIENT_P(ary)) { - if (new_capa <= old_capa) { - /* do nothing */ - } - else { - VALUE *new_ptr = rb_transient_heap_alloc(ary, sizeof(VALUE) * new_capa); - - if (new_ptr == NULL) { - new_ptr = ALLOC_N(VALUE, new_capa); - FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG); - } - - MEMCPY(new_ptr, ARY_HEAP_PTR(ary), VALUE, old_capa); - ARY_SET_PTR(ary, new_ptr); - } - } - else { - SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, new_capa, old_capa); - } - ary_verify(ary); -} - -static inline void -rb_ary_transient_heap_evacuate_(VALUE ary, int transient, int promote) -{ - if (transient) { - VALUE *new_ptr; - const VALUE *old_ptr = ARY_HEAP_PTR(ary); - long capa = ARY_HEAP_CAPA(ary); - long len = ARY_HEAP_LEN(ary); - - if (ARY_SHARED_ROOT_P(ary)) { - capa = len; - } - - assert(ARY_OWNS_HEAP_P(ary)); - assert(RARRAY_TRANSIENT_P(ary)); - assert(!ARY_PTR_USING_P(ary)); - - if (promote) { - new_ptr = ALLOC_N(VALUE, capa); - FL_UNSET_RAW(ary, RARRAY_TRANSIENT_FLAG); - } - else { - new_ptr = ary_heap_alloc(ary, capa); - } - - MEMCPY(new_ptr, old_ptr, VALUE, capa); - /* do not use ARY_SET_PTR() because they assert !frozen */ - RARRAY(ary)->as.heap.ptr = new_ptr; - } - - ary_verify(ary); -} - -void -rb_ary_transient_heap_evacuate(VALUE ary, int promote) -{ - rb_ary_transient_heap_evacuate_(ary, RARRAY_TRANSIENT_P(ary), promote); -} - -void -rb_ary_detransient(VALUE ary) -{ - assert(RARRAY_TRANSIENT_P(ary)); - rb_ary_transient_heap_evacuate_(ary, TRUE, TRUE); -} - static void ary_resize_capa(VALUE ary, long capacity) { assert(RARRAY_LEN(ary) <= capacity); assert(!OBJ_FROZEN(ary)); assert(!ARY_SHARED_P(ary)); - if (capacity > RARRAY_EMBED_LEN_MAX) { if (ARY_EMBED_P(ary)) { long len = ARY_EMBED_LEN(ary); - VALUE *ptr = ary_heap_alloc(ary, capacity); - + VALUE *ptr = ALLOC_N(VALUE, (capacity)); MEMCPY(ptr, ARY_EMBED_PTR(ary), VALUE, len); FL_UNSET_EMBED(ary); ARY_SET_PTR(ary, ptr); ARY_SET_HEAP_LEN(ary, len); } else { - ary_heap_realloc(ary, capacity); + SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, capacity, RARRAY(ary)->as.heap.aux.capa); } - ARY_SET_CAPA(ary, capacity); + ARY_SET_CAPA(ary, (capacity)); } else { if (!ARY_EMBED_P(ary)) { - long len = ARY_HEAP_LEN(ary); - long old_capa = ARY_HEAP_CAPA(ary); - const VALUE *ptr = ARY_HEAP_PTR(ary); + long len = RARRAY_LEN(ary); + const VALUE *ptr = RARRAY_CONST_PTR(ary); - if (len > capacity) len = capacity; + if (len > capacity) len = capacity; MEMCPY((VALUE *)RARRAY(ary)->as.ary, ptr, VALUE, len); - ary_heap_free_ptr(ary, ptr, old_capa); - FL_SET_EMBED(ary); ARY_SET_LEN(ary, len); + ruby_sized_xfree((VALUE *)ptr, RARRAY(ary)->as.heap.aux.capa); } } - - ary_verify(ary); } static inline void ary_shrink_capa(VALUE ary) { long capacity = ARY_HEAP_LEN(ary); - long old_capa = ARY_HEAP_CAPA(ary); + long old_capa = RARRAY(ary)->as.heap.aux.capa; assert(!ARY_SHARED_P(ary)); assert(old_capa >= capacity); - if (old_capa > capacity) ary_heap_realloc(ary, capacity); - - ary_verify(ary); + if (old_capa > capacity) + SIZED_REALLOC_N(RARRAY(ary)->as.heap.ptr, VALUE, capacity, old_capa); } static void @@ -448,8 +253,6 @@ ary_double_capa(VALUE ary, long min) https://github.com/ruby/ruby/blob/trunk/array.c#L253 } new_capa += min; ary_resize_capa(ary, new_capa); - - ary_verify(ary); } static void @@ -505,7 +308,6 @@ static inline void https://github.com/ruby/ruby/blob/trunk/array.c#L308 rb_ary_modify_check(VALUE ary) { rb_check_frozen(ary); - ary_verify(ary); } void @@ -515,9 +317,6 @@ rb_ary_modify(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L317 if (ARY_SHARED_P(ary)) { long shared_len, len = RARRAY_LEN(ary); VALUE shared = ARY_SHARED(ary); - - ary_verify(shared); - if (len <= RARRAY_EMBED_LEN_MAX) { const VALUE *ptr = ARY_HEAP_PTR(ary); FL_UNSET_SHARED(ary); @@ -527,9 +326,9 @@ rb_ary_modify(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L326 ARY_SET_EMBED_LEN(ary, len); } else if (ARY_SHARED_OCCUPIED(shared) && len > ((shared_len = RARRAY_LEN(shared))>>1)) { - long shift = RARRAY_CONST_PTR_TRANSIENT(ary) - RARRAY_CONST_PTR_TRANSIENT(shared); + long shift = RARRAY_CONST_PTR(ary) - RARRAY_CONST_PTR(shared); FL_UNSET_SHARED(ary); - ARY_SET_PTR(ary, RARRAY_CONST_PTR_TRANSIENT(shared)); + ARY_SET_PTR(ary, RARRAY_CONST_PTR(shared)); ARY_SET_CAPA(ary, shared_len); RARRAY_PTR_USE(ary, ptr, { MEMMOVE(ptr, ptr+shift, VALUE, len); @@ -538,8 +337,8 @@ rb_ary_modify(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L337 rb_ary_decrement_share(shared); } else { - VALUE *ptr = ary_heap_alloc(ary, len); - MEMCPY(ptr, ARY_HEAP_PTR(ary), VALUE, len); + VALUE *ptr = ALLOC_N(VALUE, len); + MEMCPY(ptr, RARRAY_CONST_PTR(ary), VALUE, len); rb_ary_unshare(ary); ARY_SET_CAPA(ary, len); ARY_SET_PTR(ary, ptr); @@ -547,7 +346,6 @@ rb_ary_modify(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L346 rb_gc_writebarrier_remember(ary); } - ary_verify(ary); } static VALUE @@ -564,12 +362,9 @@ ary_ensure_room_for_push(VALUE ary, long https://github.com/ruby/ruby/blob/trunk/array.c#L362 if (new_len > RARRAY_EMBED_LEN_MAX) { VALUE shared = ARY_SHARED(ary); if (ARY_SHARED_OCCUPIED(shared)) { - if (ARY_HEAP_PTR(ary) - RARRAY_CONST_PTR_TRANSIENT(shared) + new_len <= RARRAY_LEN(shared)) { + if (RARRAY_CONST_PTR(ary) - RARRAY_CONST_PTR(shared) + new_len <= RARRAY_LEN(shared)) { rb_ary_modify_check(ary); - - ary_verify(ary); - ary_verify(shared); - return shared; + return shared; } else { /* if array is shared, then it is likely it participate in push/shift pattern */ @@ -578,13 +373,11 @@ ary_ensure_room_for_push(VALUE ary, long https://github.com/ruby/ruby/blob/trunk/array.c#L373 if (new_len > capa - (capa >> 6)) { ary_double_capa(ary, new_len); } - ary_verify(ary); return ary; } } } - ary_verify(ary); - rb_ary_modify(ary); + rb_ary_modify(ary); } else { rb_ary_modify_check(ary); @@ -594,7 +387,6 @@ ary_ensure_room_for_push(VALUE ary, long https://github.com/ruby/ruby/blob/trunk/array.c#L387 ary_double_capa(ary, new_len); } - ary_verify(ary); return ary; } @@ -667,7 +459,7 @@ ary_new(VALUE klass, long capa) https://github.com/ruby/ruby/blob/trunk/array.c#L459 ary = ary_alloc(klass); if (capa > RARRAY_EMBED_LEN_MAX) { - ptr = ary_heap_alloc(ary, capa); + ptr = ALLOC_N(VALUE, capa); FL_UNSET_EMBED(ary); ARY_SET_PTR(ary, ptr); ARY_SET_CAPA(ary, capa); @@ -731,9 +523,7 @@ rb_ary_new_from_values(long n, const VAL https://github.com/ruby/ruby/blob/trunk/array.c#L523 VALUE rb_ary_tmp_new(long capa) { - VALUE ary = ary_new(0, capa); - rb_ary_transient_heap_evacuate(ary, TRUE); - return ary; + return ary_new(0, capa); } VALUE @@ -742,7 +532,6 @@ rb_ary_tmp_new_fill(long capa) https://github.com/ruby/ruby/blob/trunk/array.c#L532 VALUE ary = ary_new(0, capa); ary_memfill(ary, 0, capa, Qnil); ARY_SET_LEN(ary, capa); - rb_ary_transient_heap_evacuate(ary, TRUE); return ary; } @@ -750,13 +539,8 @@ void https://github.com/ruby/ruby/blob/trunk/array.c#L539 rb_ary_free(VALUE ary) { if (ARY_OWNS_HEAP_P(ary)) { - if (RARRAY_TRANSIENT_P(ary)) { - RB_DEBUG_COUNTER_INC(obj_ary_transient); - } - else { - RB_DEBUG_COUNTER_INC(obj_ary_ptr); - ary_heap_free(ary); - } + RB_DEBUG_COUNTER_INC(obj_ary_ptr); + ruby_sized_xfree((void *)ARY_HEAP_PTR(ary), ARY_HEAP_SIZE(ary)); } else { RB_DEBUG_COUNTER_INC(obj_ary_embed); @@ -779,15 +563,13 @@ ary_discard(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L563 { rb_ary_free(ary); RBASIC(ary)->flags |= RARRAY_EMBED_FLAG; - RBASIC(ary)->flags &= ~(RARRAY_EMBED_LEN_MASK | RARRAY_TRANSIENT_FLAG); + RBASIC(ary)->flags &= ~RARRAY_EMBED_LEN_MASK; } static VALUE ary_make_shared(VALUE ary) { assert(!ARY_EMBED_P(ary)); - ary_verify(ary); - if (ARY_SHARED_P(ary)) { return ARY_SHARED(ary); } @@ -795,7 +577,6 @@ ary_make_shared(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L577 return ary; } else if (OBJ_FROZEN(ary)) { - rb_ary_transient_heap_evacuate(ary, TRUE); ary_shrink_capa(ary); FL_SET_SHARED_ROOT(ary); ARY_SET_SHARED_NUM(ary, 1); @@ -803,25 +584,18 @@ ary_make_shared(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L584 } else { long capa = ARY_CAPA(ary), len = RARRAY_LEN(ary); - const VALUE *ptr; NEWOBJ_OF(shared, struct RArray, 0, T_ARRAY | (RGENGC_WB_PROTECTED_ARRAY ? FL_WB_PROTECTED : 0)); - - rb_ary_transient_heap_evacuate(ary, TRUE); - ptr = ARY_HEAP_PTR(ary); - FL_UNSET_EMBED(shared); + ARY_SET_LEN((VALUE)shared, capa); - ARY_SET_PTR((VALUE)shared, ptr); - ary_mem_clear((VALUE)shared, len, capa - len); + ARY_SET_PTR((VALUE)shared, RARRAY_CONST_PTR(ary)); + ary_mem_clear((VALUE)shared, len, capa - len); FL_SET_SHARED_ROOT(shared); ARY_SET_SHARED_NUM((VALUE)shared, 1); FL_SET_SHARED(ary); ARY_SET_SHARED(ary, (VALUE)shared); OBJ_FREEZE(shared); - - ary_verify((VALUE)shared); - ary_verify(ary); - return (VALUE)shared; + return (VALUE)shared; } } @@ -832,7 +606,7 @@ ary_make_substitution(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L606 if (len <= RARRAY_EMBED_LEN_MAX) { VALUE subst = rb_ary_new2(len); - ary_memcpy(subst, 0, len, RARRAY_CONST_PTR_TRANSIENT(ary)); + ary_memcpy(subst, 0, len, RARRAY_CONST_PTR(ary)); ARY_SET_EMBED_LEN(subst, len); return subst; } @@ -955,8 +729,8 @@ rb_ary_initialize(int argc, VALUE *argv, https://github.com/ruby/ruby/blob/trunk/array.c#L729 rb_ary_modify(ary); if (argc == 0) { - if (ARY_OWNS_HEAP_P(ary) && ARY_HEAP_PTR(ary) != NULL) { - ary_heap_free(ary); + if (ARY_OWNS_HEAP_P(ary) && RARRAY_CONST_PTR(ary) != 0) { + ruby_sized_xfree((void *)RARRAY_CONST_PTR(ary), ARY_HEAP_SIZE(ary)); } rb_ary_unshare_safe(ary); FL_SET_EMBED(ary); @@ -1063,7 +837,7 @@ ary_make_partial(VALUE ary, VALUE klass, https://github.com/ruby/ruby/blob/trunk/array.c#L837 if (len <= RARRAY_EMBED_LEN_MAX) { VALUE result = ary_alloc(klass); - ary_memcpy(result, 0, len, RARRAY_CONST_PTR_TRANSIENT(ary) + offset); + ary_memcpy(result, 0, len, RARRAY_CONST_PTR(ary) + offset); ARY_SET_EMBED_LEN(result, len); return result; } @@ -1072,15 +846,12 @@ ary_make_partial(VALUE ary, VALUE klass, https://github.com/ruby/ruby/blob/trunk/array.c#L846 FL_UNSET_EMBED(result); shared = ary_make_shared(ary); - ARY_SET_PTR(result, RARRAY_CONST_PTR_TRANSIENT(ary)); + ARY_SET_PTR(result, RARRAY_CONST_PTR(ary)); ARY_SET_LEN(result, RARRAY_LEN(ary)); rb_ary_set_shared(result, shared); ARY_INCREASE_PTR(result, offset); ARY_SET_LEN(result, len); - - ary_verify(shared); - ary_verify(result); return result; } } @@ -1139,13 +910,12 @@ ary_take_first_or_last(int argc, const V https://github.com/ruby/ruby/blob/trunk/array.c#L910 VALUE rb_ary_push(VALUE ary, VALUE item) { - long idx = RARRAY_LEN((ary_verify(ary), ary)); + long idx = RARRAY_LEN(ary); VALUE target_ary = ary_ensure_room_for_push(ary, 1); RARRAY_PTR_USE(ary, ptr, { RB_OBJ_WRITE(target_ary, &ptr[idx], item); }); ARY_SET_LEN(ary, idx + 1); - ary_verify(ary); return ary; } @@ -1197,7 +967,6 @@ rb_ary_pop(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L967 } --n; ARY_SET_LEN(ary, n); - ary_verify(ary); return RARRAY_AREF(ary, n); } @@ -1231,7 +1000,6 @@ rb_ary_pop_m(int argc, VALUE *argv, VALU https://github.com/ruby/ruby/blob/trunk/array.c#L1000 rb_ary_modify_check(ary); result = ary_take_first_or_last(argc, argv, ary, ARY_TAKE_LAST); ARY_INCREASE_LEN(ary, -RARRAY_LEN(result)); - ary_verify(ary); return result; } @@ -1250,7 +1018,6 @@ rb_ary_shift(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L1018 MEMMOVE(ptr, ptr+1, VALUE, len-1); }); /* WB: no new reference */ ARY_INCREASE_LEN(ary, -1); - ary_verify(ary); return top; } assert(!ARY_EMBED_P(ary)); /* ARY_EMBED_LEN_MAX < ARY_DEFAULT_SIZE */ @@ -1264,8 +1031,6 @@ rb_ary_shift(VALUE ary) https://github.com/ruby/ruby/blob/trunk/array.c#L1031 ARY_INCREASE_PTR(ary, 1); /* shift ptr */ ARY_INCREASE_LEN(ary, -1); - ary_verify(ary); - return top; } @@ -1336,7 +1101,6 @@ rb_ary_behead(VALUE ary, long n) https://github.com/ruby/ruby/blob/trunk/array.c#L1101 } ARY_INCREASE_LEN(ary, -n); - ary_verify(ary); return ary; } @@ -1356,8 +1120,8 @@ ary_ensure_room_for_unshift(VALUE ary, i https://github.com/ruby/ruby/blob/trunk/array.c#L1120 VALUE shared = ARY_SHARED(ary); capa = RARRAY_LEN(shared); if (ARY_SHARED_OCCUPIED(shared) && capa > new_len) { - head = RARRAY_CONST_PTR_TRANSIENT(ary); - sharedp = RARRAY_CONST_PTR_TRANSIENT(shared); + head = RARRAY_CONST_PTR(ary); + sharedp = RARRAY_CONST_PTR(shared); goto makeroom_if_need; } } @@ -1370,13 +1134,11 @@ ary_ensure_room_for_unshift(VALUE ary, i https://github.com/ruby/ruby/blob/trunk/array.c#L1134 /* use shared array for big "queues" */ if (new_len > ARY_DEFAULT_SIZE * 4) { - ary_verify(ary); - - /* make a ro (... truncated) -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/