summaryrefslogtreecommitdiff
path: root/libguile/control.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@igalia.com>2013-10-14 16:05:45 +0200
committerAndy Wingo <wingo@igalia.com>2013-10-14 16:05:45 +0200
commitc6cd692f08eee7d02249d6891324511bf81aee20 (patch)
treeb1a451d967b3d6d21b5052a6fda9985954e3a793 /libguile/control.c
parentb7f10defe61fd9febbf6c3e68a034d797b2c62c0 (diff)
downloadguile-c6cd692f08eee7d02249d6891324511bf81aee20.tar.gz
Add SCM_F_DYNSTACK_PROMPT_PUSH_NARGS prompt flag
* libguile/dynstack.h (scm_t_dynstack_prompt_flags): New flag, SCM_F_DYNSTACK_PROMPT_PUSH_NARGS, set if the continuation expects the number of args to be pushed on the top of the stack. * libguile/control.c (scm_c_abort): Only push nargs if requested. * libguile/eval.c (eval): * libguile/throw.c (pre_init_catch): * libguile/vm-i-system.c (prompt): Set SCM_F_DYNSTACK_PROMPT_PUSH_NARGS.
Diffstat (limited to 'libguile/control.c')
-rw-r--r--libguile/control.c3
1 files changed, 2 insertions, 1 deletions
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);