factor common prefix strings out of alternation
R=rsc
CC=re2-dev
http://codereview.appspot.com/1665049
diff --git a/re2/regexp.cc b/re2/regexp.cc
index 7b21fbe..e988f8a 100644
--- a/re2/regexp.cc
+++ b/re2/regexp.cc
@@ -65,7 +65,7 @@
int Regexp::Ref() {
if (ref_ < kMaxRef)
return ref_;
-
+
MutexLock l(&ref_mutex);
return ref_map[this];
}
@@ -189,6 +189,9 @@
}
Regexp* Regexp::ConcatOrAlternate(RegexpOp op, Regexp** sub, int nsub, ParseFlags flags) {
+ if (nsub == 1)
+ return sub[0];
+
if (nsub > kMaxNsub) {
// Too many subexpressions to fit in a single Regexp.
// Make a two-level tree. Two levels gets us to 65535^2.
@@ -574,7 +577,7 @@
}
for (;;) {
-
+
iterator it = ranges_.find(RuneRange(r + 1, Runemax));
if (it == end())
break;