summaryrefslogtreecommitdiff
path: root/libguile/vm-i-system.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-02-24 17:43:02 +0100
committerAndy Wingo <wingo@pobox.com>2010-02-24 17:43:02 +0100
commit9a1c6f1f0c6b07725a240160b79acc54303d7891 (patch)
treeaa210143b30c8b190ea88de831684359837d7c56 /libguile/vm-i-system.c
parent078014374c066f03975bd0ef008877c5236c75ec (diff)
downloadguile-9a1c6f1f0c6b07725a240160b79acc54303d7891.tar.gz
rewind the dynamic state when entering a partial continuation
* libguile/control.c (cont_objcode): * libguile/vm-i-system.c (partial-cont-call): * libguile/vm.c (vm_reinstate_partial_continuation): Don't keep the "external winds" in a partial continuation, as they aren't logically part of the continuation. Reinstate the "internal winds" when entering a partial continuation. Things seem to work!
Diffstat (limited to 'libguile/vm-i-system.c')
-rw-r--r--libguile/vm-i-system.c6
1 files changed, 2 insertions, 4 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c
index 2f74a59dc..04ef9516b 100644
--- a/libguile/vm-i-system.c
+++ b/libguile/vm-i-system.c
@@ -995,13 +995,11 @@ VM_DEFINE_INSTRUCTION (89, continuation_call, "continuation-call", 0, -1, 0)
VM_DEFINE_INSTRUCTION (94, partial_cont_call, "partial-cont-call", 0, -1, 0)
{
- SCM vmcont, intwinds, extwinds;
- POP (extwinds);
+ SCM vmcont, intwinds;
POP (intwinds);
POP (vmcont);
SYNC_REGISTER ();
- vm_reinstate_partial_continuation (vm, vmcont, intwinds, extwinds,
- sp + 1 - fp, fp);
+ vm_reinstate_partial_continuation (vm, vmcont, intwinds, sp + 1 - fp, fp);
CACHE_REGISTER ();
program = SCM_FRAME_PROGRAM (fp);
CACHE_PROGRAM ();