aboutsummaryrefslogtreecommitdiffstats
path: root/src/lisp.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/lisp.h')
-rw-r--r--src/lisp.h194
1 files changed, 79 insertions, 115 deletions
diff --git a/src/lisp.h b/src/lisp.h
index 1fe6ebb13ab..0470e452899 100644
--- a/src/lisp.h
+++ b/src/lisp.h
@@ -325,7 +325,7 @@ enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE = 1 };
325typedef EMACS_INT Lisp_Object; 325typedef EMACS_INT Lisp_Object;
326#define XLI(o) (o) 326#define XLI(o) (o)
327#define XIL(i) (i) 327#define XIL(i) (i)
328#define LISP_MAKE_RVALUE(o) (0+(o)) 328#define LISP_MAKE_RVALUE(o) (0 + (o))
329#define LISP_INITIALLY_ZERO 0 329#define LISP_INITIALLY_ZERO 0
330enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE = 0 }; 330enum CHECK_LISP_OBJECT_TYPE { CHECK_LISP_OBJECT_TYPE = 0 };
331#endif /* CHECK_LISP_OBJECT_TYPE */ 331#endif /* CHECK_LISP_OBJECT_TYPE */
@@ -422,9 +422,9 @@ enum lsb_bits
422#define XINT(a) (XLI (a) >> INTTYPEBITS) 422#define XINT(a) (XLI (a) >> INTTYPEBITS)
423#define XUINT(a) ((EMACS_UINT) XLI (a) >> INTTYPEBITS) 423#define XUINT(a) ((EMACS_UINT) XLI (a) >> INTTYPEBITS)
424#define make_number(N) XIL ((EMACS_INT) (N) << INTTYPEBITS) 424#define make_number(N) XIL ((EMACS_INT) (N) << INTTYPEBITS)
425#define XSET(var, type, ptr) \ 425#define make_lisp_ptr(ptr, type) \
426 (eassert (XTYPE (XIL ((intptr_t) (ptr))) == 0), /* Check alignment. */ \ 426 (eassert (XTYPE (XIL ((intptr_t) (ptr))) == 0), /* Check alignment. */ \
427 (var) = XIL ((type) | (intptr_t) (ptr))) 427 XIL ((type) | (intptr_t) (ptr)))
428 428
429#define XPNTR(a) ((intptr_t) (XLI (a) & ~TYPEMASK)) 429#define XPNTR(a) ((intptr_t) (XLI (a) & ~TYPEMASK))
430#define XUNTAG(a, type) ((intptr_t) (XLI (a) - (type))) 430#define XUNTAG(a, type) ((intptr_t) (XLI (a) - (type)))
@@ -449,13 +449,13 @@ static EMACS_INT const VALMASK
449#define XUINT(a) ((EMACS_UINT) (XLI (a) & INTMASK)) 449#define XUINT(a) ((EMACS_UINT) (XLI (a) & INTMASK))
450#define make_number(N) XIL ((EMACS_INT) (N) & INTMASK) 450#define make_number(N) XIL ((EMACS_INT) (N) & INTMASK)
451 451
452#define XSET(var, type, ptr) \ 452#define make_lisp_ptr(ptr, type) \
453 ((var) = XIL ((EMACS_INT) ((EMACS_UINT) (type) << VALBITS) \ 453 (XIL ((EMACS_INT) ((EMACS_UINT) (type) << VALBITS) \
454 + ((intptr_t) (ptr) & VALMASK))) 454 + ((intptr_t) (ptr) & VALMASK)))
455 455
456#if DATA_SEG_BITS 456#if DATA_SEG_BITS
457/* DATA_SEG_BITS forces extra bits to be or'd in with any pointers 457/* DATA_SEG_BITS forces extra bits to be or'd in with any pointers
458 which were stored in a Lisp_Object */ 458 which were stored in a Lisp_Object. */
459#define XPNTR(a) ((uintptr_t) ((XLI (a) & VALMASK)) | DATA_SEG_BITS)) 459#define XPNTR(a) ((uintptr_t) ((XLI (a) & VALMASK)) | DATA_SEG_BITS))
460#else 460#else
461#define XPNTR(a) ((uintptr_t) (XLI (a) & VALMASK)) 461#define XPNTR(a) ((uintptr_t) (XLI (a) & VALMASK))
@@ -559,16 +559,16 @@ clip_to_bounds (ptrdiff_t lower, EMACS_INT num, ptrdiff_t upper)
559 559
560/* Construct a Lisp_Object from a value or address. */ 560/* Construct a Lisp_Object from a value or address. */
561 561
562#define XSETINT(a, b) (a) = make_number (b) 562#define XSETINT(a, b) ((a) = make_number (b))
563#define XSETCONS(a, b) XSET (a, Lisp_Cons, b) 563#define XSETCONS(a, b) ((a) = make_lisp_ptr (b, Lisp_Cons))
564#define XSETVECTOR(a, b) XSET (a, Lisp_Vectorlike, b) 564#define XSETVECTOR(a, b) ((a) = make_lisp_ptr (b, Lisp_Vectorlike))
565#define XSETSTRING(a, b) XSET (a, Lisp_String, b) 565#define XSETSTRING(a, b) ((a) = make_lisp_ptr (b, Lisp_String))
566#define XSETSYMBOL(a, b) XSET (a, Lisp_Symbol, b) 566#define XSETSYMBOL(a, b) ((a) = make_lisp_ptr (b, Lisp_Symbol))
567#define XSETFLOAT(a, b) XSET (a, Lisp_Float, b) 567#define XSETFLOAT(a, b) ((a) = make_lisp_ptr (b, Lisp_Float))
568 568
569/* Misc types. */ 569/* Misc types. */
570 570
571#define XSETMISC(a, b) XSET (a, Lisp_Misc, b) 571#define XSETMISC(a, b) ((a) = make_lisp_ptr (b, Lisp_Misc))
572#define XSETMARKER(a, b) (XSETMISC (a, b), XMISCTYPE (a) = Lisp_Misc_Marker) 572#define XSETMARKER(a, b) (XSETMISC (a, b), XMISCTYPE (a) = Lisp_Misc_Marker)
573 573
574/* Pseudovector types. */ 574/* Pseudovector types. */
@@ -914,14 +914,6 @@ enum
914 (ASCII_CHAR_P (IDX) ? CHAR_TABLE_REF_ASCII ((CT), (IDX)) \ 914 (ASCII_CHAR_P (IDX) ? CHAR_TABLE_REF_ASCII ((CT), (IDX)) \
915 : char_table_ref ((CT), (IDX))) 915 : char_table_ref ((CT), (IDX)))
916 916
917/* Almost equivalent to Faref (CT, IDX). However, if the result is
918 not a character, return IDX.
919
920 For these characters, do not check validity of CT
921 and do not follow parent. */
922#define CHAR_TABLE_TRANSLATE(CT, IDX) \
923 char_table_translate (CT, IDX)
924
925/* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and 917/* Equivalent to Faset (CT, IDX, VAL) with optimization for ASCII and
926 8-bit European characters. Do not check validity of CT. */ 918 8-bit European characters. Do not check validity of CT. */
927#define CHAR_TABLE_SET(CT, IDX, VAL) \ 919#define CHAR_TABLE_SET(CT, IDX, VAL) \
@@ -1210,9 +1202,9 @@ struct Lisp_Hash_Table
1210 struct Lisp_Hash_Table *next_weak; 1202 struct Lisp_Hash_Table *next_weak;
1211 1203
1212 /* C function to compare two keys. */ 1204 /* C function to compare two keys. */
1213 int (*cmpfn) (struct Lisp_Hash_Table *, 1205 bool (*cmpfn) (struct Lisp_Hash_Table *,
1214 Lisp_Object, EMACS_UINT, 1206 Lisp_Object, EMACS_UINT,
1215 Lisp_Object, EMACS_UINT); 1207 Lisp_Object, EMACS_UINT);
1216 1208
1217 /* C function to compute hash code. */ 1209 /* C function to compute hash code. */
1218 EMACS_UINT (*hashfn) (struct Lisp_Hash_Table *, Lisp_Object); 1210 EMACS_UINT (*hashfn) (struct Lisp_Hash_Table *, Lisp_Object);
@@ -1632,7 +1624,7 @@ typedef struct {
1632 int mouse_face_image_state; 1624 int mouse_face_image_state;
1633} Mouse_HLInfo; 1625} Mouse_HLInfo;
1634 1626
1635/* Data type checking */ 1627/* Data type checking. */
1636 1628
1637#define NILP(x) EQ (x, Qnil) 1629#define NILP(x) EQ (x, Qnil)
1638 1630
@@ -2005,7 +1997,7 @@ struct specbinding
2005 { 1997 {
2006 Lisp_Object symbol, old_value; 1998 Lisp_Object symbol, old_value;
2007 specbinding_func func; 1999 specbinding_func func;
2008 Lisp_Object unused; /* Dividing by 16 is faster than by 12 */ 2000 Lisp_Object unused; /* Dividing by 16 is faster than by 12. */
2009 }; 2001 };
2010 2002
2011extern struct specbinding *specpdl; 2003extern struct specbinding *specpdl;
@@ -2293,7 +2285,7 @@ extern int gcpro_level;
2293 2285
2294#define UNGCPRO \ 2286#define UNGCPRO \
2295 ((--gcpro_level != gcpro1.level) \ 2287 ((--gcpro_level != gcpro1.level) \
2296 ? (abort (), 0) \ 2288 ? (emacs_abort (), 0) \
2297 : ((gcprolist = gcpro1.next), 0)) 2289 : ((gcprolist = gcpro1.next), 0))
2298 2290
2299#endif /* DEBUG_GCPRO */ 2291#endif /* DEBUG_GCPRO */
@@ -2584,10 +2576,10 @@ extern Lisp_Object Qfont_spec, Qfont_entity, Qfont_object;
2584 2576
2585EXFUN (Fbyteorder, 0) ATTRIBUTE_CONST; 2577EXFUN (Fbyteorder, 0) ATTRIBUTE_CONST;
2586 2578
2587/* Defined in frame.c */ 2579/* Defined in frame.c. */
2588extern Lisp_Object Qframep; 2580extern Lisp_Object Qframep;
2589 2581
2590/* Defined in data.c */ 2582/* Defined in data.c. */
2591extern Lisp_Object indirect_function (Lisp_Object); 2583extern Lisp_Object indirect_function (Lisp_Object);
2592extern Lisp_Object find_symbol_value (Lisp_Object); 2584extern Lisp_Object find_symbol_value (Lisp_Object);
2593 2585
@@ -2634,7 +2626,7 @@ extern void swap_in_global_binding (struct Lisp_Symbol *);
2634extern void syms_of_cmds (void); 2626extern void syms_of_cmds (void);
2635extern void keys_of_cmds (void); 2627extern void keys_of_cmds (void);
2636 2628
2637/* Defined in coding.c */ 2629/* Defined in coding.c. */
2638extern Lisp_Object Qcharset; 2630extern Lisp_Object Qcharset;
2639extern Lisp_Object detect_coding_system (const unsigned char *, ptrdiff_t, 2631extern Lisp_Object detect_coding_system (const unsigned char *, ptrdiff_t,
2640 ptrdiff_t, bool, bool, Lisp_Object); 2632 ptrdiff_t, bool, bool, Lisp_Object);
@@ -2642,7 +2634,7 @@ extern void init_coding (void);
2642extern void init_coding_once (void); 2634extern void init_coding_once (void);
2643extern void syms_of_coding (void); 2635extern void syms_of_coding (void);
2644 2636
2645/* Defined in character.c */ 2637/* Defined in character.c. */
2646EXFUN (Fmax_char, 0) ATTRIBUTE_CONST; 2638EXFUN (Fmax_char, 0) ATTRIBUTE_CONST;
2647extern ptrdiff_t chars_in_text (const unsigned char *, ptrdiff_t); 2639extern ptrdiff_t chars_in_text (const unsigned char *, ptrdiff_t);
2648extern ptrdiff_t multibyte_chars_in_text (const unsigned char *, ptrdiff_t); 2640extern ptrdiff_t multibyte_chars_in_text (const unsigned char *, ptrdiff_t);
@@ -2650,21 +2642,21 @@ extern int multibyte_char_to_unibyte (int) ATTRIBUTE_CONST;
2650extern int multibyte_char_to_unibyte_safe (int) ATTRIBUTE_CONST; 2642extern int multibyte_char_to_unibyte_safe (int) ATTRIBUTE_CONST;
2651extern void syms_of_character (void); 2643extern void syms_of_character (void);
2652 2644
2653/* Defined in charset.c */ 2645/* Defined in charset.c. */
2654extern void init_charset (void); 2646extern void init_charset (void);
2655extern void init_charset_once (void); 2647extern void init_charset_once (void);
2656extern void syms_of_charset (void); 2648extern void syms_of_charset (void);
2657/* Structure forward declarations. */ 2649/* Structure forward declarations. */
2658struct charset; 2650struct charset;
2659 2651
2660/* Defined in composite.c */ 2652/* Defined in composite.c. */
2661extern void syms_of_composite (void); 2653extern void syms_of_composite (void);
2662 2654
2663/* Defined in syntax.c */ 2655/* Defined in syntax.c. */
2664extern void init_syntax_once (void); 2656extern void init_syntax_once (void);
2665extern void syms_of_syntax (void); 2657extern void syms_of_syntax (void);
2666 2658
2667/* Defined in fns.c */ 2659/* Defined in fns.c. */
2668extern Lisp_Object QCrehash_size, QCrehash_threshold; 2660extern Lisp_Object QCrehash_size, QCrehash_threshold;
2669enum { NEXT_ALMOST_PRIME_LIMIT = 11 }; 2661enum { NEXT_ALMOST_PRIME_LIMIT = 11 };
2670EXFUN (Fidentity, 1) ATTRIBUTE_CONST; 2662EXFUN (Fidentity, 1) ATTRIBUTE_CONST;
@@ -2698,13 +2690,12 @@ extern Lisp_Object string_to_multibyte (Lisp_Object);
2698extern Lisp_Object string_make_unibyte (Lisp_Object); 2690extern Lisp_Object string_make_unibyte (Lisp_Object);
2699extern void syms_of_fns (void); 2691extern void syms_of_fns (void);
2700 2692
2701/* Defined in floatfns.c */ 2693/* Defined in floatfns.c. */
2702extern double extract_float (Lisp_Object); 2694extern double extract_float (Lisp_Object);
2703extern void init_floatfns (void);
2704extern void syms_of_floatfns (void); 2695extern void syms_of_floatfns (void);
2705extern Lisp_Object fmod_float (Lisp_Object x, Lisp_Object y); 2696extern Lisp_Object fmod_float (Lisp_Object x, Lisp_Object y);
2706 2697
2707/* Defined in fringe.c */ 2698/* Defined in fringe.c. */
2708extern void syms_of_fringe (void); 2699extern void syms_of_fringe (void);
2709extern void init_fringe (void); 2700extern void init_fringe (void);
2710#ifdef HAVE_WINDOW_SYSTEM 2701#ifdef HAVE_WINDOW_SYSTEM
@@ -2712,13 +2703,13 @@ extern void mark_fringe_data (void);
2712extern void init_fringe_once (void); 2703extern void init_fringe_once (void);
2713#endif /* HAVE_WINDOW_SYSTEM */ 2704#endif /* HAVE_WINDOW_SYSTEM */
2714 2705
2715/* Defined in image.c */ 2706/* Defined in image.c. */
2716extern Lisp_Object QCascent, QCmargin, QCrelief; 2707extern Lisp_Object QCascent, QCmargin, QCrelief;
2717extern Lisp_Object QCconversion; 2708extern Lisp_Object QCconversion;
2718extern int x_bitmap_mask (struct frame *, ptrdiff_t); 2709extern int x_bitmap_mask (struct frame *, ptrdiff_t);
2719extern void syms_of_image (void); 2710extern void syms_of_image (void);
2720 2711
2721/* Defined in insdel.c */ 2712/* Defined in insdel.c. */
2722extern Lisp_Object Qinhibit_modification_hooks; 2713extern Lisp_Object Qinhibit_modification_hooks;
2723extern void move_gap (ptrdiff_t); 2714extern void move_gap (ptrdiff_t);
2724extern void move_gap_both (ptrdiff_t, ptrdiff_t); 2715extern void move_gap_both (ptrdiff_t, ptrdiff_t);
@@ -2764,7 +2755,7 @@ extern void replace_range_2 (ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t,
2764 const char *, ptrdiff_t, ptrdiff_t, bool); 2755 const char *, ptrdiff_t, ptrdiff_t, bool);
2765extern void syms_of_insdel (void); 2756extern void syms_of_insdel (void);
2766 2757
2767/* Defined in dispnew.c */ 2758/* Defined in dispnew.c. */
2768#if (defined PROFILING \ 2759#if (defined PROFILING \
2769 && (defined __FreeBSD__ || defined GNU_LINUX || defined __MINGW32__)) 2760 && (defined __FreeBSD__ || defined GNU_LINUX || defined __MINGW32__))
2770_Noreturn void __executable_start (void); 2761_Noreturn void __executable_start (void);
@@ -2775,7 +2766,7 @@ extern Lisp_Object sit_for (Lisp_Object, bool, int);
2775extern void init_display (void); 2766extern void init_display (void);
2776extern void syms_of_display (void); 2767extern void syms_of_display (void);
2777 2768
2778/* Defined in xdisp.c */ 2769/* Defined in xdisp.c. */
2779extern Lisp_Object Qinhibit_point_motion_hooks; 2770extern Lisp_Object Qinhibit_point_motion_hooks;
2780extern Lisp_Object Qinhibit_redisplay, Qdisplay; 2771extern Lisp_Object Qinhibit_redisplay, Qdisplay;
2781extern Lisp_Object Qmenu_bar_update_hook; 2772extern Lisp_Object Qmenu_bar_update_hook;
@@ -2826,13 +2817,13 @@ extern Lisp_Object safe_eval (Lisp_Object);
2826extern int pos_visible_p (struct window *, ptrdiff_t, int *, 2817extern int pos_visible_p (struct window *, ptrdiff_t, int *,
2827 int *, int *, int *, int *, int *); 2818 int *, int *, int *, int *, int *);
2828 2819
2829/* Defined in xsettings.c */ 2820/* Defined in xsettings.c. */
2830extern void syms_of_xsettings (void); 2821extern void syms_of_xsettings (void);
2831 2822
2832/* Defined in vm-limit.c. */ 2823/* Defined in vm-limit.c. */
2833extern void memory_warnings (void *, void (*warnfun) (const char *)); 2824extern void memory_warnings (void *, void (*warnfun) (const char *));
2834 2825
2835/* Defined in alloc.c */ 2826/* Defined in alloc.c. */
2836extern void check_pure_size (void); 2827extern void check_pure_size (void);
2837extern void allocate_string_data (struct Lisp_String *, EMACS_INT, EMACS_INT); 2828extern void allocate_string_data (struct Lisp_String *, EMACS_INT, EMACS_INT);
2838extern void reset_malloc_hooks (void); 2829extern void reset_malloc_hooks (void);
@@ -2935,7 +2926,7 @@ extern void check_cons_list (void);
2935#endif 2926#endif
2936 2927
2937#ifdef REL_ALLOC 2928#ifdef REL_ALLOC
2938/* Defined in ralloc.c */ 2929/* Defined in ralloc.c. */
2939extern void *r_alloc (void **, size_t); 2930extern void *r_alloc (void **, size_t);
2940extern void r_alloc_free (void **); 2931extern void r_alloc_free (void **);
2941extern void *r_re_alloc (void **, size_t); 2932extern void *r_re_alloc (void **, size_t);
@@ -2943,7 +2934,7 @@ extern void r_alloc_reset_variable (void **, void **);
2943extern void r_alloc_inhibit_buffer_relocation (int); 2934extern void r_alloc_inhibit_buffer_relocation (int);
2944#endif 2935#endif
2945 2936
2946/* Defined in chartab.c */ 2937/* Defined in chartab.c. */
2947extern Lisp_Object copy_char_table (Lisp_Object); 2938extern Lisp_Object copy_char_table (Lisp_Object);
2948extern Lisp_Object char_table_ref (Lisp_Object, int); 2939extern Lisp_Object char_table_ref (Lisp_Object, int);
2949extern Lisp_Object char_table_ref_and_range (Lisp_Object, int, 2940extern Lisp_Object char_table_ref_and_range (Lisp_Object, int,
@@ -2961,7 +2952,7 @@ extern void map_char_table_for_charset (void (*c_function) (Lisp_Object, Lisp_Ob
2961extern Lisp_Object uniprop_table (Lisp_Object); 2952extern Lisp_Object uniprop_table (Lisp_Object);
2962extern void syms_of_chartab (void); 2953extern void syms_of_chartab (void);
2963 2954
2964/* Defined in print.c */ 2955/* Defined in print.c. */
2965extern Lisp_Object Vprin1_to_string_buffer; 2956extern Lisp_Object Vprin1_to_string_buffer;
2966extern void debug_print (Lisp_Object) EXTERNALLY_VISIBLE; 2957extern void debug_print (Lisp_Object) EXTERNALLY_VISIBLE;
2967extern Lisp_Object Qstandard_output; 2958extern Lisp_Object Qstandard_output;
@@ -2978,7 +2969,7 @@ enum FLOAT_TO_STRING_BUFSIZE { FLOAT_TO_STRING_BUFSIZE = 350 };
2978extern int float_to_string (char *, double); 2969extern int float_to_string (char *, double);
2979extern void syms_of_print (void); 2970extern void syms_of_print (void);
2980 2971
2981/* Defined in doprnt.c */ 2972/* Defined in doprnt.c. */
2982extern ptrdiff_t doprnt (char *, ptrdiff_t, const char *, const char *, 2973extern ptrdiff_t doprnt (char *, ptrdiff_t, const char *, const char *,
2983 va_list); 2974 va_list);
2984extern ptrdiff_t esprintf (char *, char const *, ...) 2975extern ptrdiff_t esprintf (char *, char const *, ...)
@@ -3081,6 +3072,7 @@ extern _Noreturn void error (const char *, ...) ATTRIBUTE_FORMAT_PRINTF (1, 2);
3081extern _Noreturn void verror (const char *, va_list) 3072extern _Noreturn void verror (const char *, va_list)
3082 ATTRIBUTE_FORMAT_PRINTF (1, 0); 3073 ATTRIBUTE_FORMAT_PRINTF (1, 0);
3083extern Lisp_Object un_autoload (Lisp_Object); 3074extern Lisp_Object un_autoload (Lisp_Object);
3075extern Lisp_Object call_debugger (Lisp_Object arg);
3084extern void init_eval_once (void); 3076extern void init_eval_once (void);
3085extern Lisp_Object safe_call (ptrdiff_t, Lisp_Object, ...); 3077extern Lisp_Object safe_call (ptrdiff_t, Lisp_Object, ...);
3086extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object); 3078extern Lisp_Object safe_call1 (Lisp_Object, Lisp_Object);
@@ -3143,7 +3135,7 @@ extern Lisp_Object set_marker_restricted_both (Lisp_Object, Lisp_Object,
3143extern Lisp_Object build_marker (struct buffer *, ptrdiff_t, ptrdiff_t); 3135extern Lisp_Object build_marker (struct buffer *, ptrdiff_t, ptrdiff_t);
3144extern void syms_of_marker (void); 3136extern void syms_of_marker (void);
3145 3137
3146/* Defined in fileio.c */ 3138/* Defined in fileio.c. */
3147 3139
3148extern Lisp_Object Qfile_error; 3140extern Lisp_Object Qfile_error;
3149extern Lisp_Object Qfile_exists_p; 3141extern Lisp_Object Qfile_exists_p;
@@ -3151,16 +3143,16 @@ extern Lisp_Object Qfile_directory_p;
3151extern Lisp_Object Qinsert_file_contents; 3143extern Lisp_Object Qinsert_file_contents;
3152extern Lisp_Object Qfile_name_history; 3144extern Lisp_Object Qfile_name_history;
3153extern Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object); 3145extern Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
3154EXFUN (Fread_file_name, 6); /* not a normal DEFUN */ 3146EXFUN (Fread_file_name, 6); /* Not a normal DEFUN. */
3155extern Lisp_Object close_file_unwind (Lisp_Object); 3147extern Lisp_Object close_file_unwind (Lisp_Object);
3156extern Lisp_Object restore_point_unwind (Lisp_Object); 3148extern Lisp_Object restore_point_unwind (Lisp_Object);
3157extern _Noreturn void report_file_error (const char *, Lisp_Object); 3149extern _Noreturn void report_file_error (const char *, Lisp_Object);
3158extern int internal_delete_file (Lisp_Object); 3150extern void internal_delete_file (Lisp_Object);
3159extern void syms_of_fileio (void); 3151extern void syms_of_fileio (void);
3160extern Lisp_Object make_temp_name (Lisp_Object, int); 3152extern Lisp_Object make_temp_name (Lisp_Object, bool);
3161extern Lisp_Object Qdelete_file; 3153extern Lisp_Object Qdelete_file;
3162 3154
3163/* Defined in search.c */ 3155/* Defined in search.c. */
3164extern void shrink_regexp_cache (void); 3156extern void shrink_regexp_cache (void);
3165extern void restore_search_regs (void); 3157extern void restore_search_regs (void);
3166extern void record_unwind_save_match_data (void); 3158extern void record_unwind_save_match_data (void);
@@ -3233,9 +3225,7 @@ extern void cmd_error_internal (Lisp_Object, const char *);
3233extern Lisp_Object command_loop_1 (void); 3225extern Lisp_Object command_loop_1 (void);
3234extern Lisp_Object recursive_edit_1 (void); 3226extern Lisp_Object recursive_edit_1 (void);
3235extern void record_auto_save (void); 3227extern void record_auto_save (void);
3236#ifdef SIGDANGER
3237extern void force_auto_save_soon (void); 3228extern void force_auto_save_soon (void);
3238#endif
3239extern void init_keyboard (void); 3229extern void init_keyboard (void);
3240extern void syms_of_keyboard (void); 3230extern void syms_of_keyboard (void);
3241extern void keys_of_keyboard (void); 3231extern void keys_of_keyboard (void);
@@ -3268,9 +3258,7 @@ extern bool display_arg;
3268extern Lisp_Object decode_env_path (const char *, const char *); 3258extern Lisp_Object decode_env_path (const char *, const char *);
3269extern Lisp_Object empty_unibyte_string, empty_multibyte_string; 3259extern Lisp_Object empty_unibyte_string, empty_multibyte_string;
3270extern Lisp_Object Qfile_name_handler_alist; 3260extern Lisp_Object Qfile_name_handler_alist;
3271#ifdef FLOAT_CATCH_SIGILL 3261extern _Noreturn void fatal_error_backtrace (int, int);
3272extern void fatal_error_signal (int);
3273#endif
3274extern Lisp_Object Qkill_emacs; 3262extern Lisp_Object Qkill_emacs;
3275#if HAVE_SETLOCALE 3263#if HAVE_SETLOCALE
3276void fixup_locale (void); 3264void fixup_locale (void);
@@ -3339,14 +3327,14 @@ extern void init_callproc (void);
3339extern void set_initial_environment (void); 3327extern void set_initial_environment (void);
3340extern void syms_of_callproc (void); 3328extern void syms_of_callproc (void);
3341 3329
3342/* Defined in doc.c */ 3330/* Defined in doc.c. */
3343extern Lisp_Object Qfunction_documentation; 3331extern Lisp_Object Qfunction_documentation;
3344extern Lisp_Object read_doc_string (Lisp_Object); 3332extern Lisp_Object read_doc_string (Lisp_Object);
3345extern Lisp_Object get_doc_string (Lisp_Object, bool, bool); 3333extern Lisp_Object get_doc_string (Lisp_Object, bool, bool);
3346extern void syms_of_doc (void); 3334extern void syms_of_doc (void);
3347extern int read_bytecode_char (bool); 3335extern int read_bytecode_char (bool);
3348 3336
3349/* Defined in bytecode.c */ 3337/* Defined in bytecode.c. */
3350extern Lisp_Object Qbytecode; 3338extern Lisp_Object Qbytecode;
3351extern void syms_of_bytecode (void); 3339extern void syms_of_bytecode (void);
3352extern struct byte_stack *byte_stack_list; 3340extern struct byte_stack *byte_stack_list;
@@ -3357,12 +3345,12 @@ extern void unmark_byte_stack (void);
3357extern Lisp_Object exec_byte_code (Lisp_Object, Lisp_Object, Lisp_Object, 3345extern Lisp_Object exec_byte_code (Lisp_Object, Lisp_Object, Lisp_Object,
3358 Lisp_Object, ptrdiff_t, Lisp_Object *); 3346 Lisp_Object, ptrdiff_t, Lisp_Object *);
3359 3347
3360/* Defined in macros.c */ 3348/* Defined in macros.c. */
3361extern Lisp_Object Qexecute_kbd_macro; 3349extern Lisp_Object Qexecute_kbd_macro;
3362extern void init_macros (void); 3350extern void init_macros (void);
3363extern void syms_of_macros (void); 3351extern void syms_of_macros (void);
3364 3352
3365/* Defined in undo.c */ 3353/* Defined in undo.c. */
3366extern Lisp_Object Qapply; 3354extern Lisp_Object Qapply;
3367extern Lisp_Object Qinhibit_read_only; 3355extern Lisp_Object Qinhibit_read_only;
3368extern void truncate_undo_list (struct buffer *); 3356extern void truncate_undo_list (struct buffer *);
@@ -3375,7 +3363,7 @@ extern void record_property_change (ptrdiff_t, ptrdiff_t,
3375 Lisp_Object, Lisp_Object, 3363 Lisp_Object, Lisp_Object,
3376 Lisp_Object); 3364 Lisp_Object);
3377extern void syms_of_undo (void); 3365extern void syms_of_undo (void);
3378/* Defined in textprop.c */ 3366/* Defined in textprop.c. */
3379extern Lisp_Object Qfont, Qmouse_face; 3367extern Lisp_Object Qfont, Qmouse_face;
3380extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks; 3368extern Lisp_Object Qinsert_in_front_hooks, Qinsert_behind_hooks;
3381extern Lisp_Object Qfront_sticky, Qrear_nonsticky; 3369extern Lisp_Object Qfront_sticky, Qrear_nonsticky;
@@ -3383,19 +3371,19 @@ extern Lisp_Object Qminibuffer_prompt;
3383 3371
3384extern void report_interval_modification (Lisp_Object, Lisp_Object); 3372extern void report_interval_modification (Lisp_Object, Lisp_Object);
3385 3373
3386/* Defined in menu.c */ 3374/* Defined in menu.c. */
3387extern void syms_of_menu (void); 3375extern void syms_of_menu (void);
3388 3376
3389/* Defined in xmenu.c */ 3377/* Defined in xmenu.c. */
3390extern void syms_of_xmenu (void); 3378extern void syms_of_xmenu (void);
3391 3379
3392/* Defined in termchar.h */ 3380/* Defined in termchar.h. */
3393struct tty_display_info; 3381struct tty_display_info;
3394 3382
3395/* Defined in termhooks.h */ 3383/* Defined in termhooks.h. */
3396struct terminal; 3384struct terminal;
3397 3385
3398/* Defined in sysdep.c */ 3386/* Defined in sysdep.c. */
3399#ifndef HAVE_GET_CURRENT_DIR_NAME 3387#ifndef HAVE_GET_CURRENT_DIR_NAME
3400extern char *get_current_dir_name (void); 3388extern char *get_current_dir_name (void);
3401#endif 3389#endif
@@ -3417,6 +3405,8 @@ extern int set_window_size (int, int, int);
3417extern EMACS_INT get_random (void); 3405extern EMACS_INT get_random (void);
3418extern void seed_random (void *, ptrdiff_t); 3406extern void seed_random (void *, ptrdiff_t);
3419extern void init_random (void); 3407extern void init_random (void);
3408extern void emacs_backtrace (int);
3409extern _Noreturn void emacs_abort (void) NO_INLINE;
3420extern int emacs_open (const char *, int, int); 3410extern int emacs_open (const char *, int, int);
3421extern int emacs_close (int); 3411extern int emacs_close (int);
3422extern ptrdiff_t emacs_read (int, char *, ptrdiff_t); 3412extern ptrdiff_t emacs_read (int, char *, ptrdiff_t);
@@ -3430,45 +3420,45 @@ extern void unlock_file (Lisp_Object);
3430extern void unlock_buffer (struct buffer *); 3420extern void unlock_buffer (struct buffer *);
3431extern void syms_of_filelock (void); 3421extern void syms_of_filelock (void);
3432 3422
3433/* Defined in sound.c */ 3423/* Defined in sound.c. */
3434extern void syms_of_sound (void); 3424extern void syms_of_sound (void);
3435 3425
3436/* Defined in category.c */ 3426/* Defined in category.c. */
3437extern void init_category_once (void); 3427extern void init_category_once (void);
3438extern Lisp_Object char_category_set (int); 3428extern Lisp_Object char_category_set (int);
3439extern void syms_of_category (void); 3429extern void syms_of_category (void);
3440 3430
3441/* Defined in ccl.c */ 3431/* Defined in ccl.c. */
3442extern void syms_of_ccl (void); 3432extern void syms_of_ccl (void);
3443 3433
3444/* Defined in dired.c */ 3434/* Defined in dired.c. */
3445extern void syms_of_dired (void); 3435extern void syms_of_dired (void);
3446extern Lisp_Object directory_files_internal (Lisp_Object, Lisp_Object, 3436extern Lisp_Object directory_files_internal (Lisp_Object, Lisp_Object,
3447 Lisp_Object, Lisp_Object, 3437 Lisp_Object, Lisp_Object,
3448 bool, Lisp_Object); 3438 bool, Lisp_Object);
3449 3439
3450/* Defined in term.c */ 3440/* Defined in term.c. */
3451extern int *char_ins_del_vector; 3441extern int *char_ins_del_vector;
3452extern void syms_of_term (void); 3442extern void syms_of_term (void);
3453extern _Noreturn void fatal (const char *msgid, ...) 3443extern _Noreturn void fatal (const char *msgid, ...)
3454 ATTRIBUTE_FORMAT_PRINTF (1, 2); 3444 ATTRIBUTE_FORMAT_PRINTF (1, 2);
3455 3445
3456/* Defined in terminal.c */ 3446/* Defined in terminal.c. */
3457extern void syms_of_terminal (void); 3447extern void syms_of_terminal (void);
3458 3448
3459/* Defined in font.c */ 3449/* Defined in font.c. */
3460extern void syms_of_font (void); 3450extern void syms_of_font (void);
3461extern void init_font (void); 3451extern void init_font (void);
3462 3452
3463#ifdef HAVE_WINDOW_SYSTEM 3453#ifdef HAVE_WINDOW_SYSTEM
3464/* Defined in fontset.c */ 3454/* Defined in fontset.c. */
3465extern void syms_of_fontset (void); 3455extern void syms_of_fontset (void);
3466 3456
3467/* Defined in xfns.c, w32fns.c, or macfns.c */ 3457/* Defined in xfns.c, w32fns.c, or macfns.c. */
3468extern Lisp_Object Qfont_param; 3458extern Lisp_Object Qfont_param;
3469#endif 3459#endif
3470 3460
3471/* Defined in xfaces.c */ 3461/* Defined in xfaces.c. */
3472extern Lisp_Object Qdefault, Qtool_bar, Qfringe; 3462extern Lisp_Object Qdefault, Qtool_bar, Qfringe;
3473extern Lisp_Object Qheader_line, Qscroll_bar, Qcursor; 3463extern Lisp_Object Qheader_line, Qscroll_bar, Qcursor;
3474extern Lisp_Object Qmode_line_inactive; 3464extern Lisp_Object Qmode_line_inactive;
@@ -3484,26 +3474,26 @@ extern Lisp_Object Vface_alternative_font_registry_alist;
3484extern void syms_of_xfaces (void); 3474extern void syms_of_xfaces (void);
3485 3475
3486#ifdef HAVE_X_WINDOWS 3476#ifdef HAVE_X_WINDOWS
3487/* Defined in xfns.c */ 3477/* Defined in xfns.c. */
3488extern void syms_of_xfns (void); 3478extern void syms_of_xfns (void);
3489 3479
3490/* Defined in xsmfns.c */ 3480/* Defined in xsmfns.c. */
3491extern void syms_of_xsmfns (void); 3481extern void syms_of_xsmfns (void);
3492 3482
3493/* Defined in xselect.c */ 3483/* Defined in xselect.c. */
3494extern void syms_of_xselect (void); 3484extern void syms_of_xselect (void);
3495 3485
3496/* Defined in xterm.c */ 3486/* Defined in xterm.c. */
3497extern void syms_of_xterm (void); 3487extern void syms_of_xterm (void);
3498#endif /* HAVE_X_WINDOWS */ 3488#endif /* HAVE_X_WINDOWS */
3499 3489
3500#ifdef HAVE_WINDOW_SYSTEM 3490#ifdef HAVE_WINDOW_SYSTEM
3501/* Defined in xterm.c, nsterm.m, w32term.c */ 3491/* Defined in xterm.c, nsterm.m, w32term.c. */
3502extern char *x_get_keysym_name (int); 3492extern char *x_get_keysym_name (int);
3503#endif /* HAVE_WINDOW_SYSTEM */ 3493#endif /* HAVE_WINDOW_SYSTEM */
3504 3494
3505#ifdef HAVE_LIBXML2 3495#ifdef HAVE_LIBXML2
3506/* Defined in xml.c */ 3496/* Defined in xml.c. */
3507extern void syms_of_xml (void); 3497extern void syms_of_xml (void);
3508extern void xml_cleanup_parser (void); 3498extern void xml_cleanup_parser (void);
3509#endif 3499#endif
@@ -3514,12 +3504,12 @@ extern int have_menus_p (void);
3514#endif 3504#endif
3515 3505
3516#ifdef HAVE_DBUS 3506#ifdef HAVE_DBUS
3517/* Defined in dbusbind.c */ 3507/* Defined in dbusbind.c. */
3518void syms_of_dbusbind (void); 3508void syms_of_dbusbind (void);
3519#endif 3509#endif
3520 3510
3521#ifdef DOS_NT 3511#ifdef DOS_NT
3522/* Defined in msdos.c, w32.c */ 3512/* Defined in msdos.c, w32.c. */
3523extern char *emacs_root_dir (void); 3513extern char *emacs_root_dir (void);
3524#endif /* DOS_NT */ 3514#endif /* DOS_NT */
3525 3515
@@ -3527,7 +3517,7 @@ extern char *emacs_root_dir (void);
3527 Used during startup to detect startup of dumped Emacs. */ 3517 Used during startup to detect startup of dumped Emacs. */
3528extern bool initialized; 3518extern bool initialized;
3529 3519
3530extern int immediate_quit; /* Nonzero means ^G can quit instantly */ 3520extern int immediate_quit; /* Nonzero means ^G can quit instantly. */
3531 3521
3532extern void *xmalloc (size_t); 3522extern void *xmalloc (size_t);
3533extern void *xzalloc (size_t); 3523extern void *xzalloc (size_t);
@@ -3557,36 +3547,10 @@ extern void init_system_name (void);
3557#define make_fixnum_or_float(val) \ 3547#define make_fixnum_or_float(val) \
3558 (FIXNUM_OVERFLOW_P (val) ? make_float (val) : make_number (val)) 3548 (FIXNUM_OVERFLOW_P (val) ? make_float (val) : make_number (val))
3559 3549
3560
3561/* Checks the `cycle check' variable CHECK to see if it indicates that
3562 EL is part of a cycle; CHECK must be either Qnil or a value returned
3563 by an earlier use of CYCLE_CHECK. SUSPICIOUS is the number of
3564 elements after which a cycle might be suspected; after that many
3565 elements, this macro begins consing in order to keep more precise
3566 track of elements.
3567
3568 Returns nil if a cycle was detected, otherwise a new value for CHECK
3569 that includes EL.
3570
3571 CHECK is evaluated multiple times, EL and SUSPICIOUS 0 or 1 times, so
3572 the caller should make sure that's ok. */
3573
3574#define CYCLE_CHECK(check, el, suspicious) \
3575 (NILP (check) \
3576 ? make_number (0) \
3577 : (INTEGERP (check) \
3578 ? (XFASTINT (check) < (suspicious) \
3579 ? make_number (XFASTINT (check) + 1) \
3580 : Fcons (el, Qnil)) \
3581 : (!NILP (Fmemq ((el), (check))) \
3582 ? Qnil \
3583 : Fcons ((el), (check)))))
3584
3585
3586/* SAFE_ALLOCA normally allocates memory on the stack, but if size is 3550/* SAFE_ALLOCA normally allocates memory on the stack, but if size is
3587 larger than MAX_ALLOCA, use xmalloc to avoid overflowing the stack. */ 3551 larger than MAX_ALLOCA, use xmalloc to avoid overflowing the stack. */
3588 3552
3589enum MAX_ALLOCA { MAX_ALLOCA = 16*1024 }; 3553enum MAX_ALLOCA { MAX_ALLOCA = 16 * 1024 };
3590 3554
3591extern Lisp_Object safe_alloca_unwind (Lisp_Object); 3555extern Lisp_Object safe_alloca_unwind (Lisp_Object);
3592extern void *record_xmalloc (size_t); 3556extern void *record_xmalloc (size_t);