aboutsummaryrefslogtreecommitdiffstats
path: root/src/puresize.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/puresize.h')
-rw-r--r--src/puresize.h23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/puresize.h b/src/puresize.h
index b72fb6c03f9..d0926c65213 100644
--- a/src/puresize.h
+++ b/src/puresize.h
@@ -70,16 +70,21 @@ along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
70#define PURESIZE (BASE_PURESIZE * PURESIZE_RATIO * PURESIZE_CHECKING_RATIO) 70#define PURESIZE (BASE_PURESIZE * PURESIZE_RATIO * PURESIZE_CHECKING_RATIO)
71#endif 71#endif
72 72
73/* Signal an error if OBJ is pure. */
74#define CHECK_IMPURE(obj) \
75 { if (PURE_P (obj)) \
76 pure_write_error (obj); }
77
78extern _Noreturn void pure_write_error (Lisp_Object); 73extern _Noreturn void pure_write_error (Lisp_Object);
79
80/* Define PURE_P. */
81 74
82extern EMACS_INT pure[]; 75extern EMACS_INT pure[];
83 76
84#define PURE_P(obj) \ 77/* True if PTR is pure. */
85 ((uintptr_t) XPNTR (obj) - (uintptr_t) pure <= PURESIZE) 78INLINE bool
79PURE_P (void *ptr)
80{
81 return (uintptr_t) (ptr) - (uintptr_t) pure <= PURESIZE;
82}
83
84/* Signal an error if OBJ is pure. PTR is OBJ untagged. */
85INLINE void
86CHECK_IMPURE (Lisp_Object obj, void *ptr)
87{
88 if (PURE_P (ptr))
89 pure_write_error (obj);
90}