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