From 1d223a3bdf2451701d79bf994fa7bedaf148f417 Mon Sep 17 00:00:00 2001 From: nobu Date: Fri, 28 Mar 2014 12:36:27 +0000 Subject: struct.c: avoid pinning down * struct.c (rb_struct_set, rb_struct_aref, rb_struct_aset): get rid of pinning down dynamic symbols by SYM2ID. * struct.c (rb_struct_aref_sym, rb_struct_aset_sym): use Symbol instead of ID. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45465 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- struct.c | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'struct.c') diff --git a/struct.c b/struct.c index 9d89134392..0afc0a9774 100644 --- a/struct.c +++ b/struct.c @@ -148,16 +148,19 @@ rb_struct_modify(VALUE s) static VALUE rb_struct_set(VALUE obj, VALUE val) { - VALUE members, slot; + VALUE members, slot, fsym; long i, len; ID fid = rb_frame_this_func(); members = rb_struct_members(obj); len = RARRAY_LEN(members); rb_struct_modify(obj); + fid = rb_id_attrget(fid); + if (!fid) not_a_member(rb_frame_this_func()); + fsym = ID2SYM(fid); for (i=0; i