ruby-changes:53215
From: ko1 <ko1@a...>
Date: Tue, 30 Oct 2018 03:00:11 +0900 (JST)
Subject: [ruby-changes:53215] ko1:r65430 (trunk): use RARRAY_AREF() instead of RARRAY_CONST_PTR().
ko1 2018-10-30 03:00:02 +0900 (Tue, 30 Oct 2018) New Revision: 65430 https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=65430 Log: 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. Modified files: trunk/class.c trunk/enum.c trunk/gc.c trunk/struct.c Index: enum.c =================================================================== --- enum.c (revision 65429) +++ enum.c (revision 65430) @@ -744,7 +744,8 @@ ary_inject_op(VALUE ary, VALUE init, VAL https://github.com/ruby/ruby/blob/trunk/enum.c#L744 } } 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; } Index: struct.c =================================================================== --- struct.c (revision 65429) +++ struct.c (revision 65430) @@ -138,7 +138,6 @@ static inline int https://github.com/ruby/ruby/blob/trunk/struct.c#L138 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) https://github.com/ruby/ruby/blob/trunk/struct.c#L147 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) https://github.com/ruby/ruby/blob/trunk/struct.c#L156 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) https://github.com/ruby/ruby/blob/trunk/struct.c#L171 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); Index: gc.c =================================================================== --- gc.c (revision 65429) +++ gc.c (revision 65430) @@ -2797,13 +2797,13 @@ define_final0(VALUE obj, VALUE block) https://github.com/ruby/ruby/blob/trunk/gc.c#L2797 /* 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; } } } Index: class.c =================================================================== --- class.c (revision 65429) +++ class.c (revision 65430) @@ -1776,14 +1776,13 @@ rb_define_attr(VALUE klass, const char * https://github.com/ruby/ruby/blob/trunk/class.c#L1776 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; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/