summaryrefslogtreecommitdiff
path: root/array.c
diff options
context:
space:
mode:
Diffstat (limited to 'array.c')
-rw-r--r--array.c13
1 files changed, 12 insertions, 1 deletions
diff --git a/array.c b/array.c
index c9bf7659df..3c84a7b0b8 100644
--- a/array.c
+++ b/array.c
@@ -1076,6 +1076,17 @@ rb_ary_shift_m(int argc, VALUE *argv, VALUE ary)
rb_ary_modify_check(ary);
result = ary_take_first_or_last(argc, argv, ary, ARY_TAKE_FIRST);
n = RARRAY_LEN(result);
+ rb_ary_behead(ary,n);
+
+ return result;
+}
+
+MJIT_FUNC_EXPORTED VALUE
+rb_ary_behead(VALUE ary, long n)
+{
+ if(n<=0) return ary;
+
+ rb_ary_modify_check(ary);
if (ARY_SHARED_P(ary)) {
if (ARY_SHARED_OCCUPIED(ARY_SHARED(ary))) {
setup_occupied_shared:
@@ -1096,7 +1107,7 @@ rb_ary_shift_m(int argc, VALUE *argv, VALUE ary)
}
ARY_INCREASE_LEN(ary, -n);
- return result;
+ return ary;
}
static VALUE