aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--ChangeLog4
-rw-r--r--re.c9
2 files changed, 11 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 0e17cb80..ed4c2b9a 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2014-11-03 Norihiro Tanaka <noritnk@kcn.ne.jp>
+
+ * re.c (research): Use dfa superset to improve matching speed.
+
2014-11-02 Arnold D. Robbins <arnold@skeeve.com>
* profile.c (div_on_left_mul_on_right): New function.
diff --git a/re.c b/re.c
index 9118129e..12c212a6 100644
--- a/re.c
+++ b/re.c
@@ -284,13 +284,18 @@ research(Regexp *rp, char *str, int start,
if (rp->dfa && ! no_bol && ! need_start) {
char save;
size_t count = 0;
+ struct dfa *superset = dfasuperset(rp->dfareg);
/*
* dfa likes to stick a '\n' right after the matched
* text. So we just save and restore the character.
*/
save = str[start+len];
- ret = dfaexec(rp->dfareg, str+start, str+start+len, true,
- &count, &try_backref);
+ if (superset)
+ ret = dfaexec(superset, str+start, str+start+len,
+ true, NULL, NULL);
+ if (ret)
+ ret = dfaexec(rp->dfareg, str+start, str+start+len,
+ true, &count, &try_backref);
str[start+len] = save;
}