------ art_24524_3915188.1159197873439
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
This change
Mon Sep 25 21:24:54 2006 Yukihiro Matsumoto <matz / ruby-lang.org>
* array.c (rb_ary_shift): should clear shifting top element.
[ruby-talk:216055]
* array.c (rb_ary_shift): avoid creating shared object if array
size is small.
leads to
irb(main):027:0> a :a] * 3
[:a, :a, :a]
irb(main):028:0> a
[:a, :a, :a]
irb(main):029:0> a.dup.shift
:a
irb(main):030:0> a
[:a, :a, true]
This patch seems to fix it
Index: array.c
RCS file: /src/ruby/array.c,v
retrieving revision 1.137.2.34
diff -u -r1.137.2.34 array.c
--- array.c 24 Sep 2006 23:16:53 -0000 1.137.2.34
+++ array.c 25 Sep 2006 15:23:20 -0000
@@ -501,7 +501,7 @@
rb_ary_modify_check(ary);
if (RARRAY(ary)->len 0) return Qnil;
top ARRAY(ary)->ptr[0];
- if (RARRAY_LEN(ary) < ARY_DEFAULT_SIZE) {
+ if (RARRAY_LEN(ary) < ARY_DEFAULT_SIZE && !FL_TEST(ary, ELTS_SHARED)) {
MEMMOVE(RARRAY_PTR(ary), RARRAY_PTR(ary)+1, VALUE, RARRAY_LEN(ary));
}
else {
--
Kent
---
http://www.datanoise.com
------ art_24524_3915188.1159197873439--