/* Execution of byte code produced by bytecomp.el.
- Copyright (C) 1985, 1986, 1987, 1988, 1992 Free Software Foundation, Inc.
+ Copyright (C) 1985, 1986, 1987, 1988, 1993 Free Software Foundation, Inc.
This file is part of GNU Emacs.
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"
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)++; \
} \
}
#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
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;
{
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);
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);
#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));