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)?)?)?