ruby-changes:9488
From: yugui <ko1@a...>
Date: Thu, 25 Dec 2008 18:57:45 +0900 (JST)
Subject: [ruby-changes:9488] Ruby:r21026 (ruby_1_9_1): merges r20969 from trunk into ruby_1_9_1.
yugui 2008-12-25 18:55:54 +0900 (Thu, 25 Dec 2008) New Revision: 21026 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21026 Log: merges r20969 from trunk into ruby_1_9_1. * vm.c (invoke_block_from_c): fix to point right cfp. * vm.c (vm_make_proc, vm_make_proc_from_block), vm_core.h: remove unused parameter cfp. * vm_insnhelper.c, proc.c (proc_new): ditto. Modified files: branches/ruby_1_9_1/ChangeLog branches/ruby_1_9_1/proc.c branches/ruby_1_9_1/vm.c branches/ruby_1_9_1/vm_core.h branches/ruby_1_9_1/vm_insnhelper.c Index: ruby_1_9_1/ChangeLog =================================================================== --- ruby_1_9_1/ChangeLog (revision 21025) +++ ruby_1_9_1/ChangeLog (revision 21026) @@ -1,3 +1,12 @@ +Sun Dec 21 13:38:04 2008 Koichi Sasada <ko1@a...> + + * vm.c (invoke_block_from_c): fix to point right cfp. + + * vm.c (vm_make_proc, vm_make_proc_from_block), vm_core.h: + remove unused parameter cfp. + + * vm_insnhelper.c, proc.c (proc_new): ditto. + Wed Dec 24 20:59:12 2008 Koichi Sasada <ko1@a...> * error.c (exc_equal): == method should not raise Exception. Index: ruby_1_9_1/vm_core.h =================================================================== --- ruby_1_9_1/vm_core.h (revision 21025) +++ ruby_1_9_1/vm_core.h (revision 21026) @@ -582,7 +582,7 @@ VALUE vm_invoke_proc(rb_thread_t *th, rb_proc_t *proc, VALUE self, int argc, const VALUE *argv, rb_block_t *blockptr); -VALUE vm_make_proc(rb_thread_t *th, rb_control_frame_t *cfp, const rb_block_t *block, VALUE klass); +VALUE vm_make_proc(rb_thread_t *th, const rb_block_t *block, VALUE klass); VALUE vm_make_env_object(rb_thread_t *th, rb_control_frame_t *cfp); NOINLINE(void rb_gc_save_machine_context(rb_thread_t *)); Index: ruby_1_9_1/proc.c =================================================================== --- ruby_1_9_1/proc.c (revision 21025) +++ ruby_1_9_1/proc.c (revision 21026) @@ -384,7 +384,7 @@ return procval; } - procval = vm_make_proc(th, cfp, block, klass); + procval = vm_make_proc(th, block, klass); if (is_lambda) { rb_proc_t *proc; Index: ruby_1_9_1/vm.c =================================================================== --- ruby_1_9_1/vm.c (revision 21025) +++ ruby_1_9_1/vm.c (revision 21026) @@ -385,43 +385,41 @@ /* Proc */ static VALUE -vm_make_proc_from_block(rb_thread_t *th, rb_control_frame_t *cfp, - rb_block_t *block, VALUE klass) +vm_make_proc_from_block(rb_thread_t *th, rb_block_t *block, VALUE klass) { VALUE procval; - rb_control_frame_t *bcfp; - VALUE *bdfp; /* to gc mark */ procval = block->proc; if (procval && RBASIC(procval)->klass == klass) { return procval; } - bcfp = RUBY_VM_GET_CFP_FROM_BLOCK_PTR(block); - bdfp = bcfp->dfp; - procval = vm_make_proc(th, bcfp, block, klass); - if (!block->proc) block->proc = procval; + procval = vm_make_proc(th, block, klass); + if (!block->proc) { + block->proc = procval; + } return procval; } VALUE -vm_make_proc(rb_thread_t *th, rb_control_frame_t *cfp, - const rb_block_t *block, VALUE klass) +vm_make_proc(rb_thread_t *th, const rb_block_t *block, VALUE klass) { VALUE procval, envval, blockprocval = 0; rb_proc_t *proc; + rb_control_frame_t *cfp = RUBY_VM_GET_CFP_FROM_BLOCK_PTR(block); if (GC_GUARDED_PTR_REF(cfp->lfp[0])) { if (!RUBY_VM_CLASS_SPECIAL_P(cfp->lfp[0])) { rb_proc_t *p; blockprocval = vm_make_proc_from_block( - th, cfp, (rb_block_t *)GC_GUARDED_PTR_REF(*cfp->lfp), klass); + th, (rb_block_t *)GC_GUARDED_PTR_REF(*cfp->lfp), klass); GetProcPtr(blockprocval, p); *cfp->lfp = GC_GUARDED_PTR(&p->block); } } + envval = vm_make_env_object(th, cfp); if (PROCDEBUG) { @@ -459,13 +457,14 @@ { if (BUILTIN_TYPE(block->iseq) != T_NODE) { const rb_iseq_t *iseq = block->iseq; - const rb_control_frame_t *cfp = th->cfp; + const rb_control_frame_t *cfp; int i, opt_pc, arg_size = iseq->arg_size; int type = block_proc_is_lambda(block->proc) ? VM_FRAME_MAGIC_LAMBDA : VM_FRAME_MAGIC_BLOCK; rb_vm_set_finish_env(th); + cfp = th->cfp; CHECK_STACK_OVERFLOW(cfp, argc + iseq->stack_max); for (i=0; i<argc; i++) { @@ -1731,7 +1730,7 @@ blockptr->iseq = blockiseq; blockptr->proc = 0; - proc = vm_make_proc(th, cfp, blockptr, rb_cProc); + proc = vm_make_proc(th, blockptr, rb_cProc); rb_set_end_proc(rb_call_end_proc, proc); }); return Qnil; Index: ruby_1_9_1/vm_insnhelper.c =================================================================== --- ruby_1_9_1/vm_insnhelper.c (revision 21025) +++ ruby_1_9_1/vm_insnhelper.c (revision 21026) @@ -185,10 +185,7 @@ /* make Proc object */ if (blockptr->proc == 0) { rb_proc_t *proc; - - blockval = vm_make_proc(th, RUBY_VM_GET_CFP_FROM_BLOCK_PTR(blockptr), - blockptr, rb_cProc); - + blockval = vm_make_proc(th, blockptr, rb_cProc); GetProcPtr(blockval, proc); *block = &proc->block; } @@ -664,7 +661,7 @@ } if (blockptr) { - blockarg = vm_make_proc(th, th->cfp, blockptr, rb_cProc); + blockarg = vm_make_proc(th, blockptr, rb_cProc); } else { blockarg = Qnil; -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/