diff options
author | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-03-08 21:53:05 +0000 |
---|---|---|
committer | ko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2015-03-08 21:53:05 +0000 |
commit | 5856347f16368783a1d9d6691e3d5e125f720897 (patch) | |
tree | 20b747c539616f6606af3bea82a434bf8fc6f658 | |
parent | 2262aba6a282aaad0ac7fedee9101e7927c48a4b (diff) |
* vm_insnhelper.h: define struct SVAR for SVAR.
This data type is also same layout of NODE (NODE_IF).
* vm_insnhelper.c: catch up this change.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49899 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | vm_insnhelper.c | 36 | ||||
-rw-r--r-- | vm_insnhelper.h | 9 |
3 files changed, 34 insertions, 18 deletions
@@ -1,3 +1,10 @@ +Mon Mar 09 06:44:48 2015 Koichi Sasada <ko1@atdot.net> + + * vm_insnhelper.h: define struct SVAR for SVAR. + This data type is also same layout of NODE (NODE_IF). + + * vm_insnhelper.c: catch up this change. + Mon Mar 9 06:43:21 2015 Koichi Sasada <ko1@atdot.net> * vm_insnhelper.c (lep_svar_set): add WBs. diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 3dce39d16a..ddb3040743 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -141,7 +141,7 @@ rb_error_arity(int argc, int min, int max) /* svar */ -static inline NODE ** +static inline struct SVAR ** lep_svar_place(rb_thread_t *th, const VALUE *lep) { const VALUE *svar; @@ -153,25 +153,25 @@ lep_svar_place(rb_thread_t *th, const VALUE *lep) svar = &th->root_svar; } - return (NODE **)svar; + return (struct SVAR **)svar; } static VALUE lep_svar_get(rb_thread_t *th, const VALUE *lep, rb_num_t key) { - NODE ** const svar_place = lep_svar_place(th, lep); - const NODE * const svar = *svar_place; + struct SVAR ** const svar_place = lep_svar_place(th, lep); + const struct SVAR *const svar = *svar_place; if (NIL_P((VALUE)svar)) return Qnil; if (nd_type(svar) == NODE_CREF) return Qnil; switch (key) { case VM_SVAR_LASTLINE: - return svar->u1.value; + return svar->lastline; case VM_SVAR_BACKREF: - return svar->u2.value; + return svar->backref; default: { - const VALUE ary = svar->u3.value; + const VALUE ary = svar->others; if (NIL_P(ary)) { return Qnil; @@ -186,31 +186,31 @@ lep_svar_get(rb_thread_t *th, const VALUE *lep, rb_num_t key) static void lep_svar_set(rb_thread_t *th, VALUE *lep, rb_num_t key, VALUE val) { - NODE **svar_place = (NODE **)lep_svar_place(th, lep); - NODE *svar = *svar_place; + struct SVAR **svar_place = lep_svar_place(th, lep); + struct SVAR *svar = *svar_place; if (NIL_P((VALUE)svar)) { - svar = *svar_place = NEW_IF(Qnil, Qnil, Qnil); - svar->nd_reserved = Qfalse; + svar = *svar_place = (struct SVAR *)NEW_IF(Qnil, Qnil, Qnil); + svar->cref = NULL; } else if (nd_type(svar) == NODE_CREF) { const rb_cref_t *cref = (rb_cref_t *)svar; - svar = *svar_place = NEW_IF(Qnil, Qnil, Qnil); - RB_OBJ_WRITE(svar, &svar->nd_reserved, (VALUE)cref); + svar = *svar_place = (struct SVAR *)NEW_IF(Qnil, Qnil, Qnil); + RB_OBJ_WRITE(svar, &svar->cref, (VALUE)cref); } switch (key) { case VM_SVAR_LASTLINE: - RB_OBJ_WRITE(svar, &svar->u1.value, val); + RB_OBJ_WRITE(svar, &svar->lastline, val); return; case VM_SVAR_BACKREF: - RB_OBJ_WRITE(svar, &svar->u2.value, val); + RB_OBJ_WRITE(svar, &svar->backref, val); return; default: { - VALUE ary = svar->u3.value; + VALUE ary = svar->others; if (NIL_P(ary)) { - RB_OBJ_WRITE(svar, &svar->u3.value, ary = rb_ary_new()); + RB_OBJ_WRITE(svar, &svar->others, ary = rb_ary_new()); } rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val); } @@ -265,7 +265,7 @@ ep_cref(const VALUE *ep) return (rb_cref_t *)svar; } else { - return (rb_cref_t *)((NODE *)svar)->nd_reserved; + return (rb_cref_t *)((struct SVAR *)svar)->cref; } } diff --git a/vm_insnhelper.h b/vm_insnhelper.h index f88557e22b..c17f3d88cf 100644 --- a/vm_insnhelper.h +++ b/vm_insnhelper.h @@ -229,5 +229,14 @@ enum vm_regan_acttype { static VALUE make_no_method_exception(VALUE exc, const char *format, VALUE obj, int argc, const VALUE *argv); +/* SVAR */ + +struct SVAR { + VALUE flags; + const rb_cref_t *cref; + VALUE lastline; + VALUE backref; + VALUE others; +}; #endif /* RUBY_INSNHELPER_H */ |