diff options
author | Andy Wingo <wingo@pobox.com> | 2018-06-26 10:57:23 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2018-06-26 11:09:36 +0200 |
commit | 5e8e816c61f99ef1d96ad186d949659bf3aa8853 (patch) | |
tree | da62e39049d3bee7a311757e309428cb20e80b46 /libguile/vm-engine.c | |
parent | 3b6bf20ef5d7d0de34de4fb7ba9777af29ba55ae (diff) | |
download | guile-5e8e816c61f99ef1d96ad186d949659bf3aa8853.tar.gz |
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.
Diffstat (limited to 'libguile/vm-engine.c')
-rw-r--r-- | libguile/vm-engine.c | 9 |
1 files changed, 2 insertions, 7 deletions
diff --git a/libguile/vm-engine.c b/libguile/vm-engine.c index 8e863827d..dcbd96eb0 100644 --- a/libguile/vm-engine.c +++ b/libguile/vm-engine.c @@ -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 (); |