summaryrefslogtreecommitdiffhomepage
path: root/src/array.c
diff options
context:
space:
mode:
authorksss <[email protected]>2017-07-09 17:47:10 +0900
committerksss <[email protected]>2017-07-09 17:47:10 +0900
commite581f2ed97f7560fe7ba8e1bf74e6395e32c6aa1 (patch)
tree41c20c69a1c6770132969d8149e7f681fe8e7743 /src/array.c
parentce6c05600af11f540302145ff4b6988a5a37518a (diff)
downloadmruby-e581f2ed97f7560fe7ba8e1bf74e6395e32c6aa1.tar.gz
mruby-e581f2ed97f7560fe7ba8e1bf74e6395e32c6aa1.zip
Should only check frozen fix #3737
Diffstat (limited to 'src/array.c')
-rw-r--r--src/array.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/src/array.c b/src/array.c
index 8b6b9fa1e..ae2cca70c 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;
@@ -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: