зеркало из https://github.com/github/ruby.git
move `rb_thread_t::method_missing_reason` to ec.
* vm_core.h (rb_thread_t): move method_missing_reason to rb_execution_context_t. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60679 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
Родитель
001eb22c75
Коммит
af8a7df3b6
|
@ -771,6 +771,7 @@ typedef struct rb_execution_context_struct {
|
|||
VALUE errinfo;
|
||||
VALUE passed_block_handler; /* for rb_iterate */
|
||||
const rb_callable_method_entry_t *passed_bmethod_me; /* for bmethod */
|
||||
enum method_missing_reason method_missing_reason;
|
||||
|
||||
/* for GC */
|
||||
struct {
|
||||
|
@ -852,7 +853,6 @@ typedef struct rb_thread_struct {
|
|||
rb_jmpbuf_t root_jmpbuf;
|
||||
|
||||
/* misc */
|
||||
enum method_missing_reason method_missing_reason: 8;
|
||||
unsigned int abort_on_exception: 1;
|
||||
unsigned int report_on_exception: 1;
|
||||
#ifdef USE_SIGALTSTACK
|
||||
|
|
10
vm_eval.c
10
vm_eval.c
|
@ -373,7 +373,7 @@ check_funcall_missing(rb_execution_context_t *ec, VALUE klass, VALUE recv, ID mi
|
|||
|
||||
new_args[0] = ID2SYM(mid);
|
||||
MEMCPY(new_args+1, argv, VALUE, argc);
|
||||
rb_ec_thread_ptr(ec)->method_missing_reason = MISSING_NOENTRY;
|
||||
ec->method_missing_reason = MISSING_NOENTRY;
|
||||
args.th = rb_ec_thread_ptr(ec);
|
||||
args.recv = recv;
|
||||
args.me = me;
|
||||
|
@ -630,8 +630,8 @@ NORETURN(static void raise_method_missing(rb_execution_context_t *ec, int argc,
|
|||
static VALUE
|
||||
rb_method_missing(int argc, const VALUE *argv, VALUE obj)
|
||||
{
|
||||
rb_thread_t *th = GET_THREAD();
|
||||
raise_method_missing(th->ec, argc, argv, obj, th->method_missing_reason);
|
||||
rb_execution_context_t *ec = GET_EC();
|
||||
raise_method_missing(ec, argc, argv, obj, ec->method_missing_reason);
|
||||
UNREACHABLE;
|
||||
}
|
||||
|
||||
|
@ -711,7 +711,7 @@ method_missing(VALUE obj, ID id, int argc, const VALUE *argv, enum method_missin
|
|||
VALUE block_handler = vm_passed_block_handler(ec);
|
||||
const rb_callable_method_entry_t *me;
|
||||
|
||||
rb_ec_thread_ptr(ec)->method_missing_reason = call_status;
|
||||
ec->method_missing_reason = call_status;
|
||||
|
||||
if (id == idMethodMissing) {
|
||||
missing:
|
||||
|
@ -905,7 +905,7 @@ send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope)
|
|||
}
|
||||
}
|
||||
id = idMethodMissing;
|
||||
rb_ec_thread_ptr(ec)->method_missing_reason = MISSING_NOENTRY;
|
||||
ec->method_missing_reason = MISSING_NOENTRY;
|
||||
}
|
||||
else {
|
||||
argv++; argc--;
|
||||
|
|
|
@ -2037,7 +2037,7 @@ vm_call_opt_send(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp, struct
|
|||
}
|
||||
TOPN(i) = rb_str_intern(sym);
|
||||
ci->mid = idMethodMissing;
|
||||
rb_ec_thread_ptr(ec)->method_missing_reason = cc->aux.method_missing_reason = ci_missing_reason(ci);
|
||||
ec->method_missing_reason = cc->aux.method_missing_reason = ci_missing_reason(ci);
|
||||
}
|
||||
else {
|
||||
/* shift arguments */
|
||||
|
@ -2104,7 +2104,7 @@ vm_call_method_missing(rb_execution_context_t *ec, rb_control_frame_t *reg_cfp,
|
|||
argv[0] = ID2SYM(orig_ci->mid);
|
||||
INC_SP(1);
|
||||
|
||||
rb_ec_thread_ptr(ec)->method_missing_reason = orig_cc->aux.method_missing_reason;
|
||||
ec->method_missing_reason = orig_cc->aux.method_missing_reason;
|
||||
return vm_call_method(ec, reg_cfp, calling, ci, cc);
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче