]> granicus.if.org Git - flex/commitdiff
filter: faster is_blank_line implementation
authorExplorer09 <explorer09@gmail.com>
Sat, 8 Jul 2017 12:21:37 +0000 (20:21 +0800)
committerWill Estes <westes575@gmail.com>
Sat, 15 Jul 2017 22:31:41 +0000 (18:31 -0400)
Using regex_t regex_blank_line is *slow*.

src/filter.c
src/flexdef.h
src/regex.c

index fd1bb40ab5dcfbba3dafcabcd578688358216af2..ccdcdd631c99867e7a4366316af5f598570c06ed 100644 (file)
@@ -326,7 +326,9 @@ int filter_tee_header (struct filter *chain)
 
 static bool is_blank_line (const char *str)
 {
-       return (regexec (&regex_blank_line, str, 0, NULL, 0) == 0);
+       while (isspace(*str))
+               str++;
+       return (*str == '\0');
 }
 
 /** Adjust the line numbers in the #line directives of the generated scanner.
index 9dac6542863f659a524a09ffda2e438c4e85dcd1..3bbaea1b04aa3c1f5e3e40903c364aabca9efeb3 100644 (file)
@@ -1131,7 +1131,7 @@ extern int filter_fix_linedirs(struct filter *chain);
  * From "regex.c"
  */
 
-extern regex_t regex_linedir, regex_blank_line;
+extern regex_t regex_linedir;
 bool flex_init_regex(void);
 void flex_regcomp(regex_t *preg, const char *regex, int cflags);
 char   *regmatch_dup (regmatch_t * m, const char *src);
index 38e658bdf2318996e3623c07f73df27ced58976c..f4c4163a9797019398fe04eb9d036172465ac925 100644 (file)
 
 
 static const char* REGEXP_LINEDIR = "^#line ([[:digit:]]+) \"(.*)\"";
-static const char* REGEXP_BLANK_LINE = "^[[:space:]]*$";
 
 regex_t regex_linedir; /**< matches line directives */
-regex_t regex_blank_line; /**< matches blank lines */
 
 
 /** Initialize the regular expressions.
@@ -37,8 +35,6 @@ regex_t regex_blank_line; /**< matches blank lines */
 bool flex_init_regex(void)
 {
     flex_regcomp(&regex_linedir, REGEXP_LINEDIR, REG_EXTENDED);
-    flex_regcomp(&regex_blank_line, REGEXP_BLANK_LINE, REG_EXTENDED);
-
     return true;
 }