diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-10-10 04:17:01 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-10-10 04:17:01 +0000 |
commit | 4ed087b0db4c11d743762615e2d3759b8c2aaf66 (patch) | |
tree | b88f05f86e454b1a4a167fe4cb3fdc498c4d6858 | |
parent | 165b446166c65f4dd905569981d188cc3eee8a17 (diff) |
revisit `RARRAY_PTR()`.
* array.c (yield_indexed_values): use RARRAY_AREF/ASET instead of
using RARRAY_PTR().
* enum.c (nmin_filter): ditto.
* proc.c (rb_sym_to_proc): ditto.
* enum.c (rb_nmin_run): use RARRAY_PTR_USE() instead of RARRAY_PTR().
It is safe because they don't make new referecen from an array.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64986 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | array.c | 4 | ||||
-rw-r--r-- | enum.c | 24 | ||||
-rw-r--r-- | proc.c | 12 |
3 files changed, 20 insertions, 20 deletions
@@ -5228,11 +5228,9 @@ static int yield_indexed_values(const VALUE values, const long r, const long *const p) { const VALUE result = rb_ary_new2(r); - VALUE *const result_array = RARRAY_PTR(result); - const VALUE *const values_array = RARRAY_CONST_PTR(values); long i; - for (i = 0; i < r; i++) result_array[i] = values_array[p[i]]; + for (i = 0; i < r; i++) RARRAY_ASET(result, i, RARRAY_AREF(values, p[i])); ARY_SET_LEN(result, r); rb_yield(result); return !RBASIC(values)->klass; @@ -1440,7 +1440,7 @@ nmin_filter(struct nmin_data *data) #undef GETPTR #undef SWAP - data->limit = RARRAY_PTR(data->buf)[store_index*eltsize]; /* the last pivot */ + data->limit = RARRAY_AREF(data->buf, store_index*eltsize); /* the last pivot */ data->curlen = data->n; rb_ary_resize(data->buf, data->n * eltsize); } @@ -1518,18 +1518,22 @@ rb_nmin_run(VALUE obj, VALUE num, int by, int rev, int ary) result = data.buf; if (by) { long i; - ruby_qsort(RARRAY_PTR(result), - RARRAY_LEN(result)/2, - sizeof(VALUE)*2, - data.cmpfunc, (void *)&data); - for (i=1; i<RARRAY_LEN(result); i+=2) { - RARRAY_PTR(result)[i/2] = RARRAY_PTR(result)[i]; - } + RARRAY_PTR_USE(result, ptr, { + ruby_qsort(ptr, + RARRAY_LEN(result)/2, + sizeof(VALUE)*2, + data.cmpfunc, (void *)&data); + for (i=1; i<RARRAY_LEN(result); i+=2) { + ptr[i/2] = ptr[i]; + } + }); rb_ary_resize(result, RARRAY_LEN(result)/2); } else { - ruby_qsort(RARRAY_PTR(result), RARRAY_LEN(result), sizeof(VALUE), - data.cmpfunc, (void *)&data); + RARRAY_PTR_USE(result, ptr, { + ruby_qsort(ptr, RARRAY_LEN(result), sizeof(VALUE), + data.cmpfunc, (void *)&data); + }); } if (rev) { rb_ary_reverse(result); @@ -1206,7 +1206,6 @@ rb_sym_to_proc(VALUE sym) VALUE proc; long index; ID id; - VALUE *aryp; if (!sym_proc_cache) { sym_proc_cache = rb_ary_tmp_new(SYM_PROC_CACHE_SIZE * 2); @@ -1217,14 +1216,13 @@ rb_sym_to_proc(VALUE sym) id = SYM2ID(sym); index = (id % SYM_PROC_CACHE_SIZE) << 1; - aryp = RARRAY_PTR(sym_proc_cache); - if (aryp[index] == sym) { - return aryp[index + 1]; + if (RARRAY_AREF(sym_proc_cache, index) == sym) { + return RARRAY_AREF(sym_proc_cache, index + 1); } else { - proc = sym_proc_new(rb_cProc, ID2SYM(id)); - aryp[index] = sym; - aryp[index + 1] = proc; + proc = sym_proc_new(rb_cProc, ID2SYM(id)); + RARRAY_ASET(sym_proc_cache, index, sym); + RARRAY_ASET(sym_proc_cache, index + 1, proc); return proc; } } |