aboutsummaryrefslogtreecommitdiffstats
path: root/vm_insnhelper.c
diff options
context:
space:
mode:
authorko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-11-13 20:02:19 +0000
committerko1 <ko1@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-11-13 20:02:19 +0000
commite7187862524523fe89ed9de9d392062d8c801d77 (patch)
tree4fab0e3ff9178fe160fe61fc63e1c4569286aa0b /vm_insnhelper.c
parenta78e77ffa6aa19cfe0efba922297a1cf11d04934 (diff)
downloadruby-e7187862524523fe89ed9de9d392062d8c801d77.tar.gz
* 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
Diffstat (limited to 'vm_insnhelper.c')
-rw-r--r--vm_insnhelper.c21
1 files changed, 5 insertions, 16 deletions
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