summaryrefslogtreecommitdiff
path: root/vm_eval.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-28 05:22:12 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2015-03-28 05:22:12 +0000
commit2303483dde5db14a3d8f9dce2f41508e0de62a47 (patch)
tree2c030131777cbf674724946b3051705fa3f9aae8 /vm_eval.c
parentdd6ab6b8116ea485ea7de5144b256e18e7d21872 (diff)
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
Diffstat (limited to 'vm_eval.c')
-rw-r--r--vm_eval.c29
1 files changed, 17 insertions, 12 deletions
diff --git a/vm_eval.c b/vm_eval.c
index 1e36c54..ae2c9ca 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;