From c9936ef0d4d7a7f263831bead31c5ffcf8b0a8d3 Mon Sep 17 00:00:00 2001 From: "Arnold D. Robbins" Date: Mon, 3 Nov 2014 20:34:25 +0200 Subject: Use dfa superset to speed up matching. --- re.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 're.c') 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; } -- cgit v1.2.3