th
-> ec
for rb_iterate0
.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60552 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cf28dbc543
commit
881ac0a565
22
vm_eval.c
22
vm_eval.c
@ -1110,13 +1110,13 @@ vm_frametype_name(const rb_control_frame_t *cfp);
|
|||||||
static VALUE
|
static VALUE
|
||||||
rb_iterate0(VALUE (* it_proc) (VALUE), VALUE data1,
|
rb_iterate0(VALUE (* it_proc) (VALUE), VALUE data1,
|
||||||
const struct vm_ifunc *const ifunc,
|
const struct vm_ifunc *const ifunc,
|
||||||
rb_thread_t *const th)
|
rb_execution_context_t *ec)
|
||||||
{
|
{
|
||||||
enum ruby_tag_type state;
|
enum ruby_tag_type state;
|
||||||
volatile VALUE retval = Qnil;
|
volatile VALUE retval = Qnil;
|
||||||
rb_control_frame_t *const cfp = th->ec->cfp;
|
rb_control_frame_t *const cfp = ec->cfp;
|
||||||
|
|
||||||
EC_PUSH_TAG(th->ec);
|
EC_PUSH_TAG(ec);
|
||||||
state = EC_EXEC_TAG();
|
state = EC_EXEC_TAG();
|
||||||
if (state == 0) {
|
if (state == 0) {
|
||||||
iter_retry:
|
iter_retry:
|
||||||
@ -1131,20 +1131,20 @@ rb_iterate0(VALUE (* it_proc) (VALUE), VALUE data1,
|
|||||||
else {
|
else {
|
||||||
block_handler = VM_CF_BLOCK_HANDLER(cfp);
|
block_handler = VM_CF_BLOCK_HANDLER(cfp);
|
||||||
}
|
}
|
||||||
vm_passed_block_handler_set(th->ec, block_handler);
|
vm_passed_block_handler_set(ec, block_handler);
|
||||||
}
|
}
|
||||||
retval = (*it_proc) (data1);
|
retval = (*it_proc) (data1);
|
||||||
}
|
}
|
||||||
else if (state == TAG_BREAK || state == TAG_RETRY) {
|
else if (state == TAG_BREAK || state == TAG_RETRY) {
|
||||||
const struct vm_throw_data *const err = (struct vm_throw_data *)th->ec->errinfo;
|
const struct vm_throw_data *const err = (struct vm_throw_data *)ec->errinfo;
|
||||||
const rb_control_frame_t *const escape_cfp = THROW_DATA_CATCH_FRAME(err);
|
const rb_control_frame_t *const escape_cfp = THROW_DATA_CATCH_FRAME(err);
|
||||||
|
|
||||||
if (cfp == escape_cfp) {
|
if (cfp == escape_cfp) {
|
||||||
rb_vm_rewind_cfp(th->ec, cfp);
|
rb_vm_rewind_cfp(ec, cfp);
|
||||||
|
|
||||||
state = 0;
|
state = 0;
|
||||||
th->ec->tag->state = TAG_NONE;
|
ec->tag->state = TAG_NONE;
|
||||||
th->ec->errinfo = Qnil;
|
ec->errinfo = Qnil;
|
||||||
|
|
||||||
if (state == TAG_RETRY) goto iter_retry;
|
if (state == TAG_RETRY) goto iter_retry;
|
||||||
retval = THROW_DATA_VAL(err);
|
retval = THROW_DATA_VAL(err);
|
||||||
@ -1156,7 +1156,7 @@ rb_iterate0(VALUE (* it_proc) (VALUE), VALUE data1,
|
|||||||
EC_POP_TAG();
|
EC_POP_TAG();
|
||||||
|
|
||||||
if (state) {
|
if (state) {
|
||||||
EC_JUMP_TAG(th->ec, state);
|
EC_JUMP_TAG(ec, state);
|
||||||
}
|
}
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
@ -1167,7 +1167,7 @@ rb_iterate(VALUE (* it_proc)(VALUE), VALUE data1,
|
|||||||
{
|
{
|
||||||
return rb_iterate0(it_proc, data1,
|
return rb_iterate0(it_proc, data1,
|
||||||
bl_proc ? rb_vm_ifunc_proc_new(bl_proc, (void *)data2) : 0,
|
bl_proc ? rb_vm_ifunc_proc_new(bl_proc, (void *)data2) : 0,
|
||||||
GET_THREAD());
|
GET_EC());
|
||||||
}
|
}
|
||||||
|
|
||||||
struct iter_method_arg {
|
struct iter_method_arg {
|
||||||
@ -1213,7 +1213,7 @@ rb_lambda_call(VALUE obj, ID mid, int argc, const VALUE *argv,
|
|||||||
arg.argc = argc;
|
arg.argc = argc;
|
||||||
arg.argv = argv;
|
arg.argv = argv;
|
||||||
block = rb_vm_ifunc_new(bl_proc, (void *)data2, min_argc, max_argc);
|
block = rb_vm_ifunc_new(bl_proc, (void *)data2, min_argc, max_argc);
|
||||||
return rb_iterate0(iterate_method, (VALUE)&arg, block, GET_THREAD());
|
return rb_iterate0(iterate_method, (VALUE)&arg, block, GET_EC());
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user