(funcall_lambda): Don't bind Qmocklisp_arguments unless
[bpt/emacs.git] / src / bytecode.c
index d103d2f..14a93f1 100644 (file)
@@ -433,12 +433,10 @@ If the third argument is incorrect, Emacs may crash.")
   while (1)
     {
 #ifdef BYTE_CODE_SAFE
-      if (top > stacks)
-       error ("Byte code stack overflow (byte compiler bug), pc %d, depth %d",
-              stack.pc - stack.byte_string_start, stacke - top);
+      if (top > stacke)
+       abort ();
       else if (top < stack.bottom - 1)
-       error ("Byte code stack underflow (byte compiler bug), pc %d",
-              stack.pc - stack.byte_string_start);
+       abort ();
 #endif
 
 #ifdef BYTE_CODE_METER
@@ -505,7 +503,11 @@ If the third argument is incorrect, Emacs may crash.")
            else if (NILP (v1))
              TOP = Qnil;
            else
-             Fcar (wrong_type_argument (Qlistp, v1));
+             {
+               BEFORE_POTENTIAL_GC ();
+               Fcar (wrong_type_argument (Qlistp, v1));
+               AFTER_POTENTIAL_GC ();
+             }
            break;
          }
 
@@ -534,7 +536,11 @@ If the third argument is incorrect, Emacs may crash.")
            else if (NILP (v1))
              TOP = Qnil;
            else
-             Fcdr (wrong_type_argument (Qlistp, v1));
+             {
+               BEFORE_POTENTIAL_GC ();
+               Fcdr (wrong_type_argument (Qlistp, v1));
+               AFTER_POTENTIAL_GC ();
+             }
            break;
          }
 
@@ -826,7 +832,9 @@ If the third argument is incorrect, Emacs may crash.")
            Lisp_Object v1, v2;
            v1 = POP;
            v2 = TOP;
+           BEFORE_POTENTIAL_GC ();
            CHECK_NUMBER (v2, 0);
+           AFTER_POTENTIAL_GC ();
            op = XINT (v2);
            immediate_quit = 1;
            while (--op >= 0)
@@ -836,7 +844,9 @@ If the third argument is incorrect, Emacs may crash.")
                else if (!NILP (v1))
                  {
                    immediate_quit = 0;
+                   BEFORE_POTENTIAL_GC ();
                    v1 = wrong_type_argument (Qlistp, v1);
+                   AFTER_POTENTIAL_GC ();
                    immediate_quit = 1;
                    op++;
                  }
@@ -847,7 +857,11 @@ If the third argument is incorrect, Emacs may crash.")
            else if (NILP (v1))
              TOP = Qnil;
            else
-             Fcar (wrong_type_argument (Qlistp, v1));
+             {
+               BEFORE_POTENTIAL_GC ();
+               Fcar (wrong_type_argument (Qlistp, v1));
+               AFTER_POTENTIAL_GC ();
+             }
            break;
          }
 
@@ -1022,9 +1036,10 @@ If the third argument is incorrect, Emacs may crash.")
          {
            Lisp_Object v1, v2;
            v2 = POP; v1 = TOP;
+           BEFORE_POTENTIAL_GC ();
            CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1, 0);
            CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2, 0);
-#ifdef LISP_FLOAT_TYPE
+           AFTER_POTENTIAL_GC ();
            if (FLOATP (v1) || FLOATP (v2))
              {
                double f1, f2;
@@ -1034,7 +1049,6 @@ If the third argument is incorrect, Emacs may crash.")
                TOP = (f1 == f2 ? Qt : Qnil);
              }
            else
-#endif
              TOP = (XINT (v1) == XINT (v2) ? Qt : Qnil);
            break;
          }
@@ -1270,7 +1284,9 @@ If the third argument is incorrect, Emacs may crash.")
          break;
 
        case Bchar_syntax:
+         BEFORE_POTENTIAL_GC ();
          CHECK_NUMBER (TOP, 0);
+         AFTER_POTENTIAL_GC ();
          XSETFASTINT (TOP, syntax_code_spec[(int) SYNTAX (XINT (TOP))]);
          break;
 
@@ -1381,7 +1397,9 @@ If the third argument is incorrect, Emacs may crash.")
                /* Exchange args and then do nth.  */
                v2 = POP;
                v1 = TOP;
+               BEFORE_POTENTIAL_GC ();
                CHECK_NUMBER (v2, 0);
+               AFTER_POTENTIAL_GC ();
                op = XINT (v2);
                immediate_quit = 1;
                while (--op >= 0)
@@ -1391,7 +1409,9 @@ If the third argument is incorrect, Emacs may crash.")
                    else if (!NILP (v1))
                      {
                        immediate_quit = 0;
+                       BEFORE_POTENTIAL_GC ();
                        v1 = wrong_type_argument (Qlistp, v1);
+                       AFTER_POTENTIAL_GC ();
                        immediate_quit = 1;
                        op++;
                      }
@@ -1402,7 +1422,11 @@ If the third argument is incorrect, Emacs may crash.")
                else if (NILP (v1))
                  TOP = Qnil;
                else
-                 Fcar (wrong_type_argument (Qlistp, v1));
+                 {
+                   BEFORE_POTENTIAL_GC ();
+                   Fcar (wrong_type_argument (Qlistp, v1));
+                   AFTER_POTENTIAL_GC ();
+                 }
              }
            else
              {
@@ -1485,10 +1509,14 @@ If the third argument is incorrect, Emacs may crash.")
 
 #ifdef BYTE_CODE_SAFE
        case Bset_mark:
+         BEFORE_POTENTIAL_GC ();
          error ("set-mark is an obsolete bytecode");
+         AFTER_POTENTIAL_GC ();
          break;
        case Bscan_buffer:
+         BEFORE_POTENTIAL_GC ();
          error ("scan-buffer is an obsolete bytecode");
+         AFTER_POTENTIAL_GC ();
          break;
 #endif
 
@@ -1499,9 +1527,13 @@ If the third argument is incorrect, Emacs may crash.")
        default:
 #ifdef BYTE_CODE_SAFE
          if (op < Bconstant)
-           error ("unknown bytecode %d (byte compiler bug)", op);
+           {
+             abort ();
+           }
          if ((op -= Bconstant) >= const_length)
-           error ("no constant number %d (byte compiler bug)", op);
+           {
+             abort ();
+           }
          PUSH (vectorp[op]);
 #else
          PUSH (vectorp[op - Bconstant]);