#define INT_VALBITS (BITS_PER_EMACS_INT - INT_GCBITS)
#define VALBITS (BITS_PER_EMACS_INT - GCBITS)
-#define EMACS_INT_MAX ((1UL << INT_VALBITS) -1UL)
+#define EMACS_INT_MAX ((EMACS_INT) ((1UL << INT_VALBITS) -1UL))
+#define EMACS_INT_MIN (-(EMACS_INT_MAX) - 1)
#ifdef USE_UNION_TYPE
# include "lisp-union.h"
#define EXTERNAL_LIST_LOOP_1(list) \
Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \
-EMACS_INT ELL1_len; \
+EMACS_INT ELL1_len; \
EXTERNAL_LIST_LOOP_6 (ELL1_elt, list, ELL1_len, ELL1_hare, \
ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH)
#define EXTERNAL_LIST_LOOP_2(elt, list) \
Lisp_Object hare_##elt, tortoise_##elt; \
-EMACS_INT len_##elt; \
+EMACS_INT len_##elt; \
EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \
tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
#define EXTERNAL_LIST_LOOP_3(elt, list, tail) \
Lisp_Object tortoise_##elt; \
-EMACS_INT len_##elt; \
+EMACS_INT len_##elt; \
EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, tail, \
tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
/* Optimized and safe macros for looping over external property lists. */
#define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \
Lisp_Object key, value, hare_##key, tortoise_##key; \
-EMACS_INT len_##key; \
+EMACS_INT len_##key; \
EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, hare_##key, \
tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
#define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \
Lisp_Object key, value, tail, tortoise_##key; \
-EMACS_INT len_##key; \
+EMACS_INT len_##key; \
EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, tail, \
tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
)
/* Return 1 if LIST is properly acyclic and nil-terminated, else 0. */
-INLINE int TRUE_LIST_P (Lisp_Object object);
-INLINE int
+INLINE_HEADER int TRUE_LIST_P (Lisp_Object object);
+INLINE_HEADER int
TRUE_LIST_P (Lisp_Object object)
{
Lisp_Object hare, tortoise;
#ifdef MULE
-INLINE Charcount string_char_length (Lisp_String *s);
-INLINE Charcount
+INLINE_HEADER Charcount string_char_length (Lisp_String *s);
+INLINE_HEADER Charcount
string_char_length (Lisp_String *s)
{
return bytecount_to_charcount (string_data (s), string_length (s));
#define bit_vector_length(v) ((v)->size)
#define bit_vector_next(v) ((v)->next)
-INLINE int bit_vector_bit (Lisp_Bit_Vector *v, size_t n);
-INLINE int
+INLINE_HEADER int bit_vector_bit (Lisp_Bit_Vector *v, size_t n);
+INLINE_HEADER int
bit_vector_bit (Lisp_Bit_Vector *v, size_t n)
{
return ((v->bits[n >> LONGBITS_LOG2] >> (n & (LONGBITS_POWER_OF_2 - 1)))
& 1);
}
-INLINE void set_bit_vector_bit (Lisp_Bit_Vector *v, size_t n, int value);
-INLINE void
+INLINE_HEADER void set_bit_vector_bit (Lisp_Bit_Vector *v, size_t n, int value);
+INLINE_HEADER void
set_bit_vector_bit (Lisp_Bit_Vector *v, size_t n, int value)
{
if (value)
struct Lisp_Subr
{
struct lrecord_header lheader;
- short min_args, max_args;
+ short min_args;
+ short max_args;
const char *prompt;
const char *doc;
const char *name;
#ifdef ERROR_CHECK_TYPECHECK
-INLINE Emchar XCHAR (Lisp_Object obj);
-INLINE Emchar
+INLINE_HEADER Emchar XCHAR (Lisp_Object obj);
+INLINE_HEADER Emchar
XCHAR (Lisp_Object obj)
{
assert (CHARP (obj));
#ifdef ERROR_CHECK_TYPECHECK
-INLINE EMACS_INT XINT (Lisp_Object obj);
-INLINE EMACS_INT
+INLINE_HEADER EMACS_INT XINT (Lisp_Object obj);
+INLINE_HEADER EMACS_INT
XINT (Lisp_Object obj)
{
assert (INTP (obj));
return XREALINT (obj);
}
-INLINE EMACS_INT XCHAR_OR_INT (Lisp_Object obj);
-INLINE EMACS_INT
+INLINE_HEADER EMACS_INT XCHAR_OR_INT (Lisp_Object obj);
+INLINE_HEADER EMACS_INT
XCHAR_OR_INT (Lisp_Object obj)
{
assert (INTP (obj) || CHARP (obj));
/* Can't be const, because then subr->doc is read-only and
Snarf_documentation chokes */
-#define subr_lheader_initializer { 0, 0, 0, 0 }
-
#define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
Lisp_Object Fname (EXFUN_##max_args); \
- static struct Lisp_Subr S##Fname = { subr_lheader_initializer, \
- min_args, max_args, prompt, 0, lname, (lisp_fn_t) Fname }; \
+ static struct Lisp_Subr S##Fname = \
+ { \
+ { /* struct lrecord_header */ \
+ lrecord_type_subr, /* lrecord_type_index */ \
+ 1, /* mark bit */ \
+ 1, /* c_readonly bit */ \
+ 1 /* lisp_readonly bit */ \
+ }, \
+ min_args, \
+ max_args, \
+ prompt, \
+ 0, /* doc string */ \
+ lname, \
+ (lisp_fn_t) Fname \
+ }; \
Lisp_Object Fname (DEFUN_##max_args arglist)
/* Heavy ANSI C preprocessor hackery to get DEFUN to declare a
#endif
#ifdef PDUMP
void pdump (void);
-int pdump_load (void);
+int pdump_load (const char *);
extern char *pdump_start, *pdump_end;
#define DUMPEDP(adr) ((((char *)(adr)) < pdump_end) && (((char *)(adr)) >= pdump_start))
/* Defined in print.c */
void write_string_to_stdio_stream (FILE *, struct console *,
const Bufbyte *, Bytecount, Bytecount,
- Lisp_Object);
+ Lisp_Object, int);
void debug_print (Lisp_Object);
void debug_short_backtrace (int);
void temp_output_buffer_setup (Lisp_Object);
EXFUN (Fchar_after, 2);
EXFUN (Fchar_to_string, 1);
EXFUN (Fcheck_valid_plist, 1);
+EXFUN (Fvalid_plist_p, 1);
EXFUN (Fclear_range_table, 1);
EXFUN (Fcoding_category_list, 0);
EXFUN (Fcoding_category_system, 1);