annotate src/bytecode.c @ 88196:a71ec02fb6d3

(rmail): Only insert the file if it actually exists. (rmail-show-message): Do not display labels if there are no messages. This corrects the mistake if visiting an empty file, but it doesn't fix the situation where you delete the all messages and expunge them. This may leave the labels of the last message in the modeline.
author Alex Schroeder <alex@gnu.org>
date Tue, 17 Jan 2006 23:05:56 +0000
parents d7ddb3e565de
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Execution of byte code produced by bytecomp.el.
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1993, 2000, 2001, 2002, 2003, 2004,
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
3 2005 Free Software Foundation, Inc.
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5 This file is part of GNU Emacs.
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 GNU Emacs is free software; you can redistribute it and/or modify
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 it under the terms of the GNU General Public License as published by
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
9 the Free Software Foundation; either version 2, or (at your option)
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10 any later version.
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 GNU Emacs is distributed in the hope that it will be useful,
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15 GNU General Public License for more details.
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 You should have received a copy of the GNU General Public License
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 along with GNU Emacs; see the file COPYING. If not, write to
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
19 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
20 Boston, MA 02110-1301, USA.
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
22 hacked on by jwz@lucid.com 17-jun-91
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 o added a compile-time switch to turn on simple sanity checking;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 o put back the obsolete byte-codes for error-detection;
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
25 o added a new instruction, unbind_all, which I will use for
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26 tail-recursion elimination;
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
27 o made temp_output_buffer_show be called with the right number
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 of args;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 o made the new bytecodes be called with args in the right order;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 o added metering support.
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 by Hallvard:
435
43e88c4db330 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 396
diff changeset
33 o added relative jump instructions;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 o all conditionals now only do QUIT if they jump.
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 */
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36
4696
1fc792473491 Include <config.h> instead of "config.h".
Roland McGrath <roland@gnu.org>
parents: 2961
diff changeset
37 #include <config.h>
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38 #include "lisp.h"
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
39 #include "buffer.h"
23715
c69d612b0819 Include charset.h.
Kenichi Handa <handa@m17n.org>
parents: 22013
diff changeset
40 #include "charset.h"
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
41 #include "syntax.h"
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
42 #include "window.h"
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43
34711
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
44 #ifdef CHECK_FRAME_FONT
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
45 #include "frame.h"
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
46 #include "xterm.h"
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
47 #endif
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
48
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
49 /*
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
50 * define BYTE_CODE_SAFE to enable some minor sanity checking (useful for
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
51 * debugging the byte compiler...)
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
52 *
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
53 * define BYTE_CODE_METER to enable generation of a byte-op usage histogram.
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 */
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
55 /* #define BYTE_CODE_SAFE */
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
56 /* #define BYTE_CODE_METER */
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
57
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
59 #ifdef BYTE_CODE_METER
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
61 Lisp_Object Vbyte_code_meter, Qbyte_code_meter;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62 int byte_metering_on;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
64 #define METER_2(code1, code2) \
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 XFASTINT (XVECTOR (XVECTOR (Vbyte_code_meter)->contents[(code1)]) \
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 ->contents[(code2)])
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
68 #define METER_1(code) METER_2 (0, (code))
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69
39634
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
70 #define METER_CODE(last_code, this_code) \
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
71 { \
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
72 if (byte_metering_on) \
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
73 { \
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
74 if (METER_1 (this_code) < MOST_POSITIVE_FIXNUM) \
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
75 METER_1 (this_code)++; \
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
76 if (last_code \
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
77 && METER_2 (last_code, this_code) < MOST_POSITIVE_FIXNUM) \
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
78 METER_2 (last_code, this_code)++; \
4baf64844f9c (syms_of_bytecode) [BYTE_CODE_METER]: Doc fix.
Gerd Moellmann <gerd@gnu.org>
parents: 39573
diff changeset
79 } \
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
80 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
82 #else /* no BYTE_CODE_METER */
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
84 #define METER_CODE(last_code, this_code)
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
86 #endif /* no BYTE_CODE_METER */
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 Lisp_Object Qbytecode;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91 /* Byte codes: */
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93 #define Bvarref 010
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 #define Bvarset 020
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95 #define Bvarbind 030
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 #define Bcall 040
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97 #define Bunbind 050
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
99 #define Bnth 070
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
100 #define Bsymbolp 071
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
101 #define Bconsp 072
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 #define Bstringp 073
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103 #define Blistp 074
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
104 #define Beq 075
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
105 #define Bmemq 076
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106 #define Bnot 077
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
107 #define Bcar 0100
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108 #define Bcdr 0101
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
109 #define Bcons 0102
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
110 #define Blist1 0103
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
111 #define Blist2 0104
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
112 #define Blist3 0105
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
113 #define Blist4 0106
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
114 #define Blength 0107
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
115 #define Baref 0110
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
116 #define Baset 0111
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
117 #define Bsymbol_value 0112
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
118 #define Bsymbol_function 0113
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
119 #define Bset 0114
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
120 #define Bfset 0115
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121 #define Bget 0116
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
122 #define Bsubstring 0117
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
123 #define Bconcat2 0120
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
124 #define Bconcat3 0121
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125 #define Bconcat4 0122
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 #define Bsub1 0123
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
127 #define Badd1 0124
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
128 #define Beqlsign 0125
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
129 #define Bgtr 0126
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 #define Blss 0127
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 #define Bleq 0130
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132 #define Bgeq 0131
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 #define Bdiff 0132
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134 #define Bnegate 0133
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 #define Bplus 0134
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136 #define Bmax 0135
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 #define Bmin 0136
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138 #define Bmult 0137
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140 #define Bpoint 0140
16292
86408ea93da6 (Bsave_current_buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
141 /* Was Bmark in v17. */
86408ea93da6 (Bsave_current_buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
142 #define Bsave_current_buffer 0141
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
143 #define Bgoto_char 0142
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
144 #define Binsert 0143
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
145 #define Bpoint_max 0144
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
146 #define Bpoint_min 0145
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 #define Bchar_after 0146
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
148 #define Bfollowing_char 0147
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149 #define Bpreceding_char 0150
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
150 #define Bcurrent_column 0151
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
151 #define Bindent_to 0152
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
152 #define Bscan_buffer 0153 /* No longer generated as of v18 */
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 #define Beolp 0154
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
154 #define Beobp 0155
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
155 #define Bbolp 0156
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
156 #define Bbobp 0157
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 #define Bcurrent_buffer 0160
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 #define Bset_buffer 0161
18245
045ae402e927 (Bread_char): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 16815
diff changeset
159 #define Bsave_current_buffer_1 0162 /* Replacing Bsave_current_buffer. */
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
160 #define Bread_char 0162 /* No longer generated as of v19 */
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
161 #define Bset_mark 0163 /* this loser is no longer generated as of v18 */
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
162 #define Binteractive_p 0164 /* Needed since interactive-p takes unevalled args */
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 #define Bforward_char 0165
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165 #define Bforward_word 0166
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 #define Bskip_chars_forward 0167
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
167 #define Bskip_chars_backward 0170
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 #define Bforward_line 0171
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 #define Bchar_syntax 0172
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
170 #define Bbuffer_substring 0173
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171 #define Bdelete_region 0174
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
172 #define Bnarrow_to_region 0175
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 #define Bwiden 0176
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
174 #define Bend_of_line 0177
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
175
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
176 #define Bconstant2 0201
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 #define Bgoto 0202
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 #define Bgotoifnil 0203
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 #define Bgotoifnonnil 0204
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180 #define Bgotoifnilelsepop 0205
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
181 #define Bgotoifnonnilelsepop 0206
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
182 #define Breturn 0207
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 #define Bdiscard 0210
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
184 #define Bdup 0211
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
185
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
186 #define Bsave_excursion 0212
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 #define Bsave_window_excursion 0213
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188 #define Bsave_restriction 0214
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
189 #define Bcatch 0215
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 #define Bunwind_protect 0216
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 #define Bcondition_case 0217
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 #define Btemp_output_buffer_setup 0220
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 #define Btemp_output_buffer_show 0221
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 #define Bunbind_all 0222
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
197
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
198 #define Bset_marker 0223
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
199 #define Bmatch_beginning 0224
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
200 #define Bmatch_end 0225
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
201 #define Bupcase 0226
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
202 #define Bdowncase 0227
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
203
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
204 #define Bstringeqlsign 0230
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 #define Bstringlss 0231
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 #define Bequal 0232
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207 #define Bnthcdr 0233
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
208 #define Belt 0234
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209 #define Bmember 0235
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
210 #define Bassq 0236
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
211 #define Bnreverse 0237
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
212 #define Bsetcar 0240
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 #define Bsetcdr 0241
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 #define Bcar_safe 0242
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 #define Bcdr_safe 0243
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
216 #define Bnconc 0244
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
217 #define Bquo 0245
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
218 #define Brem 0246
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
219 #define Bnumberp 0247
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220 #define Bintegerp 0250
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
221
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
222 #define BRgoto 0252
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
223 #define BRgotoifnil 0253
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
224 #define BRgotoifnonnil 0254
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
225 #define BRgotoifnilelsepop 0255
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
226 #define BRgotoifnonnilelsepop 0256
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
227
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
228 #define BlistN 0257
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
229 #define BconcatN 0260
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
230 #define BinsertN 0261
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
231
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
232 #define Bconstant 0300
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 #define CONSTANTLIM 0100
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
234
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
235
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
236 /* Structure describing a value stack used during byte-code execution
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
237 in Fbyte_code. */
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
238
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
239 struct byte_stack
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
240 {
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
241 /* Program counter. This points into the byte_string below
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
242 and is relocated when that string is relocated. */
46545
99d1224dfe6c (struct byte_stack): Pointers into byte string now
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
243 const unsigned char *pc;
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
244
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
245 /* Top and bottom of stack. The bottom points to an area of memory
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
246 allocated with alloca in Fbyte_code. */
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
247 Lisp_Object *top, *bottom;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
248
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
249 /* The string containing the byte-code, and its current address.
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
250 Storing this here protects it from GC because mark_byte_stack
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
251 marks it. */
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
252 Lisp_Object byte_string;
46545
99d1224dfe6c (struct byte_stack): Pointers into byte string now
Ken Raeburn <raeburn@raeburn.org>
parents: 46370
diff changeset
253 const unsigned char *byte_string_start;
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
254
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
255 /* The vector of constants used during byte-code execution. Storing
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
256 this here protects it from GC because mark_byte_stack marks it. */
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
257 Lisp_Object constants;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
258
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
259 /* Next entry in byte_stack_list. */
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
260 struct byte_stack *next;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
261 };
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
262
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
263 /* A list of currently active byte-code execution value stacks.
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
264 Fbyte_code adds an entry to the head of this list before it starts
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
265 processing byte-code, and it removed the entry again when it is
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
266 done. Signalling an error truncates the list analoguous to
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
267 gcprolist. */
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
268
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
269 struct byte_stack *byte_stack_list;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
270
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
271
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
272 /* Mark objects on byte_stack_list. Called during GC. */
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
273
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
274 void
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
275 mark_byte_stack ()
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
276 {
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
277 struct byte_stack *stack;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
278 Lisp_Object *obj;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
279
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
280 for (stack = byte_stack_list; stack; stack = stack->next)
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
281 {
31152
fb30bcf39f12 (mark_byte_stack): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 29436
diff changeset
282 /* If STACK->top is null here, this means there's an opcode in
fb30bcf39f12 (mark_byte_stack): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 29436
diff changeset
283 Fbyte_code that wasn't expected to GC, but did. To find out
fb30bcf39f12 (mark_byte_stack): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 29436
diff changeset
284 which opcode this is, record the value of `stack', and walk
fb30bcf39f12 (mark_byte_stack): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 29436
diff changeset
285 up the stack in a debugger, stopping in frames of Fbyte_code.
fb30bcf39f12 (mark_byte_stack): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 29436
diff changeset
286 The culprit is found in the frame of Fbyte_code where the
fb30bcf39f12 (mark_byte_stack): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 29436
diff changeset
287 address of its local variable `stack' is equal to the
fb30bcf39f12 (mark_byte_stack): Add a comment.
Gerd Moellmann <gerd@gnu.org>
parents: 29436
diff changeset
288 recorded value of `stack' here. */
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
289 eassert (stack->top);
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
290
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
291 for (obj = stack->bottom; obj <= stack->top; ++obj)
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
292 mark_object (*obj);
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
293
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
294 mark_object (stack->byte_string);
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
295 mark_object (stack->constants);
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
296 }
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
297 }
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
298
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
299
26376
6706cd0ece4d (mark_byte_stack): Use XMARKBIT and XMARK.
Gerd Moellmann <gerd@gnu.org>
parents: 26370
diff changeset
300 /* Unmark objects in the stacks on byte_stack_list. Relocate program
6706cd0ece4d (mark_byte_stack): Use XMARKBIT and XMARK.
Gerd Moellmann <gerd@gnu.org>
parents: 26370
diff changeset
301 counters. Called when GC has completed. */
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
302
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
303 void
26376
6706cd0ece4d (mark_byte_stack): Use XMARKBIT and XMARK.
Gerd Moellmann <gerd@gnu.org>
parents: 26370
diff changeset
304 unmark_byte_stack ()
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
305 {
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
306 struct byte_stack *stack;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
307
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
308 for (stack = byte_stack_list; stack; stack = stack->next)
26376
6706cd0ece4d (mark_byte_stack): Use XMARKBIT and XMARK.
Gerd Moellmann <gerd@gnu.org>
parents: 26370
diff changeset
309 {
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
310 if (stack->byte_string_start != SDATA (stack->byte_string))
26376
6706cd0ece4d (mark_byte_stack): Use XMARKBIT and XMARK.
Gerd Moellmann <gerd@gnu.org>
parents: 26370
diff changeset
311 {
6706cd0ece4d (mark_byte_stack): Use XMARKBIT and XMARK.
Gerd Moellmann <gerd@gnu.org>
parents: 26370
diff changeset
312 int offset = stack->pc - stack->byte_string_start;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
313 stack->byte_string_start = SDATA (stack->byte_string);
26376
6706cd0ece4d (mark_byte_stack): Use XMARKBIT and XMARK.
Gerd Moellmann <gerd@gnu.org>
parents: 26370
diff changeset
314 stack->pc = stack->byte_string_start + offset;
6706cd0ece4d (mark_byte_stack): Use XMARKBIT and XMARK.
Gerd Moellmann <gerd@gnu.org>
parents: 26370
diff changeset
315 }
6706cd0ece4d (mark_byte_stack): Use XMARKBIT and XMARK.
Gerd Moellmann <gerd@gnu.org>
parents: 26370
diff changeset
316 }
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
317 }
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
318
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
320 /* Fetch the next byte from the bytecode stream */
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
322 #define FETCH *stack.pc++
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
324 /* Fetch two bytes from the bytecode stream and make a 16-bit number
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
325 out of them */
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 #define FETCH2 (op = FETCH, op + (FETCH << 8))
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
329 /* Push x onto the execution stack. This used to be #define PUSH(x)
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
330 (*++stackp = (x)) This oddity is necessary because Alliant can't be
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
331 bothered to compile the preincrement operator properly, as of 4/91.
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
332 -JimB */
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
333
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
334 #define PUSH(x) (top++, *top = (x))
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 /* Pop a value off the execution stack. */
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
338 #define POP (*top--)
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 /* Discard n values from the execution stack. */
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
342 #define DISCARD(n) (top -= (n))
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
343
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
344 /* Get the value which is at the top of the execution stack, but don't
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
345 pop it. */
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
347 #define TOP (*top)
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
349 /* Actions that must be performed before and after calling a function
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
350 that might GC. */
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
351
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
352 #define BEFORE_POTENTIAL_GC() stack.top = top
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
353 #define AFTER_POTENTIAL_GC() stack.top = NULL
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354
16628
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
355 /* Garbage collect if we have consed enough since the last time.
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
356 We do this at every branch, to avoid loops that never GC. */
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
357
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
358 #define MAYBE_GC() \
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
359 if (consing_since_gc > gc_cons_threshold \
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
360 && consing_since_gc > gc_relative_threshold) \
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
361 { \
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
362 BEFORE_POTENTIAL_GC (); \
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
363 Fgarbage_collect (); \
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
364 AFTER_POTENTIAL_GC (); \
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
365 } \
16815
9e0f59154164 (HANDLE_RELOCATION): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16784
diff changeset
366 else
9e0f59154164 (HANDLE_RELOCATION): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16784
diff changeset
367
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
368 /* Check for jumping out of range. */
16628
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
369
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
370 #ifdef BYTE_CODE_SAFE
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
371
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
372 #define CHECK_RANGE(ARG) \
16784
79ea730b7e20 (Fbyte_code): Add error check for jumping out of range.
Richard M. Stallman <rms@gnu.org>
parents: 16628
diff changeset
373 if (ARG >= bytestr_length) abort ()
79ea730b7e20 (Fbyte_code): Add error check for jumping out of range.
Richard M. Stallman <rms@gnu.org>
parents: 16628
diff changeset
374
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
375 #else /* not BYTE_CODE_SAFE */
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
376
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
377 #define CHECK_RANGE(ARG)
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
378
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
379 #endif /* not BYTE_CODE_SAFE */
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
380
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
381 /* A version of the QUIT macro which makes sure that the stack top is
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
382 set before signaling `quit'. */
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
383
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
384 #define BYTE_CODE_QUIT \
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
385 do { \
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
386 if (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) \
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
387 { \
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
388 Lisp_Object flag = Vquit_flag; \
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
389 Vquit_flag = Qnil; \
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
390 BEFORE_POTENTIAL_GC (); \
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
391 if (EQ (Vthrow_on_input, flag)) \
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
392 Fthrow (Vthrow_on_input, Qt); \
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
393 Fsignal (Qquit, Qnil); \
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
394 AFTER_POTENTIAL_GC (); \
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
395 } \
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
396 } while (0)
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
397
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
398
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 DEFUN ("byte-code", Fbyte_code, Sbyte_code, 3, 3, 0,
40088
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
400 doc: /* Function used internally in byte-compiled code.
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
401 The first argument, BYTESTR, is a string of byte code;
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
402 the second, VECTOR, a vector of constants;
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
403 the third, MAXDEPTH, the maximum stack depth used in this function.
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
404 If the third argument is incorrect, Emacs may crash. */)
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
405 (bytestr, vector, maxdepth)
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 Lisp_Object bytestr, vector, maxdepth;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 {
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45617
diff changeset
408 int count = SPECPDL_INDEX ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409 #ifdef BYTE_CODE_METER
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 int this_op = 0;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411 int prev_op;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 #endif
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
413 int op;
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
414 /* Lisp_Object v1, v2; */
28999
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
415 Lisp_Object *vectorp;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 #ifdef BYTE_CODE_SAFE
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
417 int const_length = XVECTOR (vector)->size;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
418 Lisp_Object *stacke;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 #endif
28999
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
420 int bytestr_length;
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
421 struct byte_stack stack;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
422 Lisp_Object *top;
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
423 Lisp_Object result;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424
34711
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
425 #ifdef CHECK_FRAME_FONT
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
426 {
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
427 struct frame *f = SELECTED_FRAME ();
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
428 if (FRAME_X_P (f)
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
429 && FRAME_FONT (f)->direction != 0
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
430 && FRAME_FONT (f)->direction != 1)
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
431 abort ();
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
432 }
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
433 #endif
583cd327d7b5 (toplevel) [CHECK_FRAME_FONT]: Include frame.h and
Gerd Moellmann <gerd@gnu.org>
parents: 33688
diff changeset
434
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40088
diff changeset
435 CHECK_STRING (bytestr);
9139
127823d9444d (Fbyte_code): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 4696
diff changeset
436 if (!VECTORP (vector))
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 vector = wrong_type_argument (Qvectorp, vector);
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40088
diff changeset
438 CHECK_NUMBER (maxdepth);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
439
28999
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
440 if (STRING_MULTIBYTE (bytestr))
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
441 /* BYTESTR must have been produced by Emacs 20.2 or the earlier
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
442 because they produced a raw 8-bit string for byte-code and now
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
443 such a byte-code string is loaded as multibyte while raw 8-bit
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
444 characters converted to multibyte form. Thus, now we must
42305
c976f86658b6 (Fbyte_code): Use Fstring_make_unibyte instead of Fstring_as_unibyte.
Richard M. Stallman <rms@gnu.org>
parents: 40656
diff changeset
445 convert them back to the originally intended unibyte form. */
42350
791ec0f30e9e (Fbyte_code): Undo previous change.
Richard M. Stallman <rms@gnu.org>
parents: 42305
diff changeset
446 bytestr = Fstring_as_unibyte (bytestr);
28999
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
447
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
448 bytestr_length = SBYTES (bytestr);
28999
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
449 vectorp = XVECTOR (vector)->contents;
4c808e415352 (Fbyte_code): If arg BYTESTR is multibyte, convert it
Kenichi Handa <handa@m17n.org>
parents: 28497
diff changeset
450
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
451 stack.byte_string = bytestr;
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
452 stack.pc = stack.byte_string_start = SDATA (bytestr);
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
453 stack.constants = vector;
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
454 stack.bottom = (Lisp_Object *) alloca (XFASTINT (maxdepth)
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
455 * sizeof (Lisp_Object));
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
456 top = stack.bottom - 1;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
457 stack.top = NULL;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
458 stack.next = byte_stack_list;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
459 byte_stack_list = &stack;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
461 #ifdef BYTE_CODE_SAFE
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
462 stacke = stack.bottom - 1 + XFASTINT (maxdepth);
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
463 #endif
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
464
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 while (1)
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466 {
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 #ifdef BYTE_CODE_SAFE
27438
5218aa03936e (Fbyte_code) [BYTE_CODE_SAFE]: Fix typo.
Gerd Moellmann <gerd@gnu.org>
parents: 27293
diff changeset
468 if (top > stacke)
27727
9400865ec7cf Remove `LISP_FLOAT_TYPE' and `standalone'.
Gerd Moellmann <gerd@gnu.org>
parents: 27442
diff changeset
469 abort ();
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
470 else if (top < stack.bottom - 1)
27727
9400865ec7cf Remove `LISP_FLOAT_TYPE' and `standalone'.
Gerd Moellmann <gerd@gnu.org>
parents: 27442
diff changeset
471 abort ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 #endif
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 #ifdef BYTE_CODE_METER
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 prev_op = this_op;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476 this_op = op = FETCH;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 METER_CODE (prev_op, op);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
478 #else
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
479 op = FETCH;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
480 #endif
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
481
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 switch (op)
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 {
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
484 case Bvarref + 7:
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 op = FETCH2;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486 goto varref;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
488 case Bvarref:
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
489 case Bvarref + 1:
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
490 case Bvarref + 2:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
491 case Bvarref + 3:
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
492 case Bvarref + 4:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
493 case Bvarref + 5:
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 op = op - Bvarref;
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
495 goto varref;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
496
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
497 /* This seems to be the most frequently executed byte-code
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
498 among the Bvarref's, so avoid a goto here. */
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
499 case Bvarref+6:
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
500 op = FETCH;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
501 varref:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
502 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
503 Lisp_Object v1, v2;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
504
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
505 v1 = vectorp[op];
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
506 if (SYMBOLP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
507 {
39573
b17103d5e3c8 (Fbyte_code) <varref>: Use SYMBOL_VALUE.
Gerd Moellmann <gerd@gnu.org>
parents: 37029
diff changeset
508 v2 = SYMBOL_VALUE (v1);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
509 if (MISCP (v2) || EQ (v2, Qunbound))
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
510 {
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
511 BEFORE_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
512 v2 = Fsymbol_value (v1);
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
513 AFTER_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
514 }
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
515 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
516 else
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
517 {
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
518 BEFORE_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
519 v2 = Fsymbol_value (v1);
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
520 AFTER_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
521 }
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
522 PUSH (v2);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
523 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
524 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
525
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
526 case Bgotoifnil:
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
527 {
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
528 Lisp_Object v1;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
529 MAYBE_GC ();
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
530 op = FETCH2;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
531 v1 = POP;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
532 if (NILP (v1))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
533 {
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
534 BYTE_CODE_QUIT;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
535 CHECK_RANGE (op);
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
536 stack.pc = stack.byte_string_start + op;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
537 }
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
538 break;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
539 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
541 case Bcar:
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
542 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
543 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
544 v1 = TOP;
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
545 if (CONSP (v1))
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
546 TOP = XCAR (v1);
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
547 else if (NILP (v1))
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
548 TOP = Qnil;
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
549 else
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
550 {
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
551 wrong_type_argument (Qlistp, v1);
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
552 }
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
553 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
554 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
555
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
556 case Beq:
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
557 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
558 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
559 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
560 TOP = EQ (v1, TOP) ? Qt : Qnil;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
561 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
562 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
563
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
564 case Bmemq:
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
565 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
566 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
567 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
568 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
569 TOP = Fmemq (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
570 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
571 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
572 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
573
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
574 case Bcdr:
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
575 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
576 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
577 v1 = TOP;
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
578 if (CONSP (v1))
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
579 TOP = XCDR (v1);
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
580 else if (NILP (v1))
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
581 TOP = Qnil;
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
582 else
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
583 {
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
584 wrong_type_argument (Qlistp, v1);
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
585 }
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
586 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
587 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588
27782
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
589 case Bvarset:
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
590 case Bvarset+1:
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
591 case Bvarset+2:
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
592 case Bvarset+3:
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
593 case Bvarset+4:
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
594 case Bvarset+5:
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
595 op -= Bvarset;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 goto varset;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
27782
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
598 case Bvarset+7:
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
599 op = FETCH2;
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
600 goto varset;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
601
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
602 case Bvarset+6:
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
603 op = FETCH;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
604 varset:
27782
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
605 {
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
606 Lisp_Object sym, val;
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
607
27782
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
608 sym = vectorp[op];
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
609 val = TOP;
27782
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
610
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
611 /* Inline the most common case. */
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
612 if (SYMBOLP (sym)
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
613 && !EQ (val, Qunbound)
39573
b17103d5e3c8 (Fbyte_code) <varref>: Use SYMBOL_VALUE.
Gerd Moellmann <gerd@gnu.org>
parents: 37029
diff changeset
614 && !XSYMBOL (sym)->indirect_variable
b17103d5e3c8 (Fbyte_code) <varref>: Use SYMBOL_VALUE.
Gerd Moellmann <gerd@gnu.org>
parents: 37029
diff changeset
615 && !XSYMBOL (sym)->constant
b17103d5e3c8 (Fbyte_code) <varref>: Use SYMBOL_VALUE.
Gerd Moellmann <gerd@gnu.org>
parents: 37029
diff changeset
616 && !MISCP (XSYMBOL (sym)->value))
27782
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
617 XSYMBOL (sym)->value = val;
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
618 else
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
619 {
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
620 BEFORE_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
621 set_internal (sym, val, current_buffer, 0);
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
622 AFTER_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
623 }
27782
f53ecb062478 (Fbyte_code) <Bvarset>: Inline most common case.
Gerd Moellmann <gerd@gnu.org>
parents: 27727
diff changeset
624 }
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
625 (void) POP;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
626 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
627
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
628 case Bdup:
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
629 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
630 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
631 v1 = TOP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
632 PUSH (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
633 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
634 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
635
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
636 /* ------------------ */
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
637
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
638 case Bvarbind+6:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
639 op = FETCH;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640 goto varbind;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
641
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
642 case Bvarbind+7:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
643 op = FETCH2;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644 goto varbind;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
645
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
646 case Bvarbind:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
647 case Bvarbind+1:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
648 case Bvarbind+2:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
649 case Bvarbind+3:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
650 case Bvarbind+4:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
651 case Bvarbind+5:
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652 op -= Bvarbind;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
653 varbind:
33688
35fae77e31dc (Fbyte_code) <Bvarbind, Bunwind_protect>: Add
Gerd Moellmann <gerd@gnu.org>
parents: 31152
diff changeset
654 /* Specbind can signal and thus GC. */
35fae77e31dc (Fbyte_code) <Bvarbind, Bunwind_protect>: Add
Gerd Moellmann <gerd@gnu.org>
parents: 31152
diff changeset
655 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 specbind (vectorp[op], POP);
33688
35fae77e31dc (Fbyte_code) <Bvarbind, Bunwind_protect>: Add
Gerd Moellmann <gerd@gnu.org>
parents: 31152
diff changeset
657 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
659
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 case Bcall+6:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 op = FETCH;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 goto docall;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
663
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 case Bcall+7:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 op = FETCH2;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 goto docall;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
668 case Bcall:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
669 case Bcall+1:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
670 case Bcall+2:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
671 case Bcall+3:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
672 case Bcall+4:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
673 case Bcall+5:
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
674 op -= Bcall;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
675 docall:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
676 {
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
677 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
678 DISCARD (op);
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
679 #ifdef BYTE_CODE_METER
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
680 if (byte_metering_on && SYMBOLP (TOP))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
681 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
682 Lisp_Object v1, v2;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
683
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
684 v1 = TOP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
685 v2 = Fget (v1, Qbyte_code_meter);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
686 if (INTEGERP (v2)
39635
c6144b4dc5c1 (Fbyte_code): Use MOST_POSITIVE_FIXNUM.
Gerd Moellmann <gerd@gnu.org>
parents: 39634
diff changeset
687 && XINT (v2) < MOST_POSITIVE_FIXNUM)
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
688 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
689 XSETINT (v2, XINT (v2) + 1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
690 Fput (v1, Qbyte_code_meter, v2);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
691 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
692 }
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
693 #endif
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
694 TOP = Ffuncall (op + 1, &TOP);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
695 AFTER_POTENTIAL_GC ();
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
696 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
697 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
698
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
699 case Bunbind+6:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
700 op = FETCH;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701 goto dounbind;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
703 case Bunbind+7:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 op = FETCH2;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
705 goto dounbind;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
706
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
707 case Bunbind:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
708 case Bunbind+1:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
709 case Bunbind+2:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
710 case Bunbind+3:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
711 case Bunbind+4:
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
712 case Bunbind+5:
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
713 op -= Bunbind;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
714 dounbind:
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
715 BEFORE_POTENTIAL_GC ();
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45617
diff changeset
716 unbind_to (SPECPDL_INDEX () - op, Qnil);
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
717 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
718 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
719
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720 case Bunbind_all:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
721 /* To unbind back to the beginning of this frame. Not used yet,
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
722 but will be needed for tail-recursion elimination. */
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
723 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724 unbind_to (count, Qnil);
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
725 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
726 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
727
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 case Bgoto:
16628
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
729 MAYBE_GC ();
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
730 BYTE_CODE_QUIT;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
731 op = FETCH2; /* pc = FETCH2 loses since FETCH2 contains pc++ */
16784
79ea730b7e20 (Fbyte_code): Add error check for jumping out of range.
Richard M. Stallman <rms@gnu.org>
parents: 16628
diff changeset
732 CHECK_RANGE (op);
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
733 stack.pc = stack.byte_string_start + op;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
736 case Bgotoifnonnil:
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
737 {
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
738 Lisp_Object v1;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
739 MAYBE_GC ();
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
740 op = FETCH2;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
741 v1 = POP;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
742 if (!NILP (v1))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
743 {
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
744 BYTE_CODE_QUIT;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
745 CHECK_RANGE (op);
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
746 stack.pc = stack.byte_string_start + op;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
747 }
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
748 break;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
749 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
751 case Bgotoifnilelsepop:
16628
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
752 MAYBE_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753 op = FETCH2;
944
6bebb86e63c2 Replaced NULL with N
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
754 if (NILP (TOP))
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 {
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
756 BYTE_CODE_QUIT;
16784
79ea730b7e20 (Fbyte_code): Add error check for jumping out of range.
Richard M. Stallman <rms@gnu.org>
parents: 16628
diff changeset
757 CHECK_RANGE (op);
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
758 stack.pc = stack.byte_string_start + op;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 }
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
760 else DISCARD (1);
396
d0eb77a4d8f7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 310
diff changeset
761 break;
d0eb77a4d8f7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 310
diff changeset
762
934
1e2e41fd188b entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 621
diff changeset
763 case Bgotoifnonnilelsepop:
16628
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
764 MAYBE_GC ();
934
1e2e41fd188b entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 621
diff changeset
765 op = FETCH2;
944
6bebb86e63c2 Replaced NULL with N
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
766 if (!NILP (TOP))
396
d0eb77a4d8f7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 310
diff changeset
767 {
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
768 BYTE_CODE_QUIT;
16784
79ea730b7e20 (Fbyte_code): Add error check for jumping out of range.
Richard M. Stallman <rms@gnu.org>
parents: 16628
diff changeset
769 CHECK_RANGE (op);
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
770 stack.pc = stack.byte_string_start + op;
396
d0eb77a4d8f7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 310
diff changeset
771 }
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
772 else DISCARD (1);
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
773 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
774
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
775 case BRgoto:
16628
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
776 MAYBE_GC ();
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
777 BYTE_CODE_QUIT;
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
778 stack.pc += (int) *stack.pc - 127;
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
779 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
780
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
781 case BRgotoifnil:
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
782 {
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
783 Lisp_Object v1;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
784 MAYBE_GC ();
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
785 v1 = POP;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
786 if (NILP (v1))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
787 {
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
788 BYTE_CODE_QUIT;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
789 stack.pc += (int) *stack.pc - 128;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
790 }
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
791 stack.pc++;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
792 break;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
793 }
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
794
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
795 case BRgotoifnonnil:
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
796 {
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
797 Lisp_Object v1;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
798 MAYBE_GC ();
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
799 v1 = POP;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
800 if (!NILP (v1))
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
801 {
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
802 BYTE_CODE_QUIT;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
803 stack.pc += (int) *stack.pc - 128;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
804 }
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
805 stack.pc++;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
806 break;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
807 }
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
808
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
809 case BRgotoifnilelsepop:
16628
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
810 MAYBE_GC ();
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
811 op = *stack.pc++;
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
812 if (NILP (TOP))
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
813 {
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
814 BYTE_CODE_QUIT;
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
815 stack.pc += op - 128;
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
816 }
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
817 else DISCARD (1);
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
818 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
819
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
820 case BRgotoifnonnilelsepop:
16628
25e8123eb6c5 (MAYBE_GC): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16292
diff changeset
821 MAYBE_GC ();
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
822 op = *stack.pc++;
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
823 if (!NILP (TOP))
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
824 {
37029
d7378777b985 (BYTE_CODE_QUIT): New macro.
Gerd Moellmann <gerd@gnu.org>
parents: 36639
diff changeset
825 BYTE_CODE_QUIT;
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
826 stack.pc += op - 128;
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
827 }
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
828 else DISCARD (1);
396
d0eb77a4d8f7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 310
diff changeset
829 break;
d0eb77a4d8f7 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 310
diff changeset
830
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
831 case Breturn:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
832 result = POP;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 goto exit;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 case Bdiscard:
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
836 DISCARD (1);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 case Bconstant2:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840 PUSH (vectorp[FETCH2]);
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
841 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 case Bsave_excursion:
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
844 record_unwind_protect (save_excursion_restore,
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
845 save_excursion_save ());
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847
16292
86408ea93da6 (Bsave_current_buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
848 case Bsave_current_buffer:
18245
045ae402e927 (Bread_char): Deleted.
Richard M. Stallman <rms@gnu.org>
parents: 16815
diff changeset
849 case Bsave_current_buffer_1:
20697
6c8ba5a6147b (Fbyte_code) <Bsave_current_buffer_1>: Use set_buffer_if_live.
Richard M. Stallman <rms@gnu.org>
parents: 20592
diff changeset
850 record_unwind_protect (set_buffer_if_live, Fcurrent_buffer ());
16292
86408ea93da6 (Bsave_current_buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
851 break;
86408ea93da6 (Bsave_current_buffer): New macro.
Richard M. Stallman <rms@gnu.org>
parents: 16039
diff changeset
852
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
853 case Bsave_window_excursion:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
854 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
855 TOP = Fsave_window_excursion (TOP);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
856 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 case Bsave_restriction:
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
860 record_unwind_protect (save_restriction_restore,
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
861 save_restriction_save ());
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
864 case Bcatch:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
865 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
866 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
867 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
868 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
869 TOP = internal_catch (TOP, Feval, v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
870 AFTER_POTENTIAL_GC ();
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
871 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
872 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 case Bunwind_protect:
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
875 record_unwind_protect (Fprogn, POP);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
877
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
878 case Bcondition_case:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
879 {
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
880 Lisp_Object handlers, body;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
881 handlers = POP;
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
882 body = POP;
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
883 BEFORE_POTENTIAL_GC ();
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
884 TOP = internal_lisp_condition_case (TOP, body, handlers);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
885 AFTER_POTENTIAL_GC ();
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
886 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
887 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889 case Btemp_output_buffer_setup:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
890 BEFORE_POTENTIAL_GC ();
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40088
diff changeset
891 CHECK_STRING (TOP);
46370
40db0673e6f0 Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents: 46293
diff changeset
892 temp_output_buffer_setup (SDATA (TOP));
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
893 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 TOP = Vstandard_output;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 case Btemp_output_buffer_show:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
898 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
899 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
900 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
901 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
902 temp_output_buffer_show (TOP);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
903 TOP = v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
904 /* pop binding of standard-output */
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45617
diff changeset
905 unbind_to (SPECPDL_INDEX () - 1, Qnil);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
906 AFTER_POTENTIAL_GC ();
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
907 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
908 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 case Bnth:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
911 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
912 Lisp_Object v1, v2;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
913 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
914 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
915 v2 = TOP;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40088
diff changeset
916 CHECK_NUMBER (v2);
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
917 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
918 op = XINT (v2);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
919 immediate_quit = 1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
920 while (--op >= 0)
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
921 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
922 if (CONSP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
923 v1 = XCDR (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
924 else if (!NILP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
925 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
926 immediate_quit = 0;
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
927 wrong_type_argument (Qlistp, v1);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
928 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
929 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
930 immediate_quit = 0;
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
931 if (CONSP (v1))
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
932 TOP = XCAR (v1);
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
933 else if (NILP (v1))
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
934 TOP = Qnil;
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
935 else
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
936 wrong_type_argument (Qlistp, v1);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
937 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
938 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 case Bsymbolp:
9139
127823d9444d (Fbyte_code): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 4696
diff changeset
941 TOP = SYMBOLP (TOP) ? Qt : Qnil;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
943
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
944 case Bconsp:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 TOP = CONSP (TOP) ? Qt : Qnil;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
948 case Bstringp:
9139
127823d9444d (Fbyte_code): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 4696
diff changeset
949 TOP = STRINGP (TOP) ? Qt : Qnil;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 case Blistp:
944
6bebb86e63c2 Replaced NULL with N
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
953 TOP = CONSP (TOP) || NILP (TOP) ? Qt : Qnil;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 case Bnot:
944
6bebb86e63c2 Replaced NULL with N
Joseph Arceneaux <jla@gnu.org>
parents: 934
diff changeset
957 TOP = NILP (TOP) ? Qt : Qnil;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
958 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 case Bcons:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
961 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
962 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
963 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
964 TOP = Fcons (TOP, v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
965 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
966 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
967
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968 case Blist1:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 TOP = Fcons (TOP, Qnil);
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
972 case Blist2:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
973 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
974 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
975 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
976 TOP = Fcons (TOP, Fcons (v1, Qnil));
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
977 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
978 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
979
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
980 case Blist3:
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
981 DISCARD (2);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 TOP = Flist (3, &TOP);
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
984
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
985 case Blist4:
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
986 DISCARD (3);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 TOP = Flist (4, &TOP);
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
988 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
990 case BlistN:
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
991 op = FETCH;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
992 DISCARD (op - 1);
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
993 TOP = Flist (op, &TOP);
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
994 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
995
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
996 case Blength:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
997 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
998 TOP = Flength (TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
999 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002 case Baref:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1003 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1004 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1005 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1006 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1007 TOP = Faref (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1008 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1009 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1010 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 case Baset:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1013 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1014 Lisp_Object v1, v2;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1015 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1016 v2 = POP; v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1017 TOP = Faset (TOP, v1, v2);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1018 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1019 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1020 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1021
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1022 case Bsymbol_value:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1023 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 TOP = Fsymbol_value (TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1025 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 case Bsymbol_function:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1029 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 TOP = Fsymbol_function (TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1031 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034 case Bset:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1035 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1036 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1037 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1038 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1039 TOP = Fset (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1040 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1041 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1042 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044 case Bfset:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1045 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1046 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1047 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1048 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1049 TOP = Ffset (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1050 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1051 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1052 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 case Bget:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1055 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1056 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1057 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1058 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1059 TOP = Fget (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1060 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1061 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1062 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1063
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1064 case Bsubstring:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1065 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1066 Lisp_Object v1, v2;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1067 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1068 v2 = POP; v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1069 TOP = Fsubstring (TOP, v1, v2);
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
1070 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1071 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1072 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1073
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074 case Bconcat2:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1075 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1076 DISCARD (1);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 TOP = Fconcat (2, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1078 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081 case Bconcat3:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1082 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1083 DISCARD (2);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084 TOP = Fconcat (3, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1085 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088 case Bconcat4:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1089 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1090 DISCARD (3);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091 TOP = Fconcat (4, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1092 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1095 case BconcatN:
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1096 op = FETCH;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1097 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1098 DISCARD (op - 1);
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1099 TOP = Fconcat (op, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1100 AFTER_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1101 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1102
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 case Bsub1:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1104 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1105 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1106 v1 = TOP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1107 if (INTEGERP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1108 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1109 XSETINT (v1, XINT (v1) - 1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1110 TOP = v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1111 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1112 else
47035
58d2828adc19 (Fbyte_code): Fsub1 can GC, so protect it.
Miles Bader <miles@gnu.org>
parents: 46545
diff changeset
1113 {
58d2828adc19 (Fbyte_code): Fsub1 can GC, so protect it.
Miles Bader <miles@gnu.org>
parents: 46545
diff changeset
1114 BEFORE_POTENTIAL_GC ();
58d2828adc19 (Fbyte_code): Fsub1 can GC, so protect it.
Miles Bader <miles@gnu.org>
parents: 46545
diff changeset
1115 TOP = Fsub1 (v1);
58d2828adc19 (Fbyte_code): Fsub1 can GC, so protect it.
Miles Bader <miles@gnu.org>
parents: 46545
diff changeset
1116 AFTER_POTENTIAL_GC ();
58d2828adc19 (Fbyte_code): Fsub1 can GC, so protect it.
Miles Bader <miles@gnu.org>
parents: 46545
diff changeset
1117 }
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1118 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1119 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 case Badd1:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1122 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1123 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1124 v1 = TOP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1125 if (INTEGERP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1126 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1127 XSETINT (v1, XINT (v1) + 1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1128 TOP = v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1129 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1130 else
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1131 {
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1132 BEFORE_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1133 TOP = Fadd1 (v1);
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1134 AFTER_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1135 }
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1136 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1137 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1138
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139 case Beqlsign:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1140 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1141 Lisp_Object v1, v2;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1142 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1143 v2 = POP; v1 = TOP;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40088
diff changeset
1144 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v1);
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40088
diff changeset
1145 CHECK_NUMBER_OR_FLOAT_COERCE_MARKER (v2);
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1146 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1147 if (FLOATP (v1) || FLOATP (v2))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1148 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1149 double f1, f2;
12527
ebaf016075f1 (Fbyte_code): For Beqlsign, if both args are ints,
Karl Heuer <kwzh@gnu.org>
parents: 10134
diff changeset
1150
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1151 f1 = (FLOATP (v1) ? XFLOAT_DATA (v1) : XINT (v1));
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1152 f2 = (FLOATP (v2) ? XFLOAT_DATA (v2) : XINT (v2));
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1153 TOP = (f1 == f2 ? Qt : Qnil);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1154 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1155 else
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1156 TOP = (XINT (v1) == XINT (v2) ? Qt : Qnil);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1157 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1158 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1160 case Bgtr:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1161 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1162 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1163 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1164 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1165 TOP = Fgtr (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1166 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1167 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1168 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 case Blss:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1171 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1172 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1173 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1174 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1175 TOP = Flss (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1176 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1177 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1178 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180 case Bleq:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1181 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1182 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1183 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1184 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1185 TOP = Fleq (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1186 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1187 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1188 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 case Bgeq:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1191 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1192 Lisp_Object v1;
35721
91fee7514fc7 (Fbyte_code) <Bgeq>: Add BEFORE_POTENTIAL_GC and
Dave Love <fx@gnu.org>
parents: 35711
diff changeset
1193 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1194 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1195 TOP = Fgeq (TOP, v1);
35721
91fee7514fc7 (Fbyte_code) <Bgeq>: Add BEFORE_POTENTIAL_GC and
Dave Love <fx@gnu.org>
parents: 35711
diff changeset
1196 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1197 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1198 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 case Bdiff:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1201 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1202 DISCARD (1);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203 TOP = Fminus (2, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1204 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1205 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1206
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1207 case Bnegate:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1208 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1209 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1210 v1 = TOP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1211 if (INTEGERP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1212 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1213 XSETINT (v1, - XINT (v1));
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1214 TOP = v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1215 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1216 else
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1217 {
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1218 BEFORE_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1219 TOP = Fminus (1, &TOP);
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1220 AFTER_POTENTIAL_GC ();
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1221 }
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1222 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1223 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1224
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1225 case Bplus:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1226 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1227 DISCARD (1);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 TOP = Fplus (2, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1229 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 case Bmax:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1233 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1234 DISCARD (1);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 TOP = Fmax (2, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1236 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 case Bmin:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1240 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1241 DISCARD (1);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 TOP = Fmin (2, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1243 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246 case Bmult:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1247 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1248 DISCARD (1);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249 TOP = Ftimes (2, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1250 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1251 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1253 case Bquo:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1254 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1255 DISCARD (1);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 TOP = Fquo (2, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1257 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 case Brem:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1261 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1262 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1263 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1264 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1265 TOP = Frem (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1266 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1267 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1268 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1269
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1270 case Bpoint:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1271 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1272 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1273 XSETFASTINT (v1, PT);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1274 PUSH (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1275 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1276 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1277
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 case Bgoto_char:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1279 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 TOP = Fgoto_char (TOP);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1281 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1283
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1284 case Binsert:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1285 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 TOP = Finsert (1, &TOP);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1287 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1290 case BinsertN:
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1291 op = FETCH;
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
1292 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1293 DISCARD (op - 1);
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1294 TOP = Finsert (op, &TOP);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1295 AFTER_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1296 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1297
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 case Bpoint_max:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1299 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1300 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1301 XSETFASTINT (v1, ZV);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1302 PUSH (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1303 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1304 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1305
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1306 case Bpoint_min:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1307 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1308 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1309 XSETFASTINT (v1, BEGV);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1310 PUSH (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1311 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1312 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1313
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1314 case Bchar_after:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1315 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 TOP = Fchar_after (TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1317 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1319
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 case Bfollowing_char:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1321 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1322 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1323 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1324 v1 = Ffollowing_char ();
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1325 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1326 PUSH (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1327 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1328 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1330 case Bpreceding_char:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1331 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1332 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1333 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1334 v1 = Fprevious_char ();
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1335 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1336 PUSH (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1337 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1338 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1340 case Bcurrent_column:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1341 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1342 Lisp_Object v1;
35711
f17e8743925c (Fbyte_code) <Bcurrent_column>: Add
Gerd Moellmann <gerd@gnu.org>
parents: 34711
diff changeset
1343 BEFORE_POTENTIAL_GC ();
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
1344 XSETFASTINT (v1, (int) current_column ()); /* iftc */
35711
f17e8743925c (Fbyte_code) <Bcurrent_column>: Add
Gerd Moellmann <gerd@gnu.org>
parents: 34711
diff changeset
1345 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1346 PUSH (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1347 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1348 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 case Bindent_to:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1351 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 TOP = Findent_to (TOP, Qnil);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1353 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 case Beolp:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357 PUSH (Feolp ());
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360 case Beobp:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 PUSH (Feobp ());
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364 case Bbolp:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 PUSH (Fbolp ());
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368 case Bbobp:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 PUSH (Fbobp ());
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 case Bcurrent_buffer:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 PUSH (Fcurrent_buffer ());
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1376 case Bset_buffer:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1377 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1378 TOP = Fset_buffer (TOP);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1379 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 case Binteractive_p:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383 PUSH (Finteractive_p ());
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1386 case Bforward_char:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1387 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 TOP = Fforward_char (TOP);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1389 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 case Bforward_word:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1393 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1394 TOP = Fforward_word (TOP);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1395 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1396 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1397
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398 case Bskip_chars_forward:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1399 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1400 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1401 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1402 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1403 TOP = Fskip_chars_forward (TOP, v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1404 AFTER_POTENTIAL_GC ();
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1405 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1406 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1408 case Bskip_chars_backward:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1409 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1410 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1411 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1412 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1413 TOP = Fskip_chars_backward (TOP, v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1414 AFTER_POTENTIAL_GC ();
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1415 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1416 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418 case Bforward_line:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1419 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 TOP = Fforward_line (TOP);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1421 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424 case Bchar_syntax:
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1425 BEFORE_POTENTIAL_GC ();
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40088
diff changeset
1426 CHECK_NUMBER (TOP);
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1427 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1428 XSETFASTINT (TOP, syntax_code_spec[(int) SYNTAX (XINT (TOP))]);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 case Bbuffer_substring:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1432 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1433 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1434 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1435 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1436 TOP = Fbuffer_substring (TOP, v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1437 AFTER_POTENTIAL_GC ();
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1438 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1439 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441 case Bdelete_region:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1442 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1443 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1444 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1445 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1446 TOP = Fdelete_region (TOP, v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1447 AFTER_POTENTIAL_GC ();
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1448 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1449 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 case Bnarrow_to_region:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1452 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1453 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1454 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1455 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1456 TOP = Fnarrow_to_region (TOP, v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1457 AFTER_POTENTIAL_GC ();
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1458 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1459 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 case Bwiden:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1462 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 PUSH (Fwiden ());
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1464 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1465 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1467 case Bend_of_line:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1468 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1469 TOP = Fend_of_line (TOP);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1470 AFTER_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1471 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1472
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1473 case Bset_marker:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1474 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1475 Lisp_Object v1, v2;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1476 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1477 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1478 v2 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1479 TOP = Fset_marker (TOP, v2, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1480 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1481 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1482 }
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1483
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1484 case Bmatch_beginning:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1485 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1486 TOP = Fmatch_beginning (TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1487 AFTER_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1488 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1489
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1490 case Bmatch_end:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1491 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1492 TOP = Fmatch_end (TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1493 AFTER_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1494 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1495
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1496 case Bupcase:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1497 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1498 TOP = Fupcase (TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1499 AFTER_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1500 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1501
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1502 case Bdowncase:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1503 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1504 TOP = Fdowncase (TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1505 AFTER_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1506 break;
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1507
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508 case Bstringeqlsign:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1509 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1510 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1511 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1512 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1513 TOP = Fstring_equal (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1514 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1515 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1516 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518 case Bstringlss:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1519 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1520 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1521 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1522 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1523 TOP = Fstring_lessp (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1524 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1525 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1526 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1527
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528 case Bequal:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1529 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1530 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1531 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1532 TOP = Fequal (TOP, v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1533 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1534 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 case Bnthcdr:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1537 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1538 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1539 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1540 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1541 TOP = Fnthcdr (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1542 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1543 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1544 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546 case Belt:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1547 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1548 Lisp_Object v1, v2;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1549 if (CONSP (TOP))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1550 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1551 /* Exchange args and then do nth. */
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1552 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1553 v2 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1554 v1 = TOP;
40656
cdfd4d09b79a Update usage of CHECK_ macros (remove unused second argument).
Pavel Janík <Pavel@Janik.cz>
parents: 40088
diff changeset
1555 CHECK_NUMBER (v2);
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1556 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1557 op = XINT (v2);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1558 immediate_quit = 1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1559 while (--op >= 0)
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1560 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1561 if (CONSP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1562 v1 = XCDR (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1563 else if (!NILP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1564 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1565 immediate_quit = 0;
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
1566 wrong_type_argument (Qlistp, v1);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1567 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1568 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1569 immediate_quit = 0;
26380
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
1570 if (CONSP (v1))
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
1571 TOP = XCAR (v1);
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
1572 else if (NILP (v1))
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
1573 TOP = Qnil;
97289ec4d7d0 * bytecode.c (Fbyte_code) <BinsertN, Bcall>: Do the
Gerd Moellmann <gerd@gnu.org>
parents: 26376
diff changeset
1574 else
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
1575 wrong_type_argument (Qlistp, v1);
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1576 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1577 else
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1578 {
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1579 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1580 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1581 TOP = Felt (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1582 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1583 }
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1584 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1585 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 case Bmember:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1588 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1589 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1590 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1591 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1592 TOP = Fmember (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1593 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1594 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1595 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 case Bassq:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1598 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1599 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1600 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1601 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1602 TOP = Fassq (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1603 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1604 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1605 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1607 case Bnreverse:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1608 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 TOP = Fnreverse (TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1610 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 case Bsetcar:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1614 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1615 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1616 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1617 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1618 TOP = Fsetcar (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1619 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1620 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1621 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 case Bsetcdr:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1624 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1625 Lisp_Object v1;
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1626 BEFORE_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1627 v1 = POP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1628 TOP = Fsetcdr (TOP, v1);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1629 AFTER_POTENTIAL_GC ();
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1630 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1631 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1633 case Bcar_safe:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1634 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1635 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1636 v1 = TOP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1637 if (CONSP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1638 TOP = XCAR (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1639 else
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1640 TOP = Qnil;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1641 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1642 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644 case Bcdr_safe:
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1645 {
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1646 Lisp_Object v1;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1647 v1 = TOP;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1648 if (CONSP (v1))
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1649 TOP = XCDR (v1);
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1650 else
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1651 TOP = Qnil;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1652 break;
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1653 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1654
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1655 case Bnconc:
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1656 BEFORE_POTENTIAL_GC ();
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1657 DISCARD (1);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658 TOP = Fnconc (2, &TOP);
28497
334ebb7a551c (Fbyte_code): Add a bunch of BEFORE_POTENTIAL_GC/
Gerd Moellmann <gerd@gnu.org>
parents: 27817
diff changeset
1659 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1661
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1662 case Bnumberp:
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1663 TOP = (NUMBERP (TOP) ? Qt : Qnil);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1664 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666 case Bintegerp:
9139
127823d9444d (Fbyte_code): Use type test macros.
Karl Heuer <kwzh@gnu.org>
parents: 4696
diff changeset
1667 TOP = INTEGERP (TOP) ? Qt : Qnil;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1668 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1669
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1670 #ifdef BYTE_CODE_SAFE
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1671 case Bset_mark:
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1672 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1673 error ("set-mark is an obsolete bytecode");
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1674 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1675 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1676 case Bscan_buffer:
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1677 BEFORE_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1678 error ("scan-buffer is an obsolete bytecode");
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1679 AFTER_POTENTIAL_GC ();
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1680 break;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1681 #endif
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682
27293
d94d421ca521 (Fbyte_code): Pass new arg to set_internal.
Richard M. Stallman <rms@gnu.org>
parents: 26380
diff changeset
1683 case 0:
d94d421ca521 (Fbyte_code): Pass new arg to set_internal.
Richard M. Stallman <rms@gnu.org>
parents: 26380
diff changeset
1684 abort ();
d94d421ca521 (Fbyte_code): Pass new arg to set_internal.
Richard M. Stallman <rms@gnu.org>
parents: 26380
diff changeset
1685
d94d421ca521 (Fbyte_code): Pass new arg to set_internal.
Richard M. Stallman <rms@gnu.org>
parents: 26380
diff changeset
1686 case 255:
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1687 default:
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1688 #ifdef BYTE_CODE_SAFE
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1689 if (op < Bconstant)
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1690 {
27727
9400865ec7cf Remove `LISP_FLOAT_TYPE' and `standalone'.
Gerd Moellmann <gerd@gnu.org>
parents: 27442
diff changeset
1691 abort ();
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1692 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1693 if ((op -= Bconstant) >= const_length)
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1694 {
27727
9400865ec7cf Remove `LISP_FLOAT_TYPE' and `standalone'.
Gerd Moellmann <gerd@gnu.org>
parents: 27442
diff changeset
1695 abort ();
27442
ad65b21bc4cd (Fbyte_code): Use {BEFORE,AFTER}_POTENTIAL_GC where
Gerd Moellmann <gerd@gnu.org>
parents: 27438
diff changeset
1696 }
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1697 PUSH (vectorp[op]);
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1698 #else
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1699 PUSH (vectorp[op - Bconstant]);
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1700 #endif
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701 }
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 }
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1703
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704 exit:
26363
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
1705
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
1706 byte_stack_list = byte_stack_list->next;
efb608f1cb10 (struct byte_stack): New.
Gerd Moellmann <gerd@gnu.org>
parents: 25645
diff changeset
1707
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1708 /* Binds and unbinds are supposed to be compiled balanced. */
46293
1fb8f75062c6 Use macro SPECPDL_INDEX.
Juanma Barranquero <lekktu@gmail.com>
parents: 45617
diff changeset
1709 if (SPECPDL_INDEX () != count)
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 #ifdef BYTE_CODE_SAFE
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711 error ("binding stack not balanced (serious byte compiler bug)");
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1712 #else
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 abort ();
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1714 #endif
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
1715
26370
5f52cc1417ab Use block statements in cases and declare v1 and v2
Gerd Moellmann <gerd@gnu.org>
parents: 26368
diff changeset
1716 return result;
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717 }
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1718
21514
fa9ff387d260 Fix -Wimplicit warnings.
Andreas Schwab <schwab@suse.de>
parents: 21244
diff changeset
1719 void
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1720 syms_of_bytecode ()
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1721 {
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 Qbytecode = intern ("byte-code");
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1723 staticpro (&Qbytecode);
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1725 defsubr (&Sbyte_code);
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 #ifdef BYTE_CODE_METER
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729 DEFVAR_LISP ("byte-code-meter", &Vbyte_code_meter,
40088
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1730 doc: /* A vector of vectors which holds a histogram of byte-code usage.
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1731 \(aref (aref byte-code-meter 0) CODE) indicates how many times the byte
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1732 opcode CODE has been executed.
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1733 \(aref (aref byte-code-meter CODE1) CODE2), where CODE1 is not 0,
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1734 indicates how many times the byte opcodes CODE1 and CODE2 have been
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1735 executed in succession. */);
45617
36bc4f35dc18 (Fbyte_code): Cast `current_column' return value to int.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents: 44031
diff changeset
1736
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1737 DEFVAR_BOOL ("byte-metering-on", &byte_metering_on,
40088
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1738 doc: /* If non-nil, keep profiling information on byte code usage.
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1739 The variable byte-code-meter indicates how often each byte opcode is used.
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1740 If a symbol has a property named `byte-code-meter' whose value is an
50a6007a6ee4 Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Janík <Pavel@Janik.cz>
parents: 39635
diff changeset
1741 integer, it is incremented each time that symbol's function is called. */);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1742
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743 byte_metering_on = 0;
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1744 Vbyte_code_meter = Fmake_vector (make_number (256), make_number (0));
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1745 Qbyte_code_meter = intern ("byte-code-meter");
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1746 staticpro (&Qbyte_code_meter);
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747 {
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 int i = 256;
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1749 while (i--)
959
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1750 XVECTOR (Vbyte_code_meter)->contents[i] =
c1fc76b79275 * bytecode.c (Fbyte_code): When metering the Bcall opcodes, make
Jim Blandy <jimb@redhat.com>
parents: 944
diff changeset
1751 Fmake_vector (make_number (256), make_number (0));
310
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 }
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753 #endif
88bee8093f43 Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754 }
88155
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
1755
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
1756 /* arch-tag: b9803b6f-1ed6-4190-8adf-33fd3a9d10e9
d7ddb3e565de sync with trunk
Henrik Enberg <henrik.enberg@telia.com>
parents: 47035
diff changeset
1757 (do not change this comment) */