Index: xfa/fxfa/fm2js/xfa_fmparse.cpp |
diff --git a/xfa/fxfa/fm2js/xfa_fmparse.cpp b/xfa/fxfa/fm2js/xfa_fmparse.cpp |
index 36663fce2dbabe595a50cf8adcfe7b250e5904f7..07edc32c3dbda3f54a41f861ee2dbdc578bdf102 100644 |
--- a/xfa/fxfa/fm2js/xfa_fmparse.cpp |
+++ b/xfa/fxfa/fm2js/xfa_fmparse.cpp |
@@ -19,7 +19,7 @@ CXFA_FMParse::~CXFA_FMParse() {} |
int32_t CXFA_FMParse::Init(const CFX_WideStringC& wsFormcalc, |
CXFA_FMErrorInfo* pErrorInfo) { |
m_pErrorInfo = pErrorInfo; |
- m_lexer.reset(new CXFA_FMLexer(wsFormcalc, m_pErrorInfo)); |
+ m_lexer = pdfium::MakeUnique<CXFA_FMLexer>(wsFormcalc, m_pErrorInfo); |
return 0; |
} |
@@ -50,41 +50,41 @@ void CXFA_FMParse::Error(uint32_t lineNum, const FX_WCHAR* msg, ...) { |
va_end(ap); |
} |
-CFX_ArrayTemplate<CXFA_FMExpression*>* CXFA_FMParse::ParseTopExpression() { |
- std::unique_ptr<CXFA_FMExpression> e; |
- CFX_ArrayTemplate<CXFA_FMExpression*>* expression = |
- new CFX_ArrayTemplate<CXFA_FMExpression*>(); |
+std::vector<std::unique_ptr<CXFA_FMExpression>> |
+CXFA_FMParse::ParseTopExpression() { |
+ std::unique_ptr<CXFA_FMExpression> expr; |
+ std::vector<std::unique_ptr<CXFA_FMExpression>> expressions; |
while (1) { |
if (m_pToken->m_type == TOKeof || m_pToken->m_type == TOKendfunc || |
m_pToken->m_type == TOKendif || m_pToken->m_type == TOKelseif || |
m_pToken->m_type == TOKelse || m_pToken->m_type == TOKreserver) { |
- return expression; |
+ return expressions; |
} |
if (m_pToken->m_type == TOKfunc) { |
- e.reset(ParseFunction()); |
- if (e) { |
- expression->Add(e.release()); |
+ expr = ParseFunction(); |
+ if (expr) { |
+ expressions.push_back(std::move(expr)); |
} else { |
break; |
} |
} else { |
- e.reset(ParseExpression()); |
- if (e) { |
- expression->Add(e.release()); |
+ expr = ParseExpression(); |
+ if (expr) { |
+ expressions.push_back(std::move(expr)); |
} else { |
break; |
} |
} |
} |
- return expression; |
+ return expressions; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseFunction() { |
- std::unique_ptr<CXFA_FMExpression> e; |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseFunction() { |
+ std::unique_ptr<CXFA_FMExpression> expr; |
CFX_WideStringC ident; |
std::unique_ptr<CFX_WideStringCArray> pArguments; |
- std::unique_ptr<CFX_ArrayTemplate<CXFA_FMExpression*>> pExpressions; |
+ std::vector<std::unique_ptr<CXFA_FMExpression>> expressions; |
uint32_t line = m_pToken->m_uLinenum; |
NextToken(); |
if (m_pToken->m_type != TOKidentifier) { |
@@ -99,7 +99,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseFunction() { |
if (m_pToken->m_type == TOKrparen) { |
NextToken(); |
} else { |
- pArguments.reset(new CFX_WideStringCArray()); |
+ pArguments = pdfium::MakeUnique<CFX_WideStringCArray>(); |
CFX_WideStringC p; |
while (1) { |
if (m_pToken->m_type == TOKidentifier) { |
@@ -129,29 +129,24 @@ CXFA_FMExpression* CXFA_FMParse::ParseFunction() { |
if (m_pToken->m_type == TOKendfunc) { |
NextToken(); |
} else { |
- pExpressions.reset(ParseTopExpression()); |
+ expressions = ParseTopExpression(); |
Check(TOKendfunc); |
} |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMFunctionDefinition(line, 0, ident, std::move(pArguments), |
- pExpressions.release())); |
- } else { |
- if (pArguments) |
- pArguments->RemoveAll(); |
- if (pExpressions) { |
- for (int i = 0; i < pExpressions->GetSize(); ++i) |
- delete pExpressions->GetAt(i); |
- } |
+ expr = pdfium::MakeUnique<CXFA_FMFunctionDefinition>( |
+ line, false, ident, std::move(pArguments), std::move(expressions)); |
+ } else if (pArguments) { |
+ pArguments->RemoveAll(); |
} |
- return e.release(); |
+ return expr; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseExpression() { |
- std::unique_ptr<CXFA_FMExpression> e; |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseExpression() { |
+ std::unique_ptr<CXFA_FMExpression> expr; |
uint32_t line = m_pToken->m_uLinenum; |
switch (m_pToken->m_type) { |
case TOKvar: |
- e.reset(ParseVarExpression()); |
+ expr = ParseVarExpression(); |
break; |
case TOKnull: |
case TOKnumber: |
@@ -161,29 +156,29 @@ CXFA_FMExpression* CXFA_FMParse::ParseExpression() { |
case TOKksnot: |
case TOKidentifier: |
case TOKlparen: |
- e.reset(ParseExpExpression()); |
+ expr = ParseExpExpression(); |
break; |
case TOKif: |
- e.reset(ParseIfExpression()); |
+ expr = ParseIfExpression(); |
break; |
case TOKwhile: |
- e.reset(ParseWhileExpression()); |
+ expr = ParseWhileExpression(); |
break; |
case TOKfor: |
- e.reset(ParseForExpression()); |
+ expr = ParseForExpression(); |
break; |
case TOKforeach: |
- e.reset(ParseForeachExpression()); |
+ expr = ParseForeachExpression(); |
break; |
case TOKdo: |
- e.reset(ParseDoExpression()); |
+ expr = ParseDoExpression(); |
break; |
case TOKbreak: |
- e.reset(new CXFA_FMBreakExpression(line)); |
+ expr = pdfium::MakeUnique<CXFA_FMBreakExpression>(line); |
NextToken(); |
break; |
case TOKcontinue: |
- e.reset(new CXFA_FMContinueExpression(line)); |
+ expr = pdfium::MakeUnique<CXFA_FMContinueExpression>(line); |
NextToken(); |
break; |
default: |
@@ -193,11 +188,11 @@ CXFA_FMExpression* CXFA_FMParse::ParseExpression() { |
NextToken(); |
break; |
} |
- return e.release(); |
+ return expr; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseVarExpression() { |
- std::unique_ptr<CXFA_FMExpression> e; |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseVarExpression() { |
+ std::unique_ptr<CXFA_FMExpression> expr; |
CFX_WideStringC ident; |
uint32_t line = m_pToken->m_uLinenum; |
NextToken(); |
@@ -211,47 +206,49 @@ CXFA_FMExpression* CXFA_FMParse::ParseVarExpression() { |
} |
if (m_pToken->m_type == TOKassign) { |
NextToken(); |
- e.reset(ParseExpExpression()); |
+ expr = ParseExpExpression(); |
} |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMVarExpression(line, ident, e.release())); |
+ expr = |
+ pdfium::MakeUnique<CXFA_FMVarExpression>(line, ident, expr.release()); |
} else { |
- e.reset(); |
+ expr.reset(); |
} |
- return e.release(); |
+ return expr; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseSimpleExpression() { |
+std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseSimpleExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
- std::unique_ptr<CXFA_FMSimpleExpression> pExp1(ParseLogicalOrExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp1 = ParseLogicalOrExpression(); |
while (m_pToken->m_type == TOKassign) { |
NextToken(); |
- std::unique_ptr<CXFA_FMSimpleExpression> pExp2(ParseLogicalOrExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp2 = ParseLogicalOrExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- pExp1.reset(new CXFA_FMAssignExpression(line, TOKassign, pExp1.release(), |
- pExp2.release())); |
+ pExp1 = pdfium::MakeUnique<CXFA_FMAssignExpression>( |
+ line, TOKassign, pExp1.release(), pExp2.release()); |
} else { |
pExp1.reset(); |
} |
} |
- return pExp1.release(); |
+ return pExp1; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseExpExpression() { |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseExpExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
- std::unique_ptr<CXFA_FMSimpleExpression> pExp1(ParseSimpleExpression()); |
- std::unique_ptr<CXFA_FMExpression> e; |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp1 = ParseSimpleExpression(); |
+ std::unique_ptr<CXFA_FMExpression> expr; |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMExpExpression(line, pExp1.release())); |
+ expr = pdfium::MakeUnique<CXFA_FMExpExpression>(line, pExp1.release()); |
} else { |
- e.reset(); |
+ expr.reset(); |
} |
- return e.release(); |
+ return expr; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalOrExpression() { |
+std::unique_ptr<CXFA_FMSimpleExpression> |
+CXFA_FMParse::ParseLogicalOrExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
- std::unique_ptr<CXFA_FMSimpleExpression> e1(ParseLogicalAndExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseLogicalAndExpression(); |
for (;;) { |
switch (m_pToken->m_type) { |
case TOKor: |
@@ -260,8 +257,8 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalOrExpression() { |
std::unique_ptr<CXFA_FMSimpleExpression> e2( |
ParseLogicalAndExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMLogicalOrExpression(line, TOKor, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMLogicalOrExpression>( |
+ line, TOKor, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -272,21 +269,22 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalOrExpression() { |
} |
break; |
} |
- return e1.release(); |
+ return e1; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalAndExpression() { |
+std::unique_ptr<CXFA_FMSimpleExpression> |
+CXFA_FMParse::ParseLogicalAndExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
- std::unique_ptr<CXFA_FMSimpleExpression> e1(ParseEqualityExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseEqualityExpression(); |
for (;;) { |
switch (m_pToken->m_type) { |
case TOKand: |
case TOKksand: { |
NextToken(); |
- std::unique_ptr<CXFA_FMSimpleExpression> e2(ParseEqualityExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e2 = ParseEqualityExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMLogicalAndExpression(line, TOKand, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMLogicalAndExpression>( |
+ line, TOKand, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -297,22 +295,23 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalAndExpression() { |
} |
break; |
} |
- return e1.release(); |
+ return e1; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseEqualityExpression() { |
+std::unique_ptr<CXFA_FMSimpleExpression> |
+CXFA_FMParse::ParseEqualityExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
- std::unique_ptr<CXFA_FMSimpleExpression> e1(ParseRelationalExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseRelationalExpression(); |
for (;;) { |
std::unique_ptr<CXFA_FMSimpleExpression> e2; |
switch (m_pToken->m_type) { |
case TOKeq: |
case TOKkseq: |
NextToken(); |
- e2.reset(ParseRelationalExpression()); |
+ e2 = ParseRelationalExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMEqualityExpression(line, TOKeq, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMEqualityExpression>( |
+ line, TOKeq, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -320,10 +319,10 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseEqualityExpression() { |
case TOKne: |
case TOKksne: |
NextToken(); |
- e2.reset(ParseRelationalExpression()); |
+ e2 = ParseRelationalExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMEqualityExpression(line, TOKne, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMEqualityExpression>( |
+ line, TOKne, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -333,22 +332,23 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseEqualityExpression() { |
} |
break; |
} |
- return e1.release(); |
+ return e1; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() { |
+std::unique_ptr<CXFA_FMSimpleExpression> |
+CXFA_FMParse::ParseRelationalExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
- std::unique_ptr<CXFA_FMSimpleExpression> e1(ParseAddtiveExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseAddtiveExpression(); |
for (;;) { |
std::unique_ptr<CXFA_FMSimpleExpression> e2; |
switch (m_pToken->m_type) { |
case TOKlt: |
case TOKkslt: |
NextToken(); |
- e2.reset(ParseAddtiveExpression()); |
+ e2 = ParseAddtiveExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMRelationalExpression(line, TOKlt, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>( |
+ line, TOKlt, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -356,10 +356,10 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() { |
case TOKgt: |
case TOKksgt: |
NextToken(); |
- e2.reset(ParseAddtiveExpression()); |
+ e2 = ParseAddtiveExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMRelationalExpression(line, TOKgt, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>( |
+ line, TOKgt, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -367,10 +367,10 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() { |
case TOKle: |
case TOKksle: |
NextToken(); |
- e2.reset(ParseAddtiveExpression()); |
+ e2 = ParseAddtiveExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMRelationalExpression(line, TOKle, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>( |
+ line, TOKle, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -378,10 +378,10 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() { |
case TOKge: |
case TOKksge: |
NextToken(); |
- e2.reset(ParseAddtiveExpression()); |
+ e2 = ParseAddtiveExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMRelationalExpression(line, TOKge, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMRelationalExpression>( |
+ line, TOKge, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -391,31 +391,32 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() { |
} |
break; |
} |
- return e1.release(); |
+ return e1; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseAddtiveExpression() { |
+std::unique_ptr<CXFA_FMSimpleExpression> |
+CXFA_FMParse::ParseAddtiveExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
- std::unique_ptr<CXFA_FMSimpleExpression> e1(ParseMultiplicativeExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseMultiplicativeExpression(); |
for (;;) { |
std::unique_ptr<CXFA_FMSimpleExpression> e2; |
switch (m_pToken->m_type) { |
case TOKplus: |
NextToken(); |
- e2.reset(ParseMultiplicativeExpression()); |
+ e2 = ParseMultiplicativeExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMAdditiveExpression(line, TOKplus, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMAdditiveExpression>( |
+ line, TOKplus, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
continue; |
case TOKminus: |
NextToken(); |
- e2.reset(ParseMultiplicativeExpression()); |
+ e2 = ParseMultiplicativeExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMAdditiveExpression(line, TOKminus, e1.release(), |
- e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMAdditiveExpression>( |
+ line, TOKminus, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -425,31 +426,32 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseAddtiveExpression() { |
} |
break; |
} |
- return e1.release(); |
+ return e1; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseMultiplicativeExpression() { |
+std::unique_ptr<CXFA_FMSimpleExpression> |
+CXFA_FMParse::ParseMultiplicativeExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
- std::unique_ptr<CXFA_FMSimpleExpression> e1(ParseUnaryExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e1 = ParseUnaryExpression(); |
for (;;) { |
std::unique_ptr<CXFA_FMSimpleExpression> e2; |
switch (m_pToken->m_type) { |
case TOKmul: |
NextToken(); |
- e2.reset(ParseUnaryExpression()); |
+ e2 = ParseUnaryExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMMultiplicativeExpression( |
- line, TOKmul, e1.release(), e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMMultiplicativeExpression>( |
+ line, TOKmul, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
continue; |
case TOKdiv: |
NextToken(); |
- e2.reset(ParseUnaryExpression()); |
+ e2 = ParseUnaryExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1.reset(new CXFA_FMMultiplicativeExpression( |
- line, TOKdiv, e1.release(), e2.release())); |
+ e1 = pdfium::MakeUnique<CXFA_FMMultiplicativeExpression>( |
+ line, TOKdiv, e1.release(), e2.release()); |
} else { |
e1.reset(); |
} |
@@ -459,83 +461,88 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseMultiplicativeExpression() { |
} |
break; |
} |
- return e1.release(); |
+ return e1; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseUnaryExpression() { |
- std::unique_ptr<CXFA_FMSimpleExpression> e; |
+std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseUnaryExpression() { |
+ std::unique_ptr<CXFA_FMSimpleExpression> expr; |
uint32_t line = m_pToken->m_uLinenum; |
switch (m_pToken->m_type) { |
case TOKplus: |
NextToken(); |
- e.reset(ParseUnaryExpression()); |
+ expr = ParseUnaryExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMPosExpression(line, e.release())); |
+ expr = pdfium::MakeUnique<CXFA_FMPosExpression>(line, expr.release()); |
} else { |
- e.reset(); |
+ expr.reset(); |
} |
break; |
case TOKminus: |
NextToken(); |
- e.reset(ParseUnaryExpression()); |
+ expr = ParseUnaryExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMNegExpression(line, e.release())); |
+ expr = pdfium::MakeUnique<CXFA_FMNegExpression>(line, expr.release()); |
} else { |
- e.reset(); |
+ expr.reset(); |
} |
break; |
case TOKksnot: |
NextToken(); |
- e.reset(ParseUnaryExpression()); |
+ expr = ParseUnaryExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMNotExpression(line, e.release())); |
+ expr = pdfium::MakeUnique<CXFA_FMNotExpression>(line, expr.release()); |
} else { |
- e.reset(); |
+ expr.reset(); |
} |
break; |
default: |
- e.reset(ParsePrimaryExpression()); |
+ expr = ParsePrimaryExpression(); |
break; |
} |
- return e.release(); |
+ return expr; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() { |
- std::unique_ptr<CXFA_FMSimpleExpression> e; |
+std::unique_ptr<CXFA_FMSimpleExpression> |
+CXFA_FMParse::ParsePrimaryExpression() { |
+ std::unique_ptr<CXFA_FMSimpleExpression> expr; |
uint32_t line = m_pToken->m_uLinenum; |
switch (m_pToken->m_type) { |
case TOKnumber: |
- e.reset(new CXFA_FMNumberExpression(line, m_pToken->m_wstring)); |
+ expr = pdfium::MakeUnique<CXFA_FMNumberExpression>(line, |
+ m_pToken->m_wstring); |
NextToken(); |
break; |
case TOKstring: |
- e.reset(new CXFA_FMStringExpression(line, m_pToken->m_wstring)); |
+ expr = pdfium::MakeUnique<CXFA_FMStringExpression>(line, |
+ m_pToken->m_wstring); |
NextToken(); |
break; |
case TOKidentifier: { |
CFX_WideStringC wsIdentifier(m_pToken->m_wstring); |
NextToken(); |
if (m_pToken->m_type == TOKlbracket) { |
- CXFA_FMSimpleExpression* s = ParseIndexExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); |
if (s) { |
- e.reset(new CXFA_FMDotAccessorExpression(line, nullptr, TOKdot, |
- wsIdentifier, s)); |
+ expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
+ line, nullptr, TOKdot, wsIdentifier, s.release()); |
} |
NextToken(); |
} else { |
- e.reset(new CXFA_FMIdentifierExpression(line, wsIdentifier)); |
+ expr = |
+ pdfium::MakeUnique<CXFA_FMIdentifierExpression>(line, wsIdentifier); |
} |
} break; |
case TOKif: |
- e.reset(new CXFA_FMIdentifierExpression(line, m_pToken->m_wstring)); |
+ expr = pdfium::MakeUnique<CXFA_FMIdentifierExpression>( |
+ line, m_pToken->m_wstring); |
NextToken(); |
break; |
case TOKnull: |
- e.reset(new CXFA_FMNullExpression(line)); |
+ expr = pdfium::MakeUnique<CXFA_FMNullExpression>(line); |
NextToken(); |
break; |
case TOKlparen: |
- e.reset(ParseParenExpression()); |
+ expr = ParseParenExpression(); |
break; |
default: |
CFX_WideString ws_TempString(m_pToken->m_wstring); |
@@ -544,25 +551,25 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() { |
NextToken(); |
break; |
} |
- e.reset(ParsePostExpression(e.release())); |
+ expr = ParsePostExpression(std::move(expr)); |
if (!(m_pErrorInfo->message.IsEmpty())) |
- e.reset(); |
- return e.release(); |
+ expr.reset(); |
+ return expr; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
- CXFA_FMSimpleExpression* e) { |
+std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParsePostExpression( |
+ std::unique_ptr<CXFA_FMSimpleExpression> expr) { |
uint32_t line = m_pToken->m_uLinenum; |
while (1) { |
switch (m_pToken->m_type) { |
case TOKlparen: { |
NextToken(); |
- std::unique_ptr<CFX_ArrayTemplate<CXFA_FMSimpleExpression*>> pArray; |
+ std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> expressions; |
if (m_pToken->m_type != TOKrparen) { |
- pArray.reset(new CFX_ArrayTemplate<CXFA_FMSimpleExpression*>()); |
while (m_pToken->m_type != TOKrparen) { |
- if (CXFA_FMSimpleExpression* expr = ParseSimpleExpression()) |
- pArray->Add(expr); |
+ if (std::unique_ptr<CXFA_FMSimpleExpression> expr = |
+ ParseSimpleExpression()) |
+ expressions.push_back(std::move(expr)); |
if (m_pToken->m_type == TOKcomma) { |
NextToken(); |
} else if (m_pToken->m_type == TOKeof || |
@@ -577,26 +584,21 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
} |
} |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMCallExpression(line, e, pArray.release(), false); |
+ expr = pdfium::MakeUnique<CXFA_FMCallExpression>( |
+ line, expr.release(), std::move(expressions), false); |
NextToken(); |
- if (m_pToken->m_type != TOKlbracket) { |
+ if (m_pToken->m_type != TOKlbracket) |
continue; |
- } |
- CXFA_FMSimpleExpression* s = ParseIndexExpression(); |
+ |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); |
if (s) { |
- e = new CXFA_FMDotAccessorExpression(line, e, TOKcall, |
- FX_WSTRC(L""), s); |
+ expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
+ line, expr.release(), TOKcall, FX_WSTRC(L""), s.release()); |
} else { |
- delete e; |
- e = nullptr; |
+ expr.reset(); |
} |
} else { |
- if (pArray) { |
- for (int32_t i = 0; i < pArray->GetSize(); ++i) |
- delete pArray->GetAt(i); |
- } |
- delete e; |
- e = nullptr; |
+ expr.reset(); |
} |
} break; |
case TOKdot: |
@@ -606,16 +608,14 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
uint32_t tempLine = m_pToken->m_uLinenum; |
NextToken(); |
if (m_pToken->m_type == TOKlparen) { |
- CXFA_FMSimpleExpression* pExpAccessor; |
- CXFA_FMSimpleExpression* pExpCall; |
- pExpAccessor = e; |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExpCall; |
NextToken(); |
- std::unique_ptr<CFX_ArrayTemplate<CXFA_FMSimpleExpression*>> pArray; |
+ std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> expressions; |
if (m_pToken->m_type != TOKrparen) { |
- pArray.reset(new CFX_ArrayTemplate<CXFA_FMSimpleExpression*>()); |
while (m_pToken->m_type != TOKrparen) { |
- CXFA_FMSimpleExpression* exp = ParseSimpleExpression(); |
- pArray->Add(exp); |
+ std::unique_ptr<CXFA_FMSimpleExpression> exp = |
+ ParseSimpleExpression(); |
+ expressions.push_back(std::move(exp)); |
if (m_pToken->m_type == TOKcomma) { |
NextToken(); |
} else if (m_pToken->m_type == TOKeof || |
@@ -630,50 +630,48 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
} |
} |
if (m_pErrorInfo->message.IsEmpty()) { |
- CXFA_FMSimpleExpression* pIdentifier = |
- new CXFA_FMIdentifierExpression(tempLine, tempStr); |
- pExpCall = new CXFA_FMCallExpression(line, pIdentifier, |
- pArray.release(), true); |
- e = new CXFA_FMMethodCallExpression(line, pExpAccessor, pExpCall); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pIdentifier = |
+ pdfium::MakeUnique<CXFA_FMIdentifierExpression>(tempLine, |
+ tempStr); |
+ pExpCall = pdfium::MakeUnique<CXFA_FMCallExpression>( |
+ line, pIdentifier.release(), std::move(expressions), true); |
+ expr = pdfium::MakeUnique<CXFA_FMMethodCallExpression>( |
+ line, expr.release(), pExpCall.release()); |
NextToken(); |
- if (m_pToken->m_type != TOKlbracket) { |
+ if (m_pToken->m_type != TOKlbracket) |
continue; |
- } |
- CXFA_FMSimpleExpression* s = ParseIndexExpression(); |
+ |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = |
+ ParseIndexExpression(); |
if (s) { |
- e = new CXFA_FMDotAccessorExpression(line, e, TOKcall, |
- FX_WSTRC(L""), s); |
+ expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
+ line, expr.release(), TOKcall, FX_WSTRC(L""), s.release()); |
} else { |
- delete e; |
- e = nullptr; |
+ expr.reset(); |
} |
} else { |
- if (pArray) { |
- for (int32_t i = 0; i < pArray->GetSize(); ++i) |
- delete pArray->GetAt(i); |
- } |
- delete e; |
- e = nullptr; |
+ expr.reset(); |
} |
} else if (m_pToken->m_type == TOKlbracket) { |
- std::unique_ptr<CXFA_FMSimpleExpression> s(ParseIndexExpression()); |
- if (!(m_pErrorInfo->message.IsEmpty())) { |
- delete e; |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); |
+ if (!(m_pErrorInfo->message.IsEmpty())) |
return nullptr; |
- } |
- e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdot, tempStr, |
- s.release()); |
+ |
+ expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
+ tempLine, expr.release(), TOKdot, tempStr, s.release()); |
} else { |
- CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression( |
- tempLine, ACCESSOR_NO_INDEX, nullptr, false); |
- e = new CXFA_FMDotAccessorExpression(line, e, TOKdot, tempStr, s); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = |
+ pdfium::MakeUnique<CXFA_FMIndexExpression>( |
+ tempLine, ACCESSOR_NO_INDEX, nullptr, false); |
+ expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
+ line, expr.release(), TOKdot, tempStr, s.release()); |
continue; |
} |
} else { |
CFX_WideString ws_TempString(m_pToken->m_wstring); |
Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier, |
ws_TempString.c_str()); |
- return e; |
+ return expr; |
} |
break; |
case TOKdotdot: |
@@ -683,25 +681,25 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
uint32_t tempLine = m_pToken->m_uLinenum; |
NextToken(); |
if (m_pToken->m_type == TOKlbracket) { |
- std::unique_ptr<CXFA_FMSimpleExpression> s(ParseIndexExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); |
if (!(m_pErrorInfo->message.IsEmpty())) { |
- delete e; |
return nullptr; |
} |
- e = new CXFA_FMDotDotAccessorExpression(tempLine, e, TOKdotdot, |
- tempStr, s.release()); |
+ expr = pdfium::MakeUnique<CXFA_FMDotDotAccessorExpression>( |
+ tempLine, expr.release(), TOKdotdot, tempStr, s.release()); |
} else { |
- CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression( |
- tempLine, ACCESSOR_NO_INDEX, nullptr, false); |
- e = new CXFA_FMDotDotAccessorExpression(line, e, TOKdotdot, tempStr, |
- s); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = |
+ pdfium::MakeUnique<CXFA_FMIndexExpression>( |
+ tempLine, ACCESSOR_NO_INDEX, nullptr, false); |
+ expr = pdfium::MakeUnique<CXFA_FMDotDotAccessorExpression>( |
+ line, expr.release(), TOKdotdot, tempStr, s.release()); |
continue; |
} |
} else { |
CFX_WideString ws_TempString(m_pToken->m_wstring); |
Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier, |
ws_TempString.c_str()); |
- return e; |
+ return expr; |
} |
break; |
case TOKdotscream: |
@@ -711,50 +709,51 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
uint32_t tempLine = m_pToken->m_uLinenum; |
NextToken(); |
if (m_pToken->m_type == TOKlbracket) { |
- std::unique_ptr<CXFA_FMSimpleExpression> s(ParseIndexExpression()); |
- if (!(m_pErrorInfo->message.IsEmpty())) { |
- delete e; |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = ParseIndexExpression(); |
+ if (!(m_pErrorInfo->message.IsEmpty())) |
return nullptr; |
- } |
- e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdotscream, |
- tempStr, s.release()); |
+ |
+ expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
+ tempLine, expr.release(), TOKdotscream, tempStr, s.release()); |
} else { |
- CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression( |
- tempLine, ACCESSOR_NO_INDEX, nullptr, false); |
- e = new CXFA_FMDotAccessorExpression(line, e, TOKdotscream, tempStr, |
- s); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = |
+ pdfium::MakeUnique<CXFA_FMIndexExpression>( |
+ tempLine, ACCESSOR_NO_INDEX, nullptr, false); |
+ expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
+ line, expr.release(), TOKdotscream, tempStr, s.release()); |
continue; |
} |
} else { |
CFX_WideString ws_TempString(m_pToken->m_wstring); |
Error(m_pToken->m_uLinenum, kFMErrExpectedIdentifier, |
ws_TempString.c_str()); |
- return e; |
+ return expr; |
} |
break; |
case TOKdotstar: { |
- CXFA_FMSimpleExpression* s = |
- new CXFA_FMIndexExpression(line, ACCESSOR_NO_INDEX, nullptr, false); |
- e = new CXFA_FMDotAccessorExpression(line, e, TOKdotstar, |
- FX_WSTRC(L"*"), s); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = |
+ pdfium::MakeUnique<CXFA_FMIndexExpression>(line, ACCESSOR_NO_INDEX, |
+ nullptr, false); |
+ expr = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
+ line, expr.release(), TOKdotstar, FX_WSTRC(L"*"), s.release()); |
} break; |
default: |
- return e; |
+ return expr; |
} |
NextToken(); |
} |
- return e; |
+ return expr; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseIndexExpression() { |
+std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseIndexExpression() { |
std::unique_ptr<CXFA_FMSimpleExpression> pExp; |
uint32_t line = m_pToken->m_uLinenum; |
NextToken(); |
std::unique_ptr<CXFA_FMSimpleExpression> s; |
XFA_FM_AccessorIndex accessorIndex = ACCESSOR_NO_RELATIVEINDEX; |
if (m_pToken->m_type == TOKmul) { |
- pExp.reset( |
- new CXFA_FMIndexExpression(line, accessorIndex, s.release(), true)); |
+ pExp = pdfium::MakeUnique<CXFA_FMIndexExpression>(line, accessorIndex, |
+ s.release(), true); |
NextToken(); |
if (m_pToken->m_type != TOKrbracket) { |
CFX_WideString ws_TempString(m_pToken->m_wstring); |
@@ -762,7 +761,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseIndexExpression() { |
XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); |
pExp.reset(); |
} |
- return pExp.release(); |
+ return pExp; |
} |
if (m_pToken->m_type == TOKplus) { |
accessorIndex = ACCESSOR_POSITIVE_INDEX; |
@@ -771,19 +770,19 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseIndexExpression() { |
accessorIndex = ACCESSOR_NEGATIVE_INDEX; |
NextToken(); |
} |
- s.reset(ParseSimpleExpression()); |
+ s = ParseSimpleExpression(); |
if (m_pToken->m_type != TOKrbracket) { |
CFX_WideString ws_TempString(m_pToken->m_wstring); |
Error(m_pToken->m_uLinenum, kFMErrExpectedToken, |
XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); |
} else { |
- pExp.reset( |
- new CXFA_FMIndexExpression(line, accessorIndex, s.release(), false)); |
+ pExp = pdfium::MakeUnique<CXFA_FMIndexExpression>(line, accessorIndex, |
+ s.release(), false); |
} |
- return pExp.release(); |
+ return pExp; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseParenExpression() { |
+std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseParenExpression() { |
Check(TOKlparen); |
if (m_pToken->m_type == TOKrparen) { |
@@ -793,27 +792,26 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseParenExpression() { |
} |
uint32_t line = m_pToken->m_uLinenum; |
- std::unique_ptr<CXFA_FMSimpleExpression> pExp1(ParseLogicalOrExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp1 = ParseLogicalOrExpression(); |
while (m_pToken->m_type == TOKassign) { |
NextToken(); |
- std::unique_ptr<CXFA_FMSimpleExpression> pExp2(ParseLogicalOrExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp2 = ParseLogicalOrExpression(); |
if (m_pErrorInfo->message.IsEmpty()) { |
- pExp1.reset(new CXFA_FMAssignExpression(line, TOKassign, pExp1.release(), |
- pExp2.release())); |
+ pExp1 = pdfium::MakeUnique<CXFA_FMAssignExpression>( |
+ line, TOKassign, pExp1.release(), pExp2.release()); |
} else { |
pExp1.reset(); |
} |
} |
Check(TOKrparen); |
- return pExp1.release(); |
+ return pExp1; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() { |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseBlockExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
- CXFA_FMExpression* e = nullptr; |
- std::unique_ptr<CFX_ArrayTemplate<CXFA_FMExpression*>> expression( |
- new CFX_ArrayTemplate<CXFA_FMExpression*>()); |
+ std::unique_ptr<CXFA_FMExpression> expr; |
+ std::vector<std::unique_ptr<CXFA_FMExpression>> expressions; |
while (1) { |
switch (m_pToken->m_type) { |
@@ -828,15 +826,15 @@ CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() { |
case TOKreserver: |
break; |
case TOKfunc: |
- e = ParseFunction(); |
- if (e) { |
- expression->Add(e); |
+ expr = ParseFunction(); |
+ if (expr) { |
+ expressions.push_back(std::move(expr)); |
} |
continue; |
default: |
- e = ParseExpression(); |
- if (e) { |
- expression->Add(e); |
+ expr = ParseExpression(); |
+ if (expr) { |
+ expressions.push_back(std::move(expr)); |
} |
continue; |
} |
@@ -844,22 +842,20 @@ CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() { |
} |
std::unique_ptr<CXFA_FMBlockExpression> pExp; |
if (m_pErrorInfo->message.IsEmpty()) { |
- pExp.reset(new CXFA_FMBlockExpression(line, expression.release())); |
- } else { |
- for (int i = 0; i < expression->GetSize(); ++i) |
- delete static_cast<CXFA_FMExpression*>(expression->GetAt(i)); |
+ pExp = pdfium::MakeUnique<CXFA_FMBlockExpression>(line, |
+ std::move(expressions)); |
} |
- return pExp.release(); |
+ return pExp; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() { |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseIfExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
const FX_WCHAR* pStartPos = m_lexer->SavePos(); |
NextToken(); |
Check(TOKlparen); |
std::unique_ptr<CXFA_FMSimpleExpression> pExpression; |
while (m_pToken->m_type != TOKrparen) { |
- pExpression.reset(ParseSimpleExpression()); |
+ pExpression = ParseSimpleExpression(); |
if (m_pToken->m_type != TOKcomma) |
break; |
NextToken(); |
@@ -875,7 +871,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() { |
return ParseExpExpression(); |
} |
Check(TOKthen); |
- std::unique_ptr<CXFA_FMExpression> pIfExpression(ParseBlockExpression()); |
+ std::unique_ptr<CXFA_FMExpression> pIfExpression = ParseBlockExpression(); |
std::unique_ptr<CXFA_FMExpression> pElseExpression; |
switch (m_pToken->m_type) { |
case TOKeof: |
@@ -883,15 +879,15 @@ CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() { |
Check(TOKendif); |
break; |
case TOKif: |
- pElseExpression.reset(ParseIfExpression()); |
+ pElseExpression = ParseIfExpression(); |
Check(TOKendif); |
break; |
case TOKelseif: |
- pElseExpression.reset(ParseIfExpression()); |
+ pElseExpression = ParseIfExpression(); |
break; |
case TOKelse: |
NextToken(); |
- pElseExpression.reset(ParseBlockExpression()); |
+ pElseExpression = ParseBlockExpression(); |
Check(TOKendif); |
break; |
default: |
@@ -902,33 +898,34 @@ CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() { |
} |
std::unique_ptr<CXFA_FMIfExpression> pExp; |
if (m_pErrorInfo->message.IsEmpty()) { |
- pExp.reset(new CXFA_FMIfExpression(line, pExpression.release(), |
- pIfExpression.release(), |
- pElseExpression.release())); |
+ pExp = pdfium::MakeUnique<CXFA_FMIfExpression>(line, pExpression.release(), |
+ pIfExpression.release(), |
+ pElseExpression.release()); |
} |
- return pExp.release(); |
+ return pExp; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseWhileExpression() { |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseWhileExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
NextToken(); |
- std::unique_ptr<CXFA_FMSimpleExpression> pCondition(ParseParenExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pCondition = ParseParenExpression(); |
Check(TOKdo); |
- std::unique_ptr<CXFA_FMExpression> pExpression(ParseBlockExpression()); |
+ std::unique_ptr<CXFA_FMExpression> pExpression = ParseBlockExpression(); |
Check(TOKendwhile); |
- std::unique_ptr<CXFA_FMExpression> e; |
+ std::unique_ptr<CXFA_FMExpression> expr; |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMWhileExpression(line, pCondition.release(), |
- pExpression.release())); |
+ expr = pdfium::MakeUnique<CXFA_FMWhileExpression>( |
+ line, pCondition.release(), pExpression.release()); |
} |
- return e.release(); |
+ return expr; |
} |
-CXFA_FMSimpleExpression* CXFA_FMParse::ParseSubassignmentInForExpression() { |
- std::unique_ptr<CXFA_FMSimpleExpression> e; |
+std::unique_ptr<CXFA_FMSimpleExpression> |
+CXFA_FMParse::ParseSubassignmentInForExpression() { |
+ std::unique_ptr<CXFA_FMSimpleExpression> expr; |
switch (m_pToken->m_type) { |
case TOKidentifier: |
- e.reset(ParseSimpleExpression()); |
+ expr = ParseSimpleExpression(); |
break; |
default: |
CFX_WideString ws_TempString(m_pToken->m_wstring); |
@@ -937,10 +934,10 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseSubassignmentInForExpression() { |
NextToken(); |
break; |
} |
- return e.release(); |
+ return expr; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseForExpression() { |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseForExpression() { |
CFX_WideStringC wsVariant; |
uint32_t line = m_pToken->m_uLinenum; |
NextToken(); |
@@ -954,7 +951,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseForExpression() { |
std::unique_ptr<CXFA_FMSimpleExpression> pAssignment; |
if (m_pToken->m_type == TOKassign) { |
NextToken(); |
- pAssignment.reset(ParseSimpleExpression()); |
+ pAssignment = ParseSimpleExpression(); |
} else { |
CFX_WideString ws_TempString(m_pToken->m_wstring); |
Error(m_pToken->m_uLinenum, kFMErrExpectedToken, |
@@ -971,26 +968,26 @@ CXFA_FMExpression* CXFA_FMParse::ParseForExpression() { |
ws_TempString.c_str()); |
} |
NextToken(); |
- std::unique_ptr<CXFA_FMSimpleExpression> pAccessor(ParseSimpleExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pAccessor = ParseSimpleExpression(); |
std::unique_ptr<CXFA_FMSimpleExpression> pStep; |
if (m_pToken->m_type == TOKstep) { |
NextToken(); |
- pStep.reset(ParseSimpleExpression()); |
+ pStep = ParseSimpleExpression(); |
} |
Check(TOKdo); |
- std::unique_ptr<CXFA_FMExpression> pList(ParseBlockExpression()); |
+ std::unique_ptr<CXFA_FMExpression> pList = ParseBlockExpression(); |
Check(TOKendfor); |
- std::unique_ptr<CXFA_FMExpression> e; |
+ std::unique_ptr<CXFA_FMExpression> expr; |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMForExpression(line, wsVariant, pAssignment.release(), |
- pAccessor.release(), iDirection, |
- pStep.release(), pList.release())); |
+ expr = pdfium::MakeUnique<CXFA_FMForExpression>( |
+ line, wsVariant, pAssignment.release(), pAccessor.release(), iDirection, |
+ pStep.release(), pList.release()); |
} |
- return e.release(); |
+ return expr; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
- std::unique_ptr<CXFA_FMExpression> e; |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseForeachExpression() { |
+ std::unique_ptr<CXFA_FMExpression> expr; |
CFX_WideStringC wsIdentifier; |
std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> pAccessors; |
std::unique_ptr<CXFA_FMExpression> pList; |
@@ -1012,9 +1009,9 @@ CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
NextToken(); |
} else { |
while (m_pToken->m_type != TOKrparen) { |
- CXFA_FMSimpleExpression* s = ParseSimpleExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s = ParseSimpleExpression(); |
if (s) |
- pAccessors.push_back(pdfium::WrapUnique<CXFA_FMSimpleExpression>(s)); |
+ pAccessors.push_back(std::move(s)); |
if (m_pToken->m_type != TOKcomma) |
break; |
NextToken(); |
@@ -1022,25 +1019,24 @@ CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
Check(TOKrparen); |
} |
Check(TOKdo); |
- pList.reset(ParseBlockExpression()); |
+ pList = ParseBlockExpression(); |
Check(TOKendfor); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = pdfium::MakeUnique<CXFA_FMForeachExpression>( |
+ expr = pdfium::MakeUnique<CXFA_FMForeachExpression>( |
line, wsIdentifier, std::move(pAccessors), pList.release()); |
} |
- return e.release(); |
+ return expr; |
} |
-CXFA_FMExpression* CXFA_FMParse::ParseDoExpression() { |
- std::unique_ptr<CXFA_FMExpression> e; |
+std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseDoExpression() { |
uint32_t line = m_pToken->m_uLinenum; |
NextToken(); |
- e.reset(ParseBlockExpression()); |
+ std::unique_ptr<CXFA_FMExpression> expr = ParseBlockExpression(); |
Check(TOKend); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e.reset(new CXFA_FMDoExpression(line, e.release())); |
+ expr = pdfium::MakeUnique<CXFA_FMDoExpression>(line, expr.release()); |
} else { |
- e.reset(); |
+ expr.reset(); |
} |
- return e.release(); |
+ return expr; |
} |