diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | vm_insnhelper.c | 8 |
2 files changed, 8 insertions, 4 deletions
@@ -1,3 +1,7 @@ +Mon Mar 9 06:43:21 2015 Koichi Sasada <ko1@atdot.net> + + * vm_insnhelper.c (lep_svar_set): add WBs. + Mon Mar 9 06:19:06 2015 Koichi Sasada <ko1@atdot.net> * internal.h: define rb_cref_t and change to use it. diff --git a/vm_insnhelper.c b/vm_insnhelper.c index e0db79902f..3dce39d16a 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -196,21 +196,21 @@ lep_svar_set(rb_thread_t *th, VALUE *lep, rb_num_t key, VALUE val) else if (nd_type(svar) == NODE_CREF) { const rb_cref_t *cref = (rb_cref_t *)svar; svar = *svar_place = NEW_IF(Qnil, Qnil, Qnil); - svar->nd_reserved = (VALUE)cref; + RB_OBJ_WRITE(svar, &svar->nd_reserved, (VALUE)cref); } switch (key) { case VM_SVAR_LASTLINE: - svar->u1.value = val; + RB_OBJ_WRITE(svar, &svar->u1.value, val); return; case VM_SVAR_BACKREF: - svar->u2.value = val; + RB_OBJ_WRITE(svar, &svar->u2.value, val); return; default: { VALUE ary = svar->u3.value; if (NIL_P(ary)) { - svar->u3.value = ary = rb_ary_new(); + RB_OBJ_WRITE(svar, &svar->u3.value, ary = rb_ary_new()); } rb_ary_store(ary, key - VM_SVAR_EXTRA_START, val); } |