X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/741baf7656eb6738d7b4160493c969fad2640e1b..59b7fa6569f8b865b6ef688a8531d745f1cc67d4:/src/bytecode.c diff --git a/src/bytecode.c b/src/bytecode.c index 363dcdfaa8..f24132dae2 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -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. @@ -65,16 +66,16 @@ int byte_metering_on; #define METER_1(code) METER_2 (0, (code)) -#define METER_CODE(last_code, this_code) \ -{ \ - if (byte_metering_on) \ - { \ - if (METER_1 (this_code) != ((1<value; + v2 = SYMBOL_VALUE (v1); if (MISCP (v2) || EQ (v2, Qunbound)) { BEFORE_POTENTIAL_GC (); @@ -529,7 +543,7 @@ If the third argument is incorrect, Emacs may crash.") op = FETCH2; if (NILP (POP)) { - QUIT; + BYTE_CODE_QUIT; CHECK_RANGE (op); stack.pc = stack.byte_string_start + op; } @@ -612,16 +626,9 @@ If the third argument is incorrect, Emacs may crash.") /* Inline the most common case. */ if (SYMBOLP (sym) && !EQ (val, Qunbound) - && !MISCP (XSYMBOL (sym)->value) - /* I think this should either be checked in the byte - compiler, or there should be a flag indicating that - a symbol might be constant in Lisp_Symbol, instead - of checking this here over and over again. --gerd. */ - && !EQ (sym, Qnil) - && !EQ (sym, Qt) - && !(XSYMBOL (sym)->name->data[0] == ':' - && EQ (XSYMBOL (sym)->obarray, initial_obarray) - && !EQ (val, sym))) + && !XSYMBOL (sym)->indirect_variable + && !XSYMBOL (sym)->constant + && !MISCP (XSYMBOL (sym)->value)) XSYMBOL (sym)->value = val; else { @@ -692,7 +699,7 @@ If the third argument is incorrect, Emacs may crash.") v1 = TOP; v2 = Fget (v1, Qbyte_code_meter); if (INTEGERP (v2) - && XINT (v2) != ((1<data); AFTER_POTENTIAL_GC (); TOP = Vstandard_output; @@ -913,7 +920,7 @@ If the third argument is incorrect, Emacs may crash.") BEFORE_POTENTIAL_GC (); v1 = POP; v2 = TOP; - CHECK_NUMBER (v2, 0); + CHECK_NUMBER (v2); AFTER_POTENTIAL_GC (); op = XINT (v2); immediate_quit = 1; @@ -1145,8 +1152,8 @@ If the third argument is incorrect, Emacs may crash.") Lisp_Object v1, v2; BEFORE_POTENTIAL_GC (); v2 = POP; v1 = TOP; - CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1, 0); - CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2, 0); + CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1); + CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2); AFTER_POTENTIAL_GC (); if (FLOATP (v1) || FLOATP (v2)) { @@ -1427,7 +1434,7 @@ If the third argument is incorrect, Emacs may crash.") case Bchar_syntax: BEFORE_POTENTIAL_GC (); - CHECK_NUMBER (TOP, 0); + CHECK_NUMBER (TOP); AFTER_POTENTIAL_GC (); XSETFASTINT (TOP, syntax_code_spec[(int) SYNTAX (XINT (TOP))]); break; @@ -1556,7 +1563,7 @@ If the third argument is incorrect, Emacs may crash.") BEFORE_POTENTIAL_GC (); v2 = POP; v1 = TOP; - CHECK_NUMBER (v2, 0); + CHECK_NUMBER (v2); AFTER_POTENTIAL_GC (); op = XINT (v2); immediate_quit = 1; @@ -1739,17 +1746,18 @@ 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.\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."); + doc: /* A vector of vectors which holds a histogram of byte-code usage. +\(aref (aref byte-code-meter 0) CODE) indicates how many times the byte +opcode CODE has been executed. +\(aref (aref byte-code-meter CODE1) CODE2), where CODE1 is not 0, +indicates how many times the byte opcodes CODE1 and CODE2 have been +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."); + doc: /* If non-nil, keep profiling information on byte code usage. +The variable byte-code-meter indicates how often each byte opcode is used. +If a symbol has a property named `byte-code-meter' whose value is an +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));