ruby-changes:37691
From: ko1 <ko1@a...>
Date: Fri, 27 Feb 2015 17:10:16 +0900 (JST)
Subject: [ruby-changes:37691] ko1:r49772 (trunk): * vm_core.h: define vm_svar_index.
ko1 2015-02-27 17:10:04 +0900 (Fri, 27 Feb 2015) New Revision: 49772 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=49772 Log: * vm_core.h: define vm_svar_index. * vm_insnhelper.c, vm.c, compile.c: use vm_svar_index names. * iseq.h: remove DEFAULT_SPECIAL_VAR_COUNT. use VM_SVAR_FLIPFLOP_START instead. Modified files: trunk/ChangeLog trunk/compile.c trunk/iseq.h trunk/vm.c trunk/vm_core.h trunk/vm_insnhelper.c Index: ChangeLog =================================================================== --- ChangeLog (revision 49771) +++ ChangeLog (revision 49772) @@ -1,3 +1,12 @@ https://github.com/ruby/ruby/blob/trunk/ChangeLog#L1 +Fri Feb 27 17:06:44 2015 Koichi Sasada <ko1@a...> + + * vm_core.h: define vm_svar_index. + + * vm_insnhelper.c, vm.c, compile.c: use vm_svar_index names. + + * iseq.h: remove DEFAULT_SPECIAL_VAR_COUNT. + use VM_SVAR_FLIPFLOP_START instead. + Fri Feb 27 13:57:48 2015 Nobuyoshi Nakada <nobu@r...> * io.c (setup_narg): wipe away expanded part of buffer to get rid Index: vm_core.h =================================================================== --- vm_core.h (revision 49771) +++ vm_core.h (revision 49772) @@ -838,6 +838,14 @@ enum vm_special_object_type { https://github.com/ruby/ruby/blob/trunk/vm_core.h#L838 VM_SPECIAL_OBJECT_CONST_BASE }; +enum vm_svar_index { + VM_SVAR_LASTLINE = 0, /* $_ */ + VM_SVAR_BACKREF = 1, /* $~ */ + + VM_SVAR_EXTRA_START = 2, + VM_SVAR_FLIPFLOP_START = 2 /* flipflop */ +}; + #define VM_FRAME_MAGIC_METHOD 0x11 #define VM_FRAME_MAGIC_BLOCK 0x21 #define VM_FRAME_MAGIC_CLASS 0x31 Index: iseq.h =================================================================== --- iseq.h (revision 49771) +++ iseq.h (revision 49772) @@ -151,8 +151,6 @@ enum defined_type { https://github.com/ruby/ruby/blob/trunk/iseq.h#L151 VALUE rb_iseq_defined_string(enum defined_type type); -#define DEFAULT_SPECIAL_VAR_COUNT 2 - RUBY_SYMBOL_EXPORT_END #endif /* RUBY_COMPILE_H */ Index: compile.c =================================================================== --- compile.c (revision 49771) +++ compile.c (revision 49772) @@ -5288,7 +5288,7 @@ iseq_compile_each(rb_iseq_t *iseq, LINK_ https://github.com/ruby/ruby/blob/trunk/compile.c#L5288 rb_num_t cnt; VALUE key; - cnt = local_iseq->flip_cnt++ + DEFAULT_SPECIAL_VAR_COUNT; + cnt = local_iseq->flip_cnt++ + VM_SVAR_FLIPFLOP_START; key = INT2FIX(cnt); ADD_INSN2(ret, line, getspecial, key, INT2FIX(0)); Index: vm.c =================================================================== --- vm.c (revision 49771) +++ vm.c (revision 49772) @@ -943,25 +943,25 @@ vm_svar_set(VALUE key, VALUE val) https://github.com/ruby/ruby/blob/trunk/vm.c#L943 VALUE rb_backref_get(void) { - return vm_svar_get(1); + return vm_svar_get(VM_SVAR_BACKREF); } void rb_backref_set(VALUE val) { - vm_svar_set(1, val); + vm_svar_set(VM_SVAR_BACKREF, val); } VALUE rb_lastline_get(void) { - return vm_svar_get(0); + return vm_svar_get(VM_SVAR_LASTLINE); } void rb_lastline_set(VALUE val) { - vm_svar_set(0, val); + vm_svar_set(VM_SVAR_LASTLINE, val); } /* misc */ Index: vm_insnhelper.c =================================================================== --- vm_insnhelper.c (revision 49771) +++ vm_insnhelper.c (revision 49772) @@ -140,11 +140,11 @@ rb_error_arity(int argc, int min, int ma https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L140 /* svar */ static inline NODE ** -lep_svar_place(rb_thread_t *th, VALUE *lep) +lep_svar_place(rb_thread_t *th, const VALUE *lep) { - VALUE *svar; + const VALUE *svar; - if (lep && th->root_lep != lep) { + if (lep && (th == NULL || th->root_lep != lep)) { svar = &lep[-1]; } else { @@ -155,17 +155,17 @@ lep_svar_place(rb_thread_t *th, VALUE *l https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L155 } static VALUE -lep_svar_get(rb_thread_t *th, VALUE *lep, rb_num_t key) +lep_svar_get(rb_thread_t *th, const VALUE *lep, rb_num_t key) { - NODE **svar_place = lep_svar_place(th, lep); - NODE *svar = *svar_place; + NODE ** const svar_place = lep_svar_place(th, lep); + const NODE * const svar = *svar_place; if (NIL_P((VALUE)svar)) return Qnil; switch (key) { - case 0: + case VM_SVAR_LASTLINE: return svar->u1.value; - case 1: + case VM_SVAR_BACKREF: return svar->u2.value; default: { const VALUE ary = svar->u3.value; @@ -174,7 +174,7 @@ lep_svar_get(rb_thread_t *th, VALUE *lep https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L174 return Qnil; } else { - return rb_ary_entry(ary, key - DEFAULT_SPECIAL_VAR_COUNT); + return rb_ary_entry(ary, key - VM_SVAR_EXTRA_START); } } } @@ -183,7 +183,7 @@ lep_svar_get(rb_thread_t *th, VALUE *lep https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L183 static void lep_svar_set(rb_thread_t *th, VALUE *lep, rb_num_t key, VALUE val) { - NODE **svar_place = lep_svar_place(th, lep); + NODE **svar_place = (NODE **)lep_svar_place(th, lep); NODE *svar = *svar_place; if (NIL_P((VALUE)svar)) { @@ -191,10 +191,10 @@ lep_svar_set(rb_thread_t *th, VALUE *lep https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L191 } switch (key) { - case 0: + case VM_SVAR_LASTLINE: svar->u1.value = val; return; - case 1: + case VM_SVAR_BACKREF: svar->u2.value = val; return; default: { @@ -203,7 +203,7 @@ lep_svar_set(rb_thread_t *th, VALUE *lep https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L203 if (NIL_P(ary)) { svar->u3.value = ary = rb_ary_new(); } - rb_ary_store(ary, key - DEFAULT_SPECIAL_VAR_COUNT, val); + rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val); } } } @@ -217,7 +217,7 @@ vm_getspecial(rb_thread_t *th, VALUE *le https://github.com/ruby/ruby/blob/trunk/vm_insnhelper.c#L217 val = lep_svar_get(th, lep, key); } else { - VALUE backref = lep_svar_get(th, lep, 1); + VALUE backref = lep_svar_get(th, lep, VM_SVAR_BACKREF); if (type & 0x01) { switch (type >> 1) { -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/