X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/eb3fe1745cbce8b356d7d76027a8eea3f485879c..61e1d1ca4f04460699287e66a57e722328a641be:/src/lisp.h diff --git a/src/lisp.h b/src/lisp.h index 7e6087a149..1eec26742f 100644 --- a/src/lisp.h +++ b/src/lisp.h @@ -1,6 +1,6 @@ /* Fundamental definitions for GNU Emacs Lisp interpreter. Copyright (C) 1985, 1986, 1987, 1993, 1994, 1995, 1997, 1998, 1999, 2000, - 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc. + 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -80,7 +80,7 @@ Boston, MA 02110-1301, USA. */ /* Extra internal type checking? */ extern int suppress_checking; -extern void die P_((const char *, const char *, int)); +extern void die P_((const char *, const char *, int)) NO_RETURN; #ifdef ENABLE_CHECKING @@ -253,7 +253,7 @@ LISP_MAKE_RVALUE (Lisp_Object o) /* If union type is not wanted, define Lisp_Object as just a number. */ #ifdef NO_UNION_TYPE -#define Lisp_Object EMACS_INT +typedef EMACS_INT Lisp_Object; #define LISP_MAKE_RVALUE(o) (0+(o)) #endif /* NO_UNION_TYPE */ @@ -297,7 +297,11 @@ enum pvec_type #endif }; -/* For convenience, we also store the number of elements in these bits. */ +/* For convenience, we also store the number of elements in these bits. + Note that this size is not necessarily the memory-footprint size, but + only the number of Lisp_Object fields (that need to be traced by the GC). + The distinction is used e.g. by Lisp_Process which places extra + non-Lisp_Object fields at the end of the structure. */ #define PSEUDOVECTOR_SIZE_MASK 0x1ff /* Number of bits to put in each character in the internal representation @@ -454,7 +458,7 @@ enum pvec_type extern Lisp_Object make_number P_ ((EMACS_INT)); #endif -#define EQ(x, y) ((x).s.val == (y).s.val && (x).s.type == (y).s.type) +#define EQ(x, y) ((x).i == (y).i) #endif /* NO_UNION_TYPE */ @@ -484,7 +488,11 @@ extern size_t pure_size; in a Lisp object whose data type says it points to something. */ #define XPNTR(a) (XUINT (a) | DATA_SEG_BITS) #else -#define XPNTR(a) XUINT (a) +/* Some versions of gcc seem to consider the bitfield width when + issuing the "cast to pointer from integer of different size" + warning, so the cast is here to widen the value back to its natural + size. */ +#define XPNTR(a) ((EMACS_INT) XUINT (a)) #endif #endif /* not HAVE_SHM */ #endif /* no XPNTR */ @@ -583,6 +591,12 @@ extern size_t pure_size; #define STRING_COPYIN(string, index, new, count) \ bcopy (new, XSTRING (string)->data + index, count) +/* Type checking. */ + +#define CHECK_TYPE(ok, Qxxxp, x) \ + do { if (!(ok)) wrong_type_argument (Qxxxp, (x)); } while (0) + + /* See the macros in intervals.h. */ @@ -590,8 +604,8 @@ typedef struct interval *INTERVAL; /* Complain if object is not string or buffer type */ #define CHECK_STRING_OR_BUFFER(x) \ - { if (!STRINGP ((x)) && !BUFFERP ((x))) \ - x = wrong_type_argument (Qbuffer_or_string_p, (x)); } + CHECK_TYPE (STRINGP (x) || BUFFERP (x), Qbuffer_or_string_p, x) + /* In a cons, the markbit of the car is the gc mark bit */ @@ -600,9 +614,19 @@ struct Lisp_Cons /* Please do not use the names of these elements in code other than the core lisp implementation. Use XCAR and XCDR below. */ #ifdef HIDE_LISP_IMPLEMENTATION - Lisp_Object car_, cdr_; + Lisp_Object car_; + union + { + Lisp_Object cdr_; + struct Lisp_Cons *chain; + } u; #else - Lisp_Object car, cdr; + Lisp_Object car; + union + { + Lisp_Object cdr; + struct Lisp_Cons *chain; + } u; #endif }; @@ -615,10 +639,10 @@ struct Lisp_Cons invalidated at arbitrary points.) */ #ifdef HIDE_LISP_IMPLEMENTATION #define XCAR_AS_LVALUE(c) (XCONS ((c))->car_) -#define XCDR_AS_LVALUE(c) (XCONS ((c))->cdr_) +#define XCDR_AS_LVALUE(c) (XCONS ((c))->u.cdr_) #else #define XCAR_AS_LVALUE(c) (XCONS ((c))->car) -#define XCDR_AS_LVALUE(c) (XCONS ((c))->cdr) +#define XCDR_AS_LVALUE(c) (XCONS ((c))->u.cdr) #endif /* Use these from normal code. */ @@ -650,6 +674,13 @@ struct Lisp_Cons : NILP ((c)) ? Qnil \ : wrong_type_argument (Qlistp, (c))) +/* Take the car or cdr of something whose type is not known. */ +#define CAR_SAFE(c) \ + (CONSP ((c)) ? XCAR ((c)) : Qnil) + +#define CDR_SAFE(c) \ + (CONSP ((c)) ? XCDR ((c)) : Qnil) + /* Nonzero if STR is a multibyte string. */ #define STRING_MULTIBYTE(STR) \ (XSTRING (STR)->size_byte >= 0) @@ -688,12 +719,12 @@ struct Lisp_String unsigned char *data; }; -/* If a struct is made to look like a vector, this macro returns the length - of the shortest vector that would hold that struct. */ -#define VECSIZE(type) ((sizeof (type) - (sizeof (struct Lisp_Vector) \ - - sizeof (Lisp_Object)) \ - + sizeof(Lisp_Object) - 1) /* round up */ \ - / sizeof (Lisp_Object)) +#ifdef offsetof +#define OFFSETOF(type,field) offsetof(type,field) +#else +#define OFFSETOF(type,field) \ + ((int)((char*)&((type*)0)->field - (char*)0)) +#endif struct Lisp_Vector { @@ -702,6 +733,20 @@ struct Lisp_Vector Lisp_Object contents[1]; }; +/* If a struct is made to look like a vector, this macro returns the length + of the shortest vector that would hold that struct. */ +#define VECSIZE(type) ((sizeof (type) - (sizeof (struct Lisp_Vector) \ + - sizeof (Lisp_Object)) \ + + sizeof(Lisp_Object) - 1) /* round up */ \ + / sizeof (Lisp_Object)) + +/* Like VECSIZE, but used when the pseudo-vector has non-Lisp_Object fields + at the end and we need to compute the number of Lisp_Object fields (the + ones that the GC needs to trace). */ +#define PSEUDOVECSIZE(type, nonlispfield) \ + ((OFFSETOF(type, nonlispfield) - OFFSETOF(struct Lisp_Vector, contents[0])) \ + / sizeof (Lisp_Object)) + /* A char table is a kind of vectorlike, with contents are like a vector but with a few other slots. For some purposes, it makes sense to handle a chartable with type struct Lisp_Vector. An @@ -1021,13 +1066,8 @@ struct Lisp_Hash_Table #define HASH_TABLE_P(OBJ) PSEUDOVECTORP (OBJ, PVEC_HASH_TABLE) #define GC_HASH_TABLE_P(x) GC_PSEUDOVECTORP (x, PVEC_HASH_TABLE) -#define CHECK_HASH_TABLE(x) \ - do \ - { \ - if (!HASH_TABLE_P ((x))) \ - x = wrong_type_argument (Qhash_table_p, (x)); \ - } \ - while (0) +#define CHECK_HASH_TABLE(x) \ + CHECK_TYPE (HASH_TABLE_P (x), Qhash_table_p, x) /* Value is the key part of entry IDX in hash table H. */ @@ -1275,17 +1315,21 @@ union Lisp_Misc /* Lisp floating point type */ struct Lisp_Float { + union + { #ifdef HIDE_LISP_IMPLEMENTATION - double data_; + double data_; #else - double data; + double data; #endif + struct Lisp_Float *chain; + } u; }; #ifdef HIDE_LISP_IMPLEMENTATION -#define XFLOAT_DATA(f) (XFLOAT (f)->data_) +#define XFLOAT_DATA(f) (XFLOAT (f)->u.data_) #else -#define XFLOAT_DATA(f) (XFLOAT (f)->data) +#define XFLOAT_DATA(f) (XFLOAT (f)->u.data) #endif /* A character, declared with the following typedef, is a member @@ -1488,41 +1532,57 @@ typedef unsigned char UCHAR; /* Test for image (image . spec) */ #define IMAGEP(x) (CONSP (x) && EQ (XCAR (x), Qimage)) +/* Array types. */ + +#define ARRAYP(x) \ + (VECTORP (x) || STRINGP (x) || CHAR_TABLE_P (x) || BOOL_VECTOR_P (x)) #define GC_EQ(x, y) EQ (x, y) #define CHECK_LIST(x) \ - do { if (!CONSP ((x)) && !NILP (x)) x = wrong_type_argument (Qlistp, (x)); } while (0) + CHECK_TYPE (CONSP (x) || NILP (x), Qlistp, x) + +#define CHECK_LIST_CONS(x, y) \ + CHECK_TYPE (CONSP (x), Qlistp, y) + +#define CHECK_LIST_END(x, y) \ + CHECK_TYPE (NILP (x), Qlistp, y) #define CHECK_STRING(x) \ - do { if (!STRINGP ((x))) x = wrong_type_argument (Qstringp, (x)); } while (0) + CHECK_TYPE (STRINGP (x), Qstringp, x) #define CHECK_STRING_CAR(x) \ - do { if (!STRINGP (XCAR (x))) XSETCAR (x, wrong_type_argument (Qstringp, XCAR (x))); } while (0) + CHECK_TYPE (STRINGP (XCAR (x)), Qstringp, XCAR (x)) #define CHECK_CONS(x) \ - do { if (!CONSP ((x))) x = wrong_type_argument (Qconsp, (x)); } while (0) + CHECK_TYPE (CONSP (x), Qconsp, x) #define CHECK_SYMBOL(x) \ - do { if (!SYMBOLP ((x))) x = wrong_type_argument (Qsymbolp, (x)); } while (0) + CHECK_TYPE (SYMBOLP (x), Qsymbolp, x) #define CHECK_CHAR_TABLE(x) \ - do { if (!CHAR_TABLE_P ((x))) \ - x = wrong_type_argument (Qchar_table_p, (x)); } while (0) + CHECK_TYPE (CHAR_TABLE_P (x), Qchar_table_p, x) #define CHECK_VECTOR(x) \ - do { if (!VECTORP ((x))) x = wrong_type_argument (Qvectorp, (x)); } while (0) + CHECK_TYPE (VECTORP (x), Qvectorp, x) -#define CHECK_VECTOR_OR_CHAR_TABLE(x) \ - do { if (!VECTORP ((x)) && !CHAR_TABLE_P ((x))) \ - x = wrong_type_argument (Qvector_or_char_table_p, (x)); \ - } while (0) +#define CHECK_VECTOR_OR_STRING(x) \ + CHECK_TYPE (VECTORP (x) || STRINGP (x), Qarrayp, x) + +#define CHECK_ARRAY(x, Qxxxp) \ + CHECK_TYPE (ARRAYP (x), Qxxxp, x) + +#define CHECK_VECTOR_OR_CHAR_TABLE(x) \ + CHECK_TYPE (VECTORP (x) || CHAR_TABLE_P (x), Qvector_or_char_table_p, x) #define CHECK_BUFFER(x) \ - do { if (!BUFFERP ((x))) x = wrong_type_argument (Qbufferp, (x)); } while (0) + CHECK_TYPE (BUFFERP (x), Qbufferp, x) #define CHECK_WINDOW(x) \ - do { if (!WINDOWP ((x))) x = wrong_type_argument (Qwindowp, (x)); } while (0) + CHECK_TYPE (WINDOWP (x), Qwindowp, x) + +#define CHECK_WINDOW_CONFIGURATION(x) \ + CHECK_TYPE (WINDOW_CONFIGURATIONP (x), Qwindow_configuration_p, x) /* This macro rejects windows on the interior of the window tree as "dead", which is what we want; this is an argument-checking macro, and @@ -1531,46 +1591,42 @@ typedef unsigned char UCHAR; A window of any sort, leaf or interior, is dead iff the buffer, vchild, and hchild members are all nil. */ -#define CHECK_LIVE_WINDOW(x) \ - do { \ - if (!WINDOWP ((x)) \ - || NILP (XWINDOW ((x))->buffer)) \ - x = wrong_type_argument (Qwindow_live_p, (x)); \ - } while (0) +#define CHECK_LIVE_WINDOW(x) \ + CHECK_TYPE (WINDOWP (x) && !NILP (XWINDOW (x)->buffer), Qwindow_live_p, x) #define CHECK_PROCESS(x) \ - do { if (!PROCESSP ((x))) x = wrong_type_argument (Qprocessp, (x)); } while (0) + CHECK_TYPE (PROCESSP (x), Qprocessp, x) + +#define CHECK_SUBR(x) \ + CHECK_TYPE (SUBRP (x), Qsubrp, x) #define CHECK_NUMBER(x) \ - do { if (!INTEGERP ((x))) x = wrong_type_argument (Qintegerp, (x)); } while (0) + CHECK_TYPE (INTEGERP (x), Qintegerp, x) #define CHECK_NATNUM(x) \ - do { if (!NATNUMP (x)) x = wrong_type_argument (Qwholenump, (x)); } while (0) + CHECK_TYPE (NATNUMP (x), Qwholenump, x) #define CHECK_MARKER(x) \ - do { if (!MARKERP ((x))) x = wrong_type_argument (Qmarkerp, (x)); } while (0) + CHECK_TYPE (MARKERP (x), Qmarkerp, x) #define CHECK_NUMBER_COERCE_MARKER(x) \ do { if (MARKERP ((x))) XSETFASTINT (x, marker_position (x)); \ - else if (!INTEGERP ((x))) x = wrong_type_argument (Qinteger_or_marker_p, (x)); } while (0) + else CHECK_TYPE (INTEGERP (x), Qinteger_or_marker_p, x); } while (0) #define XFLOATINT(n) extract_float((n)) #define CHECK_FLOAT(x) \ - do { if (!FLOATP (x)) \ - x = wrong_type_argument (Qfloatp, (x)); } while (0) + CHECK_TYPE (FLOATP (x), Qfloatp, x) #define CHECK_NUMBER_OR_FLOAT(x) \ - do { if (!FLOATP (x) && !INTEGERP (x)) \ - x = wrong_type_argument (Qnumberp, (x)); } while (0) + CHECK_TYPE (FLOATP (x) || INTEGERP (x), Qnumberp, x) #define CHECK_NUMBER_OR_FLOAT_COERCE_MARKER(x) \ do { if (MARKERP (x)) XSETFASTINT (x, marker_position (x)); \ - else if (!INTEGERP (x) && !FLOATP (x)) \ - x = wrong_type_argument (Qnumber_or_marker_p, (x)); } while (0) + else CHECK_TYPE (INTEGERP (x) || FLOATP (x), Qnumber_or_marker_p, x); } while (0) #define CHECK_OVERLAY(x) \ - do { if (!OVERLAYP ((x))) x = wrong_type_argument (Qoverlayp, (x));} while (0) + CHECK_TYPE (OVERLAYP (x), Qoverlayp, x) /* Since we can't assign directly to the CAR or CDR fields of a cons cell, use these when checking that those fields contain numbers. */ @@ -1726,13 +1782,13 @@ typedef Lisp_Object (*specbinding_func) P_ ((Lisp_Object)); struct specbinding { - volatile Lisp_Object symbol, old_value; - volatile specbinding_func func; + Lisp_Object symbol, old_value; + specbinding_func func; Lisp_Object unused; /* Dividing by 16 is faster than by 12 */ }; extern struct specbinding *specpdl; -extern volatile struct specbinding *specpdl_ptr; +extern struct specbinding *specpdl_ptr; extern int specpdl_size; extern EMACS_INT max_specpdl_size; @@ -2118,7 +2174,7 @@ extern Lisp_Object Qnumberp, Qnumber_or_marker_p; extern Lisp_Object Qinteger; -extern void circular_list_error P_ ((Lisp_Object)); +extern void circular_list_error P_ ((Lisp_Object)) NO_RETURN; EXFUN (Finteractive_form, 1); /* Defined in frame.c */ @@ -2161,7 +2217,7 @@ EXFUN (Fsymbol_function, 1); EXFUN (Fsymbol_plist, 1); EXFUN (Fsymbol_name, 1); extern Lisp_Object indirect_function P_ ((Lisp_Object)); -EXFUN (Findirect_function, 1); +EXFUN (Findirect_function, 2); EXFUN (Ffset, 2); EXFUN (Fsetplist, 2); EXFUN (Fsymbol_value, 1); @@ -2207,9 +2263,10 @@ EXFUN (Fmake_variable_buffer_local, 1); extern Lisp_Object indirect_variable P_ ((Lisp_Object)); extern Lisp_Object long_to_cons P_ ((unsigned long)); extern unsigned long cons_to_long P_ ((Lisp_Object)); -extern void args_out_of_range P_ ((Lisp_Object, Lisp_Object)); -extern void args_out_of_range_3 P_ ((Lisp_Object, Lisp_Object, Lisp_Object)); -extern Lisp_Object wrong_type_argument P_ ((Lisp_Object, Lisp_Object)); +extern void args_out_of_range P_ ((Lisp_Object, Lisp_Object)) NO_RETURN; +extern void args_out_of_range_3 P_ ((Lisp_Object, Lisp_Object, + Lisp_Object)) NO_RETURN; +extern Lisp_Object wrong_type_argument P_ ((Lisp_Object, Lisp_Object)) NO_RETURN; extern void store_symval_forwarding P_ ((Lisp_Object, Lisp_Object, Lisp_Object, struct buffer *)); extern Lisp_Object do_symval_forwarding P_ ((Lisp_Object)); @@ -2414,7 +2471,7 @@ extern Lisp_Object del_range_1 P_ ((int, int, int, int)); extern void del_range_byte P_ ((int, int, int)); extern void del_range_both P_ ((int, int, int, int, int)); extern Lisp_Object del_range_2 P_ ((int, int, int, int, int)); -extern void modify_region P_ ((struct buffer *, int, int)); +extern void modify_region P_ ((struct buffer *, int, int, int)); extern void prepare_to_modify_buffer P_ ((int, int, int *)); extern void signal_before_change P_ ((int, int, int *)); extern void signal_after_change P_ ((int, int, int)); @@ -2432,8 +2489,8 @@ EXFUN (Fding, 1); EXFUN (Fredraw_frame, 1); EXFUN (Fredraw_display, 0); EXFUN (Fsleep_for, 2); -EXFUN (Fsit_for, 3); -extern Lisp_Object sit_for P_ ((int, int, int, int, int)); +EXFUN (Fredisplay, 1); +extern Lisp_Object sit_for P_ ((Lisp_Object, int, int)); extern void init_display P_ ((void)); extern void syms_of_display P_ ((void)); extern void safe_bcopy P_ ((const char *, char *, int)); @@ -2481,7 +2538,7 @@ extern void syms_of_xdisp P_ ((void)); extern void init_xdisp P_ ((void)); extern Lisp_Object safe_eval P_ ((Lisp_Object)); extern int pos_visible_p P_ ((struct window *, int, int *, - int *, int *, int *, int)); + int *, int *, int *, int *, int *)); /* Defined in vm-limit.c. */ extern void memory_warnings P_ ((POINTER_TYPE *, void (*warnfun) ())); @@ -2492,13 +2549,14 @@ extern void allocate_string_data P_ ((struct Lisp_String *, int, int)); extern void reset_malloc_hooks P_ ((void)); extern void uninterrupt_malloc P_ ((void)); extern void malloc_warning P_ ((char *)); -extern void memory_full P_ ((void)); -extern void buffer_memory_full P_ ((void)); +extern void memory_full P_ ((void)) NO_RETURN; +extern void buffer_memory_full P_ ((void)) NO_RETURN; extern int survives_gc_p P_ ((Lisp_Object)); extern void mark_object P_ ((Lisp_Object)); extern Lisp_Object Vpurify_flag; extern Lisp_Object Vmemory_full; EXFUN (Fcons, 2); +EXFUN (list1, 1); EXFUN (list2, 2); EXFUN (list3, 3); EXFUN (list4, 4); @@ -2549,6 +2607,7 @@ extern void init_alloc_once P_ ((void)); extern void init_alloc P_ ((void)); extern void syms_of_alloc P_ ((void)); extern struct buffer * allocate_buffer P_ ((void)); +extern int valid_lisp_object_p P_ ((Lisp_Object)); /* Defined in print.c */ extern Lisp_Object Vprin1_to_string_buffer; @@ -2584,10 +2643,11 @@ EXFUN (Fread_from_string, 3); EXFUN (Fintern, 2); EXFUN (Fintern_soft, 2); EXFUN (Fload, 5); +EXFUN (Fget_load_suffixes, 0); EXFUN (Fget_file_char, 0); -EXFUN (Fread_char, 2); -EXFUN (Fread_event, 2); -extern Lisp_Object read_filtered_event P_ ((int, int, int, int)); +EXFUN (Fread_char, 3); +EXFUN (Fread_event, 3); +extern Lisp_Object read_filtered_event P_ ((int, int, int, int, Lisp_Object)); EXFUN (Feval_region, 4); extern Lisp_Object intern P_ ((const char *)); extern Lisp_Object make_symbol P_ ((char *)); @@ -2595,7 +2655,7 @@ extern Lisp_Object oblookup P_ ((Lisp_Object, const char *, int, int)); #define LOADHIST_ATTACH(x) \ if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list) extern Lisp_Object Vcurrent_load_list; -extern Lisp_Object Vload_history, Vload_suffixes; +extern Lisp_Object Vload_history, Vload_suffixes, Vload_file_rep_suffixes; extern int openp P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object *, Lisp_Object)); extern int isfloat_string P_ ((char *)); @@ -2649,6 +2709,12 @@ EXFUN (Fthrow, 2) NO_RETURN; EXFUN (Funwind_protect, UNEVALLED); EXFUN (Fcondition_case, UNEVALLED); EXFUN (Fsignal, 2); +extern void xsignal P_ ((Lisp_Object, Lisp_Object)) NO_RETURN; +extern void xsignal0 P_ ((Lisp_Object)) NO_RETURN; +extern void xsignal1 P_ ((Lisp_Object, Lisp_Object)) NO_RETURN; +extern void xsignal2 P_ ((Lisp_Object, Lisp_Object, Lisp_Object)) NO_RETURN; +extern void xsignal3 P_ ((Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object)) NO_RETURN; +extern void signal_error P_ ((char *, Lisp_Object)) NO_RETURN; EXFUN (Fautoload, 5); EXFUN (Fcommandp, 2); EXFUN (Feval, 1); @@ -2712,7 +2778,6 @@ EXFUN (Fbobp, 0); EXFUN (Fformat, MANY); EXFUN (Fmessage, MANY); extern Lisp_Object format2 P_ ((char *, Lisp_Object, Lisp_Object)); -extern Lisp_Object make_buffer_string P_ ((int, int, int)); EXFUN (Fbuffer_substring, 2); EXFUN (Fbuffer_string, 0); extern Lisp_Object save_excursion_save P_ ((void)); @@ -2731,7 +2796,6 @@ extern Lisp_Object make_buffer_string P_ ((int, int, int)); extern Lisp_Object make_buffer_string_both P_ ((int, int, int, int, int)); extern void init_editfns P_ ((void)); extern void syms_of_editfns P_ ((void)); -EXFUN (Fcurrent_message, 0); extern Lisp_Object Vinhibit_field_text_motion; EXFUN (Fconstrain_to_field, 5); EXFUN (Ffield_string, 1); @@ -2743,7 +2807,7 @@ extern void set_time_zone_rule P_ ((char *)); /* defined in buffer.c */ extern int mouse_face_overlay_overlaps P_ ((Lisp_Object)); -extern void nsberror P_ ((Lisp_Object)); +extern void nsberror P_ ((Lisp_Object)) NO_RETURN; extern char *no_switch_window P_ ((Lisp_Object window)); EXFUN (Fset_buffer_multibyte, 1); EXFUN (Foverlay_start, 1); @@ -2826,10 +2890,9 @@ EXFUN (Ffile_readable_p, 1); EXFUN (Ffile_executable_p, 1); EXFUN (Fread_file_name, 6); extern Lisp_Object close_file_unwind P_ ((Lisp_Object)); -extern void report_file_error P_ ((const char *, Lisp_Object)); +extern void report_file_error P_ ((const char *, Lisp_Object)) NO_RETURN; extern int internal_delete_file P_ ((Lisp_Object)); extern void syms_of_fileio P_ ((void)); -EXFUN (Fmake_temp_name, 1); extern void init_fileio_once P_ ((void)); extern Lisp_Object make_temp_name P_ ((Lisp_Object, int)); EXFUN (Fmake_symbolic_link, 3); @@ -2857,13 +2920,14 @@ extern int find_next_newline P_ ((int, int)); extern int find_next_newline_no_quit P_ ((int, int)); extern int find_before_next_newline P_ ((int, int, int)); extern void syms_of_search P_ ((void)); +extern void clear_regexp_cache P_ ((void)); /* defined in minibuf.c */ extern Lisp_Object last_minibuf_string; extern void choose_minibuf_frame P_ ((void)); EXFUN (Fcompleting_read, 8); -EXFUN (Fread_from_minibuffer, 8); +EXFUN (Fread_from_minibuffer, 7); EXFUN (Fread_variable, 2); EXFUN (Fread_buffer, 3); EXFUN (Fread_minibuffer, 2); @@ -3119,7 +3183,6 @@ extern void sys_subshell P_ ((void)); extern void sys_suspend P_ ((void)); extern void discard_tty_input P_ ((void)); extern void init_sys_modes P_ ((void)); -extern void reset_sys_modes P_ ((void)); extern void get_frame_size P_ ((int *, int *)); extern void wait_for_termination P_ ((int)); extern void flush_pending_output P_ ((int)); @@ -3163,27 +3226,27 @@ extern void syms_of_dired P_ ((void)); extern void syms_of_term P_ ((void)); extern void fatal () NO_RETURN; -#ifdef HAVE_X_WINDOWS +#ifdef HAVE_WINDOW_SYSTEM /* Defined in fontset.c */ extern void syms_of_fontset P_ ((void)); EXFUN (Fset_fontset_font, 4); + +/* Defined in xfns.c, w32fns.c, or macfns.c */ +EXFUN (Fxw_display_color_p, 1); +EXFUN (Fx_file_dialog, 5); #endif /* Defined in xfaces.c */ extern void syms_of_xfaces P_ ((void)); +#ifndef HAVE_GETLOADAVG /* Defined in getloadavg.c */ extern int getloadavg P_ ((double *, int)); +#endif #ifdef HAVE_X_WINDOWS /* Defined in xfns.c */ extern void syms_of_xfns P_ ((void)); -#endif /* HAVE_X_WINDOWS */ -#ifdef HAVE_WINDOW_SYSTEM -/* Defined in xfns.c, w32fns.c, or macfns.c */ -EXFUN (Fxw_display_color_p, 1); -EXFUN (Fx_file_dialog, 5); -#endif /* HAVE_WINDOW_SYSTEM */ /* Defined in xsmfns.c */ extern void syms_of_xsmfns P_ ((void)); @@ -3193,14 +3256,32 @@ extern void syms_of_xselect P_ ((void)); /* Defined in xterm.c */ extern void syms_of_xterm P_ ((void)); - -/* Defined in getloadavg.c */ -extern int getloadavg P_ ((double [], int)); +#endif /* HAVE_X_WINDOWS */ #ifdef MSDOS /* Defined in msdos.c */ EXFUN (Fmsdos_downcase_filename, 1); #endif + +#ifdef MAC_OS +/* Defined in macfns.c */ +extern void syms_of_macfns P_ ((void)); + +/* Defined in macselect.c */ +extern void syms_of_macselect P_ ((void)); + +/* Defined in macterm.c */ +extern void syms_of_macterm P_ ((void)); + +/* Defined in macmenu.c */ +extern void syms_of_macmenu P_ ((void)); + +/* Defined in mac.c */ +extern void syms_of_mac P_ ((void)); +#ifdef MAC_OSX +extern void init_mac_osx_environment P_ ((void)); +#endif /* MAC_OSX */ +#endif /* MAC_OS */ /* Nonzero means Emacs has already been initialized. Used during startup to detect startup of dumped Emacs. */