summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-09-25 22:58:13 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2006-09-25 22:58:13 +0000
commit94fa180c07049483a57f24dbe2b8dab27f8909df (patch)
treeac2a573a2e163069bd447074d28fe2eac587abd2 /array.c
parent500a5c34acf968b390f17cb65024858c3930d0c6 (diff)
* 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] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@11024 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r--array.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/array.c b/array.c
index 73f55504a8..4896ed24fb 100644
--- a/array.c
+++ b/array.c
@@ -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);
}