summaryrefslogtreecommitdiff
path: root/libguile/vm-i-system.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-02-24 16:56:45 +0100
committerAndy Wingo <wingo@pobox.com>2010-02-24 16:57:33 +0100
commit078014374c066f03975bd0ef008877c5236c75ec (patch)
treea4279483a20a2c3975d37fb116b30cbd60375d12 /libguile/vm-i-system.c
parent6d804376e94d17cf013a415c4bd98d632f7a91b9 (diff)
downloadguile-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.c8
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;
}