diff options
author | Mattias EngdegÄrd <mattiase@acm.org> | 2020-03-17 13:18:14 +0100 |
---|---|---|
committer | Mattias EngdegÄrd <mattiase@acm.org> | 2020-03-17 17:22:02 +0100 |
commit | f189e5dc1020db9b41e77488d6290d6e7f032b13 (patch) | |
tree | 6717bb5b2b6eab5a2dae5f77d2837c988f4bd661 /src/regex-emacs.c | |
parent | 9dccaf8a5cdb10dae597345ec3741475477a7d97 (diff) | |
download | emacs-f189e5dc1020db9b41e77488d6290d6e7f032b13.tar.gz |
Don't generate useless range table entries for ASCII chars
In multibyte regexps, each ASCII char or range in a character
alternative produces a nonsense range table entry in addition to the
correct bits in the ASCII bitmap. Those entries do not match anything
but waste space and time.
* src/regex-emacs.c (regex_compile): Don't generate reversed intervals.
Diffstat (limited to 'src/regex-emacs.c')
-rw-r--r-- | src/regex-emacs.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/src/regex-emacs.c b/src/regex-emacs.c index 694431c95e2..0ae004e4636 100644 --- a/src/regex-emacs.c +++ b/src/regex-emacs.c @@ -2113,17 +2113,20 @@ regex_compile (re_char *pattern, ptrdiff_t size, if (CHAR_BYTE8_P (c1)) c = BYTE8_TO_CHAR (128); } - if (CHAR_BYTE8_P (c)) - { - c = CHAR_TO_BYTE8 (c); - c1 = CHAR_TO_BYTE8 (c1); - for (; c <= c1; c++) - SET_LIST_BIT (c); - } - else if (multibyte) - SETUP_MULTIBYTE_RANGE (range_table_work, c, c1); - else - SETUP_UNIBYTE_RANGE (range_table_work, c, c1); + if (c <= c1) + { + if (CHAR_BYTE8_P (c)) + { + c = CHAR_TO_BYTE8 (c); + c1 = CHAR_TO_BYTE8 (c1); + for (; c <= c1; c++) + SET_LIST_BIT (c); + } + else if (multibyte) + SETUP_MULTIBYTE_RANGE (range_table_work, c, c1); + else + SETUP_UNIBYTE_RANGE (range_table_work, c, c1); + } } } |