diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-10-29 18:00:02 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-10-29 18:00:02 +0000 |
commit | d3edfdc7d9cadd6c8e7f7b7c93729da5c5cf4542 (patch) | |
tree | 888e3a88f6d9ddb746ddebff0f42e7bd1041e630 /struct.c | |
parent | d36ab02b9589ba7b95656719f81a5292d259d4fb (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
Diffstat (limited to 'struct.c')
-rw-r--r-- | struct.c | 11 |
1 files changed, 5 insertions, 6 deletions
@@ -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); |