diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | array.c | 2 |
2 files changed, 7 insertions, 1 deletions
@@ -1,3 +1,9 @@ +Tue Sep 26 07:55:16 2006 Yukihiro Matsumoto <matz@ruby-lang.org> + + * array.c (rb_ary_shift): should not move memory region if array + body is shared. a patch from Kent Sibilev <ksruby at gmail.com>. + [ruby-core:08922] + Mon Sep 25 23:10:46 2006 Yukihiro Matsumoto <matz@ruby-lang.org> * dir.c (rb_push_glob): need not to check by FilePathValue(). @@ -578,7 +578,7 @@ rb_ary_shift(VALUE ary) rb_ary_modify_check(ary); if (RARRAY_LEN(ary) == 0) return Qnil; top = RARRAY_PTR(ary)[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)); ARY_SET_LEN(ary, RARRAY_LEN(ary)-1); } |