summaryrefslogtreecommitdiff
path: root/vm.c
diff options
context:
space:
mode:
authorSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-19 18:47:15 +1200
committerSamuel Williams <samuel.williams@oriontransfer.co.nz>2019-06-19 20:39:10 +1200
commitcb5da39f20a17bd73e791dca1e7e1832f0adbc53 (patch)
treea8cbf20a2f94b3e184e1517b9a68fe5fd005d8f1 /vm.c
parent714703805370767efb859078d5095a014417a692 (diff)
Use shared implementation of `rb_ec_initialize_vm_stack`.
Diffstat (limited to 'vm.c')
-rw-r--r--vm.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/vm.c b/vm.c
index 4b4b037b4f..439464a42f 100644
--- a/vm.c
+++ b/vm.c
@@ -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);