[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Emacs-diffs] master 0e7eb64 4/6: Remove dead loop iterations in regex.c
From: |
Michal Nazarewicz |
Subject: |
[Emacs-diffs] master 0e7eb64 4/6: Remove dead loop iterations in regex.c |
Date: |
Fri, 9 Sep 2016 16:32:58 +0000 (UTC) |
branch: master
commit 0e7eb64076c17b3252249aa2a3ef340ce9f395bb
Author: Michal Nazarewicz <address@hidden>
Commit: Michal Nazarewicz <address@hidden>
Remove dead loop iterations in regex.c
RE_CHAR_TO_MULTIBYTE(c) yields c for ASCII characters and a byte8
character for c ≥ 0x80. Furthermore, CHAR_BYTE8_P(c) is true only
for byte8 characters. This means that
c = RE_CHAR_TO_MULTIBYTE (ch);
if (! CHAR_BYTE8_P (c) && re_iswctype (c, cc))
is equivalent to:
c = c;
if (! false && re_iswctype (c, cc))
for 0 ⪬ c < 0x80, and
c = BYTE8_TO_CHAR (c);
if (! true && re_iswctype (c, cc))
for 0x80 ⪬ c < 0x100. In other words, the loop never executes for
c ≥ 0x80 and RE_CHAR_TO_MULTIBYTE call is unnecessary for c < 0x80.
* src/regex.c (regex_compile): Simplyfy a for loop by eliminating
dead iterations and unnecessary macro calls.
---
src/regex.c | 28 ++++++++++++----------------
1 file changed, 12 insertions(+), 16 deletions(-)
diff --git a/src/regex.c b/src/regex.c
index 5f51b43..41c1d3f 100644
--- a/src/regex.c
+++ b/src/regex.c
@@ -2888,22 +2888,18 @@ regex_compile (const_re_char *pattern, size_t size,
done until now. */
SETUP_BUFFER_SYNTAX_TABLE ();
- for (ch = 0; ch < 256; ++ch)
- {
- c = RE_CHAR_TO_MULTIBYTE (ch);
- if (! CHAR_BYTE8_P (c)
- && re_iswctype (c, cc))
- {
- SET_LIST_BIT (ch);
- c1 = TRANSLATE (c);
- if (c1 == c)
- continue;
- if (ASCII_CHAR_P (c1))
- SET_LIST_BIT (c1);
- else if ((c1 = RE_CHAR_TO_UNIBYTE (c1)) >= 0)
- SET_LIST_BIT (c1);
- }
- }
+ for (c = 0; c < 0x80; ++c)
+ if (re_iswctype (c, cc))
+ {
+ SET_LIST_BIT (c);
+ c1 = TRANSLATE (c);
+ if (c1 == c)
+ continue;
+ if (ASCII_CHAR_P (c1))
+ SET_LIST_BIT (c1);
+ else if ((c1 = RE_CHAR_TO_UNIBYTE (c1)) >= 0)
+ SET_LIST_BIT (c1);
+ }
SET_RANGE_TABLE_WORK_AREA_BIT
(range_table_work, re_wctype_to_bit (cc));
#endif /* emacs */
- [Emacs-diffs] master updated (e951aa1 -> 8634efa), Michal Nazarewicz, 2016/09/09
- [Emacs-diffs] master 4516130 5/6: Don’t allocate char-table’s extra slots in regexp-out-charset, Michal Nazarewicz, 2016/09/09
- [Emacs-diffs] master 3ffc5f4 1/6: STRING_CHAR does not unify characters; update documentation, Michal Nazarewicz, 2016/09/09
- [Emacs-diffs] master 8634efa 6/6: Split regex character class test into smaller chunks, Michal Nazarewicz, 2016/09/09
- [Emacs-diffs] master 0e7eb64 4/6: Remove dead loop iterations in regex.c,
Michal Nazarewicz <=
- [Emacs-diffs] master c579b28 3/6: Replace decimalnump with alphanumericp, Michal Nazarewicz, 2016/09/09
- [Emacs-diffs] master b1c4c00 2/6: Remove inaccurate comment in regex.c, Michal Nazarewicz, 2016/09/09