mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-14 07:30:32 +02:00
Reinstating undelimited continuations uses intrinsic
* libguile/continuations.h (scm_t_contregs): Remove "struct vm*" member; unneeded. * libguile/continuations.c (scm_i_make_continuation): No need to store continuation->vp. (scm_i_contregs): New internal function, replaces scm_i_contregs_vp and scm_i_contregs_vm_cont. (scm_i_check_continuation): Remove; moved to vm.c. (scm_i_reinstate_continuation): Add an abort(), to satisfy SCM_NORETURN. * libguile/intrinsics.h: Add new "reinstate-continuation!" intrinsic. * libguile/vm-engine.c (continuation-call): Use new reinstate-continuation! intrinsic. * libguile/vm.c (vm_return_to_continuation_inner): Move later in the file. (reinstate_continuation_x): New intrinsic. (scm_bootstrap_vm): Init new intrinsic.
This commit is contained in:
parent
3b6bf20ef5
commit
5e8e816c61
5 changed files with 83 additions and 93 deletions
|
@ -650,7 +650,7 @@ VM_NAME (scm_i_thread *thread, jmp_buf *registers, int resume)
|
|||
|
||||
ALLOC_FRAME (3);
|
||||
SP_SET (1, ret);
|
||||
SP_SET (0, scm_from_int (err));
|
||||
SP_SET (0, scm_vm_intrinsics.s64_to_scm (err));
|
||||
|
||||
NEXT (1);
|
||||
}
|
||||
|
@ -674,12 +674,7 @@ VM_NAME (scm_i_thread *thread, jmp_buf *registers, int resume)
|
|||
SCM_PROGRAM_FREE_VARIABLE_REF (FP_REF (0), contregs_idx);
|
||||
|
||||
SYNC_IP ();
|
||||
scm_i_check_continuation (contregs);
|
||||
vm_return_to_continuation (scm_i_contregs_vp (contregs),
|
||||
scm_i_contregs_vm_cont (contregs),
|
||||
FRAME_LOCALS_COUNT_FROM (1),
|
||||
sp);
|
||||
scm_i_reinstate_continuation (contregs);
|
||||
scm_vm_intrinsics.reinstate_continuation_x (thread, contregs);
|
||||
|
||||
/* no NEXT */
|
||||
abort ();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue