summaryrefslogtreecommitdiff
path: root/libguile/vm-i-system.c
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2009-12-11 11:17:03 +0100
committerAndy Wingo <wingo@pobox.com>2009-12-11 11:17:03 +0100
commit5b09b37f81e014433061cec869d8310547dfaadd (patch)
tree26a4413e3b649b109e021dbaccabe2fc015133b2 /libguile/vm-i-system.c
parente8c377721438ea072ef211a940cd067db52bcb94 (diff)
downloadguile-5b09b37f81e014433061cec869d8310547dfaadd.tar.gz
vm: handle interrupts on backwards jumps
* libguile/vm-i-system.c (BR, br): Handle interrupts on backwards jumps, so we can Ctrl-C an endless loop.
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 8eaf59cb6..41874fae3 100644
--- a/libguile/vm-i-system.c
+++ b/libguile/vm-i-system.c
@@ -466,6 +466,8 @@ VM_DEFINE_INSTRUCTION (34, long_toplevel_set, "long-toplevel-set", 2, 1, 0)
FETCH_OFFSET (offset); \
if (p) \
ip += offset; \
+ if (offset < 0) \
+ VM_HANDLE_INTERRUPTS; \
NULLSTACK (1); \
DROP (); \
NEXT; \
@@ -476,6 +478,8 @@ VM_DEFINE_INSTRUCTION (35, br, "br", 3, 0, 0)
scm_t_int32 offset;
FETCH_OFFSET (offset);
ip += offset;
+ if (offset < 0)
+ VM_HANDLE_INTERRUPTS;
NEXT;
}