diff options
| author | K. Handa | 2016-01-03 17:53:43 +0900 |
|---|---|---|
| committer | K. Handa | 2016-01-03 17:53:43 +0900 |
| commit | fb6d826c69939c2d016c1b824d4e9bcb53d9e643 (patch) | |
| tree | b9ce862d6cbe25e740203421984df21e4cbadbf4 /src/puresize.h | |
| parent | 536f48e9a2251b9e654ea974bd90ff2f40218753 (diff) | |
| parent | 91917dd58ec5278e555b9c693a830749083e8f89 (diff) | |
| download | emacs-fb6d826c69939c2d016c1b824d4e9bcb53d9e643.tar.gz emacs-fb6d826c69939c2d016c1b824d4e9bcb53d9e643.zip | |
Merge branch 'master' of git.sv.gnu.org:/srv/git/emacs
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); | |||
| 81 | 81 | ||
| 82 | extern EMACS_INT pure[]; | 82 | extern 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 | |||
| 85 | INLINE bool | 91 | INLINE bool |
| 86 | PURE_P (void *ptr) | 92 | PURE_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 | |||
| 92 | INLINE void | 102 | INLINE void |
| 93 | CHECK_IMPURE (Lisp_Object obj, void *ptr) | 103 | CHECK_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 | |||
| 99 | INLINE_HEADER_END | 113 | INLINE_HEADER_END |
| 100 | 114 | ||
| 101 | #endif /* EMACS_PURESIZE_H */ | 115 | #endif /* EMACS_PURESIZE_H */ |