diff options
author | Andy Wingo <wingo@pobox.com> | 2010-02-25 00:18:07 +0100 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-02-25 00:43:51 +0100 |
commit | b3950ad6d88c5675dadb74c8ce5668daaa1b8692 (patch) | |
tree | ff5539ed1061a0fcbbcfc26c6876559d3c06359f /libguile/vm-i-system.c | |
parent | 35ac785286a527449b9866b4b9adb78a41e545a7 (diff) | |
download | guile-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.c | 4 |
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); |