diff options
Diffstat (limited to 'src/puresize.h')
| -rw-r--r-- | src/puresize.h | 23 |
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 | |||
| 78 | extern _Noreturn void pure_write_error (Lisp_Object); | 73 | extern _Noreturn void pure_write_error (Lisp_Object); |
| 79 | |||
| 80 | /* Define PURE_P. */ | ||
| 81 | 74 | ||
| 82 | extern EMACS_INT pure[]; | 75 | extern 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) | 78 | INLINE bool |
| 79 | PURE_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. */ | ||
| 85 | INLINE void | ||
| 86 | CHECK_IMPURE (Lisp_Object obj, void *ptr) | ||
| 87 | { | ||
| 88 | if (PURE_P (ptr)) | ||
| 89 | pure_write_error (obj); | ||
| 90 | } | ||