• Michal Nazarewicz's avatar
    Refactor regex character class parsing in [:name:] · 4538a5e3
    Michal Nazarewicz authored
    re_wctype function is used in three separate places and in all of
    those places almost exact code extracting the name from [:name:]
    surrounds it.  Furthermore, re_wctype requires a NUL-terminated
    string, so the name of the character class is copied to a temporary
    The code duplication and unnecessary memory copying can be avoided by
    pushing the responsibility of parsing the whole [:name:] sequence to
    the function.
    Furthermore, since now the function has access to the length of the
    character class name (since it’s doing the parsing), it can take
    advantage of that information in skipping some string comparisons and
    using a constant-length memcmp instead of strcmp which needs to take
    care of NUL bytes.
    * src/regex.c (re_wctype): Delete function.  Replace it with:
    (re_wctype_parse): New function which parses a whole [:name:] string
    and returns a RECC_* constant or -1 if the string is not of [:name:]
    (regex_compile): Use re_wctype_parse.
    * src/syntax.c (skip_chars): Use re_wctype_parse.
syntax.c 109 KB