summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-10-29 18:00:02 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2018-10-29 18:00:02 +0000
commitd3edfdc7d9cadd6c8e7f7b7c93729da5c5cf4542 (patch)
tree888e3a88f6d9ddb746ddebff0f42e7bd1041e630
parentd36ab02b9589ba7b95656719f81a5292d259d4fb (diff)
use RARRAY_AREF() instead of RARRAY_CONST_PTR().
* class.c (rb_keyword_error_new): use RARRAY_AREF() because RARRAY_CONST_PTR() can introduce additional overhead in a futre. Same fixes for other files. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65430 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--class.c3
-rw-r--r--enum.c3
-rw-r--r--gc.c8
-rw-r--r--struct.c11
4 files changed, 12 insertions, 13 deletions
diff --git a/class.c b/class.c
index b77974fdf2..284cfa26aa 100644
--- a/class.c
+++ b/class.c
@@ -1776,14 +1776,13 @@ rb_define_attr(VALUE klass, const char *name, int read, int write)
MJIT_FUNC_EXPORTED VALUE
rb_keyword_error_new(const char *error, VALUE keys)
{
- const VALUE *ptr = RARRAY_CONST_PTR(keys);
long i = 0, len = RARRAY_LEN(keys);
VALUE error_message = rb_sprintf("%s keyword%.*s", error, len > 1, "s");
if (len > 0) {
rb_str_cat_cstr(error_message, ": ");
while (1) {
- const VALUE k = ptr[i];
+ const VALUE k = RARRAY_AREF(keys, i);
Check_Type(k, T_SYMBOL); /* wrong hash is given to rb_get_kwargs */
rb_str_append(error_message, rb_sym2str(k));
if (++i >= len) break;
diff --git a/enum.c b/enum.c
index 0cecb7d746..9485b7eb60 100644
--- a/enum.c
+++ b/enum.c
@@ -744,7 +744,8 @@ ary_inject_op(VALUE ary, VALUE init, VALUE op)
}
}
for (; i < RARRAY_LEN(ary); i++) {
- v = rb_funcallv_public(v, id, 1, &RARRAY_CONST_PTR(ary)[i]);
+ VALUE arg = RARRAY_AREF(ary, i);
+ v = rb_funcallv_public(v, id, 1, &arg);
}
return v;
}
diff --git a/gc.c b/gc.c
index c3c4f4ea57..fb2d4a40d6 100644
--- a/gc.c
+++ b/gc.c
@@ -2797,13 +2797,13 @@ define_final0(VALUE obj, VALUE block)
/* avoid duplicate block, table is usually small */
{
- const VALUE *ptr = RARRAY_CONST_PTR(table);
long len = RARRAY_LEN(table);
long i;
- for (i = 0; i < len; i++, ptr++) {
- if (rb_funcall(*ptr, idEq, 1, block)) {
- return *ptr;
+ for (i = 0; i < len; i++) {
+ VALUE recv = RARRAY_AREF(table, i);
+ if (rb_funcall(recv, idEq, 1, block)) {
+ return recv;
}
}
}
diff --git a/struct.c b/struct.c
index ed8d22ef09..6d5f204c7a 100644
--- a/struct.c
+++ b/struct.c
@@ -138,7 +138,6 @@ static inline int
struct_member_pos(VALUE s, VALUE name)
{
VALUE back = struct_ivar_get(rb_obj_class(s), id_back_members);
- VALUE const * p;
long j, mask;
if (UNLIKELY(NIL_P(back))) {
@@ -148,7 +147,6 @@ struct_member_pos(VALUE s, VALUE name)
rb_raise(rb_eTypeError, "corrupted struct");
}
- p = RARRAY_CONST_PTR(back);
mask = RARRAY_LEN(back);
if (mask <= AREF_HASH_THRESHOLD) {
@@ -158,7 +156,7 @@ struct_member_pos(VALUE s, VALUE name)
mask, RSTRUCT_LEN(s));
}
for (j = 0; j < mask; j++) {
- if (p[j] == name)
+ if (RARRAY_AREF(back, j) == name)
return (int)j;
}
return -1;
@@ -173,9 +171,10 @@ struct_member_pos(VALUE s, VALUE name)
j = struct_member_pos_ideal(name, mask);
for (;;) {
- if (p[j] == name)
- return FIX2INT(p[j + 1]);
- if (!RTEST(p[j])) {
+ VALUE e = RARRAY_AREF(back, j);
+ if (e == name)
+ return FIX2INT(RARRAY_AREF(back, j + 1));
+ if (!RTEST(e)) {
return -1;
}
j = struct_member_pos_probe(j, mask);