aboutsummaryrefslogtreecommitdiffstats
path: root/src/puresize.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/puresize.h')
-rw-r--r--src/puresize.h20
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);
81 81
82extern EMACS_INT pure[]; 82extern EMACS_INT pure[];
83 83
84/* The puresize_h_* macros are private to this include file. */
85
84/* True if PTR is pure. */ 86/* True if PTR is pure. */
87
88#define puresize_h_PURE_P(ptr) \
89 ((uintptr_t) (ptr) - (uintptr_t) pure <= PURESIZE)
90
85INLINE bool 91INLINE bool
86PURE_P (void *ptr) 92PURE_P (void *ptr)
87{ 93{
88 return (uintptr_t) (ptr) - (uintptr_t) pure <= PURESIZE; 94 return puresize_h_PURE_P (ptr);
89} 95}
90 96
91/* Signal an error if OBJ is pure. PTR is OBJ untagged. */ 97/* Signal an error if OBJ is pure. PTR is OBJ untagged. */
98
99#define puresize_h_CHECK_IMPURE(obj, ptr) \
100 (PURE_P (ptr) ? pure_write_error (obj) : (void) 0)
101
92INLINE void 102INLINE void
93CHECK_IMPURE (Lisp_Object obj, void *ptr) 103CHECK_IMPURE (Lisp_Object obj, void *ptr)
94{ 104{
95 if (PURE_P (ptr)) 105 puresize_h_CHECK_IMPURE (obj, ptr);
96 pure_write_error (obj);
97} 106}
98 107
108#if DEFINE_KEY_OPS_AS_MACROS
109# define PURE_P(ptr) puresize_h_PURE_P (ptr)
110# define CHECK_IMPURE(obj, ptr) puresize_h_CHECK_IMPURE (obj, ptr)
111#endif
112
99INLINE_HEADER_END 113INLINE_HEADER_END
100 114
101#endif /* EMACS_PURESIZE_H */ 115#endif /* EMACS_PURESIZE_H */