factor common prefixes from alternations
Juggle code so that RE2::Set can benefit too.
R=rsc
CC=re2-dev
http://codereview.appspot.com/1740045
diff --git a/re2/tostring.cc b/re2/tostring.cc
index a4aabbe..555524f 100644
--- a/re2/tostring.cc
+++ b/re2/tostring.cc
@@ -75,6 +75,7 @@
case kRegexpWordBoundary:
case kRegexpNoWordBoundary:
case kRegexpCharClass:
+ case kRegexpHaveMatch:
nprec = PrecAtom;
break;
@@ -237,7 +238,10 @@
break;
case kRegexpEndText:
- t_->append("(?-m:$)");
+ if (re->parse_flags() & Regexp::WasDollar)
+ t_->append("(?-m:$)");
+ else
+ t_->append("\\z");
break;
case kRegexpWordBoundary:
@@ -272,6 +276,13 @@
case kRegexpCapture:
t_->append(")");
break;
+
+ case kRegexpHaveMatch:
+ // There's no syntax accepted by the parser to generate
+ // this node (it is generated by RE2::Set) so make something
+ // up that is readable but won't compile.
+ t_->append("(?HaveMatch:%d)", re->match_id());
+ break;
}
// If the parent is an alternation, append the | for it.