summaryrefslogtreecommitdiff
path: root/libguile/control.h
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-02-22 23:00:19 +0100
committerAndy Wingo <wingo@pobox.com>2010-02-22 23:00:19 +0100
commitcee1d22c3c10b1892c82a5758ef69cd6fc9aba31 (patch)
tree03628430d2426ab2148587d19ee386f82a9f09aa /libguile/control.h
parent76e3816281cf6c406ef6f01907ce29401c8ff455 (diff)
downloadguile-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.h3
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;