re2: import various changes from Google's copy

Change-Id: I63bd284d742da393713dfdd0164d2ff38fd44920
Reviewed-on: https://code-review.googlesource.com/1592
Reviewed-by: Russ Cox <[email protected]>
diff --git a/re2/regexp.cc b/re2/regexp.cc
index c67c3b0..3667fda 100644
--- a/re2/regexp.cc
+++ b/re2/regexp.cc
@@ -43,7 +43,8 @@
       delete[] runes_;
       break;
     case kRegexpCharClass:
-      cc_->Delete();
+      if (cc_)
+        cc_->Delete();
       delete ccb_;
       break;
   }
@@ -211,6 +212,13 @@
   if (nsub == 1)
     return sub[0];
 
+  if (nsub == 0) {
+    if (op == kRegexpAlternate)
+      return new Regexp(kRegexpNoMatch, flags);
+    else
+      return new Regexp(kRegexpEmptyMatch, flags);
+  }
+
   Regexp** subcopy = NULL;
   if (op == kRegexpAlternate && can_factor) {
     // Going to edit sub; make a copy so we don't step on caller.
@@ -916,7 +924,7 @@
 
 CharClass* CharClassBuilder::GetCharClass() {
   CharClass* cc = CharClass::New(ranges_.size());
-  int n = 0;
+  size_t n = 0;
   for (iterator it = begin(); it != end(); ++it)
     cc->ranges_[n++] = *it;
   cc->nranges_ = n;