diff options
author | Andy Wingo <wingo@pobox.com> | 2013-10-18 19:33:50 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2013-10-27 11:30:22 +0100 |
commit | d76de8716d36e1fe419224119111fdb594a5d1b9 (patch) | |
tree | c3b6cbda18023c109da3f9191832dd82bb5d507e /libguile/programs.c | |
parent | d6fbf0c00e913ab2726f98f70b3026aafb7fcdc6 (diff) | |
download | guile-d76de8716d36e1fe419224119111fdb594a5d1b9.tar.gz |
Partial continuations are RTL stubs
* libguile/control.c: Implement partial continuations as RTL programs.
* libguile/programs.c (scm_i_rtl_program_minimum_arity): Add partial
continuation case.
* libguile/vm-engine.c (compose-continuation): Fix to look for vm_cont
from the free variables.
* libguile/vm-i-system.c (abort): Poison continuations captured in the
stack VM, as the can't be rewound by the RTL stubs.
Diffstat (limited to 'libguile/programs.c')
-rw-r--r-- | libguile/programs.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libguile/programs.c b/libguile/programs.c index a0decdd91..5452112e8 100644 --- a/libguile/programs.c +++ b/libguile/programs.c @@ -527,7 +527,8 @@ scm_i_rtl_program_minimum_arity (SCM program, int *req, int *opt, int *rest) if (SCM_PROGRAM_IS_FOREIGN (program)) return scm_i_foreign_arity (program, req, opt, rest); - if (SCM_PROGRAM_IS_CONTINUATION (program)) + if (SCM_PROGRAM_IS_CONTINUATION (program) + || SCM_PROGRAM_IS_PARTIAL_CONTINUATION (program)) { *req = *opt = 0; *rest = 1; |