• Paul Eggert's avatar
    Prefer inline functions in character.h · 3e46a231
    Paul Eggert authored
    In character.h, replace macros with inline functions or enums
    when this is easy.  This improves maintainability and
    on my platform (Fedora 31 x86-64, gcc -O2) improved CPU
    performance very slightly (0.3%) on ‘make compile-always’.
    * src/buffer.h (SANE_TAB_WIDTH, CHARACTER_WIDTH):
    Move here from character.h, and make them inline functions.
    Tune CHARACTER_WIDTH so that ASCII_CHAR_WIDTH is no longer needed.
    (sanitize_tab_width, sanitize_char_width):
    Move here from character.h.
    * src/character.h (MAX_CHAR, MAX_UNICODE_CHAR, MAX_1_BYTE_CHAR)
    (MAX_2_BYTE_CHAR, MAX_3_BYTE_CHAR, MAX_4_BYTE_CHAR)
    (MAX_5_BYTE_CHAR, MIN_MULTIBYTE_LEADING_CODE)
    (MAX_MULTIBYTE_LEADING_CODE, MAX_MULTIBYTE_LENGTH):
    Now enum constants instead of macros.
    * src/character.h (CHAR_BYTES): Redo to avoid conditional branches.
    (CHAR_BYTE8_P, BYTE8_TO_CHAR, UNIBYTE_TO_CHAR, CHAR_TO_BYTE8)
    (CHAR_TO_BYTE_SAFE, CHAR_BYTE8_HEAD_P, CHARACTERP)
    (CHECK_CHARACTER, CHECK_CHARACTER_CAR, CHECK_CHARACTER_CDR)
    (CHAR_PRINTABLE_P, CHAR_BYTES, CHAR_LEADING_CODE, BYTE8_STRING)
    (LEADING_CODE_P, TRAILING_CODE_P, CHAR_HEAD_P)
    (BYTES_BY_CHAR_HEAD):
    Now inline functions instead of macros.
    (ASCII_CHAR_WIDTH): Remove; no longer used.
    * src/conf_post.h (ATTRIBUTE_PURE): New macro.
    * src/lisp.h (char_table_ref): Use it, for better inlining.
    * src/fns.c (base64_decode_1): Add now-necessary casts.
    3e46a231
fns.c 161 KB