Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(105)

Unified Diff: xfa/fxfa/fm2js/xfa_fmparse.cpp

Issue 2528543003: More unique_ptrs in CXFA_FMParse::ParseForeachExpression and avoid leaks (Closed)
Patch Set: Comments Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « xfa/fxfa/fm2js/xfa_expression.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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();
}
« no previous file with comments | « xfa/fxfa/fm2js/xfa_expression.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698