Optimise Regexp::StarPlusOrQuest() very slightly. Change-Id: I1ead691eef95d9f6fdb50777c1cd57df5b698465 Reviewed-on: https://code-review.googlesource.com/11210 Reviewed-by: Paul Wankadia <junyer@google.com>
diff --git a/re2/regexp.cc b/re2/regexp.cc index 8c5fe59..712f92d 100644 --- a/re2/regexp.cc +++ b/re2/regexp.cc
@@ -196,12 +196,16 @@ return sub; // Squash *+, *?, +*, +?, ?* and ?+. They all squash to *, so because - // op is Star/Plus/Quest, we just have to check that sub->op() is too, - // then rewrite sub. + // op is Star/Plus/Quest, we just have to check that sub->op() is too. if ((sub->op() == kRegexpStar || sub->op() == kRegexpPlus || sub->op() == kRegexpQuest) && flags == sub->parse_flags()) { + // If sub is Star, no need to rewrite it. + if (sub->op() == kRegexpStar) + return sub; + + // Rewrite sub to Star. Regexp* re = new Regexp(kRegexpStar, flags); re->AllocSub(1); re->sub()[0] = sub->sub()[0]->Incref();