From e7187862524523fe89ed9de9d392062d8c801d77 Mon Sep 17 00:00:00 2001 From: ko1 Date: Fri, 13 Nov 2015 20:02:19 +0000 Subject: * refactoring CREF related code. * eval_intern.h: remove unused setter functions. CREF_CLASS_SET() CREF_NEXT_SET() CREF_SCOPE_VISI_COPY() * eval_intern.h: rename flags: * NODE_FL_CREF_PUSHED_BY_EVAL_ -> CREF_FL_PUSHED_BY_EVAL * NODE_FL_CREF_OMOD_SHARED_ -> CREF_FL_OMOD_SHARED and use IMEMO_FL_USER1/2. * vm.c (vm_cref_new): accept push_by_eval parameter. * vm.c (vm_cref_new_use_prev): added for rb_vm_rewrite_cref(). * vm_insnhelper.c (vm_cref_push): accept pushed_by_eval parameter. * vm_insnhelper.h: remove unused macros: COPY_CREF_OMOD() and COPY_CREF(). * vm_eval.c, insns.def: catch up this fix. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@52564 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- vm_insnhelper.c | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) (limited to 'vm_insnhelper.c') diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 4130c17749..ecf203c01d 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -524,14 +524,11 @@ rb_vm_rewrite_cref(rb_cref_t *cref, VALUE old_klass, VALUE new_klass, rb_cref_t while (cref) { if (CREF_CLASS(cref) == old_klass) { - new_cref = vm_cref_new(new_klass, METHOD_VISI_UNDEF, NULL); - COPY_CREF_OMOD(new_cref, cref); - CREF_NEXT_SET(new_cref, CREF_NEXT(cref)); + new_cref = vm_cref_new_use_prev(new_klass, METHOD_VISI_UNDEF, FALSE, cref, FALSE); *new_cref_ptr = new_cref; return; } - new_cref = vm_cref_new(CREF_CLASS(cref), METHOD_VISI_UNDEF, NULL); - COPY_CREF_OMOD(new_cref, cref); + new_cref = vm_cref_new_use_prev(CREF_CLASS(cref), METHOD_VISI_UNDEF, FALSE, cref, FALSE); cref = CREF_NEXT(cref); *new_cref_ptr = new_cref; new_cref_ptr = (rb_cref_t **)&new_cref->next; @@ -540,10 +537,9 @@ rb_vm_rewrite_cref(rb_cref_t *cref, VALUE old_klass, VALUE new_klass, rb_cref_t } static rb_cref_t * -vm_cref_push(rb_thread_t *th, VALUE klass, rb_block_t *blockptr) +vm_cref_push(rb_thread_t *th, VALUE klass, rb_block_t *blockptr, int pushed_by_eval) { - const rb_cref_t *prev_cref = NULL; - rb_cref_t *cref = NULL; + rb_cref_t *prev_cref = NULL; if (blockptr) { prev_cref = vm_env_cref(blockptr->ep); @@ -555,15 +551,8 @@ vm_cref_push(rb_thread_t *th, VALUE klass, rb_block_t *blockptr) prev_cref = vm_env_cref(cfp->ep); } } - cref = vm_cref_new(klass, METHOD_VISI_PUBLIC, prev_cref); - /* TODO: why CREF_NEXT(cref) is 1? */ - if (CREF_NEXT(cref) && CREF_NEXT(cref) != (void *) 1 && - !NIL_P(CREF_REFINEMENTS(CREF_NEXT(cref)))) { - COPY_CREF_OMOD(cref, CREF_NEXT(cref)); - } - - return cref; + return vm_cref_new(klass, METHOD_VISI_PUBLIC, FALSE, prev_cref, pushed_by_eval); } static inline VALUE -- cgit v1.2.3