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 errinfo;
VALUE passed_block_handler; /* for rb_iterate */ VALUE passed_block_handler; /* for rb_iterate */
const rb_callable_method_entry_t *passed_bmethod_me; /* for bmethod */ const rb_callable_method_entry_t *passed_bmethod_me; /* for bmethod */
enum method_missing_reason method_missing_reason;
/* for GC */ /* for GC */
struct { struct {
@ -852,7 +853,6 @@ typedef struct rb_thread_struct {
rb_jmpbuf_t root_jmpbuf; rb_jmpbuf_t root_jmpbuf;
/* misc */ /* misc */
enum method_missing_reason method_missing_reason: 8;
unsigned int abort_on_exception: 1; unsigned int abort_on_exception: 1;
unsigned int report_on_exception: 1; unsigned int report_on_exception: 1;
#ifdef USE_SIGALTSTACK #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); new_args[0] = ID2SYM(mid);
MEMCPY(new_args+1, argv, VALUE, argc); 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.th = rb_ec_thread_ptr(ec);
args.recv = recv; args.recv = recv;
args.me = me; args.me = me;
@ -630,8 +630,8 @@ NORETURN(static void raise_method_missing(rb_execution_context_t *ec, int argc,
static VALUE static VALUE
rb_method_missing(int argc, const VALUE *argv, VALUE obj) rb_method_missing(int argc, const VALUE *argv, VALUE obj)
{ {
rb_thread_t *th = GET_THREAD(); rb_execution_context_t *ec = GET_EC();
raise_method_missing(th->ec, argc, argv, obj, th->method_missing_reason); raise_method_missing(ec, argc, argv, obj, ec->method_missing_reason);
UNREACHABLE; 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); VALUE block_handler = vm_passed_block_handler(ec);
const rb_callable_method_entry_t *me; 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) { if (id == idMethodMissing) {
missing: missing:
@ -905,7 +905,7 @@ send_internal(int argc, const VALUE *argv, VALUE recv, call_type scope)
} }
} }
id = idMethodMissing; id = idMethodMissing;
rb_ec_thread_ptr(ec)->method_missing_reason = MISSING_NOENTRY; ec->method_missing_reason = MISSING_NOENTRY;
} }
else { else {
argv++; argc--; 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); TOPN(i) = rb_str_intern(sym);
ci->mid = idMethodMissing; 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 { else {
/* shift arguments */ /* 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); argv[0] = ID2SYM(orig_ci->mid);
INC_SP(1); 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); return vm_call_method(ec, reg_cfp, calling, ci, cc);
} }