Chromium Code Reviews| 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..16d8b214a12f3d2044b0806c8af40e0cf63e89a2 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, |
|
Tom Sepez
2016/11/28 18:09:11
nit: follow-up: since this always returns 0, it ca
npm
2016/11/28 20:04:39
Acknowledged.
|
| 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,10 +50,10 @@ void CXFA_FMParse::Error(uint32_t lineNum, const FX_WCHAR* msg, ...) { |
| va_end(ap); |
| } |
| -CFX_ArrayTemplate<CXFA_FMExpression*>* CXFA_FMParse::ParseTopExpression() { |
| +std::vector<std::unique_ptr<CXFA_FMExpression>> |
| +CXFA_FMParse::ParseTopExpression() { |
| std::unique_ptr<CXFA_FMExpression> e; |
|
Tom Sepez
2016/11/28 18:09:12
nit: can we call this expr or expression?
npm
2016/11/28 20:04:39
Done.
|
| - CFX_ArrayTemplate<CXFA_FMExpression*>* expression = |
| - new CFX_ArrayTemplate<CXFA_FMExpression*>(); |
| + std::vector<std::unique_ptr<CXFA_FMExpression>> expression; |
|
Tom Sepez
2016/11/28 18:09:12
nit: can we call this |expressions| since it's an
npm
2016/11/28 20:04:39
Done.
|
| while (1) { |
| if (m_pToken->m_type == TOKeof || m_pToken->m_type == TOKendfunc || |
| m_pToken->m_type == TOKendif || m_pToken->m_type == TOKelseif || |
| @@ -62,16 +62,16 @@ CFX_ArrayTemplate<CXFA_FMExpression*>* CXFA_FMParse::ParseTopExpression() { |
| } |
| if (m_pToken->m_type == TOKfunc) { |
| - e.reset(ParseFunction()); |
| + e = ParseFunction(); |
| if (e) { |
| - expression->Add(e.release()); |
| + expression.push_back(std::move(e)); |
| } else { |
| break; |
| } |
| } else { |
| - e.reset(ParseExpression()); |
| + e = ParseExpression(); |
| if (e) { |
| - expression->Add(e.release()); |
| + expression.push_back(std::move(e)); |
| } else { |
| break; |
| } |
| @@ -80,11 +80,11 @@ CFX_ArrayTemplate<CXFA_FMExpression*>* CXFA_FMParse::ParseTopExpression() { |
| return expression; |
| } |
| -CXFA_FMExpression* CXFA_FMParse::ParseFunction() { |
| +std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseFunction() { |
| std::unique_ptr<CXFA_FMExpression> e; |
| 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; |
|
Tom Sepez
2016/11/28 18:09:11
ditto nits.
npm
2016/11/28 20:04:39
Done.
|
| 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); |
| - } |
| + e = pdfium::MakeUnique<CXFA_FMFunctionDefinition>( |
| + line, false, ident, std::move(pArguments), std::move(expressions)); |
| + } else if (pArguments) { |
| + pArguments->RemoveAll(); |
| } |
| - return e.release(); |
| + return e; |
| } |
| -CXFA_FMExpression* CXFA_FMParse::ParseExpression() { |
| +std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseExpression() { |
| std::unique_ptr<CXFA_FMExpression> e; |
| uint32_t line = m_pToken->m_uLinenum; |
| switch (m_pToken->m_type) { |
| case TOKvar: |
| - e.reset(ParseVarExpression()); |
| + e = ParseVarExpression(); |
| break; |
| case TOKnull: |
| case TOKnumber: |
| @@ -161,29 +156,29 @@ CXFA_FMExpression* CXFA_FMParse::ParseExpression() { |
| case TOKksnot: |
| case TOKidentifier: |
| case TOKlparen: |
| - e.reset(ParseExpExpression()); |
| + e = ParseExpExpression(); |
| break; |
| case TOKif: |
| - e.reset(ParseIfExpression()); |
| + e = ParseIfExpression(); |
| break; |
| case TOKwhile: |
| - e.reset(ParseWhileExpression()); |
| + e = ParseWhileExpression(); |
| break; |
| case TOKfor: |
| - e.reset(ParseForExpression()); |
| + e = ParseForExpression(); |
| break; |
| case TOKforeach: |
| - e.reset(ParseForeachExpression()); |
| + e = ParseForeachExpression(); |
| break; |
| case TOKdo: |
| - e.reset(ParseDoExpression()); |
| + e = ParseDoExpression(); |
| break; |
| case TOKbreak: |
| - e.reset(new CXFA_FMBreakExpression(line)); |
| + e = pdfium::MakeUnique<CXFA_FMBreakExpression>(line); |
| NextToken(); |
| break; |
| case TOKcontinue: |
| - e.reset(new CXFA_FMContinueExpression(line)); |
| + e = pdfium::MakeUnique<CXFA_FMContinueExpression>(line); |
| NextToken(); |
| break; |
| default: |
| @@ -193,10 +188,10 @@ CXFA_FMExpression* CXFA_FMParse::ParseExpression() { |
| NextToken(); |
| break; |
| } |
| - return e.release(); |
| + return e; |
| } |
| -CXFA_FMExpression* CXFA_FMParse::ParseVarExpression() { |
| +std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseVarExpression() { |
| std::unique_ptr<CXFA_FMExpression> e; |
| CFX_WideStringC ident; |
| uint32_t line = m_pToken->m_uLinenum; |
| @@ -211,45 +206,46 @@ CXFA_FMExpression* CXFA_FMParse::ParseVarExpression() { |
| } |
| if (m_pToken->m_type == TOKassign) { |
| NextToken(); |
| - e.reset(ParseExpExpression()); |
| + e = ParseExpExpression(); |
| } |
| if (m_pErrorInfo->message.IsEmpty()) { |
| - e.reset(new CXFA_FMVarExpression(line, ident, e.release())); |
| + e = pdfium::MakeUnique<CXFA_FMVarExpression>(line, ident, e.release()); |
| } else { |
| e.reset(); |
| } |
| - return e.release(); |
| + return e; |
| } |
| -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()); |
| while (m_pToken->m_type == TOKassign) { |
| NextToken(); |
| 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; |
| if (m_pErrorInfo->message.IsEmpty()) { |
| - e.reset(new CXFA_FMExpExpression(line, pExp1.release())); |
| + e = pdfium::MakeUnique<CXFA_FMExpExpression>(line, pExp1.release()); |
| } else { |
| e.reset(); |
| } |
| - return e.release(); |
| + return e; |
| } |
| -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()); |
|
Tom Sepez
2016/11/28 18:09:12
nit: ParseLogicalAndExpression() returns unique_pt
npm
2016/11/28 20:04:39
Already returns unique_ptr. Changing to e1
= Parse
|
| for (;;) { |
| @@ -260,8 +256,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,10 +268,11 @@ 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()); |
| for (;;) { |
| @@ -285,8 +282,8 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalAndExpression() { |
| NextToken(); |
| 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,10 +294,11 @@ 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()); |
| for (;;) { |
| @@ -309,10 +307,10 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseEqualityExpression() { |
| 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 +318,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,10 +331,11 @@ 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()); |
| for (;;) { |
| @@ -345,10 +344,10 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() { |
| 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()); |
|
Tom Sepez
2016/11/28 18:09:12
nit: Ideally, these ctors take unique_ptrs so we c
npm
2016/11/28 20:04:39
Acknowledged.
|
| } else { |
| e1.reset(); |
| } |
| @@ -356,10 +355,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 +366,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 +377,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,10 +390,11 @@ 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()); |
| for (;;) { |
| @@ -402,20 +402,20 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseAddtiveExpression() { |
| 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,10 +425,11 @@ 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()); |
| for (;;) { |
| @@ -436,20 +437,20 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseMultiplicativeExpression() { |
| 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 +460,87 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseMultiplicativeExpression() { |
| } |
| break; |
| } |
| - return e1.release(); |
| + return e1; |
| } |
| -CXFA_FMSimpleExpression* CXFA_FMParse::ParseUnaryExpression() { |
| +std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParseUnaryExpression() { |
| std::unique_ptr<CXFA_FMSimpleExpression> e; |
| uint32_t line = m_pToken->m_uLinenum; |
| switch (m_pToken->m_type) { |
| case TOKplus: |
| NextToken(); |
| - e.reset(ParseUnaryExpression()); |
| + e = ParseUnaryExpression(); |
| if (m_pErrorInfo->message.IsEmpty()) { |
| - e.reset(new CXFA_FMPosExpression(line, e.release())); |
| + e = pdfium::MakeUnique<CXFA_FMPosExpression>(line, e.release()); |
| } else { |
| e.reset(); |
| } |
| break; |
| case TOKminus: |
| NextToken(); |
| - e.reset(ParseUnaryExpression()); |
| + e = ParseUnaryExpression(); |
| if (m_pErrorInfo->message.IsEmpty()) { |
| - e.reset(new CXFA_FMNegExpression(line, e.release())); |
| + e = pdfium::MakeUnique<CXFA_FMNegExpression>(line, e.release()); |
| } else { |
| e.reset(); |
| } |
| break; |
| case TOKksnot: |
| NextToken(); |
| - e.reset(ParseUnaryExpression()); |
| + e = ParseUnaryExpression(); |
| if (m_pErrorInfo->message.IsEmpty()) { |
| - e.reset(new CXFA_FMNotExpression(line, e.release())); |
| + e = pdfium::MakeUnique<CXFA_FMNotExpression>(line, e.release()); |
| } else { |
| e.reset(); |
| } |
| break; |
| default: |
| - e.reset(ParsePrimaryExpression()); |
| + e = ParsePrimaryExpression(); |
| break; |
| } |
| - return e.release(); |
| + return e; |
| } |
| -CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() { |
| +std::unique_ptr<CXFA_FMSimpleExpression> |
| +CXFA_FMParse::ParsePrimaryExpression() { |
| std::unique_ptr<CXFA_FMSimpleExpression> e; |
| uint32_t line = m_pToken->m_uLinenum; |
| switch (m_pToken->m_type) { |
| case TOKnumber: |
| - e.reset(new CXFA_FMNumberExpression(line, m_pToken->m_wstring)); |
| + e = pdfium::MakeUnique<CXFA_FMNumberExpression>(line, |
| + m_pToken->m_wstring); |
| NextToken(); |
| break; |
| case TOKstring: |
| - e.reset(new CXFA_FMStringExpression(line, m_pToken->m_wstring)); |
| + e = 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)); |
| + e = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
| + line, nullptr, TOKdot, wsIdentifier, s.release()); |
| } |
| NextToken(); |
| } else { |
| - e.reset(new CXFA_FMIdentifierExpression(line, wsIdentifier)); |
| + e = pdfium::MakeUnique<CXFA_FMIdentifierExpression>(line, wsIdentifier); |
| } |
| } break; |
| case TOKif: |
| - e.reset(new CXFA_FMIdentifierExpression(line, m_pToken->m_wstring)); |
| + e = pdfium::MakeUnique<CXFA_FMIdentifierExpression>(line, |
| + m_pToken->m_wstring); |
| NextToken(); |
| break; |
| case TOKnull: |
| - e.reset(new CXFA_FMNullExpression(line)); |
| + e = pdfium::MakeUnique<CXFA_FMNullExpression>(line); |
| NextToken(); |
| break; |
| case TOKlparen: |
| - e.reset(ParseParenExpression()); |
| + e = ParseParenExpression(); |
| break; |
| default: |
| CFX_WideString ws_TempString(m_pToken->m_wstring); |
| @@ -544,25 +549,25 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() { |
| NextToken(); |
| break; |
| } |
| - e.reset(ParsePostExpression(e.release())); |
| + e = ParsePostExpression(std::move(e)); |
| if (!(m_pErrorInfo->message.IsEmpty())) |
| e.reset(); |
| - return e.release(); |
| + return e; |
| } |
| -CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
| - CXFA_FMSimpleExpression* e) { |
| +std::unique_ptr<CXFA_FMSimpleExpression> CXFA_FMParse::ParsePostExpression( |
| + std::unique_ptr<CXFA_FMSimpleExpression> e) { |
| 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>> pArray; |
| 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()) |
| + pArray.push_back(std::move(expr)); |
| if (m_pToken->m_type == TOKcomma) { |
| NextToken(); |
| } else if (m_pToken->m_type == TOKeof || |
| @@ -577,26 +582,21 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
| } |
| } |
| if (m_pErrorInfo->message.IsEmpty()) { |
| - e = new CXFA_FMCallExpression(line, e, pArray.release(), false); |
| + e = pdfium::MakeUnique<CXFA_FMCallExpression>( |
| + line, e.release(), std::move(pArray), 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); |
| + e = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
| + line, e.release(), TOKcall, FX_WSTRC(L""), s.release()); |
| } else { |
| - delete e; |
| - e = nullptr; |
| + e.reset(); |
|
npm
2016/11/24 21:19:52
e.reset() is the same as e = nullptr?
Tom Sepez
2016/11/28 18:09:11
right.
|
| } |
| } else { |
| - if (pArray) { |
| - for (int32_t i = 0; i < pArray->GetSize(); ++i) |
| - delete pArray->GetAt(i); |
| - } |
| - delete e; |
| - e = nullptr; |
| + e.reset(); |
| } |
| } break; |
| case TOKdot: |
| @@ -606,16 +606,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>> pArray; |
|
Tom Sepez
2016/11/28 18:09:12
nit: probably should just be |array|, no longer a
npm
2016/11/28 20:04:39
Done.
|
| 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(); |
| + pArray.push_back(std::move(exp)); |
| if (m_pToken->m_type == TOKcomma) { |
| NextToken(); |
| } else if (m_pToken->m_type == TOKeof || |
| @@ -630,43 +628,41 @@ 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(pArray), true); |
| + e = pdfium::MakeUnique<CXFA_FMMethodCallExpression>( |
| + line, e.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); |
| + e = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
| + line, e.release(), TOKcall, FX_WSTRC(L""), s.release()); |
| } else { |
| - delete e; |
| - e = nullptr; |
| + e.reset(); |
| } |
| } else { |
| - if (pArray) { |
| - for (int32_t i = 0; i < pArray->GetSize(); ++i) |
| - delete pArray->GetAt(i); |
| - } |
| - delete e; |
| - e = nullptr; |
| + e.reset(); |
| } |
| } else if (m_pToken->m_type == TOKlbracket) { |
| std::unique_ptr<CXFA_FMSimpleExpression> s(ParseIndexExpression()); |
| - if (!(m_pErrorInfo->message.IsEmpty())) { |
| - delete e; |
| + if (!(m_pErrorInfo->message.IsEmpty())) |
| return nullptr; |
| - } |
| - e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdot, tempStr, |
| - s.release()); |
| + |
| + e = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
| + tempLine, e.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); |
| + e = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
| + line, e.release(), TOKdot, tempStr, s.release()); |
| continue; |
| } |
| } else { |
| @@ -685,16 +681,16 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
| if (m_pToken->m_type == TOKlbracket) { |
| 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()); |
| + e = pdfium::MakeUnique<CXFA_FMDotDotAccessorExpression>( |
| + tempLine, e.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); |
| + e = pdfium::MakeUnique<CXFA_FMDotDotAccessorExpression>( |
| + line, e.release(), TOKdotdot, tempStr, s.release()); |
| continue; |
| } |
| } else { |
| @@ -712,17 +708,17 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
| NextToken(); |
| if (m_pToken->m_type == TOKlbracket) { |
| std::unique_ptr<CXFA_FMSimpleExpression> s(ParseIndexExpression()); |
| - if (!(m_pErrorInfo->message.IsEmpty())) { |
| - delete e; |
| + if (!(m_pErrorInfo->message.IsEmpty())) |
| return nullptr; |
| - } |
| - e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdotscream, |
| - tempStr, s.release()); |
| + |
| + e = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
| + tempLine, e.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); |
| + e = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
| + line, e.release(), TOKdotscream, tempStr, s.release()); |
| continue; |
| } |
| } else { |
| @@ -733,10 +729,11 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
| } |
| 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); |
| + e = pdfium::MakeUnique<CXFA_FMDotAccessorExpression>( |
| + line, e.release(), TOKdotstar, FX_WSTRC(L"*"), s.release()); |
| } break; |
| default: |
| return e; |
| @@ -746,15 +743,15 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
| return e; |
| } |
| -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 +759,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 +768,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) { |
| @@ -799,21 +796,20 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseParenExpression() { |
| NextToken(); |
| 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> e = nullptr; |
|
Tom Sepez
2016/11/28 18:09:11
nit: assignment not required, default ctor gives
npm
2016/11/28 20:04:39
Done.
|
| + std::vector<std::unique_ptr<CXFA_FMExpression>> expression; |
| while (1) { |
| switch (m_pToken->m_type) { |
| @@ -830,13 +826,13 @@ CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() { |
| case TOKfunc: |
| e = ParseFunction(); |
| if (e) { |
| - expression->Add(e); |
| + expression.push_back(std::move(e)); |
| } |
| continue; |
| default: |
| e = ParseExpression(); |
| if (e) { |
| - expression->Add(e); |
| + expression.push_back(std::move(e)); |
| } |
| continue; |
| } |
| @@ -844,22 +840,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(expression)); |
| } |
| - 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(); |
| @@ -883,15 +877,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,14 +896,14 @@ 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()); |
| @@ -918,17 +912,18 @@ CXFA_FMExpression* CXFA_FMParse::ParseWhileExpression() { |
| Check(TOKendwhile); |
| std::unique_ptr<CXFA_FMExpression> e; |
| if (m_pErrorInfo->message.IsEmpty()) { |
| - e.reset(new CXFA_FMWhileExpression(line, pCondition.release(), |
| - pExpression.release())); |
| + e = pdfium::MakeUnique<CXFA_FMWhileExpression>(line, pCondition.release(), |
| + pExpression.release()); |
| } |
| - return e.release(); |
| + return e; |
| } |
| -CXFA_FMSimpleExpression* CXFA_FMParse::ParseSubassignmentInForExpression() { |
| +std::unique_ptr<CXFA_FMSimpleExpression> |
| +CXFA_FMParse::ParseSubassignmentInForExpression() { |
| std::unique_ptr<CXFA_FMSimpleExpression> e; |
| switch (m_pToken->m_type) { |
| case TOKidentifier: |
| - e.reset(ParseSimpleExpression()); |
| + e = ParseSimpleExpression(); |
| break; |
| default: |
| CFX_WideString ws_TempString(m_pToken->m_wstring); |
| @@ -937,10 +932,10 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseSubassignmentInForExpression() { |
| NextToken(); |
| break; |
| } |
| - return e.release(); |
| + return e; |
| } |
| -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 +949,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, |
| @@ -975,21 +970,21 @@ CXFA_FMExpression* CXFA_FMParse::ParseForExpression() { |
| 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()); |
| Check(TOKendfor); |
| std::unique_ptr<CXFA_FMExpression> e; |
| if (m_pErrorInfo->message.IsEmpty()) { |
| - e.reset(new CXFA_FMForExpression(line, wsVariant, pAssignment.release(), |
| - pAccessor.release(), iDirection, |
| - pStep.release(), pList.release())); |
| + e = pdfium::MakeUnique<CXFA_FMForExpression>( |
| + line, wsVariant, pAssignment.release(), pAccessor.release(), iDirection, |
| + pStep.release(), pList.release()); |
| } |
| - return e.release(); |
| + return e; |
| } |
| -CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
| +std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseForeachExpression() { |
| std::unique_ptr<CXFA_FMExpression> e; |
| CFX_WideStringC wsIdentifier; |
| std::vector<std::unique_ptr<CXFA_FMSimpleExpression>> pAccessors; |
| @@ -1012,9 +1007,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 +1017,25 @@ 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>( |
| line, wsIdentifier, std::move(pAccessors), pList.release()); |
| } |
| - return e.release(); |
| + return e; |
| } |
| -CXFA_FMExpression* CXFA_FMParse::ParseDoExpression() { |
| +std::unique_ptr<CXFA_FMExpression> CXFA_FMParse::ParseDoExpression() { |
| std::unique_ptr<CXFA_FMExpression> e; |
|
Tom Sepez
2016/11/28 18:09:12
nit: maybe move and combine at line 1033.
npm
2016/11/28 20:04:39
Done.
|
| uint32_t line = m_pToken->m_uLinenum; |
| NextToken(); |
| - e.reset(ParseBlockExpression()); |
| + e = ParseBlockExpression(); |
| Check(TOKend); |
| if (m_pErrorInfo->message.IsEmpty()) { |
| - e.reset(new CXFA_FMDoExpression(line, e.release())); |
| + e = pdfium::MakeUnique<CXFA_FMDoExpression>(line, e.release()); |
| } else { |
| e.reset(); |
| } |
| - return e.release(); |
| + return e; |
| } |