]> code.delx.au - gnu-emacs/blobdiff - src/bytecode.c
(start_of_text): Don't define #ifdef HAVE_TEXT_START.
[gnu-emacs] / src / bytecode.c
index eb5b117f683f2d00f2a42dc8496c2ae2f0165e94..0b8d0cee0499d3fb185f2daab6e805add972754e 100644 (file)
@@ -1,11 +1,11 @@
 /* Execution of byte code produced by bytecomp.el.
-   Copyright (C) 1985, 1986, 1987, 1988 Free Software Foundation, Inc.
+   Copyright (C) 1985, 1986, 1987, 1988, 1993 Free Software Foundation, Inc.
 
 This file is part of GNU Emacs.
 
 GNU Emacs is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 1, or (at your option)
+the Free Software Foundation; either version 2, or (at your option)
 any later version.
 
 GNU Emacs is distributed in the hope that it will be useful,
@@ -32,7 +32,7 @@ by Hallvard:
   o  all conditionals now only do QUIT if they jump.
  */
 
-#include "config.h"
+#include <config.h>
 #include "lisp.h"
 #include "buffer.h"
 #include "syntax.h"
@@ -65,7 +65,7 @@ int byte_metering_on;
       if (METER_1 (this_code) != ((1<<VALBITS)-1))             \
         METER_1 (this_code)++;                                 \
       if (last_code                                            \
-          && METER_2 (last_code, this_code) != ((1<<VALBITS)-1))       \
+         && METER_2 (last_code, this_code) != ((1<<VALBITS)-1))\
         METER_2 (last_code, this_code)++;                      \
     }                                                          \
 }
@@ -106,9 +106,9 @@ Lisp_Object Qbytecode;
 #define Baref 0110
 #define Baset 0111
 #define Bsymbol_value 0112
-#define Bsymbol_function 0113 /* no longer generated as of v19 */
+#define Bsymbol_function 0113
 #define Bset 0114
-#define Bfset 0115 /* no longer generated as of v19 */
+#define Bfset 0115
 #define Bget 0116
 #define Bsubstring 0117
 #define Bconcat2 0120
@@ -308,7 +308,7 @@ If the third argument is incorrect, Emacs may crash.")
               pc - XSTRING (string_saved)->data);
 #endif
 
-      if (string_saved != bytestr)
+      if (! EQ (string_saved, bytestr))
        {
          pc = pc - XSTRING (string_saved)->data + XSTRING (bytestr)->data;
          string_saved = bytestr;
@@ -411,7 +411,8 @@ If the third argument is incorrect, Emacs may crash.")
            {
              v1 = TOP;
              v2 = Fget (v1, Qbyte_code_meter);
-             if (XTYPE (v2) == Lisp_Int)
+             if (XTYPE (v2) == Lisp_Int
+                 && XINT (v2) != ((1<<VALBITS)-1))
                {
                  XSETINT (v2, XINT (v2) + 1);
                  Fput (v1, Qbyte_code_meter, v2);
@@ -450,7 +451,7 @@ If the third argument is incorrect, Emacs may crash.")
 
        case Bgotoifnil:
          op = FETCH2;
-         if (NULL (POP))
+         if (NILP (POP))
            {
              QUIT;
              pc = XSTRING (string_saved)->data + op;
@@ -459,7 +460,7 @@ If the third argument is incorrect, Emacs may crash.")
 
        case Bgotoifnonnil:
          op = FETCH2;
-         if (!NULL (POP))
+         if (!NILP (POP))
            {
              QUIT;
              pc = XSTRING (string_saved)->data + op;
@@ -468,7 +469,7 @@ If the third argument is incorrect, Emacs may crash.")
 
        case Bgotoifnilelsepop:
          op = FETCH2;
-         if (NULL (TOP))
+         if (NILP (TOP))
            {
              QUIT;
              pc = XSTRING (string_saved)->data + op;
@@ -478,7 +479,7 @@ If the third argument is incorrect, Emacs may crash.")
 
        case Bgotoifnonnilelsepop:
          op = FETCH2;
-         if (!NULL (TOP))
+         if (!NILP (TOP))
            {
              QUIT;
              pc = XSTRING (string_saved)->data + op;
@@ -492,7 +493,7 @@ If the third argument is incorrect, Emacs may crash.")
          break;
 
        case BRgotoifnil:
-         if (NULL (POP))
+         if (NILP (POP))
            {
              QUIT;
              pc += *pc - 128;
@@ -501,7 +502,7 @@ If the third argument is incorrect, Emacs may crash.")
          break;
 
        case BRgotoifnonnil:
-         if (!NULL (POP))
+         if (!NILP (POP))
            {
              QUIT;
              pc += *pc - 128;
@@ -511,7 +512,7 @@ If the third argument is incorrect, Emacs may crash.")
 
        case BRgotoifnilelsepop:
          op = *pc++;
-         if (NULL (TOP))
+         if (NILP (TOP))
            {
              QUIT;
              pc += op - 128;
@@ -521,7 +522,7 @@ If the third argument is incorrect, Emacs may crash.")
 
        case BRgotoifnonnilelsepop:
          op = *pc++;
-         if (!NULL (TOP))
+         if (!NILP (TOP))
            {
              QUIT;
              pc += op - 128;
@@ -581,7 +582,7 @@ If the third argument is incorrect, Emacs may crash.")
 
        case Btemp_output_buffer_show:
          v1 = POP;
-         temp_output_buffer_show (TOP, Qnil);
+         temp_output_buffer_show (TOP);
          TOP = v1;
          /* pop binding of standard-output */
          unbind_to (specpdl_ptr - specpdl - 1, Qnil);
@@ -598,7 +599,7 @@ If the third argument is incorrect, Emacs may crash.")
            {
              if (CONSP (v1))
                v1 = XCONS (v1)->cdr;
-             else if (!NULL (v1))
+             else if (!NILP (v1))
                {
                  immediate_quit = 0;
                  v1 = wrong_type_argument (Qlistp, v1);
@@ -622,7 +623,7 @@ If the third argument is incorrect, Emacs may crash.")
          break;
 
        case Blistp:
-         TOP = CONSP (TOP) || NULL (TOP) ? Qt : Qnil;
+         TOP = CONSP (TOP) || NILP (TOP) ? Qt : Qnil;
          break;
 
        case Beq:
@@ -636,21 +637,21 @@ If the third argument is incorrect, Emacs may crash.")
          break;
 
        case Bnot:
-         TOP = NULL (TOP) ? Qt : Qnil;
+         TOP = NILP (TOP) ? Qt : Qnil;
          break;
 
        case Bcar:
          v1 = TOP;
        docar:
          if (CONSP (v1)) TOP = XCONS (v1)->car;
-         else if (NULL (v1)) TOP = Qnil;
+         else if (NILP (v1)) TOP = Qnil;
          else Fcar (wrong_type_argument (Qlistp, v1));
          break;
 
        case Bcdr:
          v1 = TOP;
          if (CONSP (v1)) TOP = XCONS (v1)->cdr;
-         else if (NULL (v1)) TOP = Qnil;
+         else if (NILP (v1)) TOP = Qnil;
          else Fcdr (wrong_type_argument (Qlistp, v1));
          break;
 
@@ -1077,8 +1078,7 @@ If the third argument is incorrect, Emacs may crash.")
          break;
 
        case Bnumberp:
-         TOP = (XTYPE (TOP) == Lisp_Int || XTYPE (TOP) == Lisp_Float
-                ? Qt : Qnil);
+         TOP = (NUMBERP (TOP) ? Qt : Qnil);
          break;
 
        case Bintegerp:
@@ -1132,8 +1132,17 @@ syms_of_bytecode ()
 #ifdef BYTE_CODE_METER
 
   DEFVAR_LISP ("byte-code-meter", &Vbyte_code_meter,
-   "A vector of vectors which holds a histogram of byte-code usage.");
-  DEFVAR_BOOL ("byte-metering-on", &byte_metering_on, "");
+   "A vector of vectors which holds a histogram of byte-code usage.\n\
+(aref (aref byte-code-meter 0) CODE) indicates how many times the byte\n\
+opcode CODE has been executed.\n\
+(aref (aref byte-code-meter CODE1) CODE2), where CODE1 is not 0,\n\
+indicates how many times the byte opcodes CODE1 and CODE2 have been\n\
+executed in succession.");
+  DEFVAR_BOOL ("byte-metering-on", &byte_metering_on,
+   "If non-nil, keep profiling information on byte code usage.\n\
+The variable byte-code-meter indicates how often each byte opcode is used.\n\
+If a symbol has a property named `byte-code-meter' whose value is an\n\
+integer, it is incremented each time that symbol's function is called.");
 
   byte_metering_on = 0;
   Vbyte_code_meter = Fmake_vector (make_number (256), make_number (0));