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