Use PODArray<> for temporary Regexp* arrays.

Change-Id: I82303a90ff357943d70ba6e0b48b46256485071f
Reviewed-on: https://code-review.googlesource.com/c/36850
Reviewed-by: Paul Wankadia <junyer@google.com>
diff --git a/re2/compile.cc b/re2/compile.cc
index b8ce491..3f8e0cc 100644
--- a/re2/compile.cc
+++ b/re2/compile.cc
@@ -1018,12 +1018,11 @@
       if (re->nsub() > 0) {
         sub = re->sub()[0]->Incref();
         if (IsAnchorStart(&sub, depth+1)) {
-          Regexp** subcopy = new Regexp*[re->nsub()];
+          PODArray<Regexp*> subcopy(re->nsub());
           subcopy[0] = sub;  // already have reference
           for (int i = 1; i < re->nsub(); i++)
             subcopy[i] = re->sub()[i]->Incref();
-          *pre = Regexp::Concat(subcopy, re->nsub(), re->parse_flags());
-          delete[] subcopy;
+          *pre = Regexp::Concat(subcopy.data(), re->nsub(), re->parse_flags());
           re->Decref();
           return true;
         }
@@ -1066,12 +1065,11 @@
       if (re->nsub() > 0) {
         sub = re->sub()[re->nsub() - 1]->Incref();
         if (IsAnchorEnd(&sub, depth+1)) {
-          Regexp** subcopy = new Regexp*[re->nsub()];
+          PODArray<Regexp*> subcopy(re->nsub());
           subcopy[re->nsub() - 1] = sub;  // already have reference
           for (int i = 0; i < re->nsub() - 1; i++)
             subcopy[i] = re->sub()[i]->Incref();
-          *pre = Regexp::Concat(subcopy, re->nsub(), re->parse_flags());
-          delete[] subcopy;
+          *pre = Regexp::Concat(subcopy.data(), re->nsub(), re->parse_flags());
           re->Decref();
           return true;
         }
diff --git a/re2/parse.cc b/re2/parse.cc
index 56b4244..354eafe 100644
--- a/re2/parse.cc
+++ b/re2/parse.cc
@@ -27,6 +27,7 @@
 
 #include "util/util.h"
 #include "util/logging.h"
+#include "util/pod_array.h"
 #include "util/strutil.h"
 #include "util/utf.h"
 #include "re2/regexp.h"
@@ -1217,7 +1218,7 @@
     return;
 
   // Construct op (alternation or concatenation), flattening op of op.
-  Regexp** subs = new Regexp*[n];
+  PODArray<Regexp*> subs(n);
   next = NULL;
   int i = n;
   for (sub = stacktop_; sub != NULL && !IsMarker(sub->op()); sub = next) {
@@ -1232,8 +1233,7 @@
     }
   }
 
-  Regexp* re = ConcatOrAlternate(op, subs, n, flags_, true);
-  delete[] subs;
+  Regexp* re = ConcatOrAlternate(op, subs.data(), n, flags_, true);
   re->simple_ = re->ComputeSimple();
   re->down_ = next;
   stacktop_ = re;
diff --git a/re2/set.cc b/re2/set.cc
index 9890de9..2572d50 100644
--- a/re2/set.cc
+++ b/re2/set.cc
@@ -10,6 +10,7 @@
 
 #include "util/util.h"
 #include "util/logging.h"
+#include "util/pod_array.h"
 #include "re2/stringpiece.h"
 #include "re2/prog.h"
 #include "re2/re2.h"
@@ -55,13 +56,12 @@
   re2::Regexp* m = re2::Regexp::HaveMatch(n, pf);
   if (re->op() == kRegexpConcat) {
     int nsub = re->nsub();
-    re2::Regexp** sub = new re2::Regexp*[nsub + 1];
+    PODArray<re2::Regexp*> sub(nsub + 1);
     for (int i = 0; i < nsub; i++)
       sub[i] = re->sub()[i]->Incref();
     sub[nsub] = m;
     re->Decref();
-    re = re2::Regexp::Concat(sub, nsub + 1, pf);
-    delete[] sub;
+    re = re2::Regexp::Concat(sub.data(), nsub + 1, pf);
   } else {
     re2::Regexp* sub[2];
     sub[0] = re;
@@ -87,16 +87,15 @@
               return a.first < b.first;
             });
 
-  re2::Regexp** sub = new re2::Regexp*[size_];
-  for (size_t i = 0; i < elem_.size(); i++)
+  PODArray<re2::Regexp*> sub(size_);
+  for (int i = 0; i < size_; i++)
     sub[i] = elem_[i].second;
   elem_.clear();
   elem_.shrink_to_fit();
 
   Regexp::ParseFlags pf = static_cast<Regexp::ParseFlags>(
     options_.ParseFlags());
-  re2::Regexp* re = re2::Regexp::Alternate(sub, size_, pf);
-  delete[] sub;
+  re2::Regexp* re = re2::Regexp::Alternate(sub.data(), size_, pf);
 
   prog_ = Prog::CompileSet(re, anchor_, options_.max_mem());
   re->Decref();
diff --git a/re2/simplify.cc b/re2/simplify.cc
index 910ebcc..7cc0419 100644
--- a/re2/simplify.cc
+++ b/re2/simplify.cc
@@ -10,6 +10,7 @@
 
 #include "util/util.h"
 #include "util/logging.h"
+#include "util/pod_array.h"
 #include "util/utf.h"
 #include "re2/regexp.h"
 #include "re2/walker-inl.h"
@@ -589,13 +590,11 @@
       return Regexp::Plus(re->Incref(), f);
 
     // General case: x{4,} is xxxx+
-    Regexp** nre_subs = new Regexp*[min];
+    PODArray<Regexp*> nre_subs(min);
     for (int i = 0; i < min-1; i++)
       nre_subs[i] = re->Incref();
     nre_subs[min-1] = Regexp::Plus(re->Incref(), f);
-    Regexp* nre = Regexp::Concat(nre_subs, min, f);
-    delete[] nre_subs;
-    return nre;
+    return Regexp::Concat(nre_subs.data(), min, f);
   }
 
   // Special case: (x){0} matches only empty string.
@@ -613,11 +612,10 @@
   // Build leading prefix: xx.  Capturing only on the last one.
   Regexp* nre = NULL;
   if (min > 0) {
-    Regexp** nre_subs = new Regexp*[min];
+    PODArray<Regexp*> nre_subs(min);
     for (int i = 0; i < min; i++)
       nre_subs[i] = re->Incref();
-    nre = Regexp::Concat(nre_subs, min, f);
-    delete[] nre_subs;
+    nre = Regexp::Concat(nre_subs.data(), min, f);
   }
 
   // Build and attach suffix: (x(x(x)?)?)?