summaryrefslogtreecommitdiff
path: root/src/regex-emacs.c
diff options
context:
space:
mode:
authorMattias EngdegÄrd <mattiase@acm.org>2020-03-17 13:18:14 +0100
committerMattias EngdegÄrd <mattiase@acm.org>2020-03-17 17:22:02 +0100
commitf189e5dc1020db9b41e77488d6290d6e7f032b13 (patch)
tree6717bb5b2b6eab5a2dae5f77d2837c988f4bd661 /src/regex-emacs.c
parent9dccaf8a5cdb10dae597345ec3741475477a7d97 (diff)
downloademacs-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.c25
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);
+ }
}
}