]> code.delx.au - gnu-emacs/blobdiff - src/bytecode.c
Some changes from Michael K. Johnson for Linux.
[gnu-emacs] / src / bytecode.c
index 5ab689f1925daf92f645de43948760f1ae6980b3..904fd2e16aebae385f637102c31e2056e77d090e 100644 (file)
@@ -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);
@@ -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);
@@ -1131,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));