X-Git-Url: https://code.delx.au/gnu-emacs/blobdiff_plain/d16fb740912bf4874e7087f6f419427516047977..d9ea795035f28f700f1456b377013a24a1ea5e6f:/src/puresize.h diff --git a/src/puresize.h b/src/puresize.h index b72fb6c03f..bcb5a9ca82 100644 --- a/src/puresize.h +++ b/src/puresize.h @@ -1,5 +1,5 @@ /* How much read-only Lisp storage a dumped Emacs needs. - Copyright (C) 1993, 2001-2015 Free Software Foundation, Inc. + Copyright (C) 1993, 2001-2016 Free Software Foundation, Inc. This file is part of GNU Emacs. @@ -16,6 +16,13 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Emacs. If not, see . */ +#ifndef EMACS_PURESIZE_H +#define EMACS_PURESIZE_H + +#include "lisp.h" + +INLINE_HEADER_BEGIN + /* Define PURESIZE, the number of bytes of pure Lisp code to leave space for. At one point, this was defined in config.h, meaning that changing @@ -70,16 +77,39 @@ along with GNU Emacs. If not, see . */ #define PURESIZE (BASE_PURESIZE * PURESIZE_RATIO * PURESIZE_CHECKING_RATIO) #endif -/* Signal an error if OBJ is pure. */ -#define CHECK_IMPURE(obj) \ - { if (PURE_P (obj)) \ - pure_write_error (obj); } - extern _Noreturn void pure_write_error (Lisp_Object); - -/* Define PURE_P. */ extern EMACS_INT pure[]; -#define PURE_P(obj) \ - ((uintptr_t) XPNTR (obj) - (uintptr_t) pure <= PURESIZE) +/* The puresize_h_* macros are private to this include file. */ + +/* True if PTR is pure. */ + +#define puresize_h_PURE_P(ptr) \ + ((uintptr_t) (ptr) - (uintptr_t) pure <= PURESIZE) + +INLINE bool +PURE_P (void *ptr) +{ + return puresize_h_PURE_P (ptr); +} + +/* Signal an error if OBJ is pure. PTR is OBJ untagged. */ + +#define puresize_h_CHECK_IMPURE(obj, ptr) \ + (PURE_P (ptr) ? pure_write_error (obj) : (void) 0) + +INLINE void +CHECK_IMPURE (Lisp_Object obj, void *ptr) +{ + puresize_h_CHECK_IMPURE (obj, ptr); +} + +#if DEFINE_KEY_OPS_AS_MACROS +# define PURE_P(ptr) puresize_h_PURE_P (ptr) +# define CHECK_IMPURE(obj, ptr) puresize_h_CHECK_IMPURE (obj, ptr) +#endif + +INLINE_HEADER_END + +#endif /* EMACS_PURESIZE_H */