changeset 37029:d7378777b985

(BYTE_CODE_QUIT): New macro. (Fbyte_code): Use BYTE_CODE_QUIT instead of QUIT.
author Gerd Moellmann <gerd@gnu.org>
date Wed, 28 Mar 2001 10:01:51 +0000
parents f023c8a482ec
children 5add0d4b1744
files src/bytecode.c
diffstat 1 files changed, 25 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/src/bytecode.c	Wed Mar 28 09:28:15 2001 +0000
+++ b/src/bytecode.c	Wed Mar 28 10:01:51 2001 +0000
@@ -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 @@
 
 #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 @@
 	  op = FETCH2;
 	  if (NILP (POP))
 	    {
-	      QUIT;
+	      BYTE_CODE_QUIT;
 	      CHECK_RANGE (op);
 	      stack.pc = stack.byte_string_start + op;
 	    }
@@ -735,7 +749,7 @@
 
 	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 @@
 	  op = FETCH2;
 	  if (!NILP (POP))
 	    {
-	      QUIT;
+	      BYTE_CODE_QUIT;
 	      CHECK_RANGE (op);
 	      stack.pc = stack.byte_string_start + op;
 	    }
@@ -757,7 +771,7 @@
 	  op = FETCH2;
 	  if (NILP (TOP))
 	    {
-	      QUIT;
+	      BYTE_CODE_QUIT;
 	      CHECK_RANGE (op);
 	      stack.pc = stack.byte_string_start + op;
 	    }
@@ -769,7 +783,7 @@
 	  op = FETCH2;
 	  if (!NILP (TOP))
 	    {
-	      QUIT;
+	      BYTE_CODE_QUIT;
 	      CHECK_RANGE (op);
 	      stack.pc = stack.byte_string_start + op;
 	    }
@@ -778,7 +792,7 @@
 
 	case BRgoto:
 	  MAYBE_GC ();
-	  QUIT;
+	  BYTE_CODE_QUIT;
 	  stack.pc += (int) *stack.pc - 127;
 	  break;
 
@@ -786,7 +800,7 @@
 	  MAYBE_GC ();
 	  if (NILP (POP))
 	    {
-	      QUIT;
+	      BYTE_CODE_QUIT;
 	      stack.pc += (int) *stack.pc - 128;
 	    }
 	  stack.pc++;
@@ -796,7 +810,7 @@
 	  MAYBE_GC ();
 	  if (!NILP (POP))
 	    {
-	      QUIT;
+	      BYTE_CODE_QUIT;
 	      stack.pc += (int) *stack.pc - 128;
 	    }
 	  stack.pc++;
@@ -807,7 +821,7 @@
 	  op = *stack.pc++;
 	  if (NILP (TOP))
 	    {
-	      QUIT;
+	      BYTE_CODE_QUIT;
 	      stack.pc += op - 128;
 	    }
 	  else DISCARD (1);
@@ -818,7 +832,7 @@
 	  op = *stack.pc++;
 	  if (!NILP (TOP))
 	    {
-	      QUIT;
+	      BYTE_CODE_QUIT;
 	      stack.pc += op - 128;
 	    }
 	  else DISCARD (1);