diff options
author | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2019-06-19 18:47:15 +1200 |
---|---|---|
committer | Samuel Williams <samuel.williams@oriontransfer.co.nz> | 2019-06-19 20:39:10 +1200 |
commit | cb5da39f20a17bd73e791dca1e7e1832f0adbc53 (patch) | |
tree | a8cbf20a2f94b3e184e1517b9a68fe5fd005d8f1 /vm.c | |
parent | 714703805370767efb859078d5095a014417a692 (diff) | |
download | ruby-cb5da39f20a17bd73e791dca1e7e1832f0adbc53.tar.gz |
Use shared implementation of `rb_ec_initialize_vm_stack`.
Diffstat (limited to 'vm.c')
-rw-r--r-- | vm.c | 28 |
1 files changed, 17 insertions, 11 deletions
@@ -2685,6 +2685,22 @@ thread_alloc(VALUE klass) return obj; } +void +rb_ec_initialize_vm_stack(rb_execution_context_t *ec, VALUE *stack, size_t size) +{ + rb_ec_set_vm_stack(ec, stack, size); + + ec->cfp = (void *)(ec->vm_stack + ec->vm_stack_size); + + rb_vm_push_frame(ec, + NULL /* dummy iseq */, + VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL | VM_FRAME_FLAG_FINISH | VM_FRAME_FLAG_CFRAME /* dummy frame */, + Qnil /* dummy self */, VM_BLOCK_HANDLER_NONE /* dummy block ptr */, + 0 /* dummy cref/me */, + 0 /* dummy pc */, ec->vm_stack, 0, 0 + ); +} + static void th_init(rb_thread_t *th, VALUE self) { @@ -2693,17 +2709,7 @@ th_init(rb_thread_t *th, VALUE self) if (self == 0) { size_t size = th->vm->default_params.thread_vm_stack_size / sizeof(VALUE); - rb_ec_set_vm_stack(th->ec, ALLOC_N(VALUE, size), size); - - th->ec->cfp = (void *)(th->ec->vm_stack + th->ec->vm_stack_size); - - rb_vm_push_frame(th->ec, - 0 /* dummy iseq */, - VM_FRAME_MAGIC_DUMMY | VM_ENV_FLAG_LOCAL | VM_FRAME_FLAG_FINISH | VM_FRAME_FLAG_CFRAME /* dummy frame */, - Qnil /* dummy self */, VM_BLOCK_HANDLER_NONE /* dummy block ptr */, - 0 /* dummy cref/me */, - 0 /* dummy pc */, th->ec->vm_stack, 0, 0 - ); + rb_ec_initialize_vm_stack(th->ec, ALLOC_N(VALUE, size), size); } else { VM_ASSERT(th->ec->cfp == NULL); VM_ASSERT(th->ec->vm_stack == NULL); |