diff options
author | Koichi Sasada <ko1@atdot.net> | 2019-05-21 14:58:39 +0900 |
---|---|---|
committer | Koichi Sasada <ko1@atdot.net> | 2019-05-21 15:02:54 +0900 |
commit | 0b9a7b35287e7c4db37e0f49612faeff29752108 (patch) | |
tree | 71c787b317e0eb10ce80d655ffa542e4d9a368ba /array.c | |
parent | 44e9b1e3a6ba464a8ecc22cd7779af64ea01e2e8 (diff) |
do not use RARRAY_SET() directly in array.c.
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 12 |
1 files changed, 10 insertions, 2 deletions
@@ -140,7 +140,15 @@ VALUE rb_cArray; FL_SET((ary), RARRAY_SHARED_ROOT_FLAG); \ } while (0) -#define ARY_SET(a, i, v) RARRAY_ASET((assert(!ARY_SHARED_P(a)), (a)), (i), (v)) +static inline void +ARY_SET(VALUE a, long i, VALUE v) +{ + assert(!ARY_SHARED_P(a)); + assert(!OBJ_FROZEN(a)); + + RARRAY_ASET(a, i, v); +} +#undef RARRAY_ASET #if ARRAY_DEBUG @@ -5509,7 +5517,7 @@ yield_indexed_values(const VALUE values, const long r, const long *const p) const VALUE result = rb_ary_new2(r); long i; - for (i = 0; i < r; i++) RARRAY_ASET(result, i, RARRAY_AREF(values, p[i])); + for (i = 0; i < r; i++) ARY_SET(result, i, RARRAY_AREF(values, p[i])); ARY_SET_LEN(result, r); rb_yield(result); return !RBASIC(values)->klass; |