Index: xfa/fxfa/fm2js/xfa_fmparse.cpp |
diff --git a/xfa/fxfa/fm2js/xfa_fmparse.cpp b/xfa/fxfa/fm2js/xfa_fmparse.cpp |
index a383b2e04a831c851936e38113f555e03f4b09d8..36663fce2dbabe595a50cf8adcfe7b250e5904f7 100644 |
--- a/xfa/fxfa/fm2js/xfa_fmparse.cpp |
+++ b/xfa/fxfa/fm2js/xfa_fmparse.cpp |
@@ -8,6 +8,9 @@ |
#include <memory> |
#include <utility> |
+#include <vector> |
+ |
+#include "third_party/base/ptr_util.h" |
CXFA_FMParse::CXFA_FMParse() : m_pToken(nullptr), m_pErrorInfo(0) {} |
@@ -989,7 +992,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseForExpression() { |
CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
std::unique_ptr<CXFA_FMExpression> e; |
CFX_WideStringC wsIdentifier; |
- std::unique_ptr<CFX_ArrayTemplate<CXFA_FMSimpleExpression*>> pAccessors; |
+ std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> pAccessors; |
std::unique_ptr<CXFA_FMExpression> pList; |
uint32_t line = m_pToken->m_uLinenum; |
NextToken(); |
@@ -1008,17 +1011,13 @@ CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
ws_TempString.c_str()); |
NextToken(); |
} else { |
- pAccessors.reset(new CFX_ArrayTemplate<CXFA_FMSimpleExpression*>()); |
while (m_pToken->m_type != TOKrparen) { |
CXFA_FMSimpleExpression* s = ParseSimpleExpression(); |
- if (s) { |
- pAccessors->Add(s); |
- } |
- if (m_pToken->m_type == TOKcomma) { |
- NextToken(); |
- } else { |
+ if (s) |
+ pAccessors.push_back(pdfium::WrapUnique<CXFA_FMSimpleExpression>(s)); |
+ if (m_pToken->m_type != TOKcomma) |
break; |
- } |
+ NextToken(); |
} |
Check(TOKrparen); |
} |
@@ -1026,13 +1025,8 @@ CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
pList.reset(ParseBlockExpression()); |
Check(TOKendfor); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMForeachExpression( |
- line, wsIdentifier, pAccessors.release(), pList.release())); |
- } else { |
- if (pAccessors) { |
- for (int i = 0; i < pAccessors->GetSize(); ++i) |
- delete static_cast<CXFA_FMSimpleExpression*>(pAccessors->GetAt(i)); |
- } |
+ e = pdfium::MakeUnique<CXFA_FMForeachExpression>( |
+ line, wsIdentifier, std::move(pAccessors), pList.release()); |
} |
return e.release(); |
} |