diff options
author | Andy Wingo <wingo@pobox.com> | 2018-06-24 09:32:11 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2018-06-25 17:49:50 +0200 |
commit | 7f7169847ee047d585b7c9ca6c56e991aaf74edc (patch) | |
tree | 3fddcad520b143bcb1da2a04ee8c85d2fffcfdcc /libguile/eval.c | |
parent | 2480761bde7d55ef05cc11eb49902ede84c70a0a (diff) | |
download | guile-7f7169847ee047d585b7c9ca6c56e991aaf74edc.tar.gz |
Eagerly initialize thread VM; remove scm_the_vm
* libguile/threads.c (thread_mark): Unconditionally call
scm_i_vm_mark_stack.
(guilify_self_1): Eagerly prepare the thread stack, before entering
Guile mode. It's only a page of mmap, after all.
* libguile/vm.c (scm_i_vm_prepare_stack): Rename from init_vm.
(thread_vm, scm_the_vm): Remove.
(VM_DEFINE_HOOK, scm_vm_trace_level, scm_set_vm_trace_level_x)
(scm_vm_engine, scm_c_set_vm_engine_x, scm_i_capture_current_stack)
(scm_call_n, scm_call_with_stack_overflow_handler): Adapt to get VM
from thread.
(scm_i_vm_free_stack): Memset the whole thing to 0 when we're done.
* libguile/control.c (scm_abort_to_prompt_star)
* libguile/eval.c (eval):
* libguile/throw.c (catch, abort_to_prompt): Get VM from thread.
Diffstat (limited to 'libguile/eval.c')
-rw-r--r-- | libguile/eval.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/libguile/eval.c b/libguile/eval.c index b663d7f84..f80a9f3f5 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -431,7 +431,7 @@ eval (SCM x, SCM env) case SCM_M_CALL_WITH_PROMPT: { - struct scm_vm *vp; + scm_i_thread *t; SCM k, handler, res; jmp_buf registers; const void *prev_cookie; @@ -439,32 +439,32 @@ eval (SCM x, SCM env) k = EVAL1 (CAR (mx), env); handler = EVAL1 (CDDR (mx), env); - vp = scm_the_vm (); + t = SCM_I_CURRENT_THREAD; - saved_stack_depth = vp->stack_top - vp->sp; + saved_stack_depth = t->vm.stack_top - t->vm.sp; /* Push the prompt onto the dynamic stack. */ - scm_dynstack_push_prompt (&SCM_I_CURRENT_THREAD->dynstack, + scm_dynstack_push_prompt (&t->dynstack, SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY, k, - vp->stack_top - vp->fp, + t->vm.stack_top - t->vm.fp, saved_stack_depth, - vp->ip, + t->vm.ip, ®isters); - prev_cookie = vp->resumable_prompt_cookie; + prev_cookie = t->vm.resumable_prompt_cookie; if (setjmp (registers)) { /* The prompt exited nonlocally. */ - vp->resumable_prompt_cookie = prev_cookie; + t->vm.resumable_prompt_cookie = prev_cookie; scm_gc_after_nonlocal_exit (); proc = handler; - args = scm_i_prompt_pop_abort_args_x (vp, saved_stack_depth); + args = scm_i_prompt_pop_abort_args_x (&t->vm, saved_stack_depth); goto apply_proc; } res = scm_call_0 (eval (CADR (mx), env)); - scm_dynstack_pop (&SCM_I_CURRENT_THREAD->dynstack); + scm_dynstack_pop (&t->dynstack); return res; } |