summaryrefslogtreecommitdiffhomepage
path: root/src/array.c
diff options
context:
space:
mode:
authorYukihiro "Matz" Matsumoto <[email protected]>2017-07-09 19:58:11 +0900
committerGitHub <[email protected]>2017-07-09 19:58:11 +0900
commit01fce3dc35ec3dca8cf636de5ca1065886600c94 (patch)
treec0de7bb53501ae2ed22dd975804189c0cf55529f /src/array.c
parentce6c05600af11f540302145ff4b6988a5a37518a (diff)
parentbf48473cf6c48fca74a81ca852734254646b3b57 (diff)
downloadmruby-01fce3dc35ec3dca8cf636de5ca1065886600c94.tar.gz
mruby-01fce3dc35ec3dca8cf636de5ca1065886600c94.zip
Merge pull request #3739 from ksss/array-shift
Should only check frozen fix #3737
Diffstat (limited to 'src/array.c')
-rw-r--r--src/array.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/array.c b/src/array.c
index 8b6b9fa1e..f3d29faec 100644
--- a/src/array.c
+++ b/src/array.c
@@ -106,11 +106,17 @@ ary_fill_with_nil(mrb_value *ptr, mrb_int size)
}
static void
-ary_modify(mrb_state *mrb, struct RArray *a)
+ary_modify_check(mrb_state *mrb, struct RArray *a)
{
if (MRB_FROZEN_P(a)) {
mrb_raise(mrb, E_RUNTIME_ERROR, "can't modify frozen array");
}
+}
+
+static void
+ary_modify(mrb_state *mrb, struct RArray *a)
+{
+ ary_modify_check(mrb, a);
if (ARY_SHARED_P(a)) {
mrb_shared_array *shared = a->aux.shared;
@@ -445,7 +451,7 @@ mrb_ary_pop(mrb_state *mrb, mrb_value ary)
{
struct RArray *a = mrb_ary_ptr(ary);
- ary_modify(mrb, a);
+ ary_modify_check(mrb, a);
if (a->len == 0) return mrb_nil_value();
return a->ptr[--a->len];
}
@@ -458,7 +464,7 @@ mrb_ary_shift(mrb_state *mrb, mrb_value self)
struct RArray *a = mrb_ary_ptr(self);
mrb_value val;
- ary_modify(mrb, a);
+ ary_modify_check(mrb, a);
if (a->len == 0) return mrb_nil_value();
if (ARY_SHARED_P(a)) {
L_SHIFT: