diff options
author | Andy Wingo <wingo@pobox.com> | 2010-02-24 16:56:45 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-02-24 16:57:33 +0100 |
commit | 078014374c066f03975bd0ef008877c5236c75ec (patch) | |
tree | a4279483a20a2c3975d37fb116b30cbd60375d12 /libguile/vm-i-system.c | |
parent | 6d804376e94d17cf013a415c4bd98d632f7a91b9 (diff) | |
download | guile-078014374c066f03975bd0ef008877c5236c75ec.tar.gz |
partial-cont-call works
* libguile/vm-i-system.c (partial-cont-call): Sync registers before
splatting a partial continuation, and cache them back afterwards.
* libguile/vm.c (vm_reinstate_partial_continuation): Actually implement,
except dynamic-wind.
Diffstat (limited to 'libguile/vm-i-system.c')
-rw-r--r-- | libguile/vm-i-system.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c index 09293bef8..2f74a59dc 100644 --- a/libguile/vm-i-system.c +++ b/libguile/vm-i-system.c @@ -999,8 +999,12 @@ VM_DEFINE_INSTRUCTION (94, partial_cont_call, "partial-cont-call", 0, -1, 0) POP (extwinds); POP (intwinds); POP (vmcont); - - vm_reinstate_partial_continuation (vm, vmcont, intwinds, extwinds); + SYNC_REGISTER (); + vm_reinstate_partial_continuation (vm, vmcont, intwinds, extwinds, + sp + 1 - fp, fp); + CACHE_REGISTER (); + program = SCM_FRAME_PROGRAM (fp); + CACHE_PROGRAM (); NEXT; } |