summaryrefslogtreecommitdiff
path: root/libguile/vm-i-system.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2010-02-25 00:18:07 +0100
committerAndy Wingo <wingo@pobox.com>2010-02-25 00:43:51 +0100
commitb3950ad6d88c5675dadb74c8ce5668daaa1b8692 (patch)
treeff5539ed1061a0fcbbcfc26c6876559d3c06359f /libguile/vm-i-system.c
parent35ac785286a527449b9866b4b9adb78a41e545a7 (diff)
downloadguile-b3950ad6d88c5675dadb74c8ce5668daaa1b8692.tar.gz
error if given an unrewindable partial continuation
* libguile/vm-engine.c (vm_error_continuation_not_rewindable): * libguile/vm-i-system.c (partial-cont-call): * libguile/vm.h (SCM_VM_CONT_PARTIAL_P): (SCM_VM_CONT_REWINDABLE_P): Fix a bug in which we weren't checking if a partial continuation was actually rewindable.
Diffstat (limited to 'libguile/vm-i-system.c')
-rw-r--r--libguile/vm-i-system.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/libguile/vm-i-system.c b/libguile/vm-i-system.c
index 04ef9516b..56df7274e 100644
--- a/libguile/vm-i-system.c
+++ b/libguile/vm-i-system.c
@@ -999,6 +999,10 @@ VM_DEFINE_INSTRUCTION (94, partial_cont_call, "partial-cont-call", 0, -1, 0)
POP (intwinds);
POP (vmcont);
SYNC_REGISTER ();
+ if (SCM_UNLIKELY (!SCM_VM_CONT_REWINDABLE_P (vmcont)))
+ { finish_args = vmcont;
+ goto vm_error_continuation_not_rewindable;
+ }
vm_reinstate_partial_continuation (vm, vmcont, intwinds, sp + 1 - fp, fp);
CACHE_REGISTER ();
program = SCM_FRAME_PROGRAM (fp);