Commit 0e7eb640 authored by Michal Nazarewicz's avatar Michal Nazarewicz
Browse files

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.
parent c579b28f
......@@ -2888,13 +2888,10 @@ regex_compile (const_re_char *pattern, size_t size,
done until now. */
SETUP_BUFFER_SYNTAX_TABLE ();
for (ch = 0; ch < 256; ++ch)
for (c = 0; c < 0x80; ++c)
if (re_iswctype (c, cc))
{
c = RE_CHAR_TO_MULTIBYTE (ch);
if (! CHAR_BYTE8_P (c)
&& re_iswctype (c, cc))
{
SET_LIST_BIT (ch);
SET_LIST_BIT (c);
c1 = TRANSLATE (c);
if (c1 == c)
continue;
......@@ -2903,7 +2900,6 @@ regex_compile (const_re_char *pattern, size_t size,
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 */
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment