# HG changeset patch # User Gerd Moellmann # Date 1002410706 0 # Node ID 3d61dd23854a0758c6a38fa730fccdafb25421d3 # Parent ace21ec30053a0e51bbc3abe821df6192dd25bd1 (MOST_NEGATIVE_FIXNUM, MOST_POSITIVE_FIXNUM) (FIXNUM_OVERFLOW_P): New macros. diff -r ace21ec30053 -r 3d61dd23854a src/lisp.h --- a/src/lisp.h Sat Oct 06 23:24:15 2001 +0000 +++ b/src/lisp.h Sat Oct 06 23:25:06 2001 +0000 @@ -387,6 +387,10 @@ #define make_number(N) \ ((((EMACS_INT) (N)) & VALMASK) | ((EMACS_INT) Lisp_Int) << VALBITS) +#define make_fixnum(x) make_number (x) +#define MOST_NEGATIVE_FIXNUM ((EMACS_INT) 1 << (VALBITS - 1)) +#define MOST_POSITIVE_FIXNUM (MOST_NEGATIVE_FIXNUM - 1) + /* During garbage collection, XGCTYPE must be used for extracting types so that the mark bit is ignored. XMARKBIT accesses the markbit. Markbits are used only in particular slots of particular structure types. @@ -468,6 +472,16 @@ #endif /* NO_UNION_TYPE */ +/* Largest and smallest representable fixnum values. */ + +#define MOST_NEGATIVE_FIXNUM ((EMACS_INT) 1 << (VALBITS - 1)) +#define MOST_POSITIVE_FIXNUM (MOST_NEGATIVE_FIXNUM - 1) + +/* Value is non-zero if C integer I doesn't fit into a Lisp fixnum. */ + +#define FIXNUM_OVERFLOW_P(i) \ + ((i) > MOST_POSITIVE_FIXNUM || (i) < MOST_NEGATIVE_FIXNUM) + /* Extract a value or address from a Lisp_Object. */ #define XCONS(a) (eassert (GC_CONSP(a)),(struct Lisp_Cons *) XPNTR(a))