From 2303483dde5db14a3d8f9dce2f41508e0de62a47 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 28 Mar 2015 05:22:12 +0000 Subject: vm_eval.c: suppress warnings * vm_eval.c (iterate_method): split to suppress false warnings by gcc 4.4. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@50107 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- vm_eval.c | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'vm_eval.c') diff --git a/vm_eval.c b/vm_eval.c index 1e36c54e80..ae2c9ca0a7 100644 --- a/vm_eval.c +++ b/vm_eval.c @@ -1099,32 +1099,28 @@ static const char * vm_frametype_name(const rb_control_frame_t *cfp); #endif -VALUE -rb_iterate(VALUE (* it_proc) (VALUE), VALUE data1, - VALUE (* bl_proc) (ANYARGS), VALUE data2) +static VALUE +rb_iterate0(VALUE (* it_proc) (VALUE), VALUE data1, + const struct vm_ifunc *const ifunc, + rb_thread_t *const th) { int state; volatile VALUE retval = Qnil; - struct vm_ifunc *ifunc = bl_proc ? - IFUNC_NEW(bl_proc, data2, rb_frame_this_func()) : 0; - rb_thread_t *th = GET_THREAD(); - rb_control_frame_t *volatile cfp = th->cfp; + rb_control_frame_t *const cfp = th->cfp; TH_PUSH_TAG(th); state = TH_EXEC_TAG(); if (state == 0) { - VAR_INITIALIZED(th); - VAR_INITIALIZED(ifunc); iter_retry: { rb_block_t *blockptr; - if (bl_proc) { - blockptr = RUBY_VM_GET_BLOCK_PTR_IN_CFP(th->cfp); + if (ifunc) { + blockptr = RUBY_VM_GET_BLOCK_PTR_IN_CFP(cfp); blockptr->iseq = (void *)ifunc; blockptr->proc = 0; } else { - blockptr = VM_CF_BLOCK_PTR(th->cfp); + blockptr = VM_CF_BLOCK_PTR(cfp); } th->passed_block = blockptr; } @@ -1156,6 +1152,15 @@ rb_iterate(VALUE (* it_proc) (VALUE), VALUE data1, return retval; } +VALUE +rb_iterate(VALUE (* it_proc)(VALUE), VALUE data1, + VALUE (* bl_proc)(ANYARGS), VALUE data2) +{ + return rb_iterate0(it_proc, data1, + bl_proc ? IFUNC_NEW(bl_proc, data2, rb_frame_this_func()) : 0, + GET_THREAD()); +} + struct iter_method_arg { VALUE obj; ID mid; -- cgit v1.2.3