284 |
#define BOOL_VECTOR_BITS_PER_CHAR 8 |
#define BOOL_VECTOR_BITS_PER_CHAR 8 |
285 |
|
|
286 |
/***** Select the tagging scheme. *****/ |
/***** Select the tagging scheme. *****/ |
287 |
|
/* There are basically two options that control the tagging scheme: |
288 |
|
- NO_UNION_TYPE says that Lisp_Object should be an integer instead |
289 |
|
of a union. |
290 |
|
- USE_LSB_TAG means that we can assume the least 3 bits of pointers are |
291 |
|
always 0, and we can thus use them to hold tag bits, without |
292 |
|
restricting our addressing space. |
293 |
|
|
294 |
|
If USE_LSB_TAG is not set, then we use the top 3 bits for tagging, thus |
295 |
|
restricting our possible address range. Currently USE_LSB_TAG is not |
296 |
|
allowed together with a union. This is not due to any fundamental |
297 |
|
technical (or political ;-) problem: nobody wrote the code to do it yet. |
298 |
|
|
299 |
|
USE_LSB_TAG not only requires the least 3 bits of pointers returned by |
300 |
|
malloc to be 0 but also needs to be able to impose a mult-of-8 alignment |
301 |
|
on the few static Lisp_Objects used: all the defsubr as well |
302 |
|
as the two special buffers buffer_defaults and buffer_local_symbols. */ |
303 |
|
|
304 |
/* First, try and define DECL_ALIGN(type,var) which declares a static |
/* First, try and define DECL_ALIGN(type,var) which declares a static |
305 |
variable VAR of type TYPE with the added requirement that it be |
variable VAR of type TYPE with the added requirement that it be |
306 |
TYPEBITS-aligned. */ |
TYPEBITS-aligned. */ |
307 |
#if defined USE_LSB_TAG && !defined DECL_ALIGN |
#ifndef DECL_ALIGN |
308 |
|
# ifndef MSDOS /* MS-DOS doesn't currently support USE_LSB_TAG */ |
309 |
/* What compiler directive should we use for non-gcc compilers? -stef */ |
/* What compiler directive should we use for non-gcc compilers? -stef */ |
310 |
# if defined (__GNUC__) |
# if defined (__GNUC__) |
311 |
# define DECL_ALIGN(type, var) \ |
# define DECL_ALIGN(type, var) \ |
312 |
type __attribute__ ((__aligned__ (1 << GCTYPEBITS))) var |
type __attribute__ ((__aligned__ (1 << GCTYPEBITS))) var |
313 |
# else |
# endif |
314 |
# error "USE_LSB_TAG used without defining DECL_ALIGN" |
# endif |
315 |
|
#endif |
316 |
|
|
317 |
|
/* Let's USE_LSB_TAG on systems where we know malloc returns mult-of-8. */ |
318 |
|
#if defined GNU_MALLOC || defined DOUG_LEA_MALLOC || defined __GLIBC__ || defined MAC_OSX |
319 |
|
/* We also need to be able to specify mult-of-8 alignment on static vars. */ |
320 |
|
# if defined DECL_ALIGN |
321 |
|
/* We currently do not support USE_LSB_TAG with a union Lisp_Object. */ |
322 |
|
# if defined NO_UNION_TYPE |
323 |
|
# define USE_LSB_TAG |
324 |
|
# endif |
325 |
# endif |
# endif |
326 |
#endif |
#endif |
327 |
|
|
|
#ifndef USE_LSB_TAG |
|
328 |
/* Just remove the alignment annotation if we don't use it. */ |
/* Just remove the alignment annotation if we don't use it. */ |
329 |
#undef DECL_ALIGN |
#ifndef DECL_ALIGN |
330 |
#define DECL_ALIGN(type, var) type var |
# ifdef USE_LSB_TAG |
331 |
|
# error "USE_LSB_TAG used without defining DECL_ALIGN" |
332 |
|
# endif |
333 |
|
# define DECL_ALIGN(type, var) type var |
334 |
#endif |
#endif |
335 |
|
|
336 |
|
|
2891 |
extern void syms_of_indent P_ ((void)); |
extern void syms_of_indent P_ ((void)); |
2892 |
|
|
2893 |
/* defined in frame.c */ |
/* defined in frame.c */ |
2894 |
|
#ifdef HAVE_WINDOW_SYSTEM |
2895 |
|
extern Lisp_Object Vx_resource_name; |
2896 |
|
extern Lisp_Object Vx_resource_class; |
2897 |
|
#endif /* HAVE_WINDOW_SYSTEM */ |
2898 |
extern Lisp_Object Qvisible; |
extern Lisp_Object Qvisible; |
2899 |
extern void store_frame_param P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
extern void store_frame_param P_ ((struct frame *, Lisp_Object, Lisp_Object)); |
2900 |
extern void store_in_alist P_ ((Lisp_Object *, Lisp_Object, Lisp_Object)); |
extern void store_in_alist P_ ((Lisp_Object *, Lisp_Object, Lisp_Object)); |
3117 |
#ifdef HAVE_X_WINDOWS |
#ifdef HAVE_X_WINDOWS |
3118 |
/* Defined in xfns.c */ |
/* Defined in xfns.c */ |
3119 |
extern void syms_of_xfns P_ ((void)); |
extern void syms_of_xfns P_ ((void)); |
3120 |
extern Lisp_Object Vx_resource_name; |
#endif /* HAVE_X_WINDOWS */ |
3121 |
extern Lisp_Object Vx_resource_class; |
#ifdef HAVE_WINDOW_SYSTEM |
3122 |
|
/* Defined in xfns.c, w32fns.c, or macfns.c */ |
3123 |
EXFUN (Fxw_display_color_p, 1); |
EXFUN (Fxw_display_color_p, 1); |
3124 |
EXFUN (Fx_file_dialog, 4); |
EXFUN (Fx_file_dialog, 4); |
3125 |
#endif /* HAVE_X_WINDOWS */ |
#endif /* HAVE_WINDOW_SYSTEM */ |
3126 |
|
|
3127 |
/* Defined in xsmfns.c */ |
/* Defined in xsmfns.c */ |
3128 |
extern void syms_of_xsmfns P_ ((void)); |
extern void syms_of_xsmfns P_ ((void)); |
3148 |
|
|
3149 |
extern char *xstrdup P_ ((const char *)); |
extern char *xstrdup P_ ((const char *)); |
3150 |
|
|
|
#ifndef USE_CRT_DLL |
|
3151 |
extern char *egetenv P_ ((char *)); |
extern char *egetenv P_ ((char *)); |
|
#endif |
|
3152 |
|
|
3153 |
/* Set up the name of the machine we're running on. */ |
/* Set up the name of the machine we're running on. */ |
3154 |
extern void init_system_name P_ ((void)); |
extern void init_system_name P_ ((void)); |