mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-04-30 11:50:28 +02:00
Add intrinsic for call/cc
* libguile/intrinsics.h: Add "capture-continuation" intrinsic. * libguile/vm-engine.c (call/cc): Rework to use capture_continuation intrinsic. * libguile/vm.c (capture_continuation): New intrinsic.
This commit is contained in:
parent
5804c977d7
commit
ba23bc12fd
3 changed files with 21 additions and 10 deletions
|
@ -756,18 +756,10 @@ VM_NAME (scm_thread *thread, jmp_buf *registers, int resume)
|
|||
*/
|
||||
VM_DEFINE_OP (15, call_cc, "call/cc", OP1 (X32))
|
||||
{
|
||||
SCM vm_cont, cont;
|
||||
scm_t_dynstack *dynstack;
|
||||
SCM cont;
|
||||
|
||||
SYNC_IP ();
|
||||
dynstack = scm_dynstack_capture_all (&thread->dynstack);
|
||||
vm_cont = scm_i_vm_capture_stack (VP->stack_top,
|
||||
SCM_FRAME_DYNAMIC_LINK (VP->fp),
|
||||
SCM_FRAME_PREVIOUS_SP (VP->fp),
|
||||
SCM_FRAME_RETURN_ADDRESS (VP->fp),
|
||||
dynstack,
|
||||
0);
|
||||
cont = scm_i_make_continuation (registers, thread, vm_cont);
|
||||
cont = scm_vm_intrinsics.capture_continuation (thread, registers);
|
||||
|
||||
RESET_FRAME (2);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue