Use PODArray<> for OnePass nodes.
Change-Id: I62f4a93b8404cf6b4bf4cba99dd21ceef78a2edb
Reviewed-on: https://code-review.googlesource.com/c/38490
Reviewed-by: Paul Wankadia <junyer@google.com>
diff --git a/re2/onepass.cc b/re2/onepass.cc
index 7d39290..881bee4 100644
--- a/re2/onepass.cc
+++ b/re2/onepass.cc
@@ -244,7 +244,7 @@
if (anchor_end())
kind = kFullMatch;
- uint8_t* nodes = onepass_nodes_;
+ uint8_t* nodes = onepass_nodes_.data();
int statesize = sizeof(OneState) + bytemap_range()*sizeof(uint32_t);
// start() is always mapped to the zeroth OneState.
OneState* state = IndexToNode(nodes, statesize, 0);
@@ -383,7 +383,7 @@
// Constructs and saves corresponding one-pass NFA on success.
bool Prog::IsOnePass() {
if (did_onepass_)
- return onepass_nodes_ != NULL;
+ return onepass_nodes_.size() > 0;
did_onepass_ = true;
if (start() == 0) // no match
@@ -612,8 +612,8 @@
}
dfa_mem_ -= nalloc*statesize;
- onepass_nodes_ = new uint8_t[nalloc*statesize];
- memmove(onepass_nodes_, nodes.data(), nalloc*statesize);
+ onepass_nodes_ = PODArray<uint8_t>(nalloc*statesize);
+ memmove(onepass_nodes_.data(), nodes.data(), nalloc*statesize);
return true;
fail:
diff --git a/re2/prog.cc b/re2/prog.cc
index fa03af9..9729aa4 100644
--- a/re2/prog.cc
+++ b/re2/prog.cc
@@ -112,7 +112,6 @@
first_byte_(-1),
flags_(0),
list_count_(0),
- onepass_nodes_(NULL),
dfa_mem_(0),
dfa_first_(NULL),
dfa_longest_(NULL) {
@@ -121,7 +120,6 @@
Prog::~Prog() {
DeleteDFA(dfa_longest_);
DeleteDFA(dfa_first_);
- delete[] onepass_nodes_;
}
typedef SparseSet Workq;
diff --git a/re2/prog.h b/re2/prog.h
index 268ab9d..edac935 100644
--- a/re2/prog.h
+++ b/re2/prog.h
@@ -397,7 +397,7 @@
int inst_count_[kNumInst]; // count of instructions by opcode
PODArray<Inst> inst_; // pointer to instruction array
- uint8_t* onepass_nodes_; // data for OnePass nodes
+ PODArray<uint8_t> onepass_nodes_; // data for OnePass nodes
int64_t dfa_mem_; // Maximum memory for DFAs.
DFA* dfa_first_; // DFA cached for kFirstMatch/kManyMatch