diff --git a/libguile/control.c b/libguile/control.c index 3f2651c6b..162ff14fc 100644 --- a/libguile/control.c +++ b/libguile/control.c @@ -214,7 +214,8 @@ scm_c_abort (SCM vm, SCM tag, size_t n, SCM *argv, *(++(SCM_VM_DATA (vm)->sp)) = cont; for (i = 0; i < n; i++) *(++(SCM_VM_DATA (vm)->sp)) = argv[i]; - *(++(SCM_VM_DATA (vm)->sp)) = scm_from_size_t (n+1); /* +1 for continuation */ + if (flags & SCM_F_DYNSTACK_PROMPT_PUSH_NARGS) + *(++(SCM_VM_DATA (vm)->sp)) = scm_from_size_t (n+1); /* +1 for continuation */ /* Jump! */ SCM_I_LONGJMP (*registers, 1); diff --git a/libguile/dynstack.h b/libguile/dynstack.h index c27c675dd..08e36a2b9 100644 --- a/libguile/dynstack.h +++ b/libguile/dynstack.h @@ -130,7 +130,8 @@ typedef enum { } scm_t_dynstack_winder_flags; typedef enum { - SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY = (1 << SCM_DYNSTACK_TAG_FLAGS_SHIFT) + SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY = (1 << SCM_DYNSTACK_TAG_FLAGS_SHIFT), + SCM_F_DYNSTACK_PROMPT_PUSH_NARGS = (2 << SCM_DYNSTACK_TAG_FLAGS_SHIFT) } scm_t_dynstack_prompt_flags; typedef void (*scm_t_guard) (void *); diff --git a/libguile/eval.c b/libguile/eval.c index f5e1524c7..205de2d1a 100644 --- a/libguile/eval.c +++ b/libguile/eval.c @@ -413,7 +413,8 @@ eval (SCM x, SCM env) /* 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_ESCAPE_ONLY + | SCM_F_DYNSTACK_PROMPT_PUSH_NARGS, k, SCM_VM_DATA (vm)->fp, SCM_VM_DATA (vm)->sp, diff --git a/libguile/throw.c b/libguile/throw.c index de157faa2..bd7a98440 100644 --- a/libguile/throw.c +++ b/libguile/throw.c @@ -474,7 +474,8 @@ pre_init_catch (SCM tag, SCM thunk, SCM handler, SCM pre_unwind_handler) /* Push the prompt onto the dynamic stack. */ scm_dynstack_push_prompt (dynstack, - SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY, + 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)->sp, diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c index 0973792bd..83e07f1ff 100644 --- a/libguile/vm-i-system.c +++ b/libguile/vm-i-system.c @@ -1453,6 +1453,7 @@ VM_DEFINE_INSTRUCTION (87, prompt, "prompt", 4, 2, 0) SYNC_REGISTER (); /* Push the prompt onto the dynamic stack. */ flags = escape_only_p ? SCM_F_DYNSTACK_PROMPT_ESCAPE_ONLY : 0; + flags |= SCM_F_DYNSTACK_PROMPT_PUSH_NARGS; scm_dynstack_push_prompt (¤t_thread->dynstack, flags, k, fp, sp, ip + offset, ®isters); NEXT;