diff options
author | Andy Wingo <wingo@pobox.com> | 2010-02-22 23:00:19 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-02-22 23:00:19 +0100 |
commit | cee1d22c3c10b1892c82a5758ef69cd6fc9aba31 (patch) | |
tree | 03628430d2426ab2148587d19ee386f82a9f09aa /libguile/control.h | |
parent | 76e3816281cf6c406ef6f01907ce29401c8ff455 (diff) | |
download | guile-cee1d22c3c10b1892c82a5758ef69cd6fc9aba31.tar.gz |
actually capture partial continuations
* libguile/control.c (cont_objcode): Along with a bunch of boilerplate
that certainly needs to go in some central place, define this
continuation-calling trampoline.
(reify_partial_continuation): New function, returns a procedure that
when called will reinstate a partial continuation.
(scm_c_abort): Take an extra arg, the cookie. Actually reify a
continuation.
(scm_at_abort): Adapt to scm_c_abort change.
* libguile/control.h: Declare scm_c_abort change.
* libguile/vm-i-system.c (partial_cont_call): New instruction.
(call/cc, tail-call/cc): Adapt to scm_i_vm_capture_stack change.
(abort): Pass vm_cookie to abort.
* libguile/vm.h (SCM_F_VM_CONT_PARTIAL, SCM_F_VM_CONT_REWINDABLE): New
flags.
(struct scm_vm_cont): Add flags field.
(SCM_VM_CONT_PARTIAL_P, SCM_VM_CONT_REWINDABLE_P): New predicates.
* libguile/vm.c (scm_i_vm_capture_stack): Rename from
vm_capture_continuation, and make internal instead of static. Take a
flags argument.
(scm_i_vm_capture_continuation): Adapt to scm_i_vm_capture_stack
change.
(vm_abort): Plumb cookie to scm_c_abort.
(vm_reinstate_partial_continuation): New stub.
Diffstat (limited to 'libguile/control.h')
-rw-r--r-- | libguile/control.h | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/libguile/control.h b/libguile/control.h index 6144a38c9..160728d8f 100644 --- a/libguile/control.h +++ b/libguile/control.h @@ -44,7 +44,8 @@ struct scm_prompt_registers SCM_INTERNAL SCM scm_c_make_prompt (SCM vm, SCM k, scm_t_uint8 escape_only_p, scm_t_int64 cookie); -SCM_INTERNAL SCM scm_c_abort (SCM vm, SCM tag, size_t n, SCM *argv) SCM_NORETURN; +SCM_INTERNAL SCM scm_c_abort (SCM vm, SCM tag, size_t n, SCM *argv, + scm_t_int64 cookie) SCM_NORETURN; SCM_INTERNAL SCM scm_at_abort (SCM tag, SCM args) SCM_NORETURN; |