diff options
author | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-09 05:06:41 +0000 |
---|---|---|
committer | normal <normal@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-05-09 05:06:41 +0000 |
commit | c2a5df6905c9b9afde2c2611a20128220bf1372a (patch) | |
tree | e22cadfa88ec235f9630197c0c3a56ce6cbe4850 /vm_args.c | |
parent | 5591fbbe4ef5a3903a96eb3f02d49a0a13ef6017 (diff) | |
download | ruby-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.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -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); } |