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();