#ifndef EMACS_LISP_H
#define EMACS_LISP_H
+#include <stdarg.h>
+#include <stddef.h>
+
/* Use the configure flag --enable-checking[=LIST] to enable various
types of run time checks for Lisp objects. */
unsigned char *data;
};
-#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
{
EMACS_UINT size;
/* 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) \
- - OFFSETOF (struct Lisp_Vector, contents[0]) \
+ - offsetof (struct Lisp_Vector, contents[0]) \
+ sizeof(Lisp_Object) - 1) /* round up */ \
/ sizeof (Lisp_Object))
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])) \
+ ((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
Lisp_Object (*a6) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
Lisp_Object (*a7) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
Lisp_Object (*a8) (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object);
- Lisp_Object (*am) (int, Lisp_Object *);
+ Lisp_Object (*aUNEVALLED) (Lisp_Object args);
+ Lisp_Object (*aMANY) (int, Lisp_Object *);
} function;
short min_args, max_args;
const char *symbol_name;
Lisp_Object fnname DEFUN_ARGS_ ## maxargs ; \
DECL_ALIGN (struct Lisp_Subr, sname) = \
{ PVEC_SUBR | (sizeof (struct Lisp_Subr) / sizeof (EMACS_INT)), \
- (Lisp_Object(*)(void)) fnname, minargs, maxargs, lname, intspec, 0}; \
+ { .a ## maxargs = fnname }, \
+ minargs, maxargs, lname, intspec, 0}; \
Lisp_Object fnname
/* Note that the weird token-substitution semantics of ANSI C makes
EMACS_INT, EMACS_INT);
extern void replace_range (EMACS_INT, EMACS_INT, Lisp_Object, int, int, int);
extern void replace_range_2 (EMACS_INT, EMACS_INT, EMACS_INT, EMACS_INT,
- char *, EMACS_INT, EMACS_INT, int);
+ const char *, EMACS_INT, EMACS_INT, int);
extern void syms_of_insdel (void);
/* Defined in dispnew.c */
extern Lisp_Object current_message (void);
extern void set_message (const char *s, Lisp_Object, int, int);
extern void clear_message (int, int);
-extern void message (/* char *, ... */);
-extern void message_nolog (/* char *, ... */);
-extern void message1 (char *);
-extern void message1_nolog (char *);
+extern void message (const char *, ...);
+extern void message_nolog (const char *, ...);
+extern void message1 (const char *);
+extern void message1_nolog (const char *);
extern void message2 (const char *, int, int);
extern void message2_nolog (const char *, int, int);
extern void message3 (Lisp_Object, int, int);
extern void message3_nolog (Lisp_Object, int, int);
extern void message_dolog (const char *, int, int, int);
-extern void message_with_string (char *, Lisp_Object, int);
+extern void message_with_string (const char *, Lisp_Object, int);
extern void message_log_maybe_newline (void);
extern void update_echo_area (void);
extern void truncate_echo_area (int);
extern void syms_of_xsettings (void);
/* Defined in vm-limit.c. */
-extern void memory_warnings (POINTER_TYPE *, void (*warnfun) (char*));
+extern void memory_warnings (POINTER_TYPE *, void (*warnfun) (const char *));
/* Defined in alloc.c */
extern void check_pure_size (void);
extern void allocate_string_data (struct Lisp_String *, int, int);
extern void reset_malloc_hooks (void);
extern void uninterrupt_malloc (void);
-extern void malloc_warning (char *);
+extern void malloc_warning (const char *);
extern void memory_full (void) NO_RETURN;
extern void buffer_memory_full (void) NO_RETURN;
extern int survives_gc_p (Lisp_Object);
extern void temp_output_buffer_setup (const char *);
extern int print_level, print_escape_newlines;
extern Lisp_Object Qprint_escape_newlines;
-extern void write_string (char *, int);
-extern void write_string_1 (char *, int, Lisp_Object);
-extern void print_error_message (Lisp_Object, Lisp_Object, char *, Lisp_Object);
+extern void write_string (const char *, int);
+extern void write_string_1 (const char *, int, Lisp_Object);
+extern void print_error_message (Lisp_Object, Lisp_Object, const char *,
+ Lisp_Object);
extern Lisp_Object internal_with_output_to_temp_buffer
(const char *, Lisp_Object (*) (Lisp_Object), Lisp_Object);
extern void float_to_string (unsigned char *, double);
extern void syms_of_print (void);
/* Defined in doprnt.c */
-extern int doprnt (char *, int, char *, char *, int, char **);
+extern int doprnt (char *, int, const char *, const char *, va_list);
/* Defined in lread.c */
extern Lisp_Object Qvariable_documentation, Qstandard_input;
extern Lisp_Object check_obarray (Lisp_Object);
extern Lisp_Object intern (const char *);
extern Lisp_Object intern_c_string (const char *);
-extern Lisp_Object make_symbol (char *);
+extern Lisp_Object make_symbol (const char *);
extern Lisp_Object oblookup (Lisp_Object, const char *, int, int);
#define LOADHIST_ATTACH(x) \
do { \
extern Lisp_Object Vload_history, Vload_suffixes, Vload_file_rep_suffixes;
extern int openp (Lisp_Object, Lisp_Object, Lisp_Object,
Lisp_Object *, Lisp_Object);
-extern int isfloat_string (char *, int);
+extern int isfloat_string (const char *, int);
extern void map_obarray (Lisp_Object, void (*) (Lisp_Object, Lisp_Object),
Lisp_Object);
-extern void dir_warning (char *, Lisp_Object);
+extern void dir_warning (const char *, Lisp_Object);
extern void close_load_descs (void);
extern void init_obarray (void);
extern void init_lread (void);
extern void xsignal1 (Lisp_Object, Lisp_Object) NO_RETURN;
extern void xsignal2 (Lisp_Object, Lisp_Object, Lisp_Object) NO_RETURN;
extern void xsignal3 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object) NO_RETURN;
-extern void signal_error (char *, Lisp_Object) NO_RETURN;
+extern void signal_error (const char *, Lisp_Object) NO_RETURN;
EXFUN (Fautoload, 5);
EXFUN (Fcommandp, 2);
EXFUN (Feval, 1);
extern void specbind (Lisp_Object, Lisp_Object);
extern void record_unwind_protect (Lisp_Object (*) (Lisp_Object), Lisp_Object);
extern Lisp_Object unbind_to (int, Lisp_Object);
-extern void error (/* char *, ... */) NO_RETURN;
+extern void error (const char *, ...) NO_RETURN;
+extern void verror (const char *, va_list) NO_RETURN;
extern void do_autoload (Lisp_Object, Lisp_Object);
extern Lisp_Object un_autoload (Lisp_Object);
EXFUN (Ffetch_bytecode, 1);
EXFUN (Fbobp, 0);
EXFUN (Fformat, MANY);
EXFUN (Fmessage, MANY);
-extern Lisp_Object format2 (char *, Lisp_Object, Lisp_Object);
+extern Lisp_Object format2 (const char *, Lisp_Object, Lisp_Object);
EXFUN (Fbuffer_substring, 2);
EXFUN (Fbuffer_string, 0);
extern Lisp_Object save_excursion_save (void);
EXFUN (Ffield_beginning, 3);
EXFUN (Ffield_end, 3);
EXFUN (Ffield_string_no_properties, 1);
-extern void set_time_zone_rule (char *);
+extern void set_time_zone_rule (const char *);
/* Defined in buffer.c */
extern int mouse_face_overlay_overlaps (Lisp_Object);
extern int detect_input_pending_ignore_squeezables (void);
extern int detect_input_pending_run_timers (int);
extern void safe_run_hooks (Lisp_Object);
-extern void cmd_error_internal (Lisp_Object, char *);
+extern void cmd_error_internal (Lisp_Object, const char *);
extern Lisp_Object command_loop_1 (void);
extern Lisp_Object recursive_edit_1 (void);
extern void record_auto_save (void);
extern void syms_of_frame (void);
/* Defined in emacs.c */
-extern Lisp_Object decode_env_path (char *, char *);
+extern Lisp_Object decode_env_path (const char *, const char *);
extern Lisp_Object Vinvocation_name, Vinvocation_directory;
extern Lisp_Object Vbefore_init_time, Vafter_init_time;
extern Lisp_Object Vinstallation_directory;
extern char *xstrdup (const char *);
-extern char *egetenv (char *);
+extern char *egetenv (const char *);
/* Set up the name of the machine we're running on. */
extern void init_system_name (void);