comparison src/lisp.h @ 647:b39c14581166

[xemacs-hg @ 2001-08-13 04:45:47 by ben] removal of unsigned, size_t, etc.
author ben
date Mon, 13 Aug 2001 04:46:48 +0000
parents af57a77cbc92
children fdefd0186b75
comparison
equal deleted inserted replaced
646:00c54252fe4f 647:b39c14581166
42 #include <ctype.h> 42 #include <ctype.h>
43 #include <stdarg.h> 43 #include <stdarg.h>
44 #include <stddef.h> /* offsetof */ 44 #include <stddef.h> /* offsetof */
45 #include <sys/types.h> 45 #include <sys/types.h>
46 #include <limits.h> 46 #include <limits.h>
47
48 /* ------------------------ definition of EMACS_INT ------------------- */
49
50 /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit.
51 In particular, it must be large enough to contain a pointer.
52 config.h can override this, e.g. to use `long long' for bigger lisp ints.
53
54 #### In point of fact, it would NOT be a good idea for config.h to mess
55 with EMACS_INT. A lot of code makes the basic assumption that EMACS_INT
56 is the size of a pointer. */
57
58 #ifndef SIZEOF_EMACS_INT
59 # define SIZEOF_EMACS_INT SIZEOF_VOID_P
60 #endif
61
62 #ifndef EMACS_INT
63 # if SIZEOF_EMACS_INT == SIZEOF_LONG
64 # define EMACS_INT long
65 # elif SIZEOF_EMACS_INT == SIZEOF_INT
66 # define EMACS_INT int
67 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG
68 # define EMACS_INT long long
69 # else
70 # error Unable to determine suitable type for EMACS_INT
71 # endif
72 #endif
73
74 #ifndef EMACS_UINT
75 # define EMACS_UINT unsigned EMACS_INT
76 #endif
77
78 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR)
79
80 /* ------------------------ basic char/int typedefs ------------------- */
81
82 /* The definitions we put here use typedefs to attribute specific meaning
83 to types that by themselves are pretty general. Stuff pointed to by a
84 char * or unsigned char * will nearly always be one of four types:
85 a) pointer to internally-formatted text; b) pointer to text in some
86 external format, which can be defined as all formats other than the
87 internal one; c) pure ASCII text; d) binary data that is not meant to
88 be interpreted as text. [A fifth possible type "e) a general pointer
89 to memory" should be replaced with void *.] Using these more specific
90 types rather than the general ones helps avoid the confusions that
91 occur when the semantics of a char * argument being studied are unclear.
92
93 Note that these typedefs are purely for documentation purposes; from
94 the C code's perspective, they are exactly equivalent to `char *',
95 `unsigned char *', etc., so you can freely use them with library
96 functions declared as such. */
97
98 /* The data representing the text in a buffer is logically a set
99 of Bufbytes, declared as follows. */
100
101 typedef unsigned char Bufbyte;
102
103 /* The following should be used when you are working with internal data
104 but for whatever reason need to have it declared a "char *". Examples
105 are function arguments whose values are most commonly literal strings,
106 or where you have to apply a stdlib string function to internal data.
107
108 In general, you should avoid this where possible and use Bufbyte instead,
109 for consistency. For example, the new Mule workspace contains
110 Bufbyte versions of the stdlib string functions. */
111
112 typedef char CBufbyte;
113
114 /* The data representing a string in "external" format (binary or any
115 external encoding) is logically a set of Extbytes, declared as
116 follows. Extbyte is guaranteed to be just a char, so for example
117 strlen (Extbyte *) is OK. Extbyte is only a documentation device
118 for referring to external text. */
119
120 typedef char Extbyte;
121
122 /* A byte in a string in binary format: */
123 typedef char Char_Binary;
124 typedef signed char SChar_Binary;
125 typedef unsigned char UChar_Binary;
126
127 /* A byte in a string in entirely US-ASCII format: (Nothing outside
128 the range 00 - 7F) */
129
130 typedef char Char_ASCII;
131 typedef unsigned char UChar_ASCII;
132
133
134 /* To the user, a buffer is made up of characters, declared as follows.
135 In the non-Mule world, characters and Bufbytes are equivalent.
136 In the Mule world, a character requires (typically) 1 to 4
137 Bufbytes for its representation in a buffer. */
138
139 typedef int Emchar;
140
141 /* Different ways of referring to a position in a buffer. We use
142 the typedefs in preference to 'EMACS_INT' to make it clearer what
143 sort of position is being used. See extents.c for a description
144 of the different positions. We put them here instead of in
145 buffer.h (where they rightfully belong) to avoid syntax errors
146 in function prototypes. */
147
148 typedef EMACS_INT Bufpos;
149 typedef EMACS_INT Bytind;
150 typedef EMACS_INT Memind;
151
152 /* Counts of bytes or chars */
153
154 typedef EMACS_INT Bytecount;
155 typedef EMACS_INT Charcount;
156
157 /* Length in bytes of a string in external format */
158 typedef EMACS_INT Extcount;
159
160 /* General counts of bytes or elements */
161 typedef EMACS_INT Memory_Count;
162 typedef EMACS_INT Element_Count;
163
164 typedef unsigned long Hash_Code;
47 165
48 /* ------------------------ dynamic arrays ------------------- */ 166 /* ------------------------ dynamic arrays ------------------- */
49 167
50 #define Dynarr_declare(type) \ 168 #define Dynarr_declare(type) \
51 type *base; \ 169 type *base; \
96 #define Dynarr_increment(d) ((d)->cur++) 214 #define Dynarr_increment(d) ((d)->cur++)
97 #define Dynarr_set_size(d, n) ((d)->cur = n) 215 #define Dynarr_set_size(d, n) ((d)->cur = n)
98 216
99 #ifdef MEMORY_USAGE_STATS 217 #ifdef MEMORY_USAGE_STATS
100 struct overhead_stats; 218 struct overhead_stats;
101 size_t Dynarr_memory_usage (void *d, struct overhead_stats *stats); 219 Memory_Count Dynarr_memory_usage (void *d, struct overhead_stats *stats);
102 #endif 220 #endif
103 221
104 /* Also define min() and max(). (Some compilers put them in strange 222 /* Also define min() and max(). (Some compilers put them in strange
105 places that won't be referenced by the above include files, such 223 places that won't be referenced by the above include files, such
106 as 'macros.h' under Solaris.) */ 224 as 'macros.h' under Solaris.) */
112 #define max(a,b) (((a) > (b)) ? (a) : (b)) 230 #define max(a,b) (((a) > (b)) ? (a) : (b))
113 #endif 231 #endif
114 232
115 /* Memory allocation */ 233 /* Memory allocation */
116 void malloc_warning (const char *); 234 void malloc_warning (const char *);
117 void *xmalloc (size_t size); 235 void *xmalloc (Memory_Count size);
118 void *xmalloc_and_zero (size_t size); 236 void *xmalloc_and_zero (Memory_Count size);
119 void *xrealloc (void *, size_t size); 237 void *xrealloc (void *, Memory_Count size);
120 char *xstrdup (const char *); 238 char *xstrdup (const char *);
121 /* generally useful */ 239 /* generally useful */
122 #define countof(x) ((int) (sizeof(x)/sizeof((x)[0]))) 240 #define countof(x) ((int) (sizeof(x)/sizeof((x)[0])))
123 #define xnew(type) ((type *) xmalloc (sizeof (type))) 241 #define xnew(type) ((type *) xmalloc (sizeof (type)))
124 #define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type))) 242 #define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
134 if SIZEVAR is 0), with the total size stored in SIZEVAR. This 252 if SIZEVAR is 0), with the total size stored in SIZEVAR. This
135 macro will realloc BASEVAR as necessary so that it can hold at 253 macro will realloc BASEVAR as necessary so that it can hold at
136 least NEEDED_SIZE objects. The reallocing is done by doubling, 254 least NEEDED_SIZE objects. The reallocing is done by doubling,
137 which ensures constant amortized time per element. */ 255 which ensures constant amortized time per element. */
138 #define DO_REALLOC(basevar, sizevar, needed_size, type) do { \ 256 #define DO_REALLOC(basevar, sizevar, needed_size, type) do { \
139 size_t do_realloc_needed_size = (needed_size); \ 257 Memory_Count do_realloc_needed_size = (needed_size); \
140 if ((sizevar) < do_realloc_needed_size) \ 258 if ((sizevar) < do_realloc_needed_size) \
141 { \ 259 { \
142 if ((sizevar) < 32) \ 260 if ((sizevar) < 32) \
143 (sizevar) = 32; \ 261 (sizevar) = 32; \
144 while ((sizevar) < do_realloc_needed_size) \ 262 while ((sizevar) < do_realloc_needed_size) \
263 /*#else*/ 381 /*#else*/
264 /*#define REGISTER register*/ 382 /*#define REGISTER register*/
265 /*#endif*/ 383 /*#endif*/
266 384
267 385
268 /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit.
269 In particular, it must be large enough to contain a pointer.
270 config.h can override this, e.g. to use `long long' for bigger lisp ints.
271
272 #### In point of fact, it would NOT be a good idea for config.h to mess
273 with EMACS_INT. A lot of code makes the basic assumption that EMACS_INT
274 is the size of a pointer. */
275
276 #ifndef SIZEOF_EMACS_INT
277 # define SIZEOF_EMACS_INT SIZEOF_VOID_P
278 #endif
279
280 #ifndef EMACS_INT
281 # if SIZEOF_EMACS_INT == SIZEOF_LONG
282 # define EMACS_INT long
283 # elif SIZEOF_EMACS_INT == SIZEOF_INT
284 # define EMACS_INT int
285 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG
286 # define EMACS_INT long long
287 # else
288 # error Unable to determine suitable type for EMACS_INT
289 # endif
290 #endif
291
292 #ifndef EMACS_UINT
293 # define EMACS_UINT unsigned EMACS_INT
294 #endif
295
296 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR)
297
298 386
299 /************************************************************************/ 387 /************************************************************************/
300 /* typedefs */ 388 /* typedefs */
301 /************************************************************************/ 389 /************************************************************************/
302 390
391 /* Note that the simplest typedefs are near the top of this file. */
392
303 /* We put typedefs here so that prototype declarations don't choke. 393 /* We put typedefs here so that prototype declarations don't choke.
304 Note that we don't actually declare the structures here (except 394 Note that we don't actually declare the structures here (except
305 maybe for simple structures like Dynarrs); that keeps them private 395 maybe for simple structures like Dynarrs); that keeps them private
306 to the routines that actually use them. */ 396 to the routines that actually use them. */
307 397
308 /* ------------------------------- */
309 /* basic char/int typedefs */
310 /* ------------------------------- */
311
312 /* The definitions we put here use typedefs to attribute specific meaning
313 to types that by themselves are pretty general. Stuff pointed to by a
314 char * or unsigned char * will nearly always be one of four types:
315 a) pointer to internally-formatted text; b) pointer to text in some
316 external format, which can be defined as all formats other than the
317 internal one; c) pure ASCII text; d) binary data that is not meant to
318 be interpreted as text. [A fifth possible type "e) a general pointer
319 to memory" should be replaced with void *.] Using these more specific
320 types rather than the general ones helps avoid the confusions that
321 occur when the semantics of a char * argument being studied are unclear.
322
323 Note that these typedefs are purely for documentation purposes; from
324 the C code's perspective, they are exactly equivalent to `char *',
325 `unsigned char *', etc., so you can freely use them with library
326 functions declared as such. */
327
328 /* The data representing the text in a buffer is logically a set
329 of Bufbytes, declared as follows. */
330
331 typedef unsigned char Bufbyte;
332
333 /* The following should be used when you are working with internal data
334 but for whatever reason need to have it declared a "char *". Examples
335 are function arguments whose values are most commonly literal strings,
336 or where you have to apply a stdlib string function to internal data.
337
338 In general, you should avoid this where possible and use Bufbyte instead,
339 for consistency. For example, the new Mule workspace contains
340 Bufbyte versions of the stdlib string functions. */
341
342 typedef char CBufbyte;
343
344 /* The data representing a string in "external" format (binary or any
345 external encoding) is logically a set of Extbytes, declared as
346 follows. Extbyte is guaranteed to be just a char, so for example
347 strlen (Extbyte *) is OK. Extbyte is only a documentation device
348 for referring to external text. */
349
350 typedef char Extbyte;
351
352 /* A byte in a string in binary format: */
353 typedef char Char_Binary;
354 typedef signed char SChar_Binary;
355 typedef unsigned char UChar_Binary;
356
357 /* A byte in a string in entirely US-ASCII format: (Nothing outside
358 the range 00 - 7F) */
359
360 typedef char Char_ASCII;
361 typedef unsigned char UChar_ASCII;
362
363
364 /* To the user, a buffer is made up of characters, declared as follows.
365 In the non-Mule world, characters and Bufbytes are equivalent.
366 In the Mule world, a character requires (typically) 1 to 4
367 Bufbytes for its representation in a buffer. */
368
369 typedef int Emchar;
370
371 /* Different ways of referring to a position in a buffer. We use
372 the typedefs in preference to 'EMACS_INT' to make it clearer what
373 sort of position is being used. See extents.c for a description
374 of the different positions. We put them here instead of in
375 buffer.h (where they rightfully belong) to avoid syntax errors
376 in function prototypes. */
377
378 typedef EMACS_INT Bufpos;
379 typedef EMACS_INT Bytind;
380 typedef EMACS_INT Memind;
381
382 /* Counts of bytes or chars */
383
384 typedef EMACS_INT Bytecount;
385 typedef EMACS_INT Charcount;
386
387 /* Length in bytes of a string in external format */
388 typedef EMACS_INT Extcount;
389
390 /* ------------------------------- */
391 /* structure/other typedefs */
392 /* ------------------------------- */
393
394 typedef struct lstream Lstream; 398 typedef struct lstream Lstream;
395 399
396 typedef unsigned int face_index; 400 typedef int face_index;
397 401
398 typedef struct 402 typedef struct
399 { 403 {
400 Dynarr_declare (struct face_cachel); 404 Dynarr_declare (struct face_cachel);
401 } face_cachel_dynarr; 405 } face_cachel_dynarr;
402 406
403 typedef unsigned int glyph_index; 407 typedef int glyph_index;
404 408
405 /* This is shared by process.h, events.h and others in future. 409 /* This is shared by process.h, events.h and others in future.
406 See events.h for description */ 410 See events.h for description */
407 typedef unsigned int USID; 411 typedef unsigned int USID;
408 412
1285 1289
1286 struct Lisp_Bit_Vector 1290 struct Lisp_Bit_Vector
1287 { 1291 {
1288 struct lrecord_header lheader; 1292 struct lrecord_header lheader;
1289 Lisp_Object next; 1293 Lisp_Object next;
1290 size_t size; 1294 Element_Count size;
1291 unsigned long bits[1]; 1295 unsigned long bits[1];
1292 }; 1296 };
1293 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector; 1297 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector;
1294 1298
1295 DECLARE_LRECORD (bit_vector, Lisp_Bit_Vector); 1299 DECLARE_LRECORD (bit_vector, Lisp_Bit_Vector);
1313 } while (0) 1317 } while (0)
1314 1318
1315 #define bit_vector_length(v) ((v)->size) 1319 #define bit_vector_length(v) ((v)->size)
1316 #define bit_vector_next(v) ((v)->next) 1320 #define bit_vector_next(v) ((v)->next)
1317 1321
1318 INLINE_HEADER int bit_vector_bit (Lisp_Bit_Vector *v, size_t n); 1322 INLINE_HEADER int bit_vector_bit (Lisp_Bit_Vector *v, Element_Count n);
1319 INLINE_HEADER int 1323 INLINE_HEADER int
1320 bit_vector_bit (Lisp_Bit_Vector *v, size_t n) 1324 bit_vector_bit (Lisp_Bit_Vector *v, Element_Count n)
1321 { 1325 {
1322 return ((v->bits[n >> LONGBITS_LOG2] >> (n & (LONGBITS_POWER_OF_2 - 1))) 1326 return ((v->bits[n >> LONGBITS_LOG2] >> (n & (LONGBITS_POWER_OF_2 - 1)))
1323 & 1); 1327 & 1);
1324 } 1328 }
1325 1329
1326 INLINE_HEADER void set_bit_vector_bit (Lisp_Bit_Vector *v, size_t n, int value); 1330 INLINE_HEADER void set_bit_vector_bit (Lisp_Bit_Vector *v, Element_Count n, int value);
1327 INLINE_HEADER void 1331 INLINE_HEADER void
1328 set_bit_vector_bit (Lisp_Bit_Vector *v, size_t n, int value) 1332 set_bit_vector_bit (Lisp_Bit_Vector *v, Element_Count n, int value)
1329 { 1333 {
1330 if (value) 1334 if (value)
1331 v->bits[n >> LONGBITS_LOG2] |= (1UL << (n & (LONGBITS_POWER_OF_2 - 1))); 1335 v->bits[n >> LONGBITS_LOG2] |= (1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
1332 else 1336 else
1333 v->bits[n >> LONGBITS_LOG2] &= ~(1UL << (n & (LONGBITS_POWER_OF_2 - 1))); 1337 v->bits[n >> LONGBITS_LOG2] &= ~(1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
1689 1693
1690 struct lcrecord_list 1694 struct lcrecord_list
1691 { 1695 {
1692 struct lcrecord_header header; 1696 struct lcrecord_header header;
1693 Lisp_Object free; 1697 Lisp_Object free;
1694 size_t size; 1698 Element_Count size;
1695 const struct lrecord_implementation *implementation; 1699 const struct lrecord_implementation *implementation;
1696 }; 1700 };
1697 1701
1698 DECLARE_LRECORD (lcrecord_list, struct lcrecord_list); 1702 DECLARE_LRECORD (lcrecord_list, struct lcrecord_list);
1699 #define XLCRECORD_LIST(x) XRECORD (x, lcrecord_list, struct lcrecord_list) 1703 #define XLCRECORD_LIST(x) XRECORD (x, lcrecord_list, struct lcrecord_list)
1702 #define LCRECORD_LISTP(x) RECORDP (x, lcrecord_list) 1706 #define LCRECORD_LISTP(x) RECORDP (x, lcrecord_list)
1703 /* #define CHECK_LCRECORD_LIST(x) CHECK_RECORD (x, lcrecord_list) 1707 /* #define CHECK_LCRECORD_LIST(x) CHECK_RECORD (x, lcrecord_list)
1704 Lcrecord lists should never escape to the Lisp level, so 1708 Lcrecord lists should never escape to the Lisp level, so
1705 functions should not be doing this. */ 1709 functions should not be doing this. */
1706 1710
1707 Lisp_Object make_lcrecord_list (size_t size, 1711 Lisp_Object make_lcrecord_list (Element_Count size,
1708 const struct lrecord_implementation 1712 const struct lrecord_implementation
1709 *implementation); 1713 *implementation);
1710 Lisp_Object allocate_managed_lcrecord (Lisp_Object lcrecord_list); 1714 Lisp_Object allocate_managed_lcrecord (Lisp_Object lcrecord_list);
1711 void free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord); 1715 void free_managed_lcrecord (Lisp_Object lcrecord_list, Lisp_Object lcrecord);
1712 1716
1883 #define HASH8(a,b,c,d,e,f,g,h) (GOOD_HASH * HASH7 (a,b,c,d,e,f,g) + (h)) 1887 #define HASH8(a,b,c,d,e,f,g,h) (GOOD_HASH * HASH7 (a,b,c,d,e,f,g) + (h))
1884 #define HASH9(a,b,c,d,e,f,g,h,i) (GOOD_HASH * HASH8 (a,b,c,d,e,f,g,h) + (i)) 1888 #define HASH9(a,b,c,d,e,f,g,h,i) (GOOD_HASH * HASH8 (a,b,c,d,e,f,g,h) + (i))
1885 1889
1886 #define LISP_HASH(obj) ((unsigned long) LISP_TO_VOID (obj)) 1890 #define LISP_HASH(obj) ((unsigned long) LISP_TO_VOID (obj))
1887 unsigned long string_hash (const char *xv); 1891 unsigned long string_hash (const char *xv);
1888 unsigned long memory_hash (const void *xv, size_t size); 1892 unsigned long memory_hash (const void *xv, Memory_Count size);
1889 unsigned long internal_hash (Lisp_Object obj, int depth); 1893 unsigned long internal_hash (Lisp_Object obj, int depth);
1890 unsigned long internal_array_hash (Lisp_Object *arr, int size, int depth); 1894 unsigned long internal_array_hash (Lisp_Object *arr, int size, int depth);
1891 1895
1892 1896
1893 /************************************************************************/ 1897 /************************************************************************/
2184 #define dump_add_root_struct_ptr(varaddr,descaddr) DO_NOTHING 2188 #define dump_add_root_struct_ptr(varaddr,descaddr) DO_NOTHING
2185 #endif 2189 #endif
2186 2190
2187 /* dump_add_opaque (&var, size) dumps the opaque static structure `var'. */ 2191 /* dump_add_opaque (&var, size) dumps the opaque static structure `var'. */
2188 #ifdef PDUMP 2192 #ifdef PDUMP
2189 void dump_add_opaque (const void *, size_t); 2193 void dump_add_opaque (const void *, Memory_Count);
2190 #else 2194 #else
2191 #define dump_add_opaque(varaddr,size) DO_NOTHING 2195 #define dump_add_opaque(varaddr,size) DO_NOTHING
2192 #endif 2196 #endif
2193 2197
2194 /* Call dump_add_opaque_int (&int_var) to dump `int_var', of type `int'. */ 2198 /* Call dump_add_opaque_int (&int_var) to dump `int_var', of type `int'. */
2252 the fields to 0, and add any existing values to whatever was there 2256 the fields to 0, and add any existing values to whatever was there
2253 before; this way, you can get a cumulative effect. */ 2257 before; this way, you can get a cumulative effect. */
2254 2258
2255 struct overhead_stats 2259 struct overhead_stats
2256 { 2260 {
2257 int was_requested; 2261 Memory_Count was_requested;
2258 int malloc_overhead; 2262 Memory_Count malloc_overhead;
2259 int dynarr_overhead; 2263 Memory_Count dynarr_overhead;
2260 int gap_overhead; 2264 Memory_Count gap_overhead;
2261 }; 2265 };
2262 2266
2263 #endif /* MEMORY_USAGE_STATS */ 2267 #endif /* MEMORY_USAGE_STATS */
2264 2268
2265 #ifndef DIRECTORY_SEP 2269 #ifndef DIRECTORY_SEP
2317 #include "symsinit.h" 2321 #include "symsinit.h"
2318 2322
2319 /* Defined in alloc.c */ 2323 /* Defined in alloc.c */
2320 void release_breathing_space (void); 2324 void release_breathing_space (void);
2321 Lisp_Object noseeum_cons (Lisp_Object, Lisp_Object); 2325 Lisp_Object noseeum_cons (Lisp_Object, Lisp_Object);
2322 Lisp_Object make_vector (size_t, Lisp_Object); 2326 Lisp_Object make_vector (Element_Count, Lisp_Object);
2323 Lisp_Object vector1 (Lisp_Object); 2327 Lisp_Object vector1 (Lisp_Object);
2324 Lisp_Object vector2 (Lisp_Object, Lisp_Object); 2328 Lisp_Object vector2 (Lisp_Object, Lisp_Object);
2325 Lisp_Object vector3 (Lisp_Object, Lisp_Object, Lisp_Object); 2329 Lisp_Object vector3 (Lisp_Object, Lisp_Object, Lisp_Object);
2326 Lisp_Object make_bit_vector (size_t, Lisp_Object); 2330 Lisp_Object make_bit_vector (Element_Count, Lisp_Object);
2327 Lisp_Object make_bit_vector_from_byte_vector (unsigned char *, size_t); 2331 Lisp_Object make_bit_vector_from_byte_vector (unsigned char *, Element_Count);
2328 Lisp_Object noseeum_make_marker (void); 2332 Lisp_Object noseeum_make_marker (void);
2329 void garbage_collect_1 (void); 2333 void garbage_collect_1 (void);
2330 Lisp_Object acons (Lisp_Object, Lisp_Object, Lisp_Object); 2334 Lisp_Object acons (Lisp_Object, Lisp_Object, Lisp_Object);
2331 Lisp_Object cons3 (Lisp_Object, Lisp_Object, Lisp_Object); 2335 Lisp_Object cons3 (Lisp_Object, Lisp_Object, Lisp_Object);
2332 Lisp_Object list1 (Lisp_Object); 2336 Lisp_Object list1 (Lisp_Object);
2361 int object_dead_p (Lisp_Object); 2365 int object_dead_p (Lisp_Object);
2362 void mark_object (Lisp_Object obj); 2366 void mark_object (Lisp_Object obj);
2363 int marked_p (Lisp_Object obj); 2367 int marked_p (Lisp_Object obj);
2364 2368
2365 #ifdef MEMORY_USAGE_STATS 2369 #ifdef MEMORY_USAGE_STATS
2366 size_t malloced_storage_size (void *, size_t, struct overhead_stats *); 2370 Memory_Count malloced_storage_size (void *, Memory_Count, struct overhead_stats *);
2367 size_t fixed_type_block_overhead (size_t); 2371 Memory_Count fixed_type_block_overhead (Memory_Count);
2368 #endif 2372 #endif
2369 #ifdef PDUMP 2373 #ifdef PDUMP
2370 void pdump (void); 2374 void pdump (void);
2371 int pdump_load (const char *); 2375 int pdump_load (const char *);
2372 2376
2700 const CBufbyte *string, 2704 const CBufbyte *string,
2701 Lisp_Object data)); 2705 Lisp_Object data));
2702 DECLARE_DOESNT_RETURN (report_file_error (const CBufbyte *, Lisp_Object)); 2706 DECLARE_DOESNT_RETURN (report_file_error (const CBufbyte *, Lisp_Object));
2703 Lisp_Object lisp_strerror (int); 2707 Lisp_Object lisp_strerror (int);
2704 Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object); 2708 Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
2705 ssize_t read_allowing_quit (int, void *, size_t); 2709 Memory_Count read_allowing_quit (int fildes, void *buf, Memory_Count size);
2706 ssize_t write_allowing_quit (int, const void *, size_t); 2710 Memory_Count write_allowing_quit (int fildes, const void *buf,
2711 Memory_Count size);
2707 int internal_delete_file (Lisp_Object); 2712 int internal_delete_file (Lisp_Object);
2708 2713
2709 /* Defined in filelock.c */ 2714 /* Defined in filelock.c */
2710 void lock_file (Lisp_Object); 2715 void lock_file (Lisp_Object);
2711 void unlock_file (Lisp_Object); 2716 void unlock_file (Lisp_Object);