diff options
Diffstat (limited to 'src/puresize.h')
-rw-r--r-- | src/puresize.h | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/src/puresize.h b/src/puresize.h index f07562429d5..96ddcde24a6 100644 --- a/src/puresize.h +++ b/src/puresize.h @@ -81,21 +81,35 @@ extern _Noreturn void pure_write_error (Lisp_Object); extern EMACS_INT pure[]; +/* 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 (uintptr_t) (ptr) - (uintptr_t) pure <= PURESIZE; + 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) { - if (PURE_P (ptr)) - pure_write_error (obj); + 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 */ |