+/* 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 */