X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/3b1f62f3ac250a59017f10c89e951dae7795e6b6..6ec8bbd20d14dadb850f993d828b42bb97deba32:/src/bytecode.c diff --git a/src/bytecode.c b/src/bytecode.c index c06797337a..646ada96aa 100644 --- a/src/bytecode.c +++ b/src/bytecode.c @@ -1,5 +1,5 @@ /* 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. @@ -15,7 +15,8 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs; see the file COPYING. If not, write to -the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. hacked on by jwz@lucid.com 17-jun-91 o added a compile-time switch to turn on simple sanity checking; @@ -32,7 +33,7 @@ by Hallvard: o all conditionals now only do QUIT if they jump. */ -#include "config.h" +#include #include "lisp.h" #include "buffer.h" #include "syntax.h" @@ -251,8 +252,9 @@ Lisp_Object Qbytecode; DEFUN ("byte-code", Fbyte_code, Sbyte_code, 3, 3, 0, "Function used internally in byte-compiled code.\n\ -The first argument is a string of byte code; the second, a vector of constants;\n\ -the third, the maximum stack depth used in this function.\n\ +The first argument, BYTESTR, is a string of byte code;\n\ +the second, VECTOR, a vector of constants;\n\ +the third, MAXDEPTH, the maximum stack depth used in this function.\n\ If the third argument is incorrect, Emacs may crash.") (bytestr, vector, maxdepth) Lisp_Object bytestr, vector, maxdepth; @@ -280,7 +282,7 @@ If the third argument is incorrect, Emacs may crash.") register unsigned char *strbeg; CHECK_STRING (bytestr, 0); - if (XTYPE (vector) != Lisp_Vector) + if (!VECTORP (vector)) vector = wrong_type_argument (Qvectorp, vector); CHECK_NUMBER (maxdepth, 2); @@ -336,29 +338,13 @@ If the third argument is incorrect, Emacs may crash.") op = op - Bvarref; varref: v1 = vectorp[op]; - if (XTYPE (v1) != Lisp_Symbol) + if (!SYMBOLP (v1)) v2 = Fsymbol_value (v1); else { v2 = XSYMBOL (v1)->value; -#ifdef SWITCH_ENUM_BUG - switch ((int) XTYPE (v2)) -#else - switch (XTYPE (v2)) -#endif - { - case Lisp_Symbol: - if (!EQ (v2, Qunbound)) - break; - case Lisp_Intfwd: - case Lisp_Boolfwd: - case Lisp_Objfwd: - case Lisp_Buffer_Local_Value: - case Lisp_Some_Buffer_Local_Value: - case Lisp_Buffer_Objfwd: - case Lisp_Void: - v2 = Fsymbol_value (v1); - } + if (MISCP (v2) || EQ (v2, Qunbound)) + v2 = Fsymbol_value (v1); } PUSH (v2); break; @@ -407,11 +393,11 @@ If the third argument is incorrect, Emacs may crash.") docall: DISCARD (op); #ifdef BYTE_CODE_METER - if (byte_metering_on && XTYPE (TOP) == Lisp_Symbol) + if (byte_metering_on && SYMBOLP (TOP)) { v1 = TOP; v2 = Fget (v1, Qbyte_code_meter); - if (XTYPE (v2) == Lisp_Int + if (INTEGERP (v2) && XINT (v2) != ((1<data : XINT (v1)); + f2 = (FLOATP (v2) ? XFLOAT (v2)->data : XINT (v2)); + TOP = (f1 == f2 ? Qt : Qnil); + } + else +#endif + TOP = (XINT (v1) == XINT (v2) ? Qt : Qnil); break; case Bgtr: @@ -804,7 +801,7 @@ If the third argument is incorrect, Emacs may crash.") case Bnegate: v1 = TOP; - if (XTYPE (v1) == Lisp_Int) + if (INTEGERP (v1)) { XSETINT (v1, - XINT (v1)); TOP = v1; @@ -844,7 +841,7 @@ If the third argument is incorrect, Emacs may crash.") break; case Bpoint: - XFASTINT (v1) = point; + XSETFASTINT (v1, PT); PUSH (v1); break; @@ -863,12 +860,12 @@ If the third argument is incorrect, Emacs may crash.") break; case Bpoint_max: - XFASTINT (v1) = ZV; + XSETFASTINT (v1, ZV); PUSH (v1); break; case Bpoint_min: - XFASTINT (v1) = BEGV; + XSETFASTINT (v1, BEGV); PUSH (v1); break; @@ -877,17 +874,17 @@ If the third argument is incorrect, Emacs may crash.") break; case Bfollowing_char: - XFASTINT (v1) = PT == ZV ? 0 : FETCH_CHAR (point); + v1 = Ffollowing_char (); PUSH (v1); break; case Bpreceding_char: - XFASTINT (v1) = point <= BEGV ? 0 : FETCH_CHAR (point - 1); + v1 = Fprevious_char (); PUSH (v1); break; case Bcurrent_column: - XFASTINT (v1) = current_column (); + XSETFASTINT (v1, current_column ()); PUSH (v1); break; @@ -952,7 +949,8 @@ If the third argument is incorrect, Emacs may crash.") case Bchar_syntax: CHECK_NUMBER (TOP, 0); - XFASTINT (TOP) = syntax_code_spec[(int) SYNTAX (0xFF & XINT (TOP))]; + XSETFASTINT (TOP, + syntax_code_spec[(int) SYNTAX (XINT (TOP))]); break; case Bbuffer_substring: @@ -1021,7 +1019,7 @@ If the third argument is incorrect, Emacs may crash.") break; case Belt: - if (XTYPE (TOP) == Lisp_Cons) + if (CONSP (TOP)) { /* Exchange args and then do nth. */ v2 = POP; @@ -1058,7 +1056,7 @@ If the third argument is incorrect, Emacs may crash.") case Bcar_safe: v1 = TOP; - if (XTYPE (v1) == Lisp_Cons) + if (CONSP (v1)) TOP = XCONS (v1)->car; else TOP = Qnil; @@ -1066,7 +1064,7 @@ If the third argument is incorrect, Emacs may crash.") case Bcdr_safe: v1 = TOP; - if (XTYPE (v1) == Lisp_Cons) + if (CONSP (v1)) TOP = XCONS (v1)->cdr; else TOP = Qnil; @@ -1082,7 +1080,7 @@ If the third argument is incorrect, Emacs may crash.") break; case Bintegerp: - TOP = XTYPE (TOP) == Lisp_Int ? Qt : Qnil; + TOP = INTEGERP (TOP) ? Qt : Qnil; break; #ifdef BYTE_CODE_SAFE