diff options
author | Dmitry Antipov <dmantipov@yandex.ru> | 2014-07-08 11:17:04 +0400 |
---|---|---|
committer | Dmitry Antipov <dmantipov@yandex.ru> | 2014-07-08 11:17:04 +0400 |
commit | f298de5264c86bbb76ccec727779dabe16e6b9c3 (patch) | |
tree | 05c709251b6982c042f04498510111e0fa03b82e /src/character.h | |
parent | 12dc5429352223f7ba8314d2e16177036a762733 (diff) | |
download | emacs-f298de5264c86bbb76ccec727779dabe16e6b9c3.tar.gz |
* chartab.c (char_table_translate): Move to...
* character.h (char_table_translate): ... inline function here.
Avoid Faref and assume that args are always valid. This helps to
speedup search, which is especially important for a huge buffers.
* lisp.h (char_table_translate): Remove prototype.
Diffstat (limited to 'src/character.h')
-rw-r--r-- | src/character.h | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/character.h b/src/character.h index 18aad5b8f41..66cd4e47ef8 100644 --- a/src/character.h +++ b/src/character.h @@ -667,6 +667,20 @@ extern Lisp_Object string_escape_byte8 (Lisp_Object); #define GET_TRANSLATION_TABLE(id) \ (XCDR (XVECTOR (Vtranslation_table_vector)->contents[(id)])) +/* Look up the element in char table OBJ at index CH, and return it as + an integer. If the element is not a character, return CH itself. */ + +INLINE int +char_table_translate (Lisp_Object obj, int ch) +{ + /* This internal function is expected to be called with valid arguments, + so there is a eassert instead of CHECK_xxx for the sake of speed. */ + eassert (CHAR_VALID_P (ch)); + eassert (CHAR_TABLE_P (obj)); + obj = CHAR_TABLE_REF (obj, ch); + return CHARACTERP (obj) ? XINT (obj) : ch; +} + INLINE_HEADER_END #endif /* EMACS_CHARACTER_H */ |