diff options
author | Andy Wingo <wingo@pobox.com> | 2013-11-21 18:09:29 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-11-21 18:09:29 +0100 |
commit | 4fcbc1b0d8207df2dafce5fa80b942366d0ed7ed (patch) | |
tree | 77e824c778766e940def7446afaf2f3b44780d93 | |
parent | 9b4c3ab5fa293310a7853d99768426b7dba4005b (diff) | |
download | guile-4fcbc1b0d8207df2dafce5fa80b942366d0ed7ed.tar.gz |
scm_i_prompt_pop_abort_args_x takes struct scm_vm* as arg
* libguile/control.h:
* libguile/control.c (scm_i_prompt_pop_abort_args_x): Change to take VP
as an arg, not VM.
* libguile/eval.c (eval):
* libguile/throw.c (pre_init_catch): Adapt.
-rw-r--r-- | libguile/control.c | 8 | ||||
-rw-r--r-- | libguile/control.h | 2 | ||||
-rw-r--r-- | libguile/eval.c | 24 | ||||
-rw-r--r-- | libguile/throw.c | 16 |
4 files changed, 28 insertions, 22 deletions
diff --git a/libguile/control.c b/libguile/control.c index 4f7cc78d2..f4abce11b 100644 --- a/libguile/control.c +++ b/libguile/control.c @@ -39,18 +39,18 @@ /* Only to be called if the SCM_I_SETJMP returns 1 */ SCM -scm_i_prompt_pop_abort_args_x (SCM vm) +scm_i_prompt_pop_abort_args_x (struct scm_vm *vp) { size_t i, n; SCM vals = SCM_EOL; - n = scm_to_size_t (SCM_VM_DATA (vm)->sp[0]); + n = scm_to_size_t (vp->sp[0]); for (i = 0; i < n; i++) - vals = scm_cons (SCM_VM_DATA (vm)->sp[-(i + 1)], vals); + vals = scm_cons (vp->sp[-(i + 1)], vals); /* The abort did reset the VM's registers, but then these values were pushed on; so we need to pop them ourselves. */ - SCM_VM_DATA (vm)->sp -= n + 1; + vp->sp -= n + 1; /* FIXME NULLSTACK */ return vals; diff --git a/libguile/control.h b/libguile/control.h index b9a7e2336..4b76591aa 100644 --- a/libguile/control.h +++ b/libguile/control.h @@ -22,7 +22,7 @@ #include "libguile/vm.h" -SCM_INTERNAL SCM scm_i_prompt_pop_abort_args_x (SCM vm); +SCM_INTERNAL SCM scm_i_prompt_pop_abort_args_x (struct scm_vm *vp); SCM_INTERNAL void scm_c_abort (struct scm_vm *vp, SCM tag, size_t n, SCM *argv, scm_i_jmp_buf *registers) SCM_NORETURN; diff --git a/libguile/eval.c b/libguile/eval.c index 7b09d84f7..d4d1085af 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -438,7 +438,8 @@ eval (SCM x, SCM env) case SCM_M_CALL_WITH_PROMPT: { - SCM vm, k, res; + struct scm_vm *vp; + SCM k, res; scm_i_jmp_buf registers; /* We need the handler after nonlocal return to the setjmp, so make sure it is volatile. */ @@ -446,23 +447,24 @@ eval (SCM x, SCM env) k = EVAL1 (CAR (mx), env); handler = EVAL1 (CDDR (mx), env); - vm = scm_the_vm (); + vp = SCM_VM_DATA (scm_the_vm ()); /* Push the prompt onto the dynamic stack. */ - scm_dynstack_push_prompt - (&SCM_I_CURRENT_THREAD->dynstack, - SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY | SCM_F_DYNSTACK_PROMPT_PUSH_NARGS, - k, - SCM_VM_DATA (vm)->fp - SCM_VM_DATA (vm)->stack_base, - SCM_VM_DATA (vm)->sp - SCM_VM_DATA (vm)->stack_base, - SCM_VM_DATA (vm)->ip, - ®isters); + scm_dynstack_push_prompt (&SCM_I_CURRENT_THREAD->dynstack, + SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY + | SCM_F_DYNSTACK_PROMPT_PUSH_NARGS, + k, + vp->fp - vp->stack_base, + vp->sp - vp->stack_base, + vp->ip, + ®isters); if (SCM_I_SETJMP (registers)) { /* The prompt exited nonlocally. */ proc = handler; - args = scm_i_prompt_pop_abort_args_x (scm_the_vm ()); + vp = SCM_VM_DATA (scm_the_vm ()); + args = scm_i_prompt_pop_abort_args_x (vp); goto apply_proc; } diff --git a/libguile/throw.c b/libguile/throw.c index e68f428a8..252632c32 100644 --- a/libguile/throw.c +++ b/libguile/throw.c @@ -456,7 +456,8 @@ SCM_SYMBOL (sym_pre_init_catch_tag, "%pre-init-catch-tag"); static SCM pre_init_catch (SCM tag, SCM thunk, SCM handler, SCM pre_unwind_handler) { - volatile SCM vm, v_handler; + struct scm_vm *vp; + volatile SCM v_handler; SCM res; scm_t_dynstack *dynstack = &SCM_I_CURRENT_THREAD->dynstack; scm_i_jmp_buf registers; @@ -469,7 +470,7 @@ pre_init_catch (SCM tag, SCM thunk, SCM handler, SCM pre_unwind_handler) /* These two are volatile, so we know we can access them after a nonlocal return to the setjmp. */ - vm = scm_the_vm (); + vp = SCM_VM_DATA (scm_the_vm ()); v_handler = handler; /* Push the prompt onto the dynamic stack. */ @@ -477,15 +478,18 @@ pre_init_catch (SCM tag, SCM thunk, SCM handler, SCM pre_unwind_handler) SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY | SCM_F_DYNSTACK_PROMPT_PUSH_NARGS, sym_pre_init_catch_tag, - SCM_VM_DATA (vm)->fp - SCM_VM_DATA (vm)->stack_base, - SCM_VM_DATA (vm)->sp - SCM_VM_DATA (vm)->stack_base, - SCM_VM_DATA (vm)->ip, + vp->fp - vp->stack_base, + vp->sp - vp->stack_base, + vp->ip, ®isters); if (SCM_I_SETJMP (registers)) { /* nonlocal exit */ - SCM args = scm_i_prompt_pop_abort_args_x (vm); + SCM args; + /* vp is not volatile */ + vp = SCM_VM_DATA (scm_the_vm ()); + args = scm_i_prompt_pop_abort_args_x (vp); /* cdr past the continuation */ return scm_apply_0 (v_handler, scm_cdr (args)); } |