summaryrefslogtreecommitdiff
path: root/src/bytecode.c
diff options
context:
space:
mode:
authorGerd Moellmann <gerd@gnu.org>2001-03-28 10:01:51 +0000
committerGerd Moellmann <gerd@gnu.org>2001-03-28 10:01:51 +0000
commite12ea64e79d561b6c8238c76c988767a0f573a7a (patch)
tree08c07840db9f9ce952de004fa1075c40d7fa42c2 /src/bytecode.c
parent719349f6d0e464d4f71963b87f6bfa08ac630aa7 (diff)
downloademacs-e12ea64e79d561b6c8238c76c988767a0f573a7a.tar.gz
(BYTE_CODE_QUIT): New macro.
(Fbyte_code): Use BYTE_CODE_QUIT instead of QUIT.
Diffstat (limited to 'src/bytecode.c')
-rw-r--r--src/bytecode.c36
1 files changed, 25 insertions, 11 deletions
diff --git a/src/bytecode.c b/src/bytecode.c
index 363dcdfaa82..b142e3e667e 100644
--- a/src/bytecode.c
+++ b/src/bytecode.c
@@ -1,5 +1,6 @@
/* Execution of byte code produced by bytecomp.el.
- Copyright (C) 1985, 1986, 1987, 1988, 1993, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1987, 1988, 1993, 2000, 2001
+ Free Software Foundation, Inc.
This file is part of GNU Emacs.
@@ -396,6 +397,19 @@ unmark_byte_stack ()
#endif /* not BYTE_CODE_SAFE */
+/* A version of the QUIT macro which makes sure that the stack top is
+ set before signaling `quit'. */
+
+#define BYTE_CODE_QUIT \
+ do { \
+ if (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) \
+ { \
+ Vquit_flag = Qnil; \
+ BEFORE_POTENTIAL_GC (); \
+ Fsignal (Qquit, Qnil); \
+ } \
+ } while (0)
+
DEFUN ("byte-code", Fbyte_code, Sbyte_code, 3, 3, 0,
"Function used internally in byte-compiled code.\n\
@@ -529,7 +543,7 @@ If the third argument is incorrect, Emacs may crash.")
op = FETCH2;
if (NILP (POP))
{
- QUIT;
+ BYTE_CODE_QUIT;
CHECK_RANGE (op);
stack.pc = stack.byte_string_start + op;
}
@@ -735,7 +749,7 @@ If the third argument is incorrect, Emacs may crash.")
case Bgoto:
MAYBE_GC ();
- QUIT;
+ BYTE_CODE_QUIT;
op = FETCH2; /* pc = FETCH2 loses since FETCH2 contains pc++ */
CHECK_RANGE (op);
stack.pc = stack.byte_string_start + op;
@@ -746,7 +760,7 @@ If the third argument is incorrect, Emacs may crash.")
op = FETCH2;
if (!NILP (POP))
{
- QUIT;
+ BYTE_CODE_QUIT;
CHECK_RANGE (op);
stack.pc = stack.byte_string_start + op;
}
@@ -757,7 +771,7 @@ If the third argument is incorrect, Emacs may crash.")
op = FETCH2;
if (NILP (TOP))
{
- QUIT;
+ BYTE_CODE_QUIT;
CHECK_RANGE (op);
stack.pc = stack.byte_string_start + op;
}
@@ -769,7 +783,7 @@ If the third argument is incorrect, Emacs may crash.")
op = FETCH2;
if (!NILP (TOP))
{
- QUIT;
+ BYTE_CODE_QUIT;
CHECK_RANGE (op);
stack.pc = stack.byte_string_start + op;
}
@@ -778,7 +792,7 @@ If the third argument is incorrect, Emacs may crash.")
case BRgoto:
MAYBE_GC ();
- QUIT;
+ BYTE_CODE_QUIT;
stack.pc += (int) *stack.pc - 127;
break;
@@ -786,7 +800,7 @@ If the third argument is incorrect, Emacs may crash.")
MAYBE_GC ();
if (NILP (POP))
{
- QUIT;
+ BYTE_CODE_QUIT;
stack.pc += (int) *stack.pc - 128;
}
stack.pc++;
@@ -796,7 +810,7 @@ If the third argument is incorrect, Emacs may crash.")
MAYBE_GC ();
if (!NILP (POP))
{
- QUIT;
+ BYTE_CODE_QUIT;
stack.pc += (int) *stack.pc - 128;
}
stack.pc++;
@@ -807,7 +821,7 @@ If the third argument is incorrect, Emacs may crash.")
op = *stack.pc++;
if (NILP (TOP))
{
- QUIT;
+ BYTE_CODE_QUIT;
stack.pc += op - 128;
}
else DISCARD (1);
@@ -818,7 +832,7 @@ If the third argument is incorrect, Emacs may crash.")
op = *stack.pc++;
if (!NILP (TOP))
{
- QUIT;
+ BYTE_CODE_QUIT;
stack.pc += op - 128;
}
else DISCARD (1);