Let integers use up 2 tags to give them one extra bit and double their range.
[bpt/emacs.git] / src / lisp.h
1 /* Fundamental definitions for GNU Emacs Lisp interpreter.
2 Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2000,
3 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
4 Free Software Foundation, Inc.
5
6 This file is part of GNU Emacs.
7
8 GNU Emacs is free software: you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
12
13 GNU Emacs is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
20
21 #ifndef EMACS_LISP_H
22 #define EMACS_LISP_H
23
24 /* Declare the prototype for a general external function. */
25 #define P_(proto) proto
26
27 /* Use the configure flag --enable-checking[=LIST] to enable various
28 types of run time checks for Lisp objects. */
29
30 #ifdef GC_CHECK_CONS_LIST
31 #define CHECK_CONS_LIST() check_cons_list()
32 #else
33 #define CHECK_CONS_LIST() ((void)0)
34 #endif
35
36 /* These are default choices for the types to use. */
37 #ifdef _LP64
38 #ifndef EMACS_INT
39 #define EMACS_INT long
40 #define BITS_PER_EMACS_INT BITS_PER_LONG
41 #endif
42 #ifndef EMACS_UINT
43 #define EMACS_UINT unsigned long
44 #endif
45 #else /* not _LP64 */
46 #ifndef EMACS_INT
47 #define EMACS_INT int
48 #define BITS_PER_EMACS_INT BITS_PER_INT
49 #endif
50 #ifndef EMACS_UINT
51 #define EMACS_UINT unsigned int
52 #endif
53 #endif
54
55 /* Extra internal type checking? */
56 extern int suppress_checking;
57 extern void die P_((const char *, const char *, int)) NO_RETURN;
58
59 #ifdef ENABLE_CHECKING
60
61 /* The suppress_checking variable is initialized to 0 in alloc.c. Set
62 it to 1 using a debugger to temporarily disable aborting on
63 detected internal inconsistencies or error conditions.
64
65 Testing suppress_checking after the supplied condition ensures that
66 the side effects produced by CHECK will be consistent, independent
67 of whether ENABLE_CHECKING is defined, or whether the checks are
68 suppressed at run time.
69
70 In some cases, a good compiler may be able to optimize away the
71 CHECK macro altogether, e.g., if XSTRING (x) uses CHECK to test
72 STRINGP (x), but a particular use of XSTRING is invoked only after
73 testing that STRINGP (x) is true, making the test redundant. */
74
75 #define CHECK(check,msg) (((check) || suppress_checking \
76 ? (void) 0 \
77 : die ((msg), __FILE__, __LINE__)), \
78 0)
79 #else
80
81 /* Produce same side effects and result, but don't complain. */
82 #define CHECK(check,msg) ((check),0)
83
84 #endif
85
86 /* Define an Emacs version of "assert", since some system ones are
87 flaky. */
88 #ifndef ENABLE_CHECKING
89 #define eassert(X) (void) 0
90 #else /* ENABLE_CHECKING */
91 #if defined (__GNUC__) && __GNUC__ >= 2 && defined (__STDC__)
92 #define eassert(cond) CHECK(cond,"assertion failed: " #cond)
93 #else
94 #define eassert(cond) CHECK(cond,"assertion failed")
95 #endif
96 #endif /* ENABLE_CHECKING */
97 \f
98 /* Define this to make Lisp_Object use a union type instead of the
99 default int. FIXME: It might be better to add a flag to configure
100 to do this. */
101 /* #define USE_LISP_UNION_TYPE */
102
103 /***** Select the tagging scheme. *****/
104 /* There are basically two options that control the tagging scheme:
105 - USE_LISP_UNION_TYPE says that Lisp_Object should be a union instead
106 of an integer.
107 - USE_LSB_TAG means that we can assume the least 3 bits of pointers are
108 always 0, and we can thus use them to hold tag bits, without
109 restricting our addressing space.
110
111 If USE_LSB_TAG is not set, then we use the top 3 bits for tagging, thus
112 restricting our possible address range. Currently USE_LSB_TAG is not
113 allowed together with a union. This is not due to any fundamental
114 technical (or political ;-) problem: nobody wrote the code to do it yet.
115
116 USE_LSB_TAG not only requires the least 3 bits of pointers returned by
117 malloc to be 0 but also needs to be able to impose a mult-of-8 alignment
118 on the few static Lisp_Objects used: all the defsubr as well
119 as the two special buffers buffer_defaults and buffer_local_symbols. */
120
121 /* First, try and define DECL_ALIGN(type,var) which declares a static
122 variable VAR of type TYPE with the added requirement that it be
123 TYPEBITS-aligned. */
124 #ifndef NO_DECL_ALIGN
125 # ifndef DECL_ALIGN
126 /* What compiler directive should we use for non-gcc compilers? -stef */
127 # if defined (__GNUC__)
128 # define DECL_ALIGN(type, var) \
129 type __attribute__ ((__aligned__ (1 << GCTYPEBITS))) var
130 # endif
131 # endif
132 #endif
133
134 /* Let's USE_LSB_TAG on systems where we know malloc returns mult-of-8. */
135 #if defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ || defined DARWIN_OS
136 /* We also need to be able to specify mult-of-8 alignment on static vars. */
137 # if defined DECL_ALIGN
138 # define USE_LSB_TAG
139 # endif
140 #endif
141
142 /* If we cannot use 8-byte alignment, make DECL_ALIGN a no-op. */
143 #ifndef DECL_ALIGN
144 # ifdef USE_LSB_TAG
145 # error "USE_LSB_TAG used without defining DECL_ALIGN"
146 # endif
147 # define DECL_ALIGN(type, var) type var
148 #endif
149
150
151 /* Define the fundamental Lisp data structures. */
152
153 /* If USE_2_TAGBITS_FOR_INTS is defined, then Lisp integers use
154 2 tags, to give them one extra bit, thus extending their range from
155 e.g -2^28..2^28-1 to -2^29..2^29-1. */
156 #define USE_2_TAGS_FOR_INTS
157
158 /* Making it work for the union case is too much trouble. */
159 #ifdef USE_LISP_UNION_TYPE
160 # undef USE_2_TAGS_FOR_INTS
161 #endif
162
163 /* This is the set of Lisp data types. */
164
165 #if !defined USE_2_TAGS_FOR_INTS
166 # define LISP_INT_TAG Lisp_Int
167 # define case_Lisp_Int case Lisp_Int
168 # define LISP_STRING_TAG 4
169 # define LISP_INT_TAG_P(x) ((x) == Lisp_Int)
170 #else
171 # define LISP_INT_TAG Lisp_Int0
172 # define case_Lisp_Int case Lisp_Int0: case Lisp_Int1
173 # ifdef USE_LSB_TAG
174 # define LISP_INT1_TAG 4
175 # define LISP_STRING_TAG 1
176 # define LISP_INT_TAG_P(x) (((x) & 3) == 0)
177 # else
178 # define LISP_INT1_TAG 1
179 # define LISP_STRING_TAG 4
180 # define LISP_INT_TAG_P(x) (((x) & 6) == 0)
181 # endif
182 #endif
183
184 enum Lisp_Type
185 {
186 /* Integer. XINT (obj) is the integer value. */
187 #ifdef USE_2_TAGS_FOR_INTS
188 Lisp_Int0 = 0,
189 Lisp_Int1 = LISP_INT1_TAG,
190 #else
191 Lisp_Int = 0,
192 #endif
193
194 /* Symbol. XSYMBOL (object) points to a struct Lisp_Symbol. */
195 Lisp_Symbol = 2,
196
197 /* Miscellaneous. XMISC (object) points to a union Lisp_Misc,
198 whose first member indicates the subtype. */
199 Lisp_Misc = 3,
200
201 /* String. XSTRING (object) points to a struct Lisp_String.
202 The length of the string, and its contents, are stored therein. */
203 Lisp_String = LISP_STRING_TAG,
204
205 /* Vector of Lisp objects, or something resembling it.
206 XVECTOR (object) points to a struct Lisp_Vector, which contains
207 the size and contents. The size field also contains the type
208 information, if it's not a real vector object. */
209 Lisp_Vectorlike = 5,
210
211 /* Cons. XCONS (object) points to a struct Lisp_Cons. */
212 Lisp_Cons = 6,
213
214 Lisp_Float = 7,
215 };
216
217 /* This is the set of data types that share a common structure.
218 The first member of the structure is a type code from this set.
219 The enum values are arbitrary, but we'll use large numbers to make it
220 more likely that we'll spot the error if a random word in memory is
221 mistakenly interpreted as a Lisp_Misc. */
222 enum Lisp_Misc_Type
223 {
224 Lisp_Misc_Free = 0x5eab,
225 Lisp_Misc_Marker,
226 Lisp_Misc_Intfwd,
227 Lisp_Misc_Boolfwd,
228 Lisp_Misc_Objfwd,
229 Lisp_Misc_Buffer_Objfwd,
230 Lisp_Misc_Buffer_Local_Value,
231 Lisp_Misc_Overlay,
232 Lisp_Misc_Kboard_Objfwd,
233 Lisp_Misc_Save_Value,
234 /* Currently floats are not a misc type,
235 but let's define this in case we want to change that. */
236 Lisp_Misc_Float,
237 /* This is not a type code. It is for range checking. */
238 Lisp_Misc_Limit
239 };
240
241 #ifndef GCTYPEBITS
242 #define GCTYPEBITS 3
243 #endif
244
245 /* These values are overridden by the m- file on some machines. */
246 #ifndef VALBITS
247 #define VALBITS (BITS_PER_EMACS_INT - GCTYPEBITS)
248 #endif
249
250 #ifdef USE_LISP_UNION_TYPE
251
252 #ifndef WORDS_BIG_ENDIAN
253
254 /* Definition of Lisp_Object for little-endian machines. */
255
256 typedef
257 union Lisp_Object
258 {
259 /* Used for comparing two Lisp_Objects;
260 also, positive integers can be accessed fast this way. */
261 EMACS_UINT i;
262
263 struct
264 {
265 EMACS_INT val : VALBITS;
266 enum Lisp_Type type : GCTYPEBITS;
267 } s;
268 struct
269 {
270 EMACS_UINT val : VALBITS;
271 enum Lisp_Type type : GCTYPEBITS;
272 } u;
273 }
274 Lisp_Object;
275
276 #else /* If WORDS_BIG_ENDIAN */
277
278 typedef
279 union Lisp_Object
280 {
281 /* Used for comparing two Lisp_Objects;
282 also, positive integers can be accessed fast this way. */
283 EMACS_UINT i;
284
285 struct
286 {
287 enum Lisp_Type type : GCTYPEBITS;
288 EMACS_INT val : VALBITS;
289 } s;
290 struct
291 {
292 enum Lisp_Type type : GCTYPEBITS;
293 EMACS_UINT val : VALBITS;
294 } u;
295 }
296 Lisp_Object;
297
298 #endif /* WORDS_BIG_ENDIAN */
299
300 #ifdef __GNUC__
301 static __inline__ Lisp_Object
302 LISP_MAKE_RVALUE (Lisp_Object o)
303 {
304 return o;
305 }
306 #else
307 /* This isn't quite right - it keeps the argument as an lvalue.
308 Making it const via casting would help avoid code actually
309 modifying the location in question, but the casting could cover
310 other type-related bugs. */
311 #define LISP_MAKE_RVALUE(o) (o)
312 #endif
313
314 #else /* USE_LISP_UNION_TYPE */
315
316 /* If union type is not wanted, define Lisp_Object as just a number. */
317
318 typedef EMACS_INT Lisp_Object;
319 #define LISP_MAKE_RVALUE(o) (0+(o))
320 #endif /* USE_LISP_UNION_TYPE */
321
322 /* In the size word of a vector, this bit means the vector has been marked. */
323
324 #define ARRAY_MARK_FLAG ((EMACS_UINT) 1 << (BITS_PER_EMACS_INT - 1))
325
326 /* In the size word of a struct Lisp_Vector, this bit means it's really
327 some other vector-like object. */
328 #define PSEUDOVECTOR_FLAG ((ARRAY_MARK_FLAG >> 1))
329
330 /* In a pseudovector, the size field actually contains a word with one
331 PSEUDOVECTOR_FLAG bit set, and exactly one of the following bits to
332 indicate the actual type.
333 We use a bitset, even tho only one of the bits can be set at any
334 particular time just so as to be able to use micro-optimizations such as
335 testing membership of a particular subset of pseudovectors in Fequal.
336 It is not crucial, but there are plenty of bits here, so why not do it? */
337 enum pvec_type
338 {
339 PVEC_NORMAL_VECTOR = 0,
340 PVEC_PROCESS = 0x200,
341 PVEC_FRAME = 0x400,
342 PVEC_COMPILED = 0x800,
343 PVEC_WINDOW = 0x1000,
344 PVEC_WINDOW_CONFIGURATION = 0x2000,
345 PVEC_SUBR = 0x4000,
346 PVEC_CHAR_TABLE = 0x8000,
347 PVEC_BOOL_VECTOR = 0x10000,
348 PVEC_BUFFER = 0x20000,
349 PVEC_HASH_TABLE = 0x40000,
350 PVEC_TERMINAL = 0x80000,
351 PVEC_SUB_CHAR_TABLE = 0x100000,
352 PVEC_FONT = 0x200000,
353 PVEC_OTHER = 0x400000,
354 PVEC_TYPE_MASK = 0x7ffe00
355
356 #if 0 /* This is used to make the value of PSEUDOVECTOR_FLAG available to
357 GDB. It doesn't work on OS Alpha. Moved to a variable in
358 emacs.c. */
359 PVEC_FLAG = PSEUDOVECTOR_FLAG
360 #endif
361 };
362
363 /* For convenience, we also store the number of elements in these bits.
364 Note that this size is not necessarily the memory-footprint size, but
365 only the number of Lisp_Object fields (that need to be traced by the GC).
366 The distinction is used e.g. by Lisp_Process which places extra
367 non-Lisp_Object fields at the end of the structure. */
368 #define PSEUDOVECTOR_SIZE_MASK 0x1ff
369
370 /* Number of bits to put in each character in the internal representation
371 of bool vectors. This should not vary across implementations. */
372 #define BOOL_VECTOR_BITS_PER_CHAR 8
373 \f
374 /* These macros extract various sorts of values from a Lisp_Object.
375 For example, if tem is a Lisp_Object whose type is Lisp_Cons,
376 XCONS (tem) is the struct Lisp_Cons * pointing to the memory for that cons. */
377
378 #ifndef USE_LISP_UNION_TYPE
379
380 /* Return a perfect hash of the Lisp_Object representation. */
381 #define XHASH(a) (a)
382
383 #ifdef USE_LSB_TAG
384
385 #define TYPEMASK ((((EMACS_INT) 1) << GCTYPEBITS) - 1)
386 #define XTYPE(a) ((enum Lisp_Type) (((EMACS_UINT) (a)) & TYPEMASK))
387 #ifdef USE_2_TAGS_FOR_INTS
388 # define XINT(a) (((EMACS_INT) (a)) >> (GCTYPEBITS - 1))
389 # define XUINT(a) (((EMACS_UINT) (a)) >> (GCTYPEBITS - 1))
390 # define make_number(N) (((EMACS_INT) (N)) << (GCTYPEBITS - 1))
391 #else
392 # define XINT(a) (((EMACS_INT) (a)) >> GCTYPEBITS)
393 # define XUINT(a) (((EMACS_UINT) (a)) >> GCTYPEBITS)
394 # define make_number(N) (((EMACS_INT) (N)) << GCTYPEBITS)
395 #endif
396 #define XSET(var, type, ptr) \
397 (eassert (XTYPE (ptr) == 0), /* Check alignment. */ \
398 (var) = ((EMACS_INT) (type)) | ((EMACS_INT) (ptr)))
399
400 #define XPNTR(a) ((EMACS_INT) ((a) & ~TYPEMASK))
401
402 #else /* not USE_LSB_TAG */
403
404 #define VALMASK ((((EMACS_INT) 1) << VALBITS) - 1)
405
406 /* One need to override this if there must be high bits set in data space
407 (doing the result of the below & ((1 << (GCTYPE + 1)) - 1) would work
408 on all machines, but would penalize machines which don't need it)
409 */
410 #define XTYPE(a) ((enum Lisp_Type) (((EMACS_UINT) (a)) >> VALBITS))
411
412 /* For integers known to be positive, XFASTINT provides fast retrieval
413 and XSETFASTINT provides fast storage. This takes advantage of the
414 fact that Lisp_Int is 0. */
415 #define XFASTINT(a) ((a) + 0)
416 #define XSETFASTINT(a, b) ((a) = (b))
417
418 /* Extract the value of a Lisp_Object as a (un)signed integer. */
419
420 #ifdef USE_2_TAGS_FOR_INTS
421 # define XINT(a) ((((EMACS_INT) (a)) << (GCTYPEBITS - 1)) >> (GCTYPEBITS - 1))
422 # define XUINT(a) ((EMACS_UINT) ((a) & (1 + (VALMASK << 1))))
423 # define make_number(N) ((((EMACS_INT) (N)) & (1 + (VALMASK << 1))))
424 #else
425 # define XINT(a) ((((EMACS_INT) (a)) << (BITS_PER_EMACS_INT - VALBITS)) \
426 >> (BITS_PER_EMACS_INT - VALBITS))
427 # define XUINT(a) ((EMACS_UINT) ((a) & VALMASK))
428 # define make_number(N) \
429 ((((EMACS_INT) (N)) & VALMASK) | ((EMACS_INT) Lisp_Int) << VALBITS)
430 #endif
431
432 #define XSET(var, type, ptr) \
433 ((var) = ((EMACS_INT)(type) << VALBITS) + ((EMACS_INT) (ptr) & VALMASK))
434
435 #define XPNTR(a) ((EMACS_UINT) ((a) & VALMASK))
436
437 #endif /* not USE_LSB_TAG */
438
439 #else /* USE_LISP_UNION_TYPE */
440
441 #ifdef USE_2_TAGS_FOR_INTS
442 # error "USE_2_TAGS_FOR_INTS is not supported with USE_LISP_UNION_TYPE"
443 #endif
444
445 #define XHASH(a) ((a).i)
446
447 #define XTYPE(a) ((enum Lisp_Type) (a).u.type)
448
449 #ifdef EXPLICIT_SIGN_EXTEND
450 /* Make sure we sign-extend; compilers have been known to fail to do so.
451 We additionally cast to EMACS_INT since it seems that some compilers
452 have been known to fail to do so, even though the bitfield is declared
453 as EMACS_INT already. */
454 #define XINT(a) ((((EMACS_INT) (a).s.val) << (BITS_PER_EMACS_INT - VALBITS)) \
455 >> (BITS_PER_EMACS_INT - VALBITS))
456 #else
457 #define XINT(a) ((a).s.val)
458 #endif /* EXPLICIT_SIGN_EXTEND */
459
460 #define XUINT(a) ((a).u.val)
461
462 #ifdef USE_LSB_TAG
463
464 # define XSET(var, vartype, ptr) \
465 (eassert ((((EMACS_UINT) (ptr)) & ((1 << GCTYPEBITS) - 1)) == 0), \
466 (var).u.val = ((EMACS_UINT) (ptr)) >> GCTYPEBITS, \
467 (var).u.type = ((char) (vartype)))
468
469 /* Some versions of gcc seem to consider the bitfield width when issuing
470 the "cast to pointer from integer of different size" warning, so the
471 cast is here to widen the value back to its natural size. */
472 # define XPNTR(v) ((EMACS_INT)((v).s.val) << GCTYPEBITS)
473
474 #else /* !USE_LSB_TAG */
475
476 /* For integers known to be positive, XFASTINT provides fast retrieval
477 and XSETFASTINT provides fast storage. This takes advantage of the
478 fact that Lisp_Int is 0. */
479 # define XFASTINT(a) ((a).i + 0)
480 # define XSETFASTINT(a, b) ((a).i = (b))
481
482 # define XSET(var, vartype, ptr) \
483 (((var).s.val = ((EMACS_INT) (ptr))), ((var).s.type = ((char) (vartype))))
484
485 #endif /* !USE_LSB_TAG */
486
487 #if __GNUC__ >= 2 && defined (__OPTIMIZE__)
488 #define make_number(N) \
489 (__extension__ ({ Lisp_Object _l; _l.s.val = (N); _l.s.type = Lisp_Int; _l; }))
490 #else
491 extern Lisp_Object make_number P_ ((EMACS_INT));
492 #endif
493
494 #endif /* USE_LISP_UNION_TYPE */
495
496 /* For integers known to be positive, XFASTINT sometimes provides
497 faster retrieval and XSETFASTINT provides faster storage.
498 If not, fallback on the non-accelerated path. */
499 #ifndef XFASTINT
500 # define XFASTINT(a) (XINT (a))
501 # define XSETFASTINT(a, b) (XSETINT (a, b))
502 #endif
503
504 #define EQ(x, y) (XHASH (x) == XHASH (y))
505
506 #ifndef XPNTR
507 #ifdef HAVE_SHM
508 /* In this representation, data is found in two widely separated segments. */
509 extern size_t pure_size;
510 #define XPNTR(a) \
511 (XUINT (a) | (XUINT (a) > pure_size ? DATA_SEG_BITS : PURE_SEG_BITS))
512 #else /* not HAVE_SHM */
513 #ifdef DATA_SEG_BITS
514 /* This case is used for the rt-pc.
515 In the diffs I was given, it checked for ptr = 0
516 and did not adjust it in that case.
517 But I don't think that zero should ever be found
518 in a Lisp object whose data type says it points to something. */
519 #define XPNTR(a) (XUINT (a) | DATA_SEG_BITS)
520 #else
521 /* Some versions of gcc seem to consider the bitfield width when
522 issuing the "cast to pointer from integer of different size"
523 warning, so the cast is here to widen the value back to its natural
524 size. */
525 #define XPNTR(a) ((EMACS_INT) XUINT (a))
526 #endif
527 #endif /* not HAVE_SHM */
528 #endif /* no XPNTR */
529
530 /* Largest and smallest representable fixnum values. These are the C
531 values. */
532
533 #ifdef USE_2_TAGS_FOR_INTS
534 # define MOST_NEGATIVE_FIXNUM - ((EMACS_INT) 1 << VALBITS)
535 # define MOST_POSITIVE_FIXNUM (((EMACS_INT) 1 << VALBITS) - 1)
536 /* Mask indicating the significant bits of a Lisp_Int.
537 I.e. (x & INTMASK) == XUINT (make_number (x)). */
538 # define INTMASK ((((EMACS_INT) 1) << (VALBITS + 1)) - 1)
539 #else
540 # define MOST_NEGATIVE_FIXNUM - ((EMACS_INT) 1 << (VALBITS - 1))
541 # define MOST_POSITIVE_FIXNUM (((EMACS_INT) 1 << (VALBITS - 1)) - 1)
542 /* Mask indicating the significant bits of a Lisp_Int.
543 I.e. (x & INTMASK) == XUINT (make_number (x)). */
544 # define INTMASK ((((EMACS_INT) 1) << VALBITS) - 1)
545 #endif
546
547 /* Value is non-zero if I doesn't fit into a Lisp fixnum. It is
548 written this way so that it also works if I is of unsigned
549 type. */
550
551 #define FIXNUM_OVERFLOW_P(i) \
552 ((i) > MOST_POSITIVE_FIXNUM \
553 || ((i) < 0 && (i) < MOST_NEGATIVE_FIXNUM))
554
555 /* Extract a value or address from a Lisp_Object. */
556
557 #define XCONS(a) (eassert (CONSP(a)),(struct Lisp_Cons *) XPNTR(a))
558 #define XVECTOR(a) (eassert (VECTORLIKEP(a)),(struct Lisp_Vector *) XPNTR(a))
559 #define XSTRING(a) (eassert (STRINGP(a)),(struct Lisp_String *) XPNTR(a))
560 #define XSYMBOL(a) (eassert (SYMBOLP(a)),(struct Lisp_Symbol *) XPNTR(a))
561 #define XFLOAT(a) (eassert (FLOATP(a)),(struct Lisp_Float *) XPNTR(a))
562
563 /* Misc types. */
564
565 #define XMISC(a) ((union Lisp_Misc *) XPNTR(a))
566 #define XMISCANY(a) (eassert (MISCP (a)), &(XMISC(a)->u_any))
567 #define XMISCTYPE(a) (XMISCANY (a)->type)
568 #define XMARKER(a) (eassert (MARKERP (a)), &(XMISC(a)->u_marker))
569 #define XINTFWD(a) (eassert (INTFWDP (a)), &(XMISC(a)->u_intfwd))
570 #define XBOOLFWD(a) (eassert (BOOLFWDP (a)), &(XMISC(a)->u_boolfwd))
571 #define XOBJFWD(a) (eassert (OBJFWDP (a)), &(XMISC(a)->u_objfwd))
572 #define XOVERLAY(a) (eassert (OVERLAYP (a)), &(XMISC(a)->u_overlay))
573 #define XSAVE_VALUE(a) (eassert (SAVE_VALUEP (a)), &(XMISC(a)->u_save_value))
574 #define XBUFFER_OBJFWD(a) \
575 (eassert (BUFFER_OBJFWDP (a)), &(XMISC(a)->u_buffer_objfwd))
576 #define XBUFFER_LOCAL_VALUE(a) \
577 (eassert (BUFFER_LOCAL_VALUEP (a)), &(XMISC(a)->u_buffer_local_value))
578 #define XKBOARD_OBJFWD(a) \
579 (eassert (KBOARD_OBJFWDP (a)), &(XMISC(a)->u_kboard_objfwd))
580
581 /* Pseudovector types. */
582
583 #define XPROCESS(a) (eassert (PROCESSP(a)),(struct Lisp_Process *) XPNTR(a))
584 #define XWINDOW(a) (eassert (WINDOWP(a)),(struct window *) XPNTR(a))
585 #define XTERMINAL(a) (eassert (TERMINALP(a)),(struct terminal *) XPNTR(a))
586 #define XSUBR(a) (eassert (SUBRP(a)),(struct Lisp_Subr *) XPNTR(a))
587 #define XBUFFER(a) (eassert (BUFFERP(a)),(struct buffer *) XPNTR(a))
588 #define XCHAR_TABLE(a) (eassert (CHAR_TABLE_P (a)), (struct Lisp_Char_Table *) XPNTR(a))
589 #define XSUB_CHAR_TABLE(a) (eassert (SUB_CHAR_TABLE_P (a)), (struct Lisp_Sub_Char_Table *) XPNTR(a))
590 #define XBOOL_VECTOR(a) (eassert (BOOL_VECTOR_P (a)), (struct Lisp_Bool_Vector *) XPNTR(a))
591
592 /* Construct a Lisp_Object from a value or address. */
593
594 #define XSETINT(a, b) (a) = make_number (b)
595 #define XSETCONS(a, b) XSET (a, Lisp_Cons, b)
596 #define XSETVECTOR(a, b) XSET (a, Lisp_Vectorlike, b)
597 #define XSETSTRING(a, b) XSET (a, Lisp_String, b)
598 #define XSETSYMBOL(a, b) XSET (a, Lisp_Symbol, b)
599 #define XSETFLOAT(a, b) XSET (a, Lisp_Float, b)
600
601 /* Misc types. */
602
603 #define XSETMISC(a, b) XSET (a, Lisp_Misc, b)
604 #define XSETMARKER(a, b) (XSETMISC (a, b), XMISCTYPE (a) = Lisp_Misc_Marker)
605
606 /* Pseudovector types. */
607
608 #define XSETPVECTYPE(v,code) ((v)->size |= PSEUDOVECTOR_FLAG | (code))
609 #define XSETPSEUDOVECTOR(a, b, code) \
610 (XSETVECTOR (a, b), \
611 eassert ((XVECTOR (a)->size & (PSEUDOVECTOR_FLAG | PVEC_TYPE_MASK)) \
612 == (PSEUDOVECTOR_FLAG | (code))))
613 #define XSETWINDOW_CONFIGURATION(a, b) \
614 (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW_CONFIGURATION))
615 #define XSETPROCESS(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_PROCESS))
616 #define XSETWINDOW(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_WINDOW))
617 #define XSETTERMINAL(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_TERMINAL))
618 #define XSETSUBR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUBR))
619 #define XSETCOMPILED(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_COMPILED))
620 #define XSETBUFFER(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BUFFER))
621 #define XSETCHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_CHAR_TABLE))
622 #define XSETBOOL_VECTOR(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_BOOL_VECTOR))
623 #define XSETSUB_CHAR_TABLE(a, b) (XSETPSEUDOVECTOR (a, b, PVEC_SUB_CHAR_TABLE))
624
625 /* Convenience macros for dealing with Lisp arrays. */
626
627 #define AREF(ARRAY, IDX) XVECTOR ((ARRAY))->contents[IDX]
628 #define ASIZE(ARRAY) XVECTOR ((ARRAY))->size
629 /* The IDX==IDX tries to detect when the macro argument is side-effecting. */
630 #define ASET(ARRAY, IDX, VAL) \
631 (eassert ((IDX) == (IDX)), \
632 eassert ((IDX) >= 0 && (IDX) < ASIZE (ARRAY)), \
633 AREF ((ARRAY), (IDX)) = (VAL))
634
635 /* Convenience macros for dealing with Lisp strings. */
636
637 #define SDATA(string) (XSTRING (string)->data + 0)
638 #define SREF(string, index) (SDATA (string)[index] + 0)
639 #define SSET(string, index, new) (SDATA (string)[index] = (new))
640 #define SCHARS(string) (XSTRING (string)->size + 0)
641 #define SBYTES(string) (STRING_BYTES (XSTRING (string)) + 0)
642
643 #define STRING_SET_CHARS(string, newsize) \
644 (XSTRING (string)->size = (newsize))
645
646 #define STRING_COPYIN(string, index, new, count) \
647 bcopy (new, SDATA (string) + index, count)
648
649 /* Type checking. */
650
651 #define CHECK_TYPE(ok, Qxxxp, x) \
652 do { if (!(ok)) wrong_type_argument (Qxxxp, (x)); } while (0)
653
654
655 \f
656 /* See the macros in intervals.h. */
657
658 typedef struct interval *INTERVAL;
659
660 /* Complain if object is not string or buffer type */
661 #define CHECK_STRING_OR_BUFFER(x) \
662 CHECK_TYPE (STRINGP (x) || BUFFERP (x), Qbuffer_or_string_p, x)
663
664 \f
665 /* In a cons, the markbit of the car is the gc mark bit */
666
667 struct Lisp_Cons
668 {
669 /* Please do not use the names of these elements in code other
670 than the core lisp implementation. Use XCAR and XCDR below. */
671 #ifdef HIDE_LISP_IMPLEMENTATION
672 Lisp_Object car_;
673 union
674 {
675 Lisp_Object cdr_;
676 struct Lisp_Cons *chain;
677 } u;
678 #else
679 Lisp_Object car;
680 union
681 {
682 Lisp_Object cdr;
683 struct Lisp_Cons *chain;
684 } u;
685 #endif
686 };
687
688 /* Take the car or cdr of something known to be a cons cell. */
689 /* The _AS_LVALUE macros shouldn't be used outside of the minimal set
690 of code that has to know what a cons cell looks like. Other code not
691 part of the basic lisp implementation should assume that the car and cdr
692 fields are not accessible as lvalues. (What if we want to switch to
693 a copying collector someday? Cached cons cell field addresses may be
694 invalidated at arbitrary points.) */
695 #ifdef HIDE_LISP_IMPLEMENTATION
696 #define XCAR_AS_LVALUE(c) (XCONS ((c))->car_)
697 #define XCDR_AS_LVALUE(c) (XCONS ((c))->u.cdr_)
698 #else
699 #define XCAR_AS_LVALUE(c) (XCONS ((c))->car)
700 #define XCDR_AS_LVALUE(c) (XCONS ((c))->u.cdr)
701 #endif
702
703 /* Use these from normal code. */
704 #define XCAR(c) LISP_MAKE_RVALUE(XCAR_AS_LVALUE(c))
705 #define XCDR(c) LISP_MAKE_RVALUE(XCDR_AS_LVALUE(c))
706
707 /* Use these to set the fields of a cons cell.
708
709 Note that both arguments may refer to the same object, so 'n'
710 should not be read after 'c' is first modified. Also, neither
711 argument should be evaluated more than once; side effects are
712 especially common in the second argument. */
713 #define XSETCAR(c,n) (XCAR_AS_LVALUE(c) = (n))
714 #define XSETCDR(c,n) (XCDR_AS_LVALUE(c) = (n))
715
716 /* For performance: Fast storage of positive integers into the
717 fields of a cons cell. See above caveats. */
718 #define XSETCARFASTINT(c,n) XSETFASTINT(XCAR_AS_LVALUE(c),(n))
719 #define XSETCDRFASTINT(c,n) XSETFASTINT(XCDR_AS_LVALUE(c),(n))
720
721 /* Take the car or cdr of something whose type is not known. */
722 #define CAR(c) \
723 (CONSP ((c)) ? XCAR ((c)) \
724 : NILP ((c)) ? Qnil \
725 : wrong_type_argument (Qlistp, (c)))
726
727 #define CDR(c) \
728 (CONSP ((c)) ? XCDR ((c)) \
729 : NILP ((c)) ? Qnil \
730 : wrong_type_argument (Qlistp, (c)))
731
732 /* Take the car or cdr of something whose type is not known. */
733 #define CAR_SAFE(c) \
734 (CONSP ((c)) ? XCAR ((c)) : Qnil)
735
736 #define CDR_SAFE(c) \
737 (CONSP ((c)) ? XCDR ((c)) : Qnil)
738
739 /* Nonzero if STR is a multibyte string. */
740 #define STRING_MULTIBYTE(STR) \
741 (XSTRING (STR)->size_byte >= 0)
742
743 /* Return the length in bytes of STR. */
744
745 #ifdef GC_CHECK_STRING_BYTES
746
747 struct Lisp_String;
748 extern int string_bytes P_ ((struct Lisp_String *));
749 #define STRING_BYTES(S) string_bytes ((S))
750
751 #else /* not GC_CHECK_STRING_BYTES */
752
753 #define STRING_BYTES(STR) \
754 ((STR)->size_byte < 0 ? (STR)->size : (STR)->size_byte)
755
756 #endif /* not GC_CHECK_STRING_BYTES */
757
758 /* Mark STR as a unibyte string. */
759 #define STRING_SET_UNIBYTE(STR) \
760 do { if (EQ (STR, empty_multibyte_string)) \
761 (STR) = empty_unibyte_string; \
762 else XSTRING (STR)->size_byte = -1; } while (0)
763
764 /* Mark STR as a multibyte string. Assure that STR contains only
765 ASCII characters in advance. */
766 #define STRING_SET_MULTIBYTE(STR) \
767 do { if (EQ (STR, empty_unibyte_string)) \
768 (STR) = empty_multibyte_string; \
769 else XSTRING (STR)->size_byte = XSTRING (STR)->size; } while (0)
770
771 /* Get text properties. */
772 #define STRING_INTERVALS(STR) (XSTRING (STR)->intervals + 0)
773
774 /* Set text properties. */
775 #define STRING_SET_INTERVALS(STR, INT) (XSTRING (STR)->intervals = (INT))
776
777 /* In a string or vector, the sign bit of the `size' is the gc mark bit */
778
779 struct Lisp_String
780 {
781 EMACS_INT size;
782 EMACS_INT size_byte;
783 INTERVAL intervals; /* text properties in this string */
784 unsigned char *data;
785 };
786
787 #ifdef offsetof
788 #define OFFSETOF(type,field) offsetof(type,field)
789 #else
790 #define OFFSETOF(type,field) \
791 ((int)((char*)&((type*)0)->field - (char*)0))
792 #endif
793
794 struct Lisp_Vector
795 {
796 EMACS_UINT size;
797 struct Lisp_Vector *next;
798 Lisp_Object contents[1];
799 };
800
801 /* If a struct is made to look like a vector, this macro returns the length
802 of the shortest vector that would hold that struct. */
803 #define VECSIZE(type) ((sizeof (type) \
804 - OFFSETOF (struct Lisp_Vector, contents[0]) \
805 + sizeof(Lisp_Object) - 1) /* round up */ \
806 / sizeof (Lisp_Object))
807
808 /* Like VECSIZE, but used when the pseudo-vector has non-Lisp_Object fields
809 at the end and we need to compute the number of Lisp_Object fields (the
810 ones that the GC needs to trace). */
811 #define PSEUDOVECSIZE(type, nonlispfield) \
812 ((OFFSETOF(type, nonlispfield) - OFFSETOF(struct Lisp_Vector, contents[0])) \
813 / sizeof (Lisp_Object))
814
815 /* A char-table is a kind of vectorlike, with contents are like a
816 vector but with a few other slots. For some purposes, it makes
817 sense to handle a char-table with type struct Lisp_Vector. An
818 element of a char table can be any Lisp objects, but if it is a sub
819 char-table, we treat it a table that contains information of a
820 specific range of characters. A sub char-table has the same
821 structure as a vector. A sub char table appears only in an element
822 of a char-table, and there's no way to access it directly from
823 Emacs Lisp program. */
824
825 /* This is the number of slots that every char table must have. This
826 counts the ordinary slots and the top, defalt, parent, and purpose
827 slots. */
828 #define CHAR_TABLE_STANDARD_SLOTS (VECSIZE (struct Lisp_Char_Table) - 1)
829
830 /* Return the number of "extra" slots in the char table CT. */
831
832 #define CHAR_TABLE_EXTRA_SLOTS(CT) \
833 (((CT)->size & PSEUDOVECTOR_SIZE_MASK) - CHAR_TABLE_STANDARD_SLOTS)
834
835 #ifdef __GNUC__
836
837 #define CHAR_TABLE_REF_ASCII(CT, IDX) \
838 ({struct Lisp_Char_Table *_tbl = NULL; \
839 Lisp_Object _val; \
840 do { \
841 _tbl = _tbl ? XCHAR_TABLE (_tbl->parent) : XCHAR_TABLE (CT); \
842 _val = (! SUB_CHAR_TABLE_P (_tbl->ascii) ? _tbl->ascii \
843 : XSUB_CHAR_TABLE (_tbl->ascii)->contents[IDX]); \
844 if (NILP (_val)) \
845 _val = _tbl->defalt; \
846 } while (NILP (_val) && ! NILP (_tbl->parent)); \
847 _val; })
848
849 #else /* not __GNUC__ */
850
851 #define CHAR_TABLE_REF_ASCII(CT, IDX) \
852 (! NILP (XCHAR_TABLE (CT)->ascii) \
853 ? (! SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii) \
854 ? XCHAR_TABLE (CT)->ascii \
855 : ! NILP (XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX]) \
856 ? XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX] \
857 : char_table_ref ((CT), (IDX))) \
858 : char_table_ref ((CT), (IDX)))
859
860 #endif /* not __GNUC__ */
861
862 /* Almost equivalent to Faref (CT, IDX) with optimization for ASCII
863 characters. Do not check validity of CT. */
864 #define CHAR_TABLE_REF(CT, IDX) \
865 (ASCII_CHAR_P (IDX) ? CHAR_TABLE_REF_ASCII ((CT), (IDX)) \
866 : char_table_ref ((CT), (IDX)))
867
868 /* Almost equivalent to Faref (CT, IDX). However, if the result is
869 not a character, return IDX.
870
871 For these characters, do not check validity of CT
872 and do not follow parent. */
873 #define CHAR_TABLE_TRANSLATE(CT, IDX) \
874 char_table_translate (CT, IDX)
875
876 /* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and
877 8-bit European characters. Do not check validity of CT. */
878 #define CHAR_TABLE_SET(CT, IDX, VAL) \
879 (((IDX) >= 0 && ASCII_CHAR_P (IDX) \
880 && SUB_CHAR_TABLE_P (XCHAR_TABLE (CT)->ascii)) \
881 ? XSUB_CHAR_TABLE (XCHAR_TABLE (CT)->ascii)->contents[IDX] = VAL \
882 : char_table_set (CT, IDX, VAL))
883
884 #define CHARTAB_SIZE_BITS_0 6
885 #define CHARTAB_SIZE_BITS_1 4
886 #define CHARTAB_SIZE_BITS_2 5
887 #define CHARTAB_SIZE_BITS_3 7
888
889 extern const int chartab_size[4];
890
891 struct Lisp_Sub_Char_Table;
892
893 struct Lisp_Char_Table
894 {
895 /* This is the vector's size field, which also holds the
896 pseudovector type information. It holds the size, too.
897 The size counts the defalt, parent, purpose, ascii,
898 contents, and extras slots. */
899 EMACS_UINT size;
900 struct Lisp_Vector *next;
901
902 /* This holds a default value,
903 which is used whenever the value for a specific character is nil. */
904 Lisp_Object defalt;
905
906 /* This points to another char table, which we inherit from when the
907 value for a specific character is nil. The `defalt' slot takes
908 precedence over this. */
909 Lisp_Object parent;
910
911 /* This is a symbol which says what kind of use this char-table is
912 meant for. */
913 Lisp_Object purpose;
914
915 /* The bottom sub char-table for characters of the range 0..127. It
916 is nil if none of ASCII character has a specific value. */
917 Lisp_Object ascii;
918
919 Lisp_Object contents[(1 << CHARTAB_SIZE_BITS_0)];
920
921 /* These hold additional data. It is a vector. */
922 Lisp_Object extras[1];
923 };
924
925 struct Lisp_Sub_Char_Table
926 {
927 /* This is the vector's size field, which also holds the
928 pseudovector type information. It holds the size, too. */
929 EMACS_INT size;
930 struct Lisp_Vector *next;
931
932 /* Depth of this sub char-table. It should be 1, 2, or 3. A sub
933 char-table of depth 1 contains 16 elments, and each element
934 covers 4096 (128*32) characters. A sub char-table of depth 2
935 contains 32 elements, and each element covers 128 characters. A
936 sub char-table of depth 3 contains 128 elements, and each element
937 is for one character. */
938 Lisp_Object depth;
939
940 /* Minimum character covered by the sub char-table. */
941 Lisp_Object min_char;
942
943 Lisp_Object contents[1];
944 };
945
946 /* A boolvector is a kind of vectorlike, with contents are like a string. */
947 struct Lisp_Bool_Vector
948 {
949 /* This is the vector's size field. It doesn't have the real size,
950 just the subtype information. */
951 EMACS_UINT vector_size;
952 struct Lisp_Vector *next;
953 /* This is the size in bits. */
954 EMACS_UINT size;
955 /* This contains the actual bits, packed into bytes. */
956 unsigned char data[1];
957 };
958
959 /* This structure describes a built-in function.
960 It is generated by the DEFUN macro only.
961 defsubr makes it into a Lisp object.
962
963 This type is treated in most respects as a pseudovector,
964 but since we never dynamically allocate or free them,
965 we don't need a next-vector field. */
966
967 struct Lisp_Subr
968 {
969 EMACS_UINT size;
970 Lisp_Object (*function) ();
971 short min_args, max_args;
972 const char *symbol_name;
973 char *intspec;
974 char *doc;
975 };
976
977 \f
978 /***********************************************************************
979 Symbols
980 ***********************************************************************/
981
982 /* Interned state of a symbol. */
983
984 enum symbol_interned
985 {
986 SYMBOL_UNINTERNED = 0,
987 SYMBOL_INTERNED = 1,
988 SYMBOL_INTERNED_IN_INITIAL_OBARRAY = 2
989 };
990
991 /* In a symbol, the markbit of the plist is used as the gc mark bit */
992
993 struct Lisp_Symbol
994 {
995 unsigned gcmarkbit : 1;
996
997 /* Non-zero means symbol serves as a variable alias. The symbol
998 holding the real value is found in the value slot. */
999 unsigned indirect_variable : 1;
1000
1001 /* Non-zero means symbol is constant, i.e. changing its value
1002 should signal an error. */
1003 unsigned constant : 1;
1004
1005 /* Interned state of the symbol. This is an enumerator from
1006 enum symbol_interned. */
1007 unsigned interned : 2;
1008
1009 /* The symbol's name, as a Lisp string.
1010
1011 The name "xname" is used to intentionally break code referring to
1012 the old field "name" of type pointer to struct Lisp_String. */
1013 Lisp_Object xname;
1014
1015 /* Value of the symbol or Qunbound if unbound. If this symbol is a
1016 defvaralias, `value' contains the symbol for which it is an
1017 alias. Use the SYMBOL_VALUE and SET_SYMBOL_VALUE macros to get
1018 and set a symbol's value, to take defvaralias into account. */
1019 Lisp_Object value;
1020
1021 /* Function value of the symbol or Qunbound if not fboundp. */
1022 Lisp_Object function;
1023
1024 /* The symbol's property list. */
1025 Lisp_Object plist;
1026
1027 /* Next symbol in obarray bucket, if the symbol is interned. */
1028 struct Lisp_Symbol *next;
1029 };
1030
1031 /* Value is name of symbol. */
1032
1033 #define SYMBOL_NAME(sym) \
1034 LISP_MAKE_RVALUE (XSYMBOL (sym)->xname)
1035
1036 /* Value is non-zero if SYM is an interned symbol. */
1037
1038 #define SYMBOL_INTERNED_P(sym) \
1039 (XSYMBOL (sym)->interned != SYMBOL_UNINTERNED)
1040
1041 /* Value is non-zero if SYM is interned in initial_obarray. */
1042
1043 #define SYMBOL_INTERNED_IN_INITIAL_OBARRAY_P(sym) \
1044 (XSYMBOL (sym)->interned == SYMBOL_INTERNED_IN_INITIAL_OBARRAY)
1045
1046 /* Value is non-zero if symbol is considered a constant, i.e. its
1047 value cannot be changed (there is an exception for keyword symbols,
1048 whose value can be set to the keyword symbol itself). */
1049
1050 #define SYMBOL_CONSTANT_P(sym) XSYMBOL (sym)->constant
1051
1052 /* Value is the value of SYM, with defvaralias taken into
1053 account. */
1054
1055 #define SYMBOL_VALUE(sym) \
1056 (XSYMBOL (sym)->indirect_variable \
1057 ? indirect_variable (XSYMBOL (sym))->value \
1058 : XSYMBOL (sym)->value)
1059
1060 /* Set SYM's value to VAL, taking defvaralias into account. */
1061
1062 #define SET_SYMBOL_VALUE(sym, val) \
1063 do { \
1064 if (XSYMBOL (sym)->indirect_variable) \
1065 indirect_variable (XSYMBOL (sym))->value = (val); \
1066 else \
1067 XSYMBOL (sym)->value = (val); \
1068 } while (0)
1069
1070 \f
1071 /***********************************************************************
1072 Hash Tables
1073 ***********************************************************************/
1074
1075 /* The structure of a Lisp hash table. */
1076
1077 struct Lisp_Hash_Table
1078 {
1079 /* Vector fields. The hash table code doesn't refer to these. */
1080 EMACS_UINT size;
1081 struct Lisp_Vector *vec_next;
1082
1083 /* Function used to compare keys. */
1084 Lisp_Object test;
1085
1086 /* Nil if table is non-weak. Otherwise a symbol describing the
1087 weakness of the table. */
1088 Lisp_Object weak;
1089
1090 /* When the table is resized, and this is an integer, compute the
1091 new size by adding this to the old size. If a float, compute the
1092 new size by multiplying the old size with this factor. */
1093 Lisp_Object rehash_size;
1094
1095 /* Resize hash table when number of entries/ table size is >= this
1096 ratio, a float. */
1097 Lisp_Object rehash_threshold;
1098
1099 /* Vector of hash codes.. If hash[I] is nil, this means that that
1100 entry I is unused. */
1101 Lisp_Object hash;
1102
1103 /* Vector used to chain entries. If entry I is free, next[I] is the
1104 entry number of the next free item. If entry I is non-free,
1105 next[I] is the index of the next entry in the collision chain. */
1106 Lisp_Object next;
1107
1108 /* Index of first free entry in free list. */
1109 Lisp_Object next_free;
1110
1111 /* Bucket vector. A non-nil entry is the index of the first item in
1112 a collision chain. This vector's size can be larger than the
1113 hash table size to reduce collisions. */
1114 Lisp_Object index;
1115
1116 /* User-supplied hash function, or nil. */
1117 Lisp_Object user_hash_function;
1118
1119 /* User-supplied key comparison function, or nil. */
1120 Lisp_Object user_cmp_function;
1121
1122 /* Only the fields above are traced normally by the GC. The ones below
1123 `count'. are special and are either ignored by the GC or traced in
1124 a special way (e.g. because of weakness). */
1125
1126 /* Number of key/value entries in the table. */
1127 unsigned int count;
1128
1129 /* Vector of keys and values. The key of item I is found at index
1130 2 * I, the value is found at index 2 * I + 1.
1131 This is gc_marked specially if the table is weak. */
1132 Lisp_Object key_and_value;
1133
1134 /* Next weak hash table if this is a weak hash table. The head
1135 of the list is in weak_hash_tables. */
1136 struct Lisp_Hash_Table *next_weak;
1137
1138 /* C function to compare two keys. */
1139 int (* cmpfn) P_ ((struct Lisp_Hash_Table *, Lisp_Object,
1140 unsigned, Lisp_Object, unsigned));
1141
1142 /* C function to compute hash code. */
1143 unsigned (* hashfn) P_ ((struct Lisp_Hash_Table *, Lisp_Object));
1144 };
1145
1146
1147 #define XHASH_TABLE(OBJ) \
1148 ((struct Lisp_Hash_Table *) XPNTR (OBJ))
1149
1150 #define XSET_HASH_TABLE(VAR, PTR) \
1151 (XSETPSEUDOVECTOR (VAR, PTR, PVEC_HASH_TABLE))
1152
1153 #define HASH_TABLE_P(OBJ) PSEUDOVECTORP (OBJ, PVEC_HASH_TABLE)
1154
1155 #define CHECK_HASH_TABLE(x) \
1156 CHECK_TYPE (HASH_TABLE_P (x), Qhash_table_p, x)
1157
1158 /* Value is the key part of entry IDX in hash table H. */
1159
1160 #define HASH_KEY(H, IDX) AREF ((H)->key_and_value, 2 * (IDX))
1161
1162 /* Value is the value part of entry IDX in hash table H. */
1163
1164 #define HASH_VALUE(H, IDX) AREF ((H)->key_and_value, 2 * (IDX) + 1)
1165
1166 /* Value is the index of the next entry following the one at IDX
1167 in hash table H. */
1168
1169 #define HASH_NEXT(H, IDX) AREF ((H)->next, (IDX))
1170
1171 /* Value is the hash code computed for entry IDX in hash table H. */
1172
1173 #define HASH_HASH(H, IDX) AREF ((H)->hash, (IDX))
1174
1175 /* Value is the index of the element in hash table H that is the
1176 start of the collision list at index IDX in the index vector of H. */
1177
1178 #define HASH_INDEX(H, IDX) AREF ((H)->index, (IDX))
1179
1180 /* Value is the size of hash table H. */
1181
1182 #define HASH_TABLE_SIZE(H) XVECTOR ((H)->next)->size
1183
1184 /* Default size for hash tables if not specified. */
1185
1186 #define DEFAULT_HASH_SIZE 65
1187
1188 /* Default threshold specifying when to resize a hash table. The
1189 value gives the ratio of current entries in the hash table and the
1190 size of the hash table. */
1191
1192 #define DEFAULT_REHASH_THRESHOLD 0.8
1193
1194 /* Default factor by which to increase the size of a hash table. */
1195
1196 #define DEFAULT_REHASH_SIZE 1.5
1197
1198 \f
1199 /* These structures are used for various misc types. */
1200
1201 struct Lisp_Misc_Any /* Supertype of all Misc types. */
1202 {
1203 enum Lisp_Misc_Type type : 16; /* = Lisp_Misc_Marker */
1204 unsigned gcmarkbit : 1;
1205 int spacer : 15;
1206 };
1207
1208 struct Lisp_Marker
1209 {
1210 enum Lisp_Misc_Type type : 16; /* = Lisp_Misc_Marker */
1211 unsigned gcmarkbit : 1;
1212 int spacer : 13;
1213 /* This flag is temporarily used in the functions
1214 decode/encode_coding_object to record that the marker position
1215 must be adjusted after the conversion. */
1216 unsigned int need_adjustment : 1;
1217 /* 1 means normal insertion at the marker's position
1218 leaves the marker after the inserted text. */
1219 unsigned int insertion_type : 1;
1220 /* This is the buffer that the marker points into, or 0 if it points nowhere.
1221 Note: a chain of markers can contain markers pointing into different
1222 buffers (the chain is per buffer_text rather than per buffer, so it's
1223 shared between indirect buffers). */
1224 /* This is used for (other than NULL-checking):
1225 - Fmarker_buffer
1226 - Fset_marker: check eq(oldbuf, newbuf) to avoid unchain+rechain.
1227 - unchain_marker: to find the list from which to unchain.
1228 - Fkill_buffer: to unchain the markers of current indirect buffer.
1229 */
1230 struct buffer *buffer;
1231
1232 /* The remaining fields are meaningless in a marker that
1233 does not point anywhere. */
1234
1235 /* For markers that point somewhere,
1236 this is used to chain of all the markers in a given buffer. */
1237 /* We could remove it and use an array in buffer_text instead.
1238 That would also allow to preserve it ordered. */
1239 struct Lisp_Marker *next;
1240 /* This is the char position where the marker points. */
1241 EMACS_INT charpos;
1242 /* This is the byte position. */
1243 EMACS_INT bytepos;
1244 };
1245
1246 /* Forwarding pointer to an int variable.
1247 This is allowed only in the value cell of a symbol,
1248 and it means that the symbol's value really lives in the
1249 specified int variable. */
1250 struct Lisp_Intfwd
1251 {
1252 int type : 16; /* = Lisp_Misc_Intfwd */
1253 unsigned gcmarkbit : 1;
1254 int spacer : 15;
1255 EMACS_INT *intvar;
1256 };
1257
1258 /* Boolean forwarding pointer to an int variable.
1259 This is like Lisp_Intfwd except that the ostensible
1260 "value" of the symbol is t if the int variable is nonzero,
1261 nil if it is zero. */
1262 struct Lisp_Boolfwd
1263 {
1264 int type : 16; /* = Lisp_Misc_Boolfwd */
1265 unsigned gcmarkbit : 1;
1266 int spacer : 15;
1267 int *boolvar;
1268 };
1269
1270 /* Forwarding pointer to a Lisp_Object variable.
1271 This is allowed only in the value cell of a symbol,
1272 and it means that the symbol's value really lives in the
1273 specified variable. */
1274 struct Lisp_Objfwd
1275 {
1276 int type : 16; /* = Lisp_Misc_Objfwd */
1277 unsigned gcmarkbit : 1;
1278 int spacer : 15;
1279 Lisp_Object *objvar;
1280 };
1281
1282 /* Like Lisp_Objfwd except that value lives in a slot in the
1283 current buffer. Value is byte index of slot within buffer. */
1284 struct Lisp_Buffer_Objfwd
1285 {
1286 int type : 16; /* = Lisp_Misc_Buffer_Objfwd */
1287 unsigned gcmarkbit : 1;
1288 int spacer : 15;
1289 Lisp_Object slottype; /* Qnil, Lisp_Int, Lisp_Symbol, or Lisp_String. */
1290 int offset;
1291 };
1292
1293 /* struct Lisp_Buffer_Local_Value is used in a symbol value cell when
1294 the symbol has buffer-local or frame-local bindings. (Exception:
1295 some buffer-local variables are built-in, with their values stored
1296 in the buffer structure itself. They are handled differently,
1297 using struct Lisp_Buffer_Objfwd.)
1298
1299 The `realvalue' slot holds the variable's current value, or a
1300 forwarding pointer to where that value is kept. This value is the
1301 one that corresponds to the loaded binding. To read or set the
1302 variable, you must first make sure the right binding is loaded;
1303 then you can access the value in (or through) `realvalue'.
1304
1305 `buffer' and `frame' are the buffer and frame for which the loaded
1306 binding was found. If those have changed, to make sure the right
1307 binding is loaded it is necessary to find which binding goes with
1308 the current buffer and selected frame, then load it. To load it,
1309 first unload the previous binding, then copy the value of the new
1310 binding into `realvalue' (or through it). Also update
1311 LOADED-BINDING to point to the newly loaded binding.
1312
1313 `local_if_set' indicates that merely setting the variable creates a local
1314 binding for the current buffer. Otherwise the latter, setting the
1315 variable does not do that; only make-local-variable does that. */
1316
1317 struct Lisp_Buffer_Local_Value
1318 {
1319 int type : 16; /* = Lisp_Misc_Buffer_Local_Value */
1320 unsigned gcmarkbit : 1;
1321 int spacer : 11;
1322
1323 /* 1 means that merely setting the variable creates a local
1324 binding for the current buffer */
1325 unsigned int local_if_set : 1;
1326 /* 1 means this variable is allowed to have frame-local bindings,
1327 so check for them when looking for the proper binding. */
1328 unsigned int check_frame : 1;
1329 /* 1 means that the binding now loaded was found
1330 as a local binding for the buffer in the `buffer' slot. */
1331 unsigned int found_for_buffer : 1;
1332 /* 1 means that the binding now loaded was found
1333 as a local binding for the frame in the `frame' slot. */
1334 unsigned int found_for_frame : 1;
1335 Lisp_Object realvalue;
1336 /* The buffer and frame for which the loaded binding was found. */
1337 /* Having both is only needed if we want to allow variables that are
1338 both buffer local and frame local (in which case, we currently give
1339 precedence to the buffer-local binding). I don't think such
1340 a combination is desirable. --Stef */
1341 Lisp_Object buffer, frame;
1342
1343 /* A cons cell, (LOADED-BINDING . DEFAULT-VALUE).
1344
1345 LOADED-BINDING is the binding now loaded. It is a cons cell
1346 whose cdr is the binding's value. The cons cell may be an
1347 element of a buffer's local-variable alist, or an element of a
1348 frame's parameter alist, or it may be this cons cell.
1349
1350 DEFAULT-VALUE is the variable's default value, seen when the
1351 current buffer and selected frame do not have their own
1352 bindings for the variable. When the default binding is loaded,
1353 LOADED-BINDING is actually this very cons cell; thus, its car
1354 points to itself. */
1355 Lisp_Object cdr;
1356 };
1357
1358 /* START and END are markers in the overlay's buffer, and
1359 PLIST is the overlay's property list. */
1360 struct Lisp_Overlay
1361 {
1362 enum Lisp_Misc_Type type : 16; /* = Lisp_Misc_Overlay */
1363 unsigned gcmarkbit : 1;
1364 int spacer : 15;
1365 struct Lisp_Overlay *next;
1366 Lisp_Object start, end, plist;
1367 };
1368
1369 /* Like Lisp_Objfwd except that value lives in a slot in the
1370 current kboard. */
1371 struct Lisp_Kboard_Objfwd
1372 {
1373 enum Lisp_Misc_Type type : 16; /* = Lisp_Misc_Kboard_Objfwd */
1374 unsigned gcmarkbit : 1;
1375 int spacer : 15;
1376 int offset;
1377 };
1378
1379 /* Hold a C pointer for later use.
1380 This type of object is used in the arg to record_unwind_protect. */
1381 struct Lisp_Save_Value
1382 {
1383 enum Lisp_Misc_Type type : 16; /* = Lisp_Misc_Save_Value */
1384 unsigned gcmarkbit : 1;
1385 int spacer : 14;
1386 /* If DOGC is set, POINTER is the address of a memory
1387 area containing INTEGER potential Lisp_Objects. */
1388 unsigned int dogc : 1;
1389 void *pointer;
1390 int integer;
1391 };
1392
1393
1394 /* A miscellaneous object, when it's on the free list. */
1395 struct Lisp_Free
1396 {
1397 enum Lisp_Misc_Type type : 16; /* = Lisp_Misc_Free */
1398 unsigned gcmarkbit : 1;
1399 int spacer : 15;
1400 union Lisp_Misc *chain;
1401 #ifdef USE_LSB_TAG
1402 /* Try to make sure that sizeof(Lisp_Misc) preserves TYPEBITS-alignment.
1403 This assumes that Lisp_Marker is the largest of the alternatives and
1404 that Lisp_Intfwd has the same size as "Lisp_Free w/o padding". */
1405 char padding[((((sizeof (struct Lisp_Marker) - 1) >> GCTYPEBITS) + 1)
1406 << GCTYPEBITS) - sizeof (struct Lisp_Intfwd)];
1407 #endif
1408 };
1409
1410 /* To get the type field of a union Lisp_Misc, use XMISCTYPE.
1411 It uses one of these struct subtypes to get the type field. */
1412
1413 union Lisp_Misc
1414 {
1415 struct Lisp_Misc_Any u_any; /* Supertype of all Misc types. */
1416 struct Lisp_Free u_free; /* Includes padding to force alignment. */
1417 struct Lisp_Marker u_marker;
1418 struct Lisp_Intfwd u_intfwd;
1419 struct Lisp_Boolfwd u_boolfwd;
1420 struct Lisp_Objfwd u_objfwd;
1421 struct Lisp_Buffer_Objfwd u_buffer_objfwd;
1422 struct Lisp_Buffer_Local_Value u_buffer_local_value;
1423 struct Lisp_Overlay u_overlay;
1424 struct Lisp_Kboard_Objfwd u_kboard_objfwd;
1425 struct Lisp_Save_Value u_save_value;
1426 };
1427 \f
1428 /* Lisp floating point type */
1429 struct Lisp_Float
1430 {
1431 union
1432 {
1433 #ifdef HIDE_LISP_IMPLEMENTATION
1434 double data_;
1435 #else
1436 double data;
1437 #endif
1438 struct Lisp_Float *chain;
1439 } u;
1440 };
1441
1442 #ifdef HIDE_LISP_IMPLEMENTATION
1443 #define XFLOAT_DATA(f) (XFLOAT (f)->u.data_ + 0)
1444 #else
1445 #define XFLOAT_DATA(f) (XFLOAT (f)->u.data + 0)
1446 /* This should be used only in alloc.c, which always disables
1447 HIDE_LISP_IMPLEMENTATION. */
1448 #define XFLOAT_INIT(f,n) (XFLOAT (f)->u.data = (n))
1449 #endif
1450
1451 /* A character, declared with the following typedef, is a member
1452 of some character set associated with the current buffer. */
1453 #ifndef _UCHAR_T /* Protect against something in ctab.h on AIX. */
1454 #define _UCHAR_T
1455 typedef unsigned char UCHAR;
1456 #endif
1457
1458 /* Meanings of slots in a Lisp_Compiled: */
1459
1460 #define COMPILED_ARGLIST 0
1461 #define COMPILED_BYTECODE 1
1462 #define COMPILED_CONSTANTS 2
1463 #define COMPILED_STACK_DEPTH 3
1464 #define COMPILED_DOC_STRING 4
1465 #define COMPILED_INTERACTIVE 5
1466
1467 /* Flag bits in a character. These also get used in termhooks.h.
1468 Richard Stallman <rms@gnu.ai.mit.edu> thinks that MULE
1469 (MUlti-Lingual Emacs) might need 22 bits for the character value
1470 itself, so we probably shouldn't use any bits lower than 0x0400000. */
1471 #define CHAR_ALT (0x0400000)
1472 #define CHAR_SUPER (0x0800000)
1473 #define CHAR_HYPER (0x1000000)
1474 #define CHAR_SHIFT (0x2000000)
1475 #define CHAR_CTL (0x4000000)
1476 #define CHAR_META (0x8000000)
1477
1478 #define CHAR_MODIFIER_MASK \
1479 (CHAR_ALT | CHAR_SUPER | CHAR_HYPER | CHAR_SHIFT | CHAR_CTL | CHAR_META)
1480
1481
1482 /* Actually, the current Emacs uses 22 bits for the character value
1483 itself. */
1484 #define CHARACTERBITS 22
1485
1486 /* The maximum byte size consumed by push_key_description.
1487 All callers should assure that at least this size of memory is
1488 allocated at the place pointed by the second argument.
1489
1490 There are 6 modifiers, each consumes 2 chars.
1491 The octal form of a character code consumes
1492 (1 + CHARACTERBITS / 3 + 1) chars (including backslash at the head).
1493 We need one more byte for string terminator `\0'. */
1494 #define KEY_DESCRIPTION_SIZE ((2 * 6) + 1 + (CHARACTERBITS / 3) + 1 + 1)
1495
1496 \f
1497 /* The glyph datatype, used to represent characters on the display.
1498 It consists of a char code and a face id. */
1499
1500 typedef struct {
1501 int ch;
1502 int face_id;
1503 } GLYPH;
1504
1505 /* Return a glyph's character code. */
1506 #define GLYPH_CHAR(glyph) ((glyph).ch)
1507
1508 /* Return a glyph's face ID. */
1509 #define GLYPH_FACE(glyph) ((glyph).face_id)
1510
1511 #define SET_GLYPH_CHAR(glyph, char) ((glyph).ch = (char))
1512 #define SET_GLYPH_FACE(glyph, face) ((glyph).face_id = (face))
1513 #define SET_GLYPH(glyph, char, face) ((glyph).ch = (char), (glyph).face_id = (face))
1514
1515 /* Return 1 if GLYPH contains valid character code. */
1516 #define GLYPH_CHAR_VALID_P(glyph) CHAR_VALID_P (GLYPH_CHAR (glyph), 1)
1517
1518
1519 /* Glyph Code from a display vector may either be an integer which
1520 encodes a char code in the lower CHARACTERBITS bits and a (very small)
1521 face-id in the upper bits, or it may be a cons (CHAR . FACE-ID). */
1522
1523 #define GLYPH_CODE_CHAR(gc) \
1524 (CONSP (gc) ? XINT (XCAR (gc)) : INTEGERP (gc) ? (XINT (gc) & ((1 << CHARACTERBITS)-1)) : 0)
1525
1526 #define GLYPH_CODE_FACE(gc) \
1527 (CONSP (gc) ? XINT (XCDR (gc)) : INTEGERP (gc) ? (XINT (gc) >> CHARACTERBITS) : DEFAULT_FACE_ID)
1528
1529 /* Return 1 if glyph code from display vector contains valid character code. */
1530 #define GLYPH_CODE_CHAR_VALID_P(gc) CHAR_VALID_P (GLYPH_CODE_CHAR (gc), 1)
1531
1532 #define GLYPH_CODE_P(gc) ((CONSP (gc) && INTEGERP (XCAR (gc)) && INTEGERP (XCDR (gc))) || INTEGERP (gc))
1533
1534 /* Only called when GLYPH_CODE_P (gc) is true. */
1535 #define SET_GLYPH_FROM_GLYPH_CODE(glyph, gc) \
1536 do \
1537 { \
1538 if (CONSP (gc)) \
1539 SET_GLYPH (glyph, XINT (XCAR (gc)), XINT (XCDR (gc))); \
1540 else \
1541 SET_GLYPH (glyph, (XINT (gc) & ((1 << CHARACTERBITS)-1)), \
1542 (XINT (gc) >> CHARACTERBITS)); \
1543 } \
1544 while (0)
1545
1546 /* The ID of the mode line highlighting face. */
1547 #define GLYPH_MODE_LINE_FACE 1
1548 \f
1549 /* Data type checking */
1550
1551 #define NILP(x) EQ (x, Qnil)
1552
1553 #define NUMBERP(x) (INTEGERP (x) || FLOATP (x))
1554 #define NATNUMP(x) (INTEGERP (x) && XINT (x) >= 0)
1555
1556 #define INTEGERP(x) (LISP_INT_TAG_P (XTYPE ((x))))
1557 #define SYMBOLP(x) (XTYPE ((x)) == Lisp_Symbol)
1558 #define MISCP(x) (XTYPE ((x)) == Lisp_Misc)
1559 #define VECTORLIKEP(x) (XTYPE ((x)) == Lisp_Vectorlike)
1560 #define STRINGP(x) (XTYPE ((x)) == Lisp_String)
1561 #define CONSP(x) (XTYPE ((x)) == Lisp_Cons)
1562
1563 #define FLOATP(x) (XTYPE ((x)) == Lisp_Float)
1564 #define VECTORP(x) (VECTORLIKEP (x) && !(XVECTOR (x)->size & PSEUDOVECTOR_FLAG))
1565 #define OVERLAYP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Overlay)
1566 #define MARKERP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Marker)
1567 #define INTFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Intfwd)
1568 #define BOOLFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Boolfwd)
1569 #define OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Objfwd)
1570 #define BUFFER_OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Objfwd)
1571 #define BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Buffer_Local_Value)
1572 #define SOME_BUFFER_LOCAL_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Some_Buffer_Local_Value)
1573 #define KBOARD_OBJFWDP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Kboard_Objfwd)
1574 #define SAVE_VALUEP(x) (MISCP (x) && XMISCTYPE (x) == Lisp_Misc_Save_Value)
1575
1576
1577 /* True if object X is a pseudovector whose code is CODE. */
1578 #define PSEUDOVECTORP(x, code) \
1579 (VECTORLIKEP (x) \
1580 && (((XVECTOR (x)->size & (PSEUDOVECTOR_FLAG | (code)))) \
1581 == (PSEUDOVECTOR_FLAG | (code))))
1582
1583 /* Test for specific pseudovector types. */
1584 #define WINDOW_CONFIGURATIONP(x) PSEUDOVECTORP (x, PVEC_WINDOW_CONFIGURATION)
1585 #define PROCESSP(x) PSEUDOVECTORP (x, PVEC_PROCESS)
1586 #define WINDOWP(x) PSEUDOVECTORP (x, PVEC_WINDOW)
1587 #define TERMINALP(x) PSEUDOVECTORP (x, PVEC_TERMINAL)
1588 #define SUBRP(x) PSEUDOVECTORP (x, PVEC_SUBR)
1589 #define COMPILEDP(x) PSEUDOVECTORP (x, PVEC_COMPILED)
1590 #define BUFFERP(x) PSEUDOVECTORP (x, PVEC_BUFFER)
1591 #define CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_CHAR_TABLE)
1592 #define SUB_CHAR_TABLE_P(x) PSEUDOVECTORP (x, PVEC_SUB_CHAR_TABLE)
1593 #define BOOL_VECTOR_P(x) PSEUDOVECTORP (x, PVEC_BOOL_VECTOR)
1594 #define FRAMEP(x) PSEUDOVECTORP (x, PVEC_FRAME)
1595
1596 /* Test for image (image . spec) */
1597 #define IMAGEP(x) (CONSP (x) && EQ (XCAR (x), Qimage))
1598
1599 /* Array types. */
1600
1601 #define ARRAYP(x) \
1602 (VECTORP (x) || STRINGP (x) || CHAR_TABLE_P (x) || BOOL_VECTOR_P (x))
1603 \f
1604 #define CHECK_LIST(x) \
1605 CHECK_TYPE (CONSP (x) || NILP (x), Qlistp, x)
1606
1607 #define CHECK_LIST_CONS(x, y) \
1608 CHECK_TYPE (CONSP (x), Qlistp, y)
1609
1610 #define CHECK_LIST_END(x, y) \
1611 CHECK_TYPE (NILP (x), Qlistp, y)
1612
1613 #define CHECK_STRING(x) \
1614 CHECK_TYPE (STRINGP (x), Qstringp, x)
1615
1616 #define CHECK_STRING_CAR(x) \
1617 CHECK_TYPE (STRINGP (XCAR (x)), Qstringp, XCAR (x))
1618
1619 #define CHECK_CONS(x) \
1620 CHECK_TYPE (CONSP (x), Qconsp, x)
1621
1622 #define CHECK_SYMBOL(x) \
1623 CHECK_TYPE (SYMBOLP (x), Qsymbolp, x)
1624
1625 #define CHECK_CHAR_TABLE(x) \
1626 CHECK_TYPE (CHAR_TABLE_P (x), Qchar_table_p, x)
1627
1628 #define CHECK_VECTOR(x) \
1629 CHECK_TYPE (VECTORP (x), Qvectorp, x)
1630
1631 #define CHECK_VECTOR_OR_STRING(x) \
1632 CHECK_TYPE (VECTORP (x) || STRINGP (x), Qarrayp, x)
1633
1634 #define CHECK_ARRAY(x, Qxxxp) \
1635 CHECK_TYPE (ARRAYP (x), Qxxxp, x)
1636
1637 #define CHECK_VECTOR_OR_CHAR_TABLE(x) \
1638 CHECK_TYPE (VECTORP (x) || CHAR_TABLE_P (x), Qvector_or_char_table_p, x)
1639
1640 #define CHECK_BUFFER(x) \
1641 CHECK_TYPE (BUFFERP (x), Qbufferp, x)
1642
1643 #define CHECK_WINDOW(x) \
1644 CHECK_TYPE (WINDOWP (x), Qwindowp, x)
1645
1646 #define CHECK_WINDOW_CONFIGURATION(x) \
1647 CHECK_TYPE (WINDOW_CONFIGURATIONP (x), Qwindow_configuration_p, x)
1648
1649 /* This macro rejects windows on the interior of the window tree as
1650 "dead", which is what we want; this is an argument-checking macro, and
1651 the user should never get access to interior windows.
1652
1653 A window of any sort, leaf or interior, is dead if the buffer,
1654 vchild, and hchild members are all nil. */
1655
1656 #define CHECK_LIVE_WINDOW(x) \
1657 CHECK_TYPE (WINDOWP (x) && !NILP (XWINDOW (x)->buffer), Qwindow_live_p, x)
1658
1659 #define CHECK_PROCESS(x) \
1660 CHECK_TYPE (PROCESSP (x), Qprocessp, x)
1661
1662 #define CHECK_SUBR(x) \
1663 CHECK_TYPE (SUBRP (x), Qsubrp, x)
1664
1665 #define CHECK_NUMBER(x) \
1666 CHECK_TYPE (INTEGERP (x), Qintegerp, x)
1667
1668 #define CHECK_NATNUM(x) \
1669 CHECK_TYPE (NATNUMP (x), Qwholenump, x)
1670
1671 #define CHECK_MARKER(x) \
1672 CHECK_TYPE (MARKERP (x), Qmarkerp, x)
1673
1674 #define CHECK_NUMBER_COERCE_MARKER(x) \
1675 do { if (MARKERP ((x))) XSETFASTINT (x, marker_position (x)); \
1676 else CHECK_TYPE (INTEGERP (x), Qinteger_or_marker_p, x); } while (0)
1677
1678 #define XFLOATINT(n) extract_float((n))
1679
1680 #define CHECK_FLOAT(x) \
1681 CHECK_TYPE (FLOATP (x), Qfloatp, x)
1682
1683 #define CHECK_NUMBER_OR_FLOAT(x) \
1684 CHECK_TYPE (FLOATP (x) || INTEGERP (x), Qnumberp, x)
1685
1686 #define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x) \
1687 do { if (MARKERP (x)) XSETFASTINT (x, marker_position (x)); \
1688 else CHECK_TYPE (INTEGERP (x) || FLOATP (x), Qnumber_or_marker_p, x); } while (0)
1689
1690 #define CHECK_OVERLAY(x) \
1691 CHECK_TYPE (OVERLAYP (x), Qoverlayp, x)
1692
1693 /* Since we can't assign directly to the CAR or CDR fields of a cons
1694 cell, use these when checking that those fields contain numbers. */
1695 #define CHECK_NUMBER_CAR(x) \
1696 do { \
1697 Lisp_Object tmp = XCAR (x); \
1698 CHECK_NUMBER (tmp); \
1699 XSETCAR ((x), tmp); \
1700 } while (0)
1701
1702 #define CHECK_NUMBER_CDR(x) \
1703 do { \
1704 Lisp_Object tmp = XCDR (x); \
1705 CHECK_NUMBER (tmp); \
1706 XSETCDR ((x), tmp); \
1707 } while (0)
1708
1709 #define CHECK_NATNUM_CAR(x) \
1710 do { \
1711 Lisp_Object tmp = XCAR (x); \
1712 CHECK_NATNUM (tmp); \
1713 XSETCAR ((x), tmp); \
1714 } while (0)
1715
1716 #define CHECK_NATNUM_CDR(x) \
1717 do { \
1718 Lisp_Object tmp = XCDR (x); \
1719 CHECK_NATNUM (tmp); \
1720 XSETCDR ((x), tmp); \
1721 } while (0)
1722
1723 /* Cast pointers to this type to compare them. Some machines want int. */
1724 #define PNTR_COMPARISON_TYPE EMACS_UINT
1725 \f
1726 /* Define a built-in function for calling from Lisp.
1727 `lname' should be the name to give the function in Lisp,
1728 as a null-terminated C string.
1729 `fnname' should be the name of the function in C.
1730 By convention, it starts with F.
1731 `sname' should be the name for the C constant structure
1732 that records information on this function for internal use.
1733 By convention, it should be the same as `fnname' but with S instead of F.
1734 It's too bad that C macros can't compute this from `fnname'.
1735 `minargs' should be a number, the minimum number of arguments allowed.
1736 `maxargs' should be a number, the maximum number of arguments allowed,
1737 or else MANY or UNEVALLED.
1738 MANY means pass a vector of evaluated arguments,
1739 in the form of an integer number-of-arguments
1740 followed by the address of a vector of Lisp_Objects
1741 which contains the argument values.
1742 UNEVALLED means pass the list of unevaluated arguments
1743 `intspec' says how interactive arguments are to be fetched.
1744 If the string starts with a `(', `intspec' is evaluated and the resulting
1745 list is the list of arguments.
1746 If it's a string that doesn't start with `(', the value should follow
1747 the one of the doc string for `interactive'.
1748 A null string means call interactively with no arguments.
1749 `doc' is documentation for the user. */
1750
1751 /* This version of DEFUN declares a function prototype with the right
1752 arguments, so we can catch errors with maxargs at compile-time. */
1753 #define DEFUN(lname, fnname, sname, minargs, maxargs, intspec, doc) \
1754 Lisp_Object fnname DEFUN_ARGS_ ## maxargs ; \
1755 DECL_ALIGN (struct Lisp_Subr, sname) = \
1756 { PVEC_SUBR | (sizeof (struct Lisp_Subr) / sizeof (EMACS_INT)), \
1757 fnname, minargs, maxargs, lname, intspec, 0}; \
1758 Lisp_Object fnname
1759
1760 /* Note that the weird token-substitution semantics of ANSI C makes
1761 this work for MANY and UNEVALLED. */
1762 #define DEFUN_ARGS_MANY (int, Lisp_Object *)
1763 #define DEFUN_ARGS_UNEVALLED (Lisp_Object)
1764 #define DEFUN_ARGS_0 (void)
1765 #define DEFUN_ARGS_1 (Lisp_Object)
1766 #define DEFUN_ARGS_2 (Lisp_Object, Lisp_Object)
1767 #define DEFUN_ARGS_3 (Lisp_Object, Lisp_Object, Lisp_Object)
1768 #define DEFUN_ARGS_4 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
1769 #define DEFUN_ARGS_5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
1770 Lisp_Object)
1771 #define DEFUN_ARGS_6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
1772 Lisp_Object, Lisp_Object)
1773 #define DEFUN_ARGS_7 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
1774 Lisp_Object, Lisp_Object, Lisp_Object)
1775 #define DEFUN_ARGS_8 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, \
1776 Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)
1777 /* Non-zero if OBJ is a Lisp function. */
1778
1779 #define FUNCTIONP(OBJ) \
1780 ((CONSP (OBJ) && EQ (XCAR (OBJ), Qlambda)) \
1781 || (SYMBOLP (OBJ) && !NILP (Ffboundp (OBJ))) \
1782 || COMPILEDP (OBJ) \
1783 || SUBRP (OBJ))
1784
1785 /* defsubr (Sname);
1786 is how we define the symbol for function `name' at start-up time. */
1787 extern void defsubr P_ ((struct Lisp_Subr *));
1788
1789 #define MANY -2
1790 #define UNEVALLED -1
1791
1792 extern void defvar_lisp (const char *, Lisp_Object *);
1793 extern void defvar_lisp_nopro (const char *, Lisp_Object *);
1794 extern void defvar_bool (const char *, int *);
1795 extern void defvar_int (const char *, EMACS_INT *);
1796 extern void defvar_kboard (const char *, int);
1797
1798 /* Macros we use to define forwarded Lisp variables.
1799 These are used in the syms_of_FILENAME functions. */
1800
1801 #define DEFVAR_LISP(lname, vname, doc) defvar_lisp (lname, vname)
1802 #define DEFVAR_LISP_NOPRO(lname, vname, doc) defvar_lisp_nopro (lname, vname)
1803 #define DEFVAR_BOOL(lname, vname, doc) defvar_bool (lname, vname)
1804 #define DEFVAR_INT(lname, vname, doc) defvar_int (lname, vname)
1805
1806 #define DEFVAR_KBOARD(lname, vname, doc) \
1807 defvar_kboard (lname, \
1808 (int)((char *)(&current_kboard->vname) \
1809 - (char *)current_kboard))
1810
1811
1812 \f
1813 /* Structure for recording Lisp call stack for backtrace purposes. */
1814
1815 /* The special binding stack holds the outer values of variables while
1816 they are bound by a function application or a let form, stores the
1817 code to be executed for Lisp unwind-protect forms, and stores the C
1818 functions to be called for record_unwind_protect.
1819
1820 If func is non-zero, undoing this binding applies func to old_value;
1821 This implements record_unwind_protect.
1822
1823 Otherwise, the element is a variable binding.
1824
1825 If the symbol field is a symbol, it is an ordinary variable binding.
1826
1827 Otherwise, it should be a structure (SYMBOL WHERE
1828 . CURRENT-BUFFER), which means having bound a local value while
1829 CURRENT-BUFFER was active. If WHERE is nil this means we saw the
1830 default value when binding SYMBOL. WHERE being a buffer or frame
1831 means we saw a buffer-local or frame-local value. Other values of
1832 WHERE mean an internal error. */
1833
1834 typedef Lisp_Object (*specbinding_func) P_ ((Lisp_Object));
1835
1836 struct specbinding
1837 {
1838 Lisp_Object symbol, old_value;
1839 specbinding_func func;
1840 Lisp_Object unused; /* Dividing by 16 is faster than by 12 */
1841 };
1842
1843 extern struct specbinding *specpdl;
1844 extern struct specbinding *specpdl_ptr;
1845 extern int specpdl_size;
1846
1847 extern EMACS_INT max_specpdl_size;
1848
1849 #define SPECPDL_INDEX() (specpdl_ptr - specpdl)
1850
1851 /* Everything needed to describe an active condition case. */
1852 struct handler
1853 {
1854 /* The handler clauses and variable from the condition-case form. */
1855 /* For a handler set up in Lisp code, this is always a list.
1856 For an internal handler set up by internal_condition_case*,
1857 this can instead be the symbol t or `error'.
1858 t: handle all conditions.
1859 error: handle all conditions, and errors can run the debugger
1860 or display a backtrace. */
1861 Lisp_Object handler;
1862 Lisp_Object var;
1863 /* Fsignal stores here the condition-case clause that applies,
1864 and Fcondition_case thus knows which clause to run. */
1865 Lisp_Object chosen_clause;
1866
1867 /* Used to effect the longjump out to the handler. */
1868 struct catchtag *tag;
1869
1870 /* The next enclosing handler. */
1871 struct handler *next;
1872 };
1873
1874 extern struct handler *handlerlist;
1875
1876 /* This structure helps implement the `catch' and `throw' control
1877 structure. A struct catchtag contains all the information needed
1878 to restore the state of the interpreter after a non-local jump.
1879
1880 Handlers for error conditions (represented by `struct handler'
1881 structures) just point to a catch tag to do the cleanup required
1882 for their jumps.
1883
1884 catchtag structures are chained together in the C calling stack;
1885 the `next' member points to the next outer catchtag.
1886
1887 A call like (throw TAG VAL) searches for a catchtag whose `tag'
1888 member is TAG, and then unbinds to it. The `val' member is used to
1889 hold VAL while the stack is unwound; `val' is returned as the value
1890 of the catch form.
1891
1892 All the other members are concerned with restoring the interpreter
1893 state. */
1894
1895 struct catchtag
1896 {
1897 Lisp_Object tag;
1898 Lisp_Object val;
1899 struct catchtag *next;
1900 struct gcpro *gcpro;
1901 jmp_buf jmp;
1902 struct backtrace *backlist;
1903 struct handler *handlerlist;
1904 int lisp_eval_depth;
1905 int pdlcount;
1906 int poll_suppress_count;
1907 int interrupt_input_blocked;
1908 struct byte_stack *byte_stack;
1909 };
1910
1911 extern struct catchtag *catchlist;
1912 extern struct backtrace *backtrace_list;
1913
1914 extern Lisp_Object memory_signal_data;
1915
1916 /* An address near the bottom of the stack.
1917 Tells GC how to save a copy of the stack. */
1918 extern char *stack_bottom;
1919
1920 /* Check quit-flag and quit if it is non-nil.
1921 Typing C-g does not directly cause a quit; it only sets Vquit_flag.
1922 So the program needs to do QUIT at times when it is safe to quit.
1923 Every loop that might run for a long time or might not exit
1924 ought to do QUIT at least once, at a safe place.
1925 Unless that is impossible, of course.
1926 But it is very desirable to avoid creating loops where QUIT is impossible.
1927
1928 Exception: if you set immediate_quit to nonzero,
1929 then the handler that responds to the C-g does the quit itself.
1930 This is a good thing to do around a loop that has no side effects
1931 and (in particular) cannot call arbitrary Lisp code. */
1932
1933 #ifdef SYNC_INPUT
1934 extern void process_pending_signals P_ ((void));
1935 extern int pending_signals;
1936
1937 #define QUIT \
1938 do { \
1939 if (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) \
1940 { \
1941 Lisp_Object flag = Vquit_flag; \
1942 Vquit_flag = Qnil; \
1943 if (EQ (Vthrow_on_input, flag)) \
1944 Fthrow (Vthrow_on_input, Qt); \
1945 Fsignal (Qquit, Qnil); \
1946 } \
1947 else if (pending_signals) \
1948 process_pending_signals (); \
1949 } while (0)
1950
1951 #else /* not SYNC_INPUT */
1952
1953 #define QUIT \
1954 do { \
1955 if (!NILP (Vquit_flag) && NILP (Vinhibit_quit)) \
1956 { \
1957 Lisp_Object flag = Vquit_flag; \
1958 Vquit_flag = Qnil; \
1959 if (EQ (Vthrow_on_input, flag)) \
1960 Fthrow (Vthrow_on_input, Qt); \
1961 Fsignal (Qquit, Qnil); \
1962 } \
1963 } while (0)
1964
1965 #endif /* not SYNC_INPUT */
1966
1967
1968 /* Nonzero if ought to quit now. */
1969
1970 #define QUITP (!NILP (Vquit_flag) && NILP (Vinhibit_quit))
1971 \f
1972 /* Variables used locally in the following case handling macros. */
1973 extern int case_temp1;
1974 extern Lisp_Object case_temp2;
1975
1976 /* Current buffer's map from characters to lower-case characters. */
1977
1978 #define DOWNCASE_TABLE current_buffer->downcase_table
1979
1980 /* Current buffer's map from characters to upper-case characters. */
1981
1982 #define UPCASE_TABLE current_buffer->upcase_table
1983
1984 /* Downcase a character, or make no change if that cannot be done. */
1985
1986 #define DOWNCASE(CH) \
1987 ((case_temp1 = (CH), \
1988 case_temp2 = CHAR_TABLE_REF (DOWNCASE_TABLE, case_temp1), \
1989 NATNUMP (case_temp2)) \
1990 ? XFASTINT (case_temp2) : case_temp1)
1991
1992 /* 1 if CH is upper case. */
1993
1994 #define UPPERCASEP(CH) (DOWNCASE (CH) != (CH))
1995
1996 /* 1 if CH is neither upper nor lower case. */
1997
1998 #define NOCASEP(CH) (UPCASE1 (CH) == (CH))
1999
2000 /* 1 if CH is lower case. */
2001
2002 #define LOWERCASEP(CH) (!UPPERCASEP (CH) && !NOCASEP(CH))
2003
2004 /* Upcase a character, or make no change if that cannot be done. */
2005
2006 #define UPCASE(CH) (!UPPERCASEP (CH) ? UPCASE1 (CH) : (CH))
2007
2008 /* Upcase a character known to be not upper case. */
2009
2010 #define UPCASE1(CH) \
2011 ((case_temp1 = (CH), \
2012 case_temp2 = CHAR_TABLE_REF (UPCASE_TABLE, case_temp1), \
2013 NATNUMP (case_temp2)) \
2014 ? XFASTINT (case_temp2) : case_temp1)
2015
2016 extern Lisp_Object Vascii_downcase_table, Vascii_upcase_table;
2017 extern Lisp_Object Vascii_canon_table, Vascii_eqv_table;
2018 \f
2019 /* Number of bytes of structure consed since last GC. */
2020
2021 extern int consing_since_gc;
2022
2023 /* Thresholds for doing another gc. */
2024
2025 extern EMACS_INT gc_cons_threshold;
2026
2027 extern EMACS_INT gc_relative_threshold;
2028
2029 extern EMACS_INT memory_full_cons_threshold;
2030
2031 /* Structure for recording stack slots that need marking. */
2032
2033 /* This is a chain of structures, each of which points at a Lisp_Object variable
2034 whose value should be marked in garbage collection.
2035 Normally every link of the chain is an automatic variable of a function,
2036 and its `val' points to some argument or local variable of the function.
2037 On exit to the function, the chain is set back to the value it had on entry.
2038 This way, no link remains in the chain when the stack frame containing the
2039 link disappears.
2040
2041 Every function that can call Feval must protect in this fashion all
2042 Lisp_Object variables whose contents will be used again. */
2043
2044 extern struct gcpro *gcprolist;
2045
2046 struct gcpro
2047 {
2048 struct gcpro *next;
2049
2050 /* Address of first protected variable. */
2051 volatile Lisp_Object *var;
2052
2053 /* Number of consecutive protected variables. */
2054 int nvars;
2055
2056 #ifdef DEBUG_GCPRO
2057 int level;
2058 #endif
2059 };
2060
2061 /* Values of GC_MARK_STACK during compilation:
2062
2063 0 Use GCPRO as before
2064 1 Do the real thing, make GCPROs and UNGCPRO no-ops.
2065 2 Mark the stack, and check that everything GCPRO'd is
2066 marked.
2067 3 Mark using GCPRO's, mark stack last, and count how many
2068 dead objects are kept alive. */
2069
2070
2071 #define GC_USE_GCPROS_AS_BEFORE 0
2072 #define GC_MAKE_GCPROS_NOOPS 1
2073 #define GC_MARK_STACK_CHECK_GCPROS 2
2074 #define GC_USE_GCPROS_CHECK_ZOMBIES 3
2075
2076 #ifndef GC_MARK_STACK
2077 #define GC_MARK_STACK GC_USE_GCPROS_AS_BEFORE
2078 #endif
2079
2080 #if GC_MARK_STACK == GC_MAKE_GCPROS_NOOPS
2081
2082 /* Do something silly with gcproN vars just so gcc shuts up. */
2083 /* You get warnings from MIPSPro... */
2084
2085 #define GCPRO1(varname) ((void) gcpro1)
2086 #define GCPRO2(varname1, varname2)(((void) gcpro2, (void) gcpro1))
2087 #define GCPRO3(varname1, varname2, varname3) \
2088 (((void) gcpro3, (void) gcpro2, (void) gcpro1))
2089 #define GCPRO4(varname1, varname2, varname3, varname4) \
2090 (((void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1))
2091 #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \
2092 (((void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1))
2093 #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \
2094 (((void) gcpro6, (void) gcpro5, (void) gcpro4, (void) gcpro3, (void) gcpro2, (void) gcpro1))
2095 #define UNGCPRO ((void) 0)
2096
2097 #else /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
2098
2099 #ifndef DEBUG_GCPRO
2100
2101 #define GCPRO1(varname) \
2102 {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \
2103 gcprolist = &gcpro1; }
2104
2105 #define GCPRO2(varname1, varname2) \
2106 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2107 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2108 gcprolist = &gcpro2; }
2109
2110 #define GCPRO3(varname1, varname2, varname3) \
2111 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2112 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2113 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
2114 gcprolist = &gcpro3; }
2115
2116 #define GCPRO4(varname1, varname2, varname3, varname4) \
2117 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2118 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2119 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
2120 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
2121 gcprolist = &gcpro4; }
2122
2123 #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \
2124 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2125 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2126 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
2127 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
2128 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
2129 gcprolist = &gcpro5; }
2130
2131 #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \
2132 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2133 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2134 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
2135 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
2136 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
2137 gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \
2138 gcprolist = &gcpro6; }
2139
2140 #define UNGCPRO (gcprolist = gcpro1.next)
2141
2142 #else
2143
2144 extern int gcpro_level;
2145
2146 #define GCPRO1(varname) \
2147 {gcpro1.next = gcprolist; gcpro1.var = &varname; gcpro1.nvars = 1; \
2148 gcpro1.level = gcpro_level++; \
2149 gcprolist = &gcpro1; }
2150
2151 #define GCPRO2(varname1, varname2) \
2152 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2153 gcpro1.level = gcpro_level; \
2154 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2155 gcpro2.level = gcpro_level++; \
2156 gcprolist = &gcpro2; }
2157
2158 #define GCPRO3(varname1, varname2, varname3) \
2159 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2160 gcpro1.level = gcpro_level; \
2161 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2162 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
2163 gcpro3.level = gcpro_level++; \
2164 gcprolist = &gcpro3; }
2165
2166 #define GCPRO4(varname1, varname2, varname3, varname4) \
2167 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2168 gcpro1.level = gcpro_level; \
2169 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2170 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
2171 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
2172 gcpro4.level = gcpro_level++; \
2173 gcprolist = &gcpro4; }
2174
2175 #define GCPRO5(varname1, varname2, varname3, varname4, varname5) \
2176 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2177 gcpro1.level = gcpro_level; \
2178 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2179 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
2180 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
2181 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
2182 gcpro5.level = gcpro_level++; \
2183 gcprolist = &gcpro5; }
2184
2185 #define GCPRO6(varname1, varname2, varname3, varname4, varname5, varname6) \
2186 {gcpro1.next = gcprolist; gcpro1.var = &varname1; gcpro1.nvars = 1; \
2187 gcpro1.level = gcpro_level; \
2188 gcpro2.next = &gcpro1; gcpro2.var = &varname2; gcpro2.nvars = 1; \
2189 gcpro3.next = &gcpro2; gcpro3.var = &varname3; gcpro3.nvars = 1; \
2190 gcpro4.next = &gcpro3; gcpro4.var = &varname4; gcpro4.nvars = 1; \
2191 gcpro5.next = &gcpro4; gcpro5.var = &varname5; gcpro5.nvars = 1; \
2192 gcpro6.next = &gcpro5; gcpro6.var = &varname6; gcpro6.nvars = 1; \
2193 gcpro6.level = gcpro_level++; \
2194 gcprolist = &gcpro6; }
2195
2196 #define UNGCPRO \
2197 ((--gcpro_level != gcpro1.level) \
2198 ? (abort (), 0) \
2199 : ((gcprolist = gcpro1.next), 0))
2200
2201 #endif /* DEBUG_GCPRO */
2202 #endif /* GC_MARK_STACK != GC_MAKE_GCPROS_NOOPS */
2203
2204
2205 /* Evaluate expr, UNGCPRO, and then return the value of expr. */
2206 #define RETURN_UNGCPRO(expr) \
2207 do \
2208 { \
2209 Lisp_Object ret_ungc_val; \
2210 ret_ungc_val = (expr); \
2211 UNGCPRO; \
2212 return ret_ungc_val; \
2213 } \
2214 while (0)
2215
2216 /* Call staticpro (&var) to protect static variable `var'. */
2217
2218 void staticpro P_ ((Lisp_Object *));
2219 \f
2220 /* Declare a Lisp-callable function. The MAXARGS parameter has the same
2221 meaning as in the DEFUN macro, and is used to construct a prototype. */
2222 /* We can use the same trick as in the DEFUN macro to generate the
2223 appropriate prototype. */
2224 #define EXFUN(fnname, maxargs) \
2225 extern Lisp_Object fnname DEFUN_ARGS_ ## maxargs
2226
2227 /* Forward declarations for prototypes. */
2228 struct window;
2229 struct frame;
2230
2231 /* Defined in data.c */
2232 extern Lisp_Object Qnil, Qt, Qquote, Qlambda, Qsubr, Qunbound;
2233 extern Lisp_Object Qerror_conditions, Qerror_message, Qtop_level;
2234 extern Lisp_Object Qerror, Qquit, Qwrong_type_argument, Qargs_out_of_range;
2235 extern Lisp_Object Qvoid_variable, Qvoid_function;
2236 extern Lisp_Object Qsetting_constant, Qinvalid_read_syntax;
2237 extern Lisp_Object Qinvalid_function, Qwrong_number_of_arguments, Qno_catch;
2238 extern Lisp_Object Qend_of_file, Qarith_error, Qmark_inactive;
2239 extern Lisp_Object Qbeginning_of_buffer, Qend_of_buffer, Qbuffer_read_only;
2240 extern Lisp_Object Qtext_read_only;
2241
2242 extern Lisp_Object Qintegerp, Qnatnump, Qwholenump, Qsymbolp, Qlistp, Qconsp;
2243 extern Lisp_Object Qstringp, Qarrayp, Qsequencep, Qbufferp;
2244 extern Lisp_Object Qchar_or_string_p, Qmarkerp, Qinteger_or_marker_p, Qvectorp;
2245 extern Lisp_Object Qbuffer_or_string_p;
2246 extern Lisp_Object Qboundp, Qfboundp;
2247 extern Lisp_Object Qchar_table_p, Qvector_or_char_table_p;
2248
2249 extern Lisp_Object Qcdr;
2250
2251 extern Lisp_Object Qrange_error, Qdomain_error, Qsingularity_error;
2252 extern Lisp_Object Qoverflow_error, Qunderflow_error;
2253
2254 extern Lisp_Object Qfloatp;
2255 extern Lisp_Object Qnumberp, Qnumber_or_marker_p;
2256
2257 extern Lisp_Object Qinteger;
2258
2259 extern Lisp_Object Qfont_spec, Qfont_entity, Qfont_object;
2260
2261 extern void circular_list_error P_ ((Lisp_Object)) NO_RETURN;
2262 EXFUN (Finteractive_form, 1);
2263
2264 /* Defined in frame.c */
2265 extern Lisp_Object Qframep;
2266
2267 EXFUN (Feq, 2);
2268 EXFUN (Fnull, 1);
2269 EXFUN (Flistp, 1);
2270 EXFUN (Fconsp, 1);
2271 EXFUN (Fatom, 1);
2272 EXFUN (Fnlistp, 1);
2273 EXFUN (Fintegerp, 1);
2274 EXFUN (Fnatnump, 1);
2275 EXFUN (Fsymbolp, 1);
2276 EXFUN (Fvectorp, 1);
2277 EXFUN (Fstringp, 1);
2278 EXFUN (Fmultibyte_string_p, 1);
2279 EXFUN (Farrayp, 1);
2280 EXFUN (Fsequencep, 1);
2281 EXFUN (Fbufferp, 1);
2282 EXFUN (Fmarkerp, 1);
2283 EXFUN (Fsubrp, 1);
2284 EXFUN (Fchar_or_string_p, 1);
2285 EXFUN (Finteger_or_marker_p, 1);
2286 EXFUN (Ffloatp, 1);
2287 EXFUN (Finteger_or_floatp, 1);
2288 EXFUN (Finteger_or_float_or_marker_p, 1);
2289
2290 EXFUN (Fcar, 1);
2291 EXFUN (Fcar_safe, 1);
2292 EXFUN (Fcdr, 1);
2293 EXFUN (Fcdr_safe, 1);
2294 EXFUN (Fsetcar, 2);
2295 EXFUN (Fsetcdr, 2);
2296 EXFUN (Fboundp, 1);
2297 EXFUN (Ffboundp, 1);
2298 EXFUN (Fmakunbound, 1);
2299 EXFUN (Ffmakunbound, 1);
2300 EXFUN (Fsymbol_function, 1);
2301 EXFUN (Fsymbol_plist, 1);
2302 EXFUN (Fsymbol_name, 1);
2303 extern Lisp_Object indirect_function P_ ((Lisp_Object));
2304 EXFUN (Findirect_function, 2);
2305 EXFUN (Ffset, 2);
2306 EXFUN (Fsetplist, 2);
2307 EXFUN (Fsymbol_value, 1);
2308 extern Lisp_Object find_symbol_value P_ ((Lisp_Object));
2309 EXFUN (Fset, 2);
2310 EXFUN (Fdefault_value, 1);
2311 EXFUN (Fset_default, 2);
2312 EXFUN (Fdefault_boundp, 1);
2313 EXFUN (Fmake_local_variable, 1);
2314 EXFUN (Flocal_variable_p, 2);
2315 EXFUN (Flocal_variable_if_set_p, 2);
2316
2317 EXFUN (Faref, 2);
2318 EXFUN (Faset, 3);
2319
2320 EXFUN (Fstring_to_number, 2);
2321 EXFUN (Fnumber_to_string, 1);
2322 EXFUN (Feqlsign, 2);
2323 EXFUN (Fgtr, 2);
2324 EXFUN (Flss, 2);
2325 EXFUN (Fgeq, 2);
2326 EXFUN (Fleq, 2);
2327 EXFUN (Fneq, 2);
2328 EXFUN (Fzerop, 1);
2329 EXFUN (Fplus, MANY);
2330 EXFUN (Fminus, MANY);
2331 EXFUN (Ftimes, MANY);
2332 EXFUN (Fquo, MANY);
2333 EXFUN (Frem, 2);
2334 EXFUN (Fmax, MANY);
2335 EXFUN (Fmin, MANY);
2336 EXFUN (Flogand, MANY);
2337 EXFUN (Flogior, MANY);
2338 EXFUN (Flogxor, MANY);
2339 EXFUN (Flognot, 1);
2340 EXFUN (Flsh, 2);
2341 EXFUN (Fash, 2);
2342
2343 EXFUN (Fadd1, 1);
2344 EXFUN (Fsub1, 1);
2345 EXFUN (Fmake_variable_buffer_local, 1);
2346
2347 extern struct Lisp_Symbol *indirect_variable (struct Lisp_Symbol *);
2348 extern Lisp_Object long_to_cons P_ ((unsigned long));
2349 extern unsigned long cons_to_long P_ ((Lisp_Object));
2350 extern void args_out_of_range P_ ((Lisp_Object, Lisp_Object)) NO_RETURN;
2351 extern void args_out_of_range_3 P_ ((Lisp_Object, Lisp_Object,
2352 Lisp_Object)) NO_RETURN;
2353 extern Lisp_Object wrong_type_argument P_ ((Lisp_Object, Lisp_Object)) NO_RETURN;
2354 extern void store_symval_forwarding P_ ((Lisp_Object, Lisp_Object,
2355 Lisp_Object, struct buffer *));
2356 extern Lisp_Object do_symval_forwarding P_ ((Lisp_Object));
2357 extern Lisp_Object set_internal P_ ((Lisp_Object, Lisp_Object, struct buffer *, int));
2358 extern void syms_of_data P_ ((void));
2359 extern void init_data P_ ((void));
2360 extern void swap_in_global_binding P_ ((Lisp_Object));
2361
2362 /* Defined in cmds.c */
2363 EXFUN (Fend_of_line, 1);
2364 EXFUN (Fforward_char, 1);
2365 EXFUN (Fforward_line, 1);
2366 extern int internal_self_insert P_ ((int, int));
2367 extern void syms_of_cmds P_ ((void));
2368 extern void keys_of_cmds P_ ((void));
2369
2370 /* Defined in coding.c */
2371 EXFUN (Fcoding_system_p, 1);
2372 EXFUN (Fcoding_system_base, 1);
2373 EXFUN (Fcoding_system_eol_type, 1);
2374 EXFUN (Fcheck_coding_system, 1);
2375 EXFUN (Fcheck_coding_system, 1);
2376 EXFUN (Fread_coding_system, 2);
2377 EXFUN (Fread_non_nil_coding_system, 1);
2378 EXFUN (Ffind_operation_coding_system, MANY);
2379 EXFUN (Fupdate_coding_systems_internal, 0);
2380 EXFUN (Fencode_coding_string, 4);
2381 EXFUN (Fdecode_coding_string, 4);
2382 extern Lisp_Object detect_coding_system P_ ((const unsigned char *, EMACS_INT,
2383 EMACS_INT, int, int, Lisp_Object));
2384 extern void init_coding P_ ((void));
2385 extern void init_coding_once P_ ((void));
2386 extern void syms_of_coding P_ ((void));
2387
2388 /* Defined in character.c */
2389 extern void init_character_once P_ ((void));
2390 extern void syms_of_character P_ ((void));
2391 EXFUN (Funibyte_char_to_multibyte, 1);
2392
2393 /* Defined in charset.c */
2394 EXFUN (Fchar_bytes, 1);
2395 EXFUN (Fchar_width, 1);
2396 EXFUN (Fstring, MANY);
2397 extern EMACS_INT chars_in_text P_ ((const unsigned char *, EMACS_INT));
2398 extern EMACS_INT multibyte_chars_in_text P_ ((const unsigned char *, EMACS_INT));
2399 extern int multibyte_char_to_unibyte P_ ((int, Lisp_Object));
2400 extern int multibyte_char_to_unibyte_safe P_ ((int));
2401 extern Lisp_Object Qcharset;
2402 extern void init_charset P_ ((void));
2403 extern void init_charset_once P_ ((void));
2404 extern void syms_of_charset P_ ((void));
2405 /* Structure forward declarations. */
2406 struct charset;
2407
2408 /* Defined in composite.c */
2409 extern void syms_of_composite P_ ((void));
2410
2411 /* Defined in syntax.c */
2412 EXFUN (Fforward_word, 1);
2413 EXFUN (Fskip_chars_forward, 2);
2414 EXFUN (Fskip_chars_backward, 2);
2415 EXFUN (Fsyntax_table_p, 1);
2416 EXFUN (Fsyntax_table, 0);
2417 EXFUN (Fset_syntax_table, 1);
2418 extern void init_syntax_once P_ ((void));
2419 extern void syms_of_syntax P_ ((void));
2420
2421 /* Defined in fns.c */
2422 extern int use_dialog_box;
2423 extern int next_almost_prime P_ ((int));
2424 extern Lisp_Object larger_vector P_ ((Lisp_Object, int, Lisp_Object));
2425 extern void sweep_weak_hash_tables P_ ((void));
2426 extern Lisp_Object Qstring_lessp;
2427 extern Lisp_Object Vfeatures;
2428 extern Lisp_Object QCtest, QCweakness, Qequal, Qeq;
2429 unsigned sxhash P_ ((Lisp_Object, int));
2430 Lisp_Object make_hash_table P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
2431 Lisp_Object, Lisp_Object, Lisp_Object,
2432 Lisp_Object));
2433 Lisp_Object copy_hash_table P_ ((struct Lisp_Hash_Table *));
2434 int hash_lookup P_ ((struct Lisp_Hash_Table *, Lisp_Object, unsigned *));
2435 int hash_put P_ ((struct Lisp_Hash_Table *, Lisp_Object, Lisp_Object,
2436 unsigned));
2437 void hash_clear P_ ((struct Lisp_Hash_Table *));
2438 void init_weak_hash_tables P_ ((void));
2439 extern void init_fns P_ ((void));
2440 EXFUN (Fsxhash, 1);
2441 EXFUN (Fmake_hash_table, MANY);
2442 EXFUN (Fmakehash, 1);
2443 EXFUN (Fcopy_hash_table, 1);
2444 EXFUN (Fhash_table_count, 1);
2445 EXFUN (Fhash_table_rehash_size, 1);
2446 EXFUN (Fhash_table_rehash_threshold, 1);
2447 EXFUN (Fhash_table_size, 1);
2448 EXFUN (Fhash_table_test, 1);
2449 EXFUN (Fhash_table_weak, 1);
2450 EXFUN (Fhash_table_p, 1);
2451 EXFUN (Fclrhash, 1);
2452 EXFUN (Fgethash, 3);
2453 EXFUN (Fputhash, 3);
2454 EXFUN (Fremhash, 2);
2455 EXFUN (Fmaphash, 2);
2456 EXFUN (Fdefine_hash_table_test, 3);
2457
2458 EXFUN (Fidentity, 1);
2459 EXFUN (Frandom, 1);
2460 EXFUN (Flength, 1);
2461 EXFUN (Fsafe_length, 1);
2462 EXFUN (Fappend, MANY);
2463 EXFUN (Fconcat, MANY);
2464 EXFUN (Fvconcat, MANY);
2465 EXFUN (Fcopy_sequence, 1);
2466 EXFUN (Fstring_make_multibyte, 1);
2467 EXFUN (Fstring_make_unibyte, 1);
2468 EXFUN (Fstring_as_multibyte, 1);
2469 EXFUN (Fstring_as_unibyte, 1);
2470 EXFUN (Fstring_to_multibyte, 1);
2471 EXFUN (Fstring_to_unibyte, 1);
2472 EXFUN (Fsubstring, 3);
2473 extern Lisp_Object substring_both P_ ((Lisp_Object, int, int, int, int));
2474 EXFUN (Fnth, 2);
2475 EXFUN (Fnthcdr, 2);
2476 EXFUN (Fmemq, 2);
2477 EXFUN (Fassq, 2);
2478 EXFUN (Fassoc, 2);
2479 EXFUN (Felt, 2);
2480 EXFUN (Fmember, 2);
2481 EXFUN (Frassq, 2);
2482 EXFUN (Fdelq, 2);
2483 EXFUN (Fdelete, 2);
2484 EXFUN (Fsort, 2);
2485 EXFUN (Freverse, 1);
2486 EXFUN (Fnreverse, 1);
2487 EXFUN (Fget, 2);
2488 EXFUN (Fput, 3);
2489 EXFUN (Fequal, 2);
2490 EXFUN (Ffillarray, 2);
2491 EXFUN (Fnconc, MANY);
2492 EXFUN (Fmapcar, 2);
2493 EXFUN (Fmapconcat, 3);
2494 EXFUN (Fy_or_n_p, 1);
2495 extern Lisp_Object do_yes_or_no_p P_ ((Lisp_Object));
2496 EXFUN (Frequire, 3);
2497 EXFUN (Fprovide, 2);
2498 extern Lisp_Object concat2 P_ ((Lisp_Object, Lisp_Object));
2499 extern Lisp_Object concat3 P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
2500 extern Lisp_Object nconc2 P_ ((Lisp_Object, Lisp_Object));
2501 extern Lisp_Object assq_no_quit P_ ((Lisp_Object, Lisp_Object));
2502 extern Lisp_Object assoc_no_quit P_ ((Lisp_Object, Lisp_Object));
2503 extern void clear_string_char_byte_cache P_ ((void));
2504 extern EMACS_INT string_char_to_byte P_ ((Lisp_Object, EMACS_INT));
2505 extern EMACS_INT string_byte_to_char P_ ((Lisp_Object, EMACS_INT));
2506 extern Lisp_Object string_make_multibyte P_ ((Lisp_Object));
2507 extern Lisp_Object string_to_multibyte P_ ((Lisp_Object));
2508 extern Lisp_Object string_make_unibyte P_ ((Lisp_Object));
2509 EXFUN (Fcopy_alist, 1);
2510 EXFUN (Fplist_get, 2);
2511 EXFUN (Fplist_put, 3);
2512 EXFUN (Fplist_member, 2);
2513 EXFUN (Frassoc, 2);
2514 EXFUN (Fstring_equal, 2);
2515 EXFUN (Fcompare_strings, 7);
2516 EXFUN (Fstring_lessp, 2);
2517 extern void syms_of_fns P_ ((void));
2518
2519 /* Defined in floatfns.c */
2520 extern double extract_float P_ ((Lisp_Object));
2521 EXFUN (Ffloat, 1);
2522 EXFUN (Ftruncate, 2);
2523 extern void init_floatfns P_ ((void));
2524 extern void syms_of_floatfns P_ ((void));
2525
2526 /* Defined in fringe.c */
2527 extern void syms_of_fringe P_ ((void));
2528 extern void init_fringe P_ ((void));
2529 extern void init_fringe_once P_ ((void));
2530
2531 /* Defined in image.c */
2532 EXFUN (Finit_image_library, 2);
2533 extern void syms_of_image P_ ((void));
2534 extern void init_image P_ ((void));
2535
2536 /* Defined in insdel.c */
2537 extern Lisp_Object Qinhibit_modification_hooks;
2538 extern void move_gap (EMACS_INT);
2539 extern void move_gap_both (EMACS_INT, EMACS_INT);
2540 extern void make_gap (EMACS_INT);
2541 extern EMACS_INT copy_text (const unsigned char *, unsigned char *,
2542 EMACS_INT, int, int);
2543 extern EMACS_INT count_size_as_multibyte (const unsigned char *, EMACS_INT);
2544 extern int count_combining_before (const unsigned char *,
2545 EMACS_INT, EMACS_INT, EMACS_INT);
2546 extern int count_combining_after (const unsigned char *,
2547 EMACS_INT, EMACS_INT, EMACS_INT);
2548 extern void insert (const unsigned char *, EMACS_INT);
2549 extern void insert_and_inherit (const unsigned char *, EMACS_INT);
2550 extern void insert_1 (const unsigned char *, EMACS_INT, int, int, int);
2551 extern void insert_1_both (const unsigned char *, EMACS_INT, EMACS_INT,
2552 int, int, int);
2553 extern void insert_from_gap (EMACS_INT, EMACS_INT);
2554 extern void insert_from_string (Lisp_Object, EMACS_INT, EMACS_INT,
2555 EMACS_INT, EMACS_INT, int);
2556 extern void insert_from_buffer (struct buffer *, EMACS_INT, EMACS_INT, int);
2557 extern void insert_char (int);
2558 extern void insert_string (const char *);
2559 extern void insert_before_markers (const unsigned char *, EMACS_INT);
2560 extern void insert_before_markers_and_inherit (const unsigned char *,
2561 EMACS_INT);
2562 extern void insert_from_string_before_markers (Lisp_Object, EMACS_INT,
2563 EMACS_INT, EMACS_INT,
2564 EMACS_INT, int);
2565 extern void del_range (EMACS_INT, EMACS_INT);
2566 extern Lisp_Object del_range_1 (EMACS_INT, EMACS_INT, int, int);
2567 extern void del_range_byte (EMACS_INT, EMACS_INT, int);
2568 extern void del_range_both (EMACS_INT, EMACS_INT, EMACS_INT, EMACS_INT, int);
2569 extern Lisp_Object del_range_2 (EMACS_INT, EMACS_INT,
2570 EMACS_INT, EMACS_INT, int);
2571 extern void modify_region (struct buffer *, EMACS_INT, EMACS_INT, int);
2572 extern void prepare_to_modify_buffer (EMACS_INT, EMACS_INT, EMACS_INT *);
2573 extern void signal_before_change (EMACS_INT, EMACS_INT, EMACS_INT *);
2574 extern void signal_after_change (EMACS_INT, EMACS_INT, EMACS_INT);
2575 extern void adjust_after_replace (EMACS_INT, EMACS_INT, Lisp_Object,
2576 EMACS_INT, EMACS_INT);
2577 extern void adjust_after_replace_noundo (EMACS_INT, EMACS_INT, EMACS_INT,
2578 EMACS_INT, EMACS_INT, EMACS_INT);
2579 extern void adjust_after_insert (EMACS_INT, EMACS_INT, EMACS_INT,
2580 EMACS_INT, EMACS_INT);
2581 extern void adjust_markers_for_delete (EMACS_INT, EMACS_INT,
2582 EMACS_INT, EMACS_INT);
2583 extern void replace_range (EMACS_INT, EMACS_INT, Lisp_Object, int, int, int);
2584 extern void replace_range_2 (EMACS_INT, EMACS_INT, EMACS_INT, EMACS_INT,
2585 char *, EMACS_INT, EMACS_INT, int);
2586 extern void syms_of_insdel (void);
2587
2588 /* Defined in dispnew.c */
2589 extern Lisp_Object selected_frame;
2590 extern EMACS_INT baud_rate;
2591 EXFUN (Fding, 1);
2592 EXFUN (Fredraw_frame, 1);
2593 EXFUN (Fredraw_display, 0);
2594 EXFUN (Fsleep_for, 2);
2595 EXFUN (Fredisplay, 1);
2596 extern Lisp_Object sit_for P_ ((Lisp_Object, int, int));
2597 extern void init_display P_ ((void));
2598 extern void syms_of_display P_ ((void));
2599 extern void safe_bcopy P_ ((const char *, char *, int));
2600
2601 /* Defined in xdisp.c */
2602 extern Lisp_Object Qinhibit_point_motion_hooks;
2603 extern Lisp_Object Qinhibit_redisplay, Qdisplay;
2604 extern Lisp_Object Qinhibit_eval_during_redisplay;
2605 extern Lisp_Object Qmessage_truncate_lines;
2606 extern Lisp_Object Qimage;
2607 extern Lisp_Object Vmessage_log_max;
2608 extern int message_enable_multibyte;
2609 extern Lisp_Object echo_area_buffer[2];
2610 extern void check_message_stack P_ ((void));
2611 extern void setup_echo_area_for_printing P_ ((int));
2612 extern int push_message P_ ((void));
2613 extern Lisp_Object pop_message_unwind P_ ((Lisp_Object));
2614 extern Lisp_Object restore_message_unwind P_ ((Lisp_Object));
2615 extern void pop_message P_ ((void));
2616 extern void restore_message P_ ((void));
2617 extern Lisp_Object current_message P_ ((void));
2618 extern void set_message P_ ((const char *s, Lisp_Object, int, int));
2619 extern void clear_message P_ ((int, int));
2620 extern void message P_ ((/* char *, ... */));
2621 extern void message_nolog P_ ((/* char *, ... */));
2622 extern void message1 P_ ((char *));
2623 extern void message1_nolog P_ ((char *));
2624 extern void message2 P_ ((const char *, int, int));
2625 extern void message2_nolog P_ ((const char *, int, int));
2626 extern void message3 P_ ((Lisp_Object, int, int));
2627 extern void message3_nolog P_ ((Lisp_Object, int, int));
2628 extern void message_dolog P_ ((const char *, int, int, int));
2629 extern void message_with_string P_ ((char *, Lisp_Object, int));
2630 extern void message_log_maybe_newline P_ ((void));
2631 extern void update_echo_area P_ ((void));
2632 extern void truncate_echo_area P_ ((int));
2633 extern void redisplay P_ ((void));
2634 extern int check_point_in_composition
2635 P_ ((struct buffer *, int, struct buffer *, int));
2636 extern void redisplay_preserve_echo_area P_ ((int));
2637 extern void prepare_menu_bars P_ ((void));
2638
2639 void set_frame_cursor_types P_ ((struct frame *, Lisp_Object));
2640 extern void syms_of_xdisp P_ ((void));
2641 extern void init_xdisp P_ ((void));
2642 extern Lisp_Object safe_eval P_ ((Lisp_Object));
2643 extern int pos_visible_p P_ ((struct window *, int, int *,
2644 int *, int *, int *, int *, int *));
2645
2646 /* Defined in vm-limit.c. */
2647 extern void memory_warnings P_ ((POINTER_TYPE *, void (*warnfun) ()));
2648
2649 /* Defined in alloc.c */
2650 extern void check_pure_size P_ ((void));
2651 extern void allocate_string_data P_ ((struct Lisp_String *, int, int));
2652 extern void reset_malloc_hooks P_ ((void));
2653 extern void uninterrupt_malloc P_ ((void));
2654 extern void malloc_warning P_ ((char *));
2655 extern void memory_full P_ ((void)) NO_RETURN;
2656 extern void buffer_memory_full P_ ((void)) NO_RETURN;
2657 extern int survives_gc_p P_ ((Lisp_Object));
2658 extern void mark_object P_ ((Lisp_Object));
2659 extern Lisp_Object Vpurify_flag;
2660 extern Lisp_Object Vmemory_full;
2661 EXFUN (Fcons, 2);
2662 EXFUN (list1, 1);
2663 EXFUN (list2, 2);
2664 EXFUN (list3, 3);
2665 EXFUN (list4, 4);
2666 EXFUN (list5, 5);
2667 EXFUN (Flist, MANY);
2668 EXFUN (Fmake_list, 2);
2669 extern Lisp_Object allocate_misc P_ ((void));
2670 EXFUN (Fmake_vector, 2);
2671 EXFUN (Fvector, MANY);
2672 EXFUN (Fmake_symbol, 1);
2673 EXFUN (Fmake_marker, 0);
2674 EXFUN (Fmake_string, 2);
2675 extern Lisp_Object build_string P_ ((const char *));
2676 extern Lisp_Object make_string P_ ((const char *, int));
2677 extern Lisp_Object make_unibyte_string P_ ((const char *, int));
2678 extern Lisp_Object make_multibyte_string P_ ((const char *, int, int));
2679 extern Lisp_Object make_event_array P_ ((int, Lisp_Object *));
2680 extern Lisp_Object make_uninit_string P_ ((int));
2681 extern Lisp_Object make_uninit_multibyte_string P_ ((int, int));
2682 extern Lisp_Object make_string_from_bytes P_ ((const char *, int, int));
2683 extern Lisp_Object make_specified_string P_ ((const char *, int, int, int));
2684 EXFUN (Fpurecopy, 1);
2685 extern Lisp_Object make_pure_string P_ ((char *, int, int, int));
2686 extern Lisp_Object make_pure_c_string (const char *data);
2687 extern Lisp_Object pure_cons P_ ((Lisp_Object, Lisp_Object));
2688 extern Lisp_Object make_pure_vector P_ ((EMACS_INT));
2689 EXFUN (Fgarbage_collect, 0);
2690 EXFUN (Fmake_byte_code, MANY);
2691 EXFUN (Fmake_bool_vector, 2);
2692 extern Lisp_Object Qchar_table_extra_slots;
2693 extern struct Lisp_Vector *allocate_vector P_ ((EMACS_INT));
2694 extern struct Lisp_Vector *allocate_pseudovector P_ ((int memlen, int lisplen, EMACS_INT tag));
2695 #define ALLOCATE_PSEUDOVECTOR(typ,field,tag) \
2696 ((typ*) \
2697 allocate_pseudovector \
2698 (VECSIZE (typ), PSEUDOVECSIZE (typ, field), tag))
2699 extern struct Lisp_Hash_Table *allocate_hash_table P_ ((void));
2700 extern struct window *allocate_window P_ ((void));
2701 extern struct frame *allocate_frame P_ ((void));
2702 extern struct Lisp_Process *allocate_process P_ ((void));
2703 extern struct terminal *allocate_terminal P_ ((void));
2704 extern int gc_in_progress;
2705 extern int abort_on_gc;
2706 extern Lisp_Object make_float P_ ((double));
2707 extern void display_malloc_warning P_ ((void));
2708 extern int inhibit_garbage_collection P_ ((void));
2709 extern Lisp_Object make_save_value P_ ((void *, int));
2710 extern void free_misc P_ ((Lisp_Object));
2711 extern void free_marker P_ ((Lisp_Object));
2712 extern void free_cons P_ ((struct Lisp_Cons *));
2713 extern void init_alloc_once P_ ((void));
2714 extern void init_alloc P_ ((void));
2715 extern void syms_of_alloc P_ ((void));
2716 extern struct buffer * allocate_buffer P_ ((void));
2717 extern int valid_lisp_object_p P_ ((Lisp_Object));
2718
2719 /* Defined in chartab.c */
2720 EXFUN (Fmake_char_table, 2);
2721 EXFUN (Fchar_table_parent, 1);
2722 EXFUN (Fset_char_table_parent, 2);
2723 EXFUN (Fchar_table_extra_slot, 2);
2724 EXFUN (Fset_char_table_extra_slot, 3);
2725 EXFUN (Fchar_table_range, 2);
2726 EXFUN (Fset_char_table_range, 3);
2727 EXFUN (Fset_char_table_default, 3);
2728 EXFUN (Foptimize_char_table, 2);
2729 EXFUN (Fmap_char_table, 2);
2730 extern Lisp_Object copy_char_table P_ ((Lisp_Object));
2731 extern Lisp_Object sub_char_table_ref P_ ((Lisp_Object, int));
2732 extern Lisp_Object char_table_ref P_ ((Lisp_Object, int));
2733 extern Lisp_Object char_table_ref_and_range P_ ((Lisp_Object, int,
2734 int *, int *));
2735 extern Lisp_Object char_table_set P_ ((Lisp_Object, int, Lisp_Object));
2736 extern Lisp_Object char_table_set_range P_ ((Lisp_Object, int, int,
2737 Lisp_Object));
2738 extern int char_table_translate P_ ((Lisp_Object, int));
2739 extern void map_char_table P_ ((void (*) (Lisp_Object, Lisp_Object,
2740 Lisp_Object),
2741 Lisp_Object, Lisp_Object, Lisp_Object));
2742 extern void syms_of_chartab P_ ((void));
2743
2744 /* Defined in print.c */
2745 extern Lisp_Object Vprin1_to_string_buffer;
2746 extern void debug_print P_ ((Lisp_Object));
2747 EXFUN (Fprin1, 2);
2748 EXFUN (Fprin1_to_string, 2);
2749 EXFUN (Fprinc, 2);
2750 EXFUN (Fterpri, 1);
2751 EXFUN (Fprint, 2);
2752 EXFUN (Ferror_message_string, 1);
2753 extern Lisp_Object Vstandard_output, Qstandard_output;
2754 extern Lisp_Object Qexternal_debugging_output;
2755 extern void temp_output_buffer_setup P_ ((const char *));
2756 extern int print_level, print_escape_newlines;
2757 extern Lisp_Object Qprint_escape_newlines;
2758 extern void write_string P_ ((char *, int));
2759 extern void write_string_1 P_ ((char *, int, Lisp_Object));
2760 extern void print_error_message P_ ((Lisp_Object, Lisp_Object, char *, Lisp_Object));
2761 extern Lisp_Object internal_with_output_to_temp_buffer
2762 P_ ((const char *, Lisp_Object (*) (Lisp_Object), Lisp_Object));
2763 extern void float_to_string P_ ((unsigned char *, double));
2764 extern void syms_of_print P_ ((void));
2765
2766 /* Defined in doprnt.c */
2767 extern int doprnt P_ ((char *, int, char *, char *, int, char **));
2768
2769 /* Defined in lread.c */
2770 extern Lisp_Object Qvariable_documentation, Qstandard_input;
2771 extern Lisp_Object Vobarray, initial_obarray, Vstandard_input;
2772 EXFUN (Fread, 1);
2773 EXFUN (Fread_from_string, 3);
2774 EXFUN (Fintern, 2);
2775 EXFUN (Fintern_soft, 2);
2776 EXFUN (Fload, 5);
2777 EXFUN (Fget_load_suffixes, 0);
2778 EXFUN (Fget_file_char, 0);
2779 EXFUN (Fread_char, 3);
2780 EXFUN (Fread_event, 3);
2781 extern Lisp_Object read_filtered_event P_ ((int, int, int, int, Lisp_Object));
2782 EXFUN (Feval_region, 4);
2783 extern Lisp_Object check_obarray P_ ((Lisp_Object));
2784 extern Lisp_Object intern P_ ((const char *));
2785 extern Lisp_Object intern_c_string (const char *);
2786 extern Lisp_Object make_symbol P_ ((char *));
2787 extern Lisp_Object oblookup P_ ((Lisp_Object, const char *, int, int));
2788 #define LOADHIST_ATTACH(x) \
2789 if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list)
2790 extern Lisp_Object Vcurrent_load_list;
2791 extern Lisp_Object Vload_history, Vload_suffixes, Vload_file_rep_suffixes;
2792 extern int openp P_ ((Lisp_Object, Lisp_Object, Lisp_Object,
2793 Lisp_Object *, Lisp_Object));
2794 extern int isfloat_string P_ ((char *));
2795 extern void map_obarray P_ ((Lisp_Object, void (*) (Lisp_Object, Lisp_Object),
2796 Lisp_Object));
2797 extern void dir_warning P_ ((char *, Lisp_Object));
2798 extern void close_load_descs P_ ((void));
2799 extern void init_obarray P_ ((void));
2800 extern void init_lread P_ ((void));
2801 extern void syms_of_lread P_ ((void));
2802
2803 /* Defined in eval.c */
2804 extern Lisp_Object Qautoload, Qexit, Qinteractive, Qcommandp, Qdefun, Qmacro;
2805 extern Lisp_Object Vinhibit_quit, Qinhibit_quit, Vquit_flag;
2806 extern Lisp_Object Vautoload_queue;
2807 extern Lisp_Object Vdebug_on_error;
2808 extern Lisp_Object Vsignaling_function;
2809 extern int handling_signal;
2810 extern int interactive_p P_ ((int));
2811
2812 /* To run a normal hook, use the appropriate function from the list below.
2813 The calling convention:
2814
2815 if (!NILP (Vrun_hooks))
2816 call1 (Vrun_hooks, Qmy_funny_hook);
2817
2818 should no longer be used. */
2819 extern Lisp_Object Vrun_hooks;
2820 EXFUN (Frun_hooks, MANY);
2821 EXFUN (Frun_hook_with_args, MANY);
2822 EXFUN (Frun_hook_with_args_until_success, MANY);
2823 EXFUN (Frun_hook_with_args_until_failure, MANY);
2824 extern Lisp_Object run_hook_list_with_args P_ ((Lisp_Object, int, Lisp_Object *));
2825 extern void run_hook_with_args_2 P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
2826 EXFUN (Fand, UNEVALLED);
2827 EXFUN (For, UNEVALLED);
2828 EXFUN (Fif, UNEVALLED);
2829 EXFUN (Fprogn, UNEVALLED);
2830 EXFUN (Fprog1, UNEVALLED);
2831 EXFUN (Fprog2, UNEVALLED);
2832 EXFUN (Fsetq, UNEVALLED);
2833 EXFUN (Fquote, UNEVALLED);
2834 EXFUN (Fuser_variable_p, 1);
2835 EXFUN (Finteractive_p, 0);
2836 EXFUN (Fdefun, UNEVALLED);
2837 EXFUN (Flet, UNEVALLED);
2838 EXFUN (FletX, UNEVALLED);
2839 EXFUN (Fwhile, UNEVALLED);
2840 EXFUN (Fcatch, UNEVALLED);
2841 EXFUN (Fthrow, 2) NO_RETURN;
2842 EXFUN (Funwind_protect, UNEVALLED);
2843 EXFUN (Fcondition_case, UNEVALLED);
2844 EXFUN (Fsignal, 2);
2845 extern void xsignal P_ ((Lisp_Object, Lisp_Object)) NO_RETURN;
2846 extern void xsignal0 P_ ((Lisp_Object)) NO_RETURN;
2847 extern void xsignal1 P_ ((Lisp_Object, Lisp_Object)) NO_RETURN;
2848 extern void xsignal2 P_ ((Lisp_Object, Lisp_Object, Lisp_Object)) NO_RETURN;
2849 extern void xsignal3 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)) NO_RETURN;
2850 extern void signal_error P_ ((char *, Lisp_Object)) NO_RETURN;
2851 EXFUN (Fautoload, 5);
2852 EXFUN (Fcommandp, 2);
2853 EXFUN (Feval, 1);
2854 EXFUN (Fapply, MANY);
2855 EXFUN (Ffuncall, MANY);
2856 EXFUN (Fbacktrace, 0);
2857 extern Lisp_Object apply1 P_ ((Lisp_Object, Lisp_Object));
2858 extern Lisp_Object call0 P_ ((Lisp_Object));
2859 extern Lisp_Object call1 P_ ((Lisp_Object, Lisp_Object));
2860 extern Lisp_Object call2 P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
2861 extern Lisp_Object call3 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
2862 extern Lisp_Object call4 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
2863 extern Lisp_Object call5 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
2864 extern Lisp_Object call6 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object));
2865 EXFUN (Fdo_auto_save, 2);
2866 extern Lisp_Object apply_lambda P_ ((Lisp_Object, Lisp_Object, int));
2867 extern Lisp_Object internal_catch P_ ((Lisp_Object, Lisp_Object (*) (Lisp_Object), Lisp_Object));
2868 extern Lisp_Object internal_lisp_condition_case P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
2869 extern Lisp_Object internal_condition_case P_ ((Lisp_Object (*) (void), Lisp_Object, Lisp_Object (*) (Lisp_Object)));
2870 extern Lisp_Object internal_condition_case_1 P_ ((Lisp_Object (*) (Lisp_Object), Lisp_Object, Lisp_Object, Lisp_Object (*) (Lisp_Object)));
2871 extern Lisp_Object internal_condition_case_2 P_ ((Lisp_Object (*) (int, Lisp_Object *), int, Lisp_Object *, Lisp_Object, Lisp_Object (*) (Lisp_Object)));
2872 extern void specbind P_ ((Lisp_Object, Lisp_Object));
2873 extern void record_unwind_protect P_ ((Lisp_Object (*) (Lisp_Object), Lisp_Object));
2874 extern Lisp_Object unbind_to P_ ((int, Lisp_Object));
2875 extern void error P_ ((/* char *, ... */)) NO_RETURN;
2876 extern void do_autoload P_ ((Lisp_Object, Lisp_Object));
2877 extern Lisp_Object un_autoload P_ ((Lisp_Object));
2878 EXFUN (Ffetch_bytecode, 1);
2879 extern void init_eval_once P_ ((void));
2880 extern Lisp_Object safe_call P_ ((int, Lisp_Object *));
2881 extern Lisp_Object safe_call1 P_ ((Lisp_Object, Lisp_Object));
2882 extern Lisp_Object safe_call2 (Lisp_Object, Lisp_Object, Lisp_Object);
2883 extern void init_eval P_ ((void));
2884 extern void syms_of_eval P_ ((void));
2885
2886 /* Defined in editfns.c */
2887 EXFUN (Fpropertize, MANY);
2888 EXFUN (Fcurrent_message, 0);
2889 EXFUN (Fgoto_char, 1);
2890 EXFUN (Fpoint_min_marker, 0);
2891 EXFUN (Fpoint_max_marker, 0);
2892 EXFUN (Fpoint_min, 0);
2893 EXFUN (Fpoint_max, 0);
2894 EXFUN (Fpoint, 0);
2895 EXFUN (Fpoint_marker, 0);
2896 EXFUN (Fmark_marker, 0);
2897 EXFUN (Fline_beginning_position, 1);
2898 EXFUN (Fline_end_position, 1);
2899 EXFUN (Ffollowing_char, 0);
2900 EXFUN (Fprevious_char, 0);
2901 EXFUN (Fchar_after, 1);
2902 EXFUN (Finsert, MANY);
2903 EXFUN (Finsert_and_inherit, MANY);
2904 EXFUN (Finsert_before_markers, MANY);
2905 EXFUN (Finsert_buffer_substring, 3);
2906 EXFUN (Finsert_char, 3);
2907 extern void insert1 P_ ((Lisp_Object));
2908 EXFUN (Feolp, 0);
2909 EXFUN (Feobp, 0);
2910 EXFUN (Fbolp, 0);
2911 EXFUN (Fbobp, 0);
2912 EXFUN (Fformat, MANY);
2913 EXFUN (Fmessage, MANY);
2914 extern Lisp_Object format2 P_ ((char *, Lisp_Object, Lisp_Object));
2915 EXFUN (Fbuffer_substring, 2);
2916 EXFUN (Fbuffer_string, 0);
2917 extern Lisp_Object save_excursion_save P_ ((void));
2918 extern Lisp_Object save_restriction_save P_ ((void));
2919 extern Lisp_Object save_excursion_restore P_ ((Lisp_Object));
2920 extern Lisp_Object save_restriction_restore P_ ((Lisp_Object));
2921 EXFUN (Fchar_to_string, 1);
2922 EXFUN (Fdelete_region, 2);
2923 EXFUN (Fnarrow_to_region, 2);
2924 EXFUN (Fwiden, 0);
2925 EXFUN (Fuser_login_name, 1);
2926 EXFUN (Fsystem_name, 0);
2927 EXFUN (Fcurrent_time, 0);
2928 extern int clip_to_bounds P_ ((int, int, int));
2929 extern Lisp_Object make_buffer_string P_ ((int, int, int));
2930 extern Lisp_Object make_buffer_string_both P_ ((int, int, int, int, int));
2931 extern void init_editfns P_ ((void));
2932 extern void syms_of_editfns P_ ((void));
2933 extern Lisp_Object Vinhibit_field_text_motion;
2934 EXFUN (Fconstrain_to_field, 5);
2935 EXFUN (Ffield_string, 1);
2936 EXFUN (Fdelete_field, 1);
2937 EXFUN (Ffield_beginning, 3);
2938 EXFUN (Ffield_end, 3);
2939 EXFUN (Ffield_string_no_properties, 1);
2940 extern void set_time_zone_rule P_ ((char *));
2941
2942 /* defined in buffer.c */
2943 extern int mouse_face_overlay_overlaps P_ ((Lisp_Object));
2944 extern void nsberror P_ ((Lisp_Object)) NO_RETURN;
2945 EXFUN (Fset_buffer_multibyte, 1);
2946 EXFUN (Foverlay_start, 1);
2947 EXFUN (Foverlay_end, 1);
2948 EXFUN (Foverlay_buffer, 1);
2949 extern void adjust_overlays_for_insert P_ ((EMACS_INT, EMACS_INT));
2950 extern void adjust_overlays_for_delete P_ ((EMACS_INT, EMACS_INT));
2951 extern void fix_start_end_in_overlays P_ ((int, int));
2952 extern void report_overlay_modification P_ ((Lisp_Object, Lisp_Object, int,
2953 Lisp_Object, Lisp_Object, Lisp_Object));
2954 extern int overlay_touches_p P_ ((int));
2955 extern Lisp_Object Vbuffer_alist, Vinhibit_read_only;
2956 EXFUN (Fbuffer_list, 1);
2957 EXFUN (Fget_buffer, 1);
2958 EXFUN (Fget_buffer_create, 1);
2959 EXFUN (Fgenerate_new_buffer_name, 2);
2960 EXFUN (Fset_buffer, 1);
2961 EXFUN (set_buffer_if_live, 1);
2962 EXFUN (Fbarf_if_buffer_read_only, 0);
2963 EXFUN (Fcurrent_buffer, 0);
2964 EXFUN (Fswitch_to_buffer, 2);
2965 EXFUN (Fother_buffer, 3);
2966 EXFUN (Foverlay_get, 2);
2967 EXFUN (Fbuffer_modified_p, 1);
2968 EXFUN (Fset_buffer_modified_p, 1);
2969 EXFUN (Fkill_buffer, 1);
2970 EXFUN (Fkill_all_local_variables, 0);
2971 EXFUN (Fbuffer_disable_undo, 1);
2972 EXFUN (Fbuffer_enable_undo, 1);
2973 EXFUN (Ferase_buffer, 0);
2974 extern Lisp_Object Qoverlayp;
2975 extern Lisp_Object Qevaporate;
2976 extern Lisp_Object get_truename_buffer P_ ((Lisp_Object));
2977 extern struct buffer *all_buffers;
2978 EXFUN (Fprevious_overlay_change, 1);
2979 EXFUN (Fbuffer_file_name, 1);
2980 extern void init_buffer_once P_ ((void));
2981 extern void init_buffer P_ ((void));
2982 extern void syms_of_buffer P_ ((void));
2983 extern void keys_of_buffer P_ ((void));
2984
2985 /* defined in marker.c */
2986
2987 EXFUN (Fmarker_position, 1);
2988 EXFUN (Fmarker_buffer, 1);
2989 EXFUN (Fcopy_marker, 2);
2990 EXFUN (Fset_marker, 3);
2991 extern int marker_position P_ ((Lisp_Object));
2992 extern int marker_byte_position P_ ((Lisp_Object));
2993 extern void clear_charpos_cache P_ ((struct buffer *));
2994 extern int charpos_to_bytepos P_ ((int));
2995 extern int buf_charpos_to_bytepos P_ ((struct buffer *, int));
2996 extern int buf_bytepos_to_charpos P_ ((struct buffer *, int));
2997 extern void unchain_marker P_ ((struct Lisp_Marker *marker));
2998 extern Lisp_Object set_marker_restricted P_ ((Lisp_Object, Lisp_Object, Lisp_Object));
2999 extern Lisp_Object set_marker_both P_ ((Lisp_Object, Lisp_Object, int, int));
3000 extern Lisp_Object set_marker_restricted_both P_ ((Lisp_Object, Lisp_Object,
3001 int, int));
3002 extern void syms_of_marker P_ ((void));
3003
3004 /* Defined in fileio.c */
3005
3006 extern Lisp_Object Qfile_error;
3007 EXFUN (Ffind_file_name_handler, 2);
3008 EXFUN (Ffile_name_as_directory, 1);
3009 EXFUN (Fmake_temp_name, 1);
3010 EXFUN (Fexpand_file_name, 2);
3011 EXFUN (Ffile_name_nondirectory, 1);
3012 EXFUN (Fsubstitute_in_file_name, 1);
3013 EXFUN (Ffile_symlink_p, 1);
3014 EXFUN (Fverify_visited_file_modtime, 1);
3015 EXFUN (Ffile_exists_p, 1);
3016 EXFUN (Ffile_name_absolute_p, 1);
3017 EXFUN (Fdirectory_file_name, 1);
3018 EXFUN (Ffile_name_directory, 1);
3019 extern Lisp_Object expand_and_dir_to_file P_ ((Lisp_Object, Lisp_Object));
3020 EXFUN (Ffile_accessible_directory_p, 1);
3021 EXFUN (Funhandled_file_name_directory, 1);
3022 EXFUN (Ffile_directory_p, 1);
3023 EXFUN (Fwrite_region, 7);
3024 EXFUN (Ffile_readable_p, 1);
3025 EXFUN (Ffile_executable_p, 1);
3026 EXFUN (Fread_file_name, 6);
3027 extern Lisp_Object close_file_unwind P_ ((Lisp_Object));
3028 extern void report_file_error P_ ((const char *, Lisp_Object)) NO_RETURN;
3029 extern int internal_delete_file P_ ((Lisp_Object));
3030 extern void syms_of_fileio P_ ((void));
3031 extern Lisp_Object make_temp_name P_ ((Lisp_Object, int));
3032 EXFUN (Fmake_symbolic_link, 3);
3033 extern Lisp_Object Qdelete_file;
3034
3035 /* Defined in abbrev.c */
3036
3037 extern void syms_of_abbrev P_ ((void));
3038
3039 /* defined in search.c */
3040 extern void shrink_regexp_cache P_ ((void));
3041 EXFUN (Fstring_match, 3);
3042 extern void restore_search_regs P_ ((void));
3043 EXFUN (Fmatch_data, 3);
3044 EXFUN (Fset_match_data, 2);
3045 EXFUN (Fmatch_beginning, 1);
3046 EXFUN (Fmatch_end, 1);
3047 extern void record_unwind_save_match_data P_ ((void));
3048 EXFUN (Flooking_at, 1);
3049 extern int fast_string_match P_ ((Lisp_Object, Lisp_Object));
3050 extern int fast_c_string_match_ignore_case P_ ((Lisp_Object, const char *));
3051 extern int fast_string_match_ignore_case P_ ((Lisp_Object, Lisp_Object));
3052 extern EMACS_INT fast_looking_at P_ ((Lisp_Object, EMACS_INT, EMACS_INT,
3053 EMACS_INT, EMACS_INT, Lisp_Object));
3054 extern int scan_buffer P_ ((int, EMACS_INT, EMACS_INT, int, int *, int));
3055 extern int scan_newline P_ ((EMACS_INT, EMACS_INT, EMACS_INT, EMACS_INT,
3056 int, int));
3057 extern int find_next_newline P_ ((EMACS_INT, int));
3058 extern int find_next_newline_no_quit P_ ((EMACS_INT, int));
3059 extern int find_before_next_newline P_ ((EMACS_INT, EMACS_INT, int));
3060 extern void syms_of_search P_ ((void));
3061 extern void clear_regexp_cache P_ ((void));
3062
3063 /* defined in minibuf.c */
3064
3065 extern Lisp_Object last_minibuf_string;
3066 extern void choose_minibuf_frame P_ ((void));
3067 EXFUN (Fcompleting_read, 8);
3068 EXFUN (Fread_from_minibuffer, 7);
3069 EXFUN (Fread_variable, 2);
3070 EXFUN (Fread_buffer, 3);
3071 EXFUN (Fread_minibuffer, 2);
3072 EXFUN (Feval_minibuffer, 2);
3073 EXFUN (Fread_string, 5);
3074 EXFUN (Fread_no_blanks_input, 3);
3075 EXFUN (Fassoc_string, 3);
3076 extern Lisp_Object get_minibuffer P_ ((int));
3077 extern void temp_echo_area_glyphs P_ ((Lisp_Object));
3078 extern void init_minibuf_once P_ ((void));
3079 extern void syms_of_minibuf P_ ((void));
3080
3081 /* Defined in callint.c */
3082
3083 extern Lisp_Object Qminus, Qplus, Vcurrent_prefix_arg;
3084 extern Lisp_Object Vcommand_history;
3085 extern Lisp_Object Qcall_interactively, Qmouse_leave_buffer_hook;
3086 EXFUN (Fcall_interactively, 3);
3087 EXFUN (Fprefix_numeric_value, 1);
3088 extern void syms_of_callint P_ ((void));
3089
3090 /* defined in casefiddle.c */
3091
3092 EXFUN (Fdowncase, 1);
3093 EXFUN (Fupcase, 1);
3094 EXFUN (Fcapitalize, 1);
3095 EXFUN (Fupcase_region, 2);
3096 EXFUN (Fupcase_initials, 1);
3097 EXFUN (Fupcase_initials_region, 2);
3098 extern void syms_of_casefiddle P_ ((void));
3099 extern void keys_of_casefiddle P_ ((void));
3100
3101 /* defined in casetab.c */
3102
3103 EXFUN (Fset_case_table, 1);
3104 EXFUN (Fset_standard_case_table, 1);
3105 extern void init_casetab_once P_ ((void));
3106 extern void syms_of_casetab P_ ((void));
3107
3108 /* defined in keyboard.c */
3109
3110 extern int echoing;
3111 extern Lisp_Object echo_message_buffer;
3112 extern struct kboard *echo_kboard;
3113 extern void cancel_echoing P_ ((void));
3114 extern Lisp_Object Qdisabled, QCfilter;
3115 extern Lisp_Object Vtty_erase_char, Vhelp_form, Vtop_level;
3116 extern Lisp_Object Vthrow_on_input;
3117 extern int input_pending;
3118 EXFUN (Fdiscard_input, 0);
3119 EXFUN (Frecursive_edit, 0);
3120 EXFUN (Ftop_level, 0);
3121 EXFUN (Fcommand_execute, 4);
3122 EXFUN (Finput_pending_p, 0);
3123 extern Lisp_Object menu_bar_items P_ ((Lisp_Object));
3124 extern Lisp_Object tool_bar_items P_ ((Lisp_Object, int *));
3125 extern Lisp_Object Qvertical_scroll_bar;
3126 extern void discard_mouse_events P_ ((void));
3127 EXFUN (Fevent_convert_list, 1);
3128 EXFUN (Fread_key_sequence, 5);
3129 EXFUN (Fset_input_interrupt_mode, 1);
3130 EXFUN (Fset_output_flow_control, 2);
3131 EXFUN (Fset_input_meta_mode, 2);
3132 EXFUN (Fset_quit_char, 1);
3133 EXFUN (Fset_input_mode, 4);
3134 extern Lisp_Object pending_funcalls;
3135 extern int detect_input_pending P_ ((void));
3136 extern int detect_input_pending_ignore_squeezables P_ ((void));
3137 extern int detect_input_pending_run_timers P_ ((int));
3138 extern void safe_run_hooks P_ ((Lisp_Object));
3139 extern void cmd_error_internal P_ ((Lisp_Object, char *));
3140 extern Lisp_Object command_loop_1 P_ ((void));
3141 extern Lisp_Object recursive_edit_1 P_ ((void));
3142 extern void record_auto_save P_ ((void));
3143 extern void init_keyboard P_ ((void));
3144 extern void syms_of_keyboard P_ ((void));
3145 extern void keys_of_keyboard P_ ((void));
3146 extern char *push_key_description P_ ((unsigned int, char *, int));
3147
3148
3149 /* defined in indent.c */
3150 EXFUN (Fvertical_motion, 2);
3151 EXFUN (Findent_to, 2);
3152 EXFUN (Fcurrent_column, 0);
3153 EXFUN (Fmove_to_column, 2);
3154 extern double current_column P_ ((void));
3155 extern void invalidate_current_column P_ ((void));
3156 extern int indented_beyond_p P_ ((int, int, double));
3157 extern void syms_of_indent P_ ((void));
3158
3159 /* defined in frame.c */
3160 #ifdef HAVE_WINDOW_SYSTEM
3161 extern Lisp_Object Vx_resource_name;
3162 extern Lisp_Object Vx_resource_class;
3163 #endif /* HAVE_WINDOW_SYSTEM */
3164 extern Lisp_Object Qvisible;
3165 extern void store_frame_param P_ ((struct frame *, Lisp_Object, Lisp_Object));
3166 extern void store_in_alist P_ ((Lisp_Object *, Lisp_Object, Lisp_Object));
3167 extern Lisp_Object do_switch_frame P_ ((Lisp_Object, int, int, Lisp_Object));
3168 extern Lisp_Object get_frame_param P_ ((struct frame *, Lisp_Object));
3169 extern Lisp_Object frame_buffer_predicate P_ ((Lisp_Object));
3170 EXFUN (Fframep, 1);
3171 EXFUN (Fselect_frame, 2);
3172 EXFUN (Fselected_frame, 0);
3173 EXFUN (Fwindow_frame, 1);
3174 EXFUN (Fframe_root_window, 1);
3175 EXFUN (Fframe_first_window, 1);
3176 EXFUN (Fframe_selected_window, 1);
3177 EXFUN (Fframe_list, 0);
3178 EXFUN (Fnext_frame, 2);
3179 EXFUN (Fdelete_frame, 2);
3180 EXFUN (Fset_mouse_position, 3);
3181 EXFUN (Fmake_frame_visible, 1);
3182 EXFUN (Fmake_frame_invisible, 2);
3183 EXFUN (Ficonify_frame, 1);
3184 EXFUN (Fframe_visible_p, 1);
3185 EXFUN (Fvisible_frame_list, 0);
3186 EXFUN (Fframe_parameter, 2);
3187 EXFUN (Fframe_parameters, 1);
3188 EXFUN (Fmodify_frame_parameters, 2);
3189 EXFUN (Fset_frame_height, 3);
3190 EXFUN (Fset_frame_width, 3);
3191 EXFUN (Fset_frame_size, 3);
3192 EXFUN (Fset_frame_position, 3);
3193 EXFUN (Fraise_frame, 1);
3194 EXFUN (Fredirect_frame_focus, 2);
3195 EXFUN (Fset_frame_selected_window, 3);
3196 extern Lisp_Object frame_buffer_list P_ ((Lisp_Object));
3197 extern void frames_discard_buffer P_ ((Lisp_Object));
3198 extern void set_frame_buffer_list P_ ((Lisp_Object, Lisp_Object));
3199 extern void frames_bury_buffer P_ ((Lisp_Object));
3200 extern void syms_of_frame P_ ((void));
3201
3202 /* defined in emacs.c */
3203 extern Lisp_Object decode_env_path P_ ((char *, char *));
3204 extern Lisp_Object Vinvocation_name, Vinvocation_directory;
3205 extern Lisp_Object Vbefore_init_time, Vafter_init_time;
3206 extern Lisp_Object Vinstallation_directory;
3207 extern Lisp_Object empty_unibyte_string, empty_multibyte_string;
3208 EXFUN (Fkill_emacs, 1);
3209 #if HAVE_SETLOCALE
3210 void fixup_locale P_ ((void));
3211 void synchronize_system_messages_locale P_ ((void));
3212 void synchronize_system_time_locale P_ ((void));
3213 #else
3214 #define setlocale(category, locale)
3215 #define fixup_locale()
3216 #define synchronize_system_messages_locale()
3217 #define synchronize_system_time_locale()
3218 #endif
3219 void shut_down_emacs P_ ((int, int, Lisp_Object));
3220 /* Nonzero means don't do interactive redisplay and don't change tty modes */
3221 extern int noninteractive;
3222
3223 /* Nonzero means don't load X resources or Windows Registry settings. */
3224 extern int inhibit_x_resources;
3225
3226 /* Pipe used to send exit notification to the daemon parent at
3227 startup. */
3228 extern int daemon_pipe[2];
3229 #define IS_DAEMON (daemon_pipe[1] != 0)
3230
3231 /* Nonzero means don't do use window-system-specific display code */
3232 extern int inhibit_window_system;
3233 /* Nonzero means that a filter or a sentinel is running. */
3234 extern int running_asynch_code;
3235
3236 /* defined in process.c */
3237 EXFUN (Fget_process, 1);
3238 EXFUN (Fget_buffer_process, 1);
3239 EXFUN (Fprocessp, 1);
3240 EXFUN (Fprocess_status, 1);
3241 EXFUN (Fkill_process, 2);
3242 EXFUN (Fprocess_send_eof, 1);
3243 EXFUN (Fwaiting_for_user_input_p, 0);
3244 extern Lisp_Object Qprocessp;
3245 extern void kill_buffer_processes P_ ((Lisp_Object));
3246 extern int wait_reading_process_output P_ ((int, int, int, int,
3247 Lisp_Object,
3248 struct Lisp_Process *,
3249 int));
3250 extern void add_keyboard_wait_descriptor P_ ((int));
3251 extern void delete_keyboard_wait_descriptor P_ ((int));
3252 extern void add_gpm_wait_descriptor P_ ((int));
3253 extern void delete_gpm_wait_descriptor P_ ((int));
3254 extern void close_process_descs P_ ((void));
3255 extern void init_process P_ ((void));
3256 extern void syms_of_process P_ ((void));
3257 extern void setup_process_coding_systems P_ ((Lisp_Object));
3258
3259 /* defined in callproc.c */
3260 extern Lisp_Object Vexec_path, Vexec_suffixes,
3261 Vexec_directory, Vdata_directory;
3262 extern Lisp_Object Vdoc_directory;
3263 EXFUN (Fcall_process, MANY);
3264 extern int child_setup P_ ((int, int, int, char **, int, Lisp_Object));
3265 extern void init_callproc_1 P_ ((void));
3266 extern void init_callproc P_ ((void));
3267 extern void set_initial_environment P_ ((void));
3268 extern void syms_of_callproc P_ ((void));
3269
3270 /* defined in doc.c */
3271 extern Lisp_Object Vdoc_file_name;
3272 EXFUN (Fsubstitute_command_keys, 1);
3273 EXFUN (Fdocumentation, 2);
3274 EXFUN (Fdocumentation_property, 3);
3275 extern Lisp_Object read_doc_string P_ ((Lisp_Object));
3276 extern Lisp_Object get_doc_string P_ ((Lisp_Object, int, int));
3277 extern void syms_of_doc P_ ((void));
3278 extern int read_bytecode_char P_ ((int));
3279
3280 /* defined in bytecode.c */
3281 extern Lisp_Object Qbytecode;
3282 EXFUN (Fbyte_code, 3);
3283 extern void syms_of_bytecode P_ ((void));
3284 extern struct byte_stack *byte_stack_list;
3285 extern void mark_byte_stack P_ ((void));
3286 extern void unmark_byte_stack P_ ((void));
3287
3288 /* defined in macros.c */
3289 extern Lisp_Object Qexecute_kbd_macro;
3290 EXFUN (Fexecute_kbd_macro, 3);
3291 EXFUN (Fcancel_kbd_macro_events, 0);
3292 extern void init_macros P_ ((void));
3293 extern void syms_of_macros P_ ((void));
3294
3295 /* defined in undo.c */
3296 extern Lisp_Object Qinhibit_read_only;
3297 EXFUN (Fundo_boundary, 0);
3298 extern void truncate_undo_list P_ ((struct buffer *));
3299 extern void record_marker_adjustment P_ ((Lisp_Object, int));
3300 extern void record_insert P_ ((int, int));
3301 extern void record_delete P_ ((int, Lisp_Object));
3302 extern void record_first_change P_ ((void));
3303 extern void record_change P_ ((int, int));
3304 extern void record_property_change P_ ((int, int, Lisp_Object, Lisp_Object,
3305 Lisp_Object));
3306 extern void syms_of_undo P_ ((void));
3307 extern Lisp_Object Vundo_outer_limit;
3308
3309 /* defined in textprop.c */
3310 extern Lisp_Object Qfont, Qmouse_face;
3311 extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
3312 EXFUN (Fnext_single_property_change, 4);
3313 EXFUN (Fnext_single_char_property_change, 4);
3314 EXFUN (Fprevious_single_property_change, 4);
3315 EXFUN (Fget_text_property, 3);
3316 EXFUN (Fput_text_property, 5);
3317 EXFUN (Fget_text_property, 3);
3318 EXFUN (Fprevious_char_property_change, 2);
3319 EXFUN (Fnext_char_property_change, 2);
3320 extern void report_interval_modification P_ ((Lisp_Object, Lisp_Object));
3321 extern Lisp_Object next_single_char_property_change P_ ((Lisp_Object,
3322 Lisp_Object,
3323 Lisp_Object,
3324 Lisp_Object));
3325
3326 /* defined in menu.c */
3327 extern void syms_of_menu P_ ((void));
3328
3329 /* defined in xmenu.c */
3330 EXFUN (Fx_popup_menu, 2);
3331 EXFUN (Fx_popup_dialog, 3);
3332 extern void syms_of_xmenu P_ ((void));
3333
3334 /* defined in termchar.h */
3335 struct tty_display_info;
3336
3337 /* defined in termhooks.h */
3338 struct terminal;
3339
3340 /* defined in sysdep.c */
3341 #ifndef HAVE_GET_CURRENT_DIR_NAME
3342 extern char *get_current_dir_name P_ ((void));
3343 #endif
3344 extern void stuff_char P_ ((char c));
3345 extern void init_sigio P_ ((int));
3346 extern void sys_subshell P_ ((void));
3347 extern void sys_suspend P_ ((void));
3348 extern void discard_tty_input P_ ((void));
3349 extern void init_sys_modes P_ ((struct tty_display_info *));
3350 extern void reset_sys_modes P_ ((struct tty_display_info *));
3351 extern void init_all_sys_modes P_ ((void));
3352 extern void reset_all_sys_modes P_ ((void));
3353 extern void wait_for_termination P_ ((int));
3354 extern void flush_pending_output P_ ((int));
3355 extern void child_setup_tty P_ ((int));
3356 extern void setup_pty P_ ((int));
3357 extern int set_window_size P_ ((int, int, int));
3358 extern void create_process P_ ((Lisp_Object, char **, Lisp_Object));
3359 extern int emacs_open P_ ((const char *, int, int));
3360 extern int emacs_close P_ ((int));
3361 extern int emacs_read P_ ((int, char *, unsigned int));
3362 extern int emacs_write P_ ((int, const char *, unsigned int));
3363
3364 /* defined in filelock.c */
3365 EXFUN (Funlock_buffer, 0);
3366 EXFUN (Ffile_locked_p, 1);
3367 extern void unlock_all_files P_ ((void));
3368 extern void lock_file P_ ((Lisp_Object));
3369 extern void unlock_file P_ ((Lisp_Object));
3370 extern void unlock_buffer P_ ((struct buffer *));
3371 extern void syms_of_filelock P_ ((void));
3372 extern void init_filelock P_ ((void));
3373
3374 /* Defined in sound.c */
3375 extern void syms_of_sound P_ ((void));
3376 extern void init_sound P_ ((void));
3377
3378 /* Defined in category.c */
3379 extern void init_category_once P_ ((void));
3380 extern Lisp_Object char_category_set P_ ((int));
3381 extern void syms_of_category P_ ((void));
3382
3383 /* Defined in ccl.c */
3384 extern void syms_of_ccl P_ ((void));
3385
3386 /* Defined in dired.c */
3387 EXFUN (Ffile_attributes, 2);
3388 extern void syms_of_dired P_ ((void));
3389 extern Lisp_Object directory_files_internal P_ ((Lisp_Object, Lisp_Object,
3390 Lisp_Object, Lisp_Object,
3391 int, Lisp_Object));
3392
3393 /* Defined in term.c */
3394 extern void syms_of_term P_ ((void));
3395 extern void fatal P_ ((const char *msgid, ...)) NO_RETURN;
3396
3397 /* Defined in terminal.c */
3398 EXFUN (Fdelete_terminal, 2);
3399 extern void syms_of_terminal P_ ((void));
3400
3401 /* Defined in font.c */
3402 extern void syms_of_font P_ ((void));
3403
3404 #ifdef HAVE_WINDOW_SYSTEM
3405 /* Defined in fontset.c */
3406 extern void syms_of_fontset P_ ((void));
3407 EXFUN (Fset_fontset_font, 5);
3408 EXFUN (Fnew_fontset, 2);
3409
3410 /* Defined in xfns.c, w32fns.c, or macfns.c */
3411 EXFUN (Fxw_display_color_p, 1);
3412 EXFUN (Fx_file_dialog, 5);
3413 EXFUN (Fx_focus_frame, 1);
3414 #endif
3415
3416 /* Defined in xfaces.c */
3417 EXFUN (Fclear_face_cache, 1);
3418 EXFUN (Fx_load_color_file, 1);
3419 extern void syms_of_xfaces P_ ((void));
3420
3421 #ifndef HAVE_GETLOADAVG
3422 /* Defined in getloadavg.c */
3423 extern int getloadavg P_ ((double *, int));
3424 #endif
3425
3426 #ifdef HAVE_X_WINDOWS
3427 /* Defined in xfns.c */
3428 extern void syms_of_xfns P_ ((void));
3429
3430 /* Defined in xsmfns.c */
3431 extern void syms_of_xsmfns P_ ((void));
3432
3433 /* Defined in xselect.c */
3434 EXFUN (Fx_send_client_event, 6);
3435 extern void syms_of_xselect P_ ((void));
3436
3437 /* Defined in xterm.c */
3438 extern void syms_of_xterm P_ ((void));
3439 #endif /* HAVE_X_WINDOWS */
3440
3441 #ifdef MSDOS
3442 /* Defined in msdos.c */
3443 EXFUN (Fmsdos_downcase_filename, 1);
3444 #endif
3445
3446 #ifdef HAVE_MENUS
3447 /* Defined in (x|w32)fns.c, nsfns.m... */
3448 extern int have_menus_p P_ ((void));
3449 #endif
3450
3451 #ifdef HAVE_DBUS
3452 /* Defined in dbusbind.c */
3453 int xd_pending_messages P_ ((void));
3454 void xd_read_queued_messages P_ ((void));
3455 void syms_of_dbusbind P_ ((void));
3456 #endif
3457 \f
3458 /* Nonzero means Emacs has already been initialized.
3459 Used during startup to detect startup of dumped Emacs. */
3460 extern int initialized;
3461
3462 extern int immediate_quit; /* Nonzero means ^G can quit instantly */
3463
3464 extern POINTER_TYPE *xmalloc P_ ((size_t));
3465 extern POINTER_TYPE *xrealloc P_ ((POINTER_TYPE *, size_t));
3466 extern void xfree P_ ((POINTER_TYPE *));
3467
3468 extern char *xstrdup P_ ((const char *));
3469
3470 extern char *egetenv P_ ((char *));
3471
3472 /* Set up the name of the machine we're running on. */
3473 extern void init_system_name P_ ((void));
3474
3475 /* Some systems (e.g., NT) use a different path separator than Unix,
3476 in addition to a device separator. Default the path separator
3477 to '/', and don't test for a device separator in IS_ANY_SEP. */
3478
3479 #ifdef WINDOWSNT
3480 extern Lisp_Object Vdirectory_sep_char;
3481 #endif
3482
3483 #ifndef DIRECTORY_SEP
3484 #define DIRECTORY_SEP '/'
3485 #endif
3486 #ifndef IS_DIRECTORY_SEP
3487 #define IS_DIRECTORY_SEP(_c_) ((_c_) == DIRECTORY_SEP)
3488 #endif
3489 #ifndef IS_DEVICE_SEP
3490 #ifndef DEVICE_SEP
3491 #define IS_DEVICE_SEP(_c_) 0
3492 #else
3493 #define IS_DEVICE_SEP(_c_) ((_c_) == DEVICE_SEP)
3494 #endif
3495 #endif
3496 #ifndef IS_ANY_SEP
3497 #define IS_ANY_SEP(_c_) (IS_DIRECTORY_SEP (_c_))
3498 #endif
3499
3500 #define SWITCH_ENUM_CAST(x) (x)
3501
3502 /* Loop over Lisp list LIST. Signal an error if LIST is not a proper
3503 list, or if it contains circles.
3504
3505 HARE and TORTOISE should be the names of Lisp_Object variables, and
3506 N should be the name of an EMACS_INT variable declared in the
3507 function where the macro is used. Each nested loop should use
3508 its own variables.
3509
3510 In the loop body, HARE is set to each cons of LIST, and N is the
3511 length of the list processed so far. */
3512
3513 #define LIST_END_P(list, obj) \
3514 (NILP (obj) \
3515 ? 1 \
3516 : (CONSP (obj) \
3517 ? 0 \
3518 : (wrong_type_argument (Qlistp, (list))), 1))
3519
3520 #define FOREACH(hare, list, tortoise, n) \
3521 for (tortoise = hare = (list), n = 0; \
3522 !LIST_END_P (list, hare); \
3523 (hare = XCDR (hare), ++n, \
3524 ((n & 1) != 0 \
3525 ? (tortoise = XCDR (tortoise), \
3526 (EQ (hare, tortoise) \
3527 && (circular_list_error ((list)), 1))) \
3528 : 0)))
3529
3530 /* The ubiquitous min and max macros. */
3531
3532 #ifdef max
3533 #undef max
3534 #undef min
3535 #endif
3536 #define min(a, b) ((a) < (b) ? (a) : (b))
3537 #define max(a, b) ((a) > (b) ? (a) : (b))
3538
3539 /* We used to use `abs', but that clashes with system headers on some
3540 platforms, and using a name reserved by Standard C is a bad idea
3541 anyway. */
3542 #if !defined(eabs)
3543 #define eabs(x) ((x) < 0 ? -(x) : (x))
3544 #endif
3545
3546 /* Return a fixnum or float, depending on whether VAL fits in a Lisp
3547 fixnum. */
3548
3549 #define make_fixnum_or_float(val) \
3550 (FIXNUM_OVERFLOW_P (val) \
3551 ? make_float (val) \
3552 : make_number ((EMACS_INT)(val)))
3553
3554
3555 /* Checks the `cycle check' variable CHECK to see if it indicates that
3556 EL is part of a cycle; CHECK must be either Qnil or a value returned
3557 by an earlier use of CYCLE_CHECK. SUSPICIOUS is the number of
3558 elements after which a cycle might be suspected; after that many
3559 elements, this macro begins consing in order to keep more precise
3560 track of elements.
3561
3562 Returns nil if a cycle was detected, otherwise a new value for CHECK
3563 that includes EL.
3564
3565 CHECK is evaluated multiple times, EL and SUSPICIOUS 0 or 1 times, so
3566 the caller should make sure that's ok. */
3567
3568 #define CYCLE_CHECK(check, el, suspicious) \
3569 (NILP (check) \
3570 ? make_number (0) \
3571 : (INTEGERP (check) \
3572 ? (XFASTINT (check) < (suspicious) \
3573 ? make_number (XFASTINT (check) + 1) \
3574 : Fcons (el, Qnil)) \
3575 : (!NILP (Fmemq ((el), (check))) \
3576 ? Qnil \
3577 : Fcons ((el), (check)))))
3578
3579
3580 /* SAFE_ALLOCA normally allocates memory on the stack, but if size is
3581 larger than MAX_ALLOCA, use xmalloc to avoid overflowing the stack. */
3582
3583 #define MAX_ALLOCA 16*1024
3584
3585 extern Lisp_Object safe_alloca_unwind (Lisp_Object);
3586
3587 #define USE_SAFE_ALLOCA \
3588 int sa_count = SPECPDL_INDEX (), sa_must_free = 0
3589
3590 /* SAFE_ALLOCA allocates a simple buffer. */
3591
3592 #define SAFE_ALLOCA(buf, type, size) \
3593 do { \
3594 if ((size) < MAX_ALLOCA) \
3595 buf = (type) alloca (size); \
3596 else \
3597 { \
3598 buf = (type) xmalloc (size); \
3599 sa_must_free++; \
3600 record_unwind_protect (safe_alloca_unwind, \
3601 make_save_value (buf, 0)); \
3602 } \
3603 } while (0)
3604
3605 /* SAFE_FREE frees xmalloced memory and enables GC as needed. */
3606
3607 #define SAFE_FREE() \
3608 do { \
3609 if (sa_must_free) { \
3610 sa_must_free = 0; \
3611 unbind_to (sa_count, Qnil); \
3612 } \
3613 } while (0)
3614
3615
3616 /* SAFE_ALLOCA_LISP allocates an array of Lisp_Objects. */
3617
3618 #define SAFE_ALLOCA_LISP(buf, nelt) \
3619 do { \
3620 int size_ = (nelt) * sizeof (Lisp_Object); \
3621 if (size_ < MAX_ALLOCA) \
3622 buf = (Lisp_Object *) alloca (size_); \
3623 else \
3624 { \
3625 Lisp_Object arg_; \
3626 buf = (Lisp_Object *) xmalloc (size_); \
3627 arg_ = make_save_value (buf, nelt); \
3628 XSAVE_VALUE (arg_)->dogc = 1; \
3629 sa_must_free++; \
3630 record_unwind_protect (safe_alloca_unwind, arg_); \
3631 } \
3632 } while (0)
3633
3634
3635 #endif /* EMACS_LISP_H */
3636
3637 /* arch-tag: 9b2ed020-70eb-47ac-94ee-e1c2a5107d5e
3638 (do not change this comment) */