]> git.eshelyaron.com Git - emacs.git/commitdiff
Don't generate useless range table entries for ASCII chars
authorMattias Engdegård <mattiase@acm.org>
Tue, 17 Mar 2020 12:18:14 +0000 (13:18 +0100)
committerMattias Engdegård <mattiase@acm.org>
Tue, 17 Mar 2020 16:22:02 +0000 (17:22 +0100)
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.

src/regex-emacs.c

index 694431c95e244408277ecc524f5f673dfb963aba..0ae004e46364589cc59102bccae8105e1a4a9dd6 100644 (file)
@@ -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);
+                      }
                  }
              }