1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

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:
ko1 2017-11-07 05:01:51 +00:00
parent 001eb22c75
commit af8a7df3b6
3 changed files with 8 additions and 8 deletions

View file

@ -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

View file

@ -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--;

View file

@ -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);
}