diff options
author | Andy Wingo <wingo@igalia.com> | 2013-10-14 16:05:45 +0200 |
---|---|---|
committer | Andy Wingo <wingo@igalia.com> | 2013-10-14 16:05:45 +0200 |
commit | c6cd692f08eee7d02249d6891324511bf81aee20 (patch) | |
tree | b1a451d967b3d6d21b5052a6fda9985954e3a793 /libguile/control.c | |
parent | b7f10defe61fd9febbf6c3e68a034d797b2c62c0 (diff) | |
download | guile-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.c | 3 |
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); |