From 40229f892c6877ecd0d45f24b662b05c74c7774a Mon Sep 17 00:00:00 2001 From: matz Date: Mon, 5 Oct 2009 14:35:39 +0000 Subject: * array.c (rb_ary_{times, shuffle_bang, sample}): reducing macro calls inside of the loop by keeping pointers in local variables. a patch from Masahiro Kanai (CanI) in [ruby-dev:39406]. It was found and fixed at Security and Programming camp 2009. * string.c (rb_str_{times, split_m}): ditto. * struct.c (rb_struct_{getmember, set, aref_id, aset_id}, {make, inspect}_struct, recursive_{equal, hash, eql}): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@25237 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- struct.c | 100 ++++++++++++++++++++++++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 37 deletions(-) (limited to 'struct.c') diff --git a/struct.c b/struct.c index 0001ad8255..0a0f217547 100644 --- a/struct.c +++ b/struct.c @@ -98,14 +98,17 @@ rb_struct_members_m(VALUE obj) VALUE rb_struct_getmember(VALUE obj, ID id) { - VALUE members, slot; - long i; + VALUE members, slot, *ptr, *ptr_members; + long i, len; + ptr = RSTRUCT_PTR(obj); members = rb_struct_members(obj); + ptr_members = RARRAY_PTR(members); slot = ID2SYM(id); - for (i=0; i"); OBJ_INFECT(str, s); @@ -588,14 +600,16 @@ rb_struct_init_copy(VALUE copy, VALUE s) static VALUE rb_struct_aref_id(VALUE s, ID id) { - VALUE members; + VALUE *ptr, members, *ptr_members; long i, len; + ptr = RSTRUCT_PTR(s); members = rb_struct_members(s); + ptr_members = RARRAY_PTR(members); len = RARRAY_LEN(members); for (i=0; i