diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2015-10-10 00:17:11 -0700 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2015-10-10 00:18:39 -0700 |
commit | bb7c182fdaf8553ffdc9162f322177ae2f7fa0c2 (patch) | |
tree | 444b1eef3d424cb5b07396a11bc66fe401d0a1dd /src/puresize.h | |
parent | 1196e3fca6f9df107c76438b7d00090d19b13570 (diff) | |
download | emacs-bb7c182fdaf8553ffdc9162f322177ae2f7fa0c2.tar.gz |
CHECK_IMPURE and PURE_P speedup
* src/intervals.c (create_root_interval):
Do CHECK_IMPURE only for strings; not needed for buffers.
Prefer ! STRINGP to BUFFERP, for a tad more speed.
* src/puresize.h (CHECK_IMPURE, PURE_P):
Now inline functions instead of macros.
(PURE_P): Don’t use XPNTR; that is now the caller’s responsibility.
All callers changed.
(CHECK_IMPURE): New argument PTR, to save us the work of running XPNTR.
All callers changed.
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/>. */ #define PURESIZE (BASE_PURESIZE * PURESIZE_RATIO * PURESIZE_CHECKING_RATIO) #endif -/* Signal an error if OBJ is pure. */ -#define CHECK_IMPURE(obj) \ - { if (PURE_P (obj)) \ - pure_write_error (obj); } - extern _Noreturn void pure_write_error (Lisp_Object); - -/* Define PURE_P. */ extern EMACS_INT pure[]; -#define PURE_P(obj) \ - ((uintptr_t) XPNTR (obj) - (uintptr_t) pure <= PURESIZE) +/* True if PTR is pure. */ +INLINE bool +PURE_P (void *ptr) +{ + return (uintptr_t) (ptr) - (uintptr_t) pure <= PURESIZE; +} + +/* Signal an error if OBJ is pure. PTR is OBJ untagged. */ +INLINE void +CHECK_IMPURE (Lisp_Object obj, void *ptr) +{ + if (PURE_P (ptr)) + pure_write_error (obj); +} |