diff options
| author | Mattias EngdegÄrd | 2020-03-17 13:18:14 +0100 |
|---|---|---|
| committer | Mattias EngdegÄrd | 2020-03-17 17:22:02 +0100 |
| commit | f189e5dc1020db9b41e77488d6290d6e7f032b13 (patch) | |
| tree | 6717bb5b2b6eab5a2dae5f77d2837c988f4bd661 | |
| parent | 9dccaf8a5cdb10dae597345ec3741475477a7d97 (diff) | |
| download | emacs-f189e5dc1020db9b41e77488d6290d6e7f032b13.tar.gz emacs-f189e5dc1020db9b41e77488d6290d6e7f032b13.zip | |
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.
| -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, | |||
| 2113 | if (CHAR_BYTE8_P (c1)) | 2113 | if (CHAR_BYTE8_P (c1)) |
| 2114 | c = BYTE8_TO_CHAR (128); | 2114 | c = BYTE8_TO_CHAR (128); |
| 2115 | } | 2115 | } |
| 2116 | if (CHAR_BYTE8_P (c)) | 2116 | if (c <= c1) |
| 2117 | { | 2117 | { |
| 2118 | c = CHAR_TO_BYTE8 (c); | 2118 | if (CHAR_BYTE8_P (c)) |
| 2119 | c1 = CHAR_TO_BYTE8 (c1); | 2119 | { |
| 2120 | for (; c <= c1; c++) | 2120 | c = CHAR_TO_BYTE8 (c); |
| 2121 | SET_LIST_BIT (c); | 2121 | c1 = CHAR_TO_BYTE8 (c1); |
| 2122 | } | 2122 | for (; c <= c1; c++) |
| 2123 | else if (multibyte) | 2123 | SET_LIST_BIT (c); |
| 2124 | SETUP_MULTIBYTE_RANGE (range_table_work, c, c1); | 2124 | } |
| 2125 | else | 2125 | else if (multibyte) |
| 2126 | SETUP_UNIBYTE_RANGE (range_table_work, c, c1); | 2126 | SETUP_MULTIBYTE_RANGE (range_table_work, c, c1); |
| 2127 | else | ||
| 2128 | SETUP_UNIBYTE_RANGE (range_table_work, c, c1); | ||
| 2129 | } | ||
| 2127 | } | 2130 | } |
| 2128 | } | 2131 | } |
| 2129 | 2132 | ||