mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
rb_call0()
accepts ec
.
* vm_eval.c (rb_call0): accepts `ec`. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60550 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
01a935d478
commit
2ffa4d2394
1 changed files with 11 additions and 10 deletions
21
vm_eval.c
21
vm_eval.c
|
@ -272,6 +272,7 @@ static inline enum method_missing_reason rb_method_call_status(rb_execution_cont
|
|||
* calls the specified method.
|
||||
*
|
||||
* This function is called by functions in rb_call* family.
|
||||
* \param ec current execution context
|
||||
* \param recv receiver of the method
|
||||
* \param mid an ID that represents the name of the method
|
||||
* \param argc the number of method arguments
|
||||
|
@ -283,11 +284,11 @@ static inline enum method_missing_reason rb_method_call_status(rb_execution_cont
|
|||
* \note \a self is used in order to controlling access to protected methods.
|
||||
*/
|
||||
static inline VALUE
|
||||
rb_call0(VALUE recv, ID mid, int argc, const VALUE *argv,
|
||||
rb_call0(rb_execution_context_t *ec,
|
||||
VALUE recv, ID mid, int argc, const VALUE *argv,
|
||||
call_type scope, VALUE self)
|
||||
{
|
||||
const rb_callable_method_entry_t *me = rb_search_method_entry(recv, mid);
|
||||
rb_execution_context_t *ec = GET_EC();
|
||||
enum method_missing_reason call_status = rb_method_call_status(ec, me, scope, self);
|
||||
|
||||
if (call_status != MISSING_NONE) {
|
||||
|
@ -586,8 +587,8 @@ rb_method_call_status(rb_execution_context_t *ec, const rb_callable_method_entry
|
|||
static inline VALUE
|
||||
rb_call(VALUE recv, ID mid, int argc, const VALUE *argv, call_type scope)
|
||||
{
|
||||
rb_thread_t *th = GET_THREAD();
|
||||
return rb_call0(recv, mid, argc, argv, scope, th->ec->cfp->self);
|
||||
rb_execution_context_t *ec = GET_EC();
|
||||
return rb_call0(ec, recv, mid, argc, argv, scope, ec->cfp->self);
|
||||
}
|
||||
|
||||
NORETURN(static void raise_method_missing(rb_thread_t *th, int argc, const VALUE *argv,
|
||||
|
@ -864,13 +865,13 @@ send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope)
|
|||
VALUE vid;
|
||||
VALUE self;
|
||||
VALUE ret, vargv = 0;
|
||||
rb_thread_t *th = GET_THREAD();
|
||||
rb_execution_context_t *ec = GET_EC();
|
||||
|
||||
if (scope == CALL_PUBLIC) {
|
||||
self = Qundef;
|
||||
}
|
||||
else {
|
||||
self = RUBY_VM_PREVIOUS_CONTROL_FRAME(th->ec->cfp)->self;
|
||||
self = RUBY_VM_PREVIOUS_CONTROL_FRAME(ec->cfp)->self;
|
||||
}
|
||||
|
||||
if (argc == 0) {
|
||||
|
@ -888,7 +889,7 @@ send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope)
|
|||
rb_exc_raise(exc);
|
||||
}
|
||||
if (!SYMBOL_P(*argv)) {
|
||||
VALUE *tmp_argv = current_vm_stack_arg(th, argv);
|
||||
VALUE *tmp_argv = current_vm_stack_arg(rb_ec_thread_ptr(ec), argv);
|
||||
vid = rb_str_intern(vid);
|
||||
if (tmp_argv) {
|
||||
tmp_argv[0] = vid;
|
||||
|
@ -904,13 +905,13 @@ send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope)
|
|||
}
|
||||
}
|
||||
id = idMethodMissing;
|
||||
th->method_missing_reason = MISSING_NOENTRY;
|
||||
rb_ec_thread_ptr(ec)->method_missing_reason = MISSING_NOENTRY;
|
||||
}
|
||||
else {
|
||||
argv++; argc--;
|
||||
}
|
||||
PASS_PASSED_BLOCK_HANDLER_EC(th->ec);
|
||||
ret = rb_call0(recv, id, argc, argv, scope, self);
|
||||
PASS_PASSED_BLOCK_HANDLER_EC(ec);
|
||||
ret = rb_call0(ec, recv, id, argc, argv, scope, self);
|
||||
ALLOCV_END(vargv);
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue