diff options
| author | Yukihiro "Matz" Matsumoto <[email protected]> | 2017-07-09 19:58:11 +0900 |
|---|---|---|
| committer | GitHub <[email protected]> | 2017-07-09 19:58:11 +0900 |
| commit | 01fce3dc35ec3dca8cf636de5ca1065886600c94 (patch) | |
| tree | c0de7bb53501ae2ed22dd975804189c0cf55529f /src/array.c | |
| parent | ce6c05600af11f540302145ff4b6988a5a37518a (diff) | |
| parent | bf48473cf6c48fca74a81ca852734254646b3b57 (diff) | |
| download | mruby-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.c | 12 |
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: |
