aboutsummaryrefslogtreecommitdiffstats
path: root/vm_args.c
diff options
context:
space:
mode:
authornormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-05-09 05:06:41 +0000
committernormal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2017-05-09 05:06:41 +0000
commitc2a5df6905c9b9afde2c2611a20128220bf1372a (patch)
treee22cadfa88ec235f9630197c0c3a56ce6cbe4850 /vm_args.c
parent5591fbbe4ef5a3903a96eb3f02d49a0a13ef6017 (diff)
downloadruby-c2a5df6905c9b9afde2c2611a20128220bf1372a.tar.gz
rb_execution_context_t: move stack, stack_size and cfp from rb_thread_t
The goal is to reduce rb_context_t and rb_fiber_t size by removing the need to store the entire rb_thread_t in there. [ruby-core:81045] Work-in-progress: soon, we will move more fields here. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58614 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_args.c')
-rw-r--r--vm_args.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/vm_args.c b/vm_args.c
index f40a649b42..3bf56788b1 100644
--- a/vm_args.c
+++ b/vm_args.c
@@ -526,7 +526,7 @@ setup_parameters_complex(rb_thread_t * const th, const rb_iseq_t * const iseq,
int given_argc;
struct args_info args_body, *args;
VALUE keyword_hash = Qnil;
- VALUE * const orig_sp = th->cfp->sp;
+ VALUE * const orig_sp = th->ec.cfp->sp;
unsigned int i;
/*
@@ -546,7 +546,7 @@ setup_parameters_complex(rb_thread_t * const th, const rb_iseq_t * const iseq,
for (i=calling->argc; i<iseq->body->param.size; i++) {
locals[i] = Qnil;
}
- th->cfp->sp = &locals[i];
+ th->ec.cfp->sp = &locals[i];
/* setup args */
args = &args_body;
@@ -607,7 +607,7 @@ setup_parameters_complex(rb_thread_t * const th, const rb_iseq_t * const iseq,
}
else {
if (arg_setup_type == arg_setup_block) {
- CHECK_VM_STACK_OVERFLOW(th->cfp, min_argc);
+ CHECK_VM_STACK_OVERFLOW(th->ec.cfp, min_argc);
given_argc = min_argc;
args_extend(args, min_argc);
}
@@ -693,7 +693,7 @@ setup_parameters_complex(rb_thread_t * const th, const rb_iseq_t * const iseq,
}
#endif
- th->cfp->sp = orig_sp;
+ th->ec.cfp->sp = orig_sp;
return opt_pc;
}
@@ -705,7 +705,8 @@ raise_argument_error(rb_thread_t *th, const rb_iseq_t *iseq, const VALUE exc)
if (iseq) {
vm_push_frame(th, iseq, VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL, Qnil /* self */,
VM_BLOCK_HANDLER_NONE /* specval*/, Qfalse /* me or cref */,
- iseq->body->iseq_encoded, th->cfp->sp, 0, 0 /* stack_max */);
+ iseq->body->iseq_encoded,
+ th->ec.cfp->sp, 0, 0 /* stack_max */);
at = rb_threadptr_backtrace_object(th);
rb_vm_pop_frame(th);
}