Index: xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp |
diff --git a/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp b/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp |
index b451aa5487173af528bc57e3c26a09613b6af951..c5f6efb4f5dd795a24130cfd42fd5ca61f7c7695 100644 |
--- a/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp |
+++ b/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp |
@@ -6,6 +6,8 @@ |
#include "xfa/src/fxfa/src/fm2js/xfa_fm2js.h" |
+#include <memory> |
+ |
CXFA_FMParse::CXFA_FMParse() : m_pToken(nullptr), m_pErrorInfo(0) {} |
int32_t CXFA_FMParse::Init(const CFX_WideStringC& wsFormcalc, |
@@ -44,7 +46,7 @@ void CXFA_FMParse::Error(FX_DWORD lineNum, XFA_FM_ERRMSG msg, ...) { |
} |
CFX_PtrArray* CXFA_FMParse::ParseTopExpression() { |
- CXFA_FMExpression* e = 0; |
+ std::unique_ptr<CXFA_FMExpression> e; |
CFX_PtrArray* expression = new CFX_PtrArray(); |
while (1) { |
if (m_pToken->m_type == TOKeof || m_pToken->m_type == TOKendfunc || |
@@ -54,16 +56,16 @@ CFX_PtrArray* CXFA_FMParse::ParseTopExpression() { |
} |
if (m_pToken->m_type == TOKfunc) { |
- e = ParseFunction(); |
+ e.reset(ParseFunction()); |
if (e) { |
- expression->Add(e); |
+ expression->Add(e.release()); |
} else { |
break; |
} |
} else { |
- e = ParseExpression(); |
+ e.reset(ParseExpression()); |
if (e) { |
- expression->Add(e); |
+ expression->Add(e.release()); |
} else { |
break; |
} |
@@ -73,10 +75,10 @@ CFX_PtrArray* CXFA_FMParse::ParseTopExpression() { |
} |
CXFA_FMExpression* CXFA_FMParse::ParseFunction() { |
- CXFA_FMExpression* e = 0; |
+ std::unique_ptr<CXFA_FMExpression> e; |
CFX_WideStringC ident; |
- CFX_WideStringCArray* pArguments = 0; |
- CFX_PtrArray* pExpressions = 0; |
+ std::unique_ptr<CFX_WideStringCArray> pArguments; |
+ std::unique_ptr<CFX_PtrArray> pExpressions; |
FX_DWORD line = m_pToken->m_uLinenum; |
NextToken(); |
if (m_pToken->m_type != TOKidentifier) { |
@@ -91,7 +93,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseFunction() { |
if (m_pToken->m_type == TOKrparen) { |
NextToken(); |
} else { |
- pArguments = new CFX_WideStringCArray(); |
+ pArguments.reset(new CFX_WideStringCArray()); |
CFX_WideStringC p; |
while (1) { |
if (m_pToken->m_type == TOKidentifier) { |
@@ -121,42 +123,29 @@ CXFA_FMExpression* CXFA_FMParse::ParseFunction() { |
if (m_pToken->m_type == TOKendfunc) { |
NextToken(); |
} else { |
- pExpressions = ParseTopExpression(); |
+ pExpressions.reset(ParseTopExpression()); |
Check(TOKendfunc); |
} |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMFunctionDefinition(line, 0, ident, pArguments, pExpressions); |
+ e.reset(new CXFA_FMFunctionDefinition(line, 0, ident, pArguments.release(), |
+ pExpressions.release())); |
} else { |
- int32_t size = 0; |
- int32_t index = 0; |
- if (pArguments) { |
+ if (pArguments) |
pArguments->RemoveAll(); |
- delete pArguments; |
- pArguments = 0; |
- } |
- index = 0; |
if (pExpressions) { |
- CXFA_FMExpression* e1 = 0; |
- size = pExpressions->GetSize(); |
- while (index < size) { |
- e1 = (CXFA_FMExpression*)pExpressions->GetAt(index); |
- delete e1; |
- index++; |
- } |
- pExpressions->RemoveAll(); |
- delete pExpressions; |
- pExpressions = 0; |
+ for (int i = 0; i < pExpressions->GetSize(); ++i) |
+ delete static_cast<CXFA_FMExpression*>(pExpressions->GetAt(i)); |
} |
} |
- return e; |
+ return e.release(); |
} |
CXFA_FMExpression* CXFA_FMParse::ParseExpression() { |
- CXFA_FMExpression* e = 0; |
+ std::unique_ptr<CXFA_FMExpression> e; |
FX_DWORD line = m_pToken->m_uLinenum; |
switch (m_pToken->m_type) { |
case TOKvar: |
- e = ParseVarExpression(); |
+ e.reset(ParseVarExpression()); |
break; |
case TOKnull: |
case TOKnumber: |
@@ -166,29 +155,29 @@ CXFA_FMExpression* CXFA_FMParse::ParseExpression() { |
case TOKksnot: |
case TOKidentifier: |
case TOKlparen: |
- e = ParseExpExpression(); |
+ e.reset(ParseExpExpression()); |
break; |
case TOKif: |
- e = ParseIfExpression(); |
+ e.reset(ParseIfExpression()); |
break; |
case TOKwhile: |
- e = ParseWhileExpression(); |
+ e.reset(ParseWhileExpression()); |
break; |
case TOKfor: |
- e = ParseForExpression(); |
+ e.reset(ParseForExpression()); |
break; |
case TOKforeach: |
- e = ParseForeachExpression(); |
+ e.reset(ParseForeachExpression()); |
break; |
case TOKdo: |
- e = ParseDoExpression(); |
+ e.reset(ParseDoExpression()); |
break; |
case TOKbreak: |
- e = new CXFA_FMBreakExpression(line); |
+ e.reset(new CXFA_FMBreakExpression(line)); |
NextToken(); |
break; |
case TOKcontinue: |
- e = new CXFA_FMContinueExpression(line); |
+ e.reset(new CXFA_FMContinueExpression(line)); |
NextToken(); |
break; |
default: |
@@ -198,11 +187,11 @@ CXFA_FMExpression* CXFA_FMParse::ParseExpression() { |
NextToken(); |
break; |
} |
- return e; |
+ return e.release(); |
} |
CXFA_FMExpression* CXFA_FMParse::ParseVarExpression() { |
- CXFA_FMExpression* e = 0; |
+ std::unique_ptr<CXFA_FMExpression> e; |
CFX_WideStringC ident; |
FX_DWORD line = m_pToken->m_uLinenum; |
NextToken(); |
@@ -216,124 +205,121 @@ CXFA_FMExpression* CXFA_FMParse::ParseVarExpression() { |
} |
if (m_pToken->m_type == TOKassign) { |
NextToken(); |
- e = ParseExpExpression(); |
+ e.reset(ParseExpExpression()); |
} |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMVarExpression(line, ident, e); |
+ e.reset(new CXFA_FMVarExpression(line, ident, e.release())); |
} else { |
- delete e; |
- e = 0; |
+ e.reset(); |
} |
- return e; |
+ return e.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseSimpleExpression() { |
FX_DWORD line = m_pToken->m_uLinenum; |
- CXFA_FMSimpleExpression *pExp1 = 0, *pExp2 = 0; |
- pExp1 = ParseLogicalOrExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp1(ParseLogicalOrExpression()); |
while (m_pToken->m_type == TOKassign) { |
NextToken(); |
- pExp2 = ParseLogicalOrExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp2(ParseLogicalOrExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- pExp1 = new CXFA_FMAssignExpression(line, TOKassign, pExp1, pExp2); |
+ pExp1.reset(new CXFA_FMAssignExpression(line, TOKassign, pExp1.release(), |
+ pExp2.release())); |
} else { |
- delete pExp1; |
- pExp1 = 0; |
+ pExp1.reset(); |
} |
} |
- return pExp1; |
+ return pExp1.release(); |
} |
CXFA_FMExpression* CXFA_FMParse::ParseExpExpression() { |
- CXFA_FMExpression* e = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
- CXFA_FMSimpleExpression* pExp1 = 0; |
- pExp1 = ParseSimpleExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp1(ParseSimpleExpression()); |
+ std::unique_ptr<CXFA_FMExpression> e; |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMExpExpression(line, pExp1); |
+ e.reset(new CXFA_FMExpExpression(line, pExp1.release())); |
} else { |
- delete pExp1; |
- e = 0; |
+ e.reset(); |
} |
- return e; |
+ return e.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalOrExpression() { |
- CXFA_FMSimpleExpression *e1 = 0, *e2 = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
- e1 = ParseLogicalAndExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e1(ParseLogicalAndExpression()); |
for (;;) { |
switch (m_pToken->m_type) { |
case TOKor: |
- case TOKksor: |
+ case TOKksor: { |
NextToken(); |
- e2 = ParseLogicalAndExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e2( |
+ ParseLogicalAndExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMLogicalOrExpression(line, TOKor, e1, e2); |
+ e1.reset(new CXFA_FMLogicalOrExpression(line, TOKor, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
+ } |
default: |
break; |
} |
break; |
} |
- return e1; |
+ return e1.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalAndExpression() { |
- CXFA_FMSimpleExpression *e1 = 0, *e2 = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
- e1 = ParseEqualityExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e1(ParseEqualityExpression()); |
for (;;) { |
switch (m_pToken->m_type) { |
case TOKand: |
- case TOKksand: |
+ case TOKksand: { |
NextToken(); |
- e2 = ParseEqualityExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> e2(ParseEqualityExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMLogicalAndExpression(line, TOKand, e1, e2); |
+ e1.reset(new CXFA_FMLogicalAndExpression(line, TOKand, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
+ } |
default: |
break; |
} |
break; |
} |
- return e1; |
+ return e1.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseEqualityExpression() { |
- CXFA_FMSimpleExpression *e1 = 0, *e2 = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
- 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 = ParseRelationalExpression(); |
+ e2.reset(ParseRelationalExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMEqualityExpression(line, TOKeq, e1, e2); |
+ e1.reset(new CXFA_FMEqualityExpression(line, TOKeq, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
case TOKne: |
case TOKksne: |
NextToken(); |
- e2 = ParseRelationalExpression(); |
+ e2.reset(ParseRelationalExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMEqualityExpression(line, TOKne, e1, e2); |
+ e1.reset(new CXFA_FMEqualityExpression(line, TOKne, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
default: |
@@ -341,57 +327,57 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseEqualityExpression() { |
} |
break; |
} |
- return e1; |
+ return e1.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() { |
- CXFA_FMSimpleExpression *e1 = 0, *e2 = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
- 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 = ParseAddtiveExpression(); |
+ e2.reset(ParseAddtiveExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMRelationalExpression(line, TOKlt, e1, e2); |
+ e1.reset(new CXFA_FMRelationalExpression(line, TOKlt, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
case TOKgt: |
case TOKksgt: |
NextToken(); |
- e2 = ParseAddtiveExpression(); |
+ e2.reset(ParseAddtiveExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMRelationalExpression(line, TOKgt, e1, e2); |
+ e1.reset(new CXFA_FMRelationalExpression(line, TOKgt, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
case TOKle: |
case TOKksle: |
NextToken(); |
- e2 = ParseAddtiveExpression(); |
+ e2.reset(ParseAddtiveExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMRelationalExpression(line, TOKle, e1, e2); |
+ e1.reset(new CXFA_FMRelationalExpression(line, TOKle, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
case TOKge: |
case TOKksge: |
NextToken(); |
- e2 = ParseAddtiveExpression(); |
+ e2.reset(ParseAddtiveExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMRelationalExpression(line, TOKge, e1, e2); |
+ e1.reset(new CXFA_FMRelationalExpression(line, TOKge, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
default: |
@@ -399,33 +385,33 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() { |
} |
break; |
} |
- return e1; |
+ return e1.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseAddtiveExpression() { |
- CXFA_FMSimpleExpression *e1 = 0, *e2 = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
- 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 = ParseMultiplicativeExpression(); |
+ e2.reset(ParseMultiplicativeExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMAdditiveExpression(line, TOKplus, e1, e2); |
+ e1.reset(new CXFA_FMAdditiveExpression(line, TOKplus, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
case TOKminus: |
NextToken(); |
- e2 = ParseMultiplicativeExpression(); |
+ e2.reset(ParseMultiplicativeExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMAdditiveExpression(line, TOKminus, e1, e2); |
+ e1.reset(new CXFA_FMAdditiveExpression(line, TOKminus, e1.release(), |
+ e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
default: |
@@ -433,33 +419,33 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseAddtiveExpression() { |
} |
break; |
} |
- return e1; |
+ return e1.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseMultiplicativeExpression() { |
- CXFA_FMSimpleExpression *e1 = 0, *e2 = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
- 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 = ParseUnaryExpression(); |
+ e2.reset(ParseUnaryExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMMultiplicativeExpression(line, TOKmul, e1, e2); |
+ e1.reset(new CXFA_FMMultiplicativeExpression( |
+ line, TOKmul, e1.release(), e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
case TOKdiv: |
NextToken(); |
- e2 = ParseUnaryExpression(); |
+ e2.reset(ParseUnaryExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e1 = new CXFA_FMMultiplicativeExpression(line, TOKdiv, e1, e2); |
+ e1.reset(new CXFA_FMMultiplicativeExpression( |
+ line, TOKdiv, e1.release(), e2.release())); |
} else { |
- delete e1; |
- e1 = 0; |
+ e1.reset(); |
} |
continue; |
default: |
@@ -467,57 +453,57 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseMultiplicativeExpression() { |
} |
break; |
} |
- return e1; |
+ return e1.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseUnaryExpression() { |
- CXFA_FMSimpleExpression* e = 0; |
+ std::unique_ptr<CXFA_FMSimpleExpression> e; |
FX_DWORD line = m_pToken->m_uLinenum; |
switch (m_pToken->m_type) { |
case TOKplus: |
NextToken(); |
- e = ParseUnaryExpression(); |
+ e.reset(ParseUnaryExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMPosExpression(line, e); |
+ e.reset(new CXFA_FMPosExpression(line, e.release())); |
} else { |
- e = 0; |
+ e.reset(); |
} |
break; |
case TOKminus: |
NextToken(); |
- e = ParseUnaryExpression(); |
+ e.reset(ParseUnaryExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMNegExpression(line, e); |
+ e.reset(new CXFA_FMNegExpression(line, e.release())); |
} else { |
- e = 0; |
+ e.reset(); |
} |
break; |
case TOKksnot: |
NextToken(); |
- e = ParseUnaryExpression(); |
+ e.reset(ParseUnaryExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMNotExpression(line, e); |
+ e.reset(new CXFA_FMNotExpression(line, e.release())); |
} else { |
- e = 0; |
+ e.reset(); |
} |
break; |
default: |
- e = ParsePrimaryExpression(); |
+ e.reset(ParsePrimaryExpression()); |
break; |
} |
- return e; |
+ return e.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() { |
- CXFA_FMSimpleExpression* e = 0; |
+ std::unique_ptr<CXFA_FMSimpleExpression> e; |
FX_DWORD line = m_pToken->m_uLinenum; |
switch (m_pToken->m_type) { |
case TOKnumber: |
- e = new CXFA_FMNumberExpression(line, m_pToken->m_wstring); |
+ e.reset(new CXFA_FMNumberExpression(line, m_pToken->m_wstring)); |
NextToken(); |
break; |
case TOKstring: |
- e = new CXFA_FMStringExpression(line, m_pToken->m_wstring); |
+ e.reset(new CXFA_FMStringExpression(line, m_pToken->m_wstring)); |
NextToken(); |
break; |
case TOKidentifier: { |
@@ -526,24 +512,24 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() { |
if (m_pToken->m_type == TOKlbracket) { |
CXFA_FMSimpleExpression* s = ParseIndexExpression(); |
if (s) { |
- e = new CXFA_FMDotAccessorExpression(line, NULL, TOKdot, wsIdentifier, |
- s); |
+ e.reset(new CXFA_FMDotAccessorExpression(line, NULL, TOKdot, |
+ wsIdentifier, s)); |
} |
NextToken(); |
} else { |
- e = new CXFA_FMIdentifierExpressionn(line, wsIdentifier); |
+ e.reset(new CXFA_FMIdentifierExpressionn(line, wsIdentifier)); |
} |
} break; |
case TOKif: |
- e = new CXFA_FMIdentifierExpressionn(line, m_pToken->m_wstring); |
+ e.reset(new CXFA_FMIdentifierExpressionn(line, m_pToken->m_wstring)); |
NextToken(); |
break; |
case TOKnull: |
- e = new CXFA_FMNullExpression(line); |
+ e.reset(new CXFA_FMNullExpression(line)); |
NextToken(); |
break; |
case TOKlparen: |
- e = ParseParenExpression(); |
+ e.reset(ParseParenExpression()); |
break; |
default: |
CFX_WideString ws_TempString = m_pToken->m_wstring; |
@@ -552,12 +538,10 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() { |
NextToken(); |
break; |
} |
- e = ParsePostExpression(e); |
- if (!(m_pErrorInfo->message.IsEmpty())) { |
- delete e; |
- e = 0; |
- } |
- return e; |
+ e.reset(ParsePostExpression(e.release())); |
+ if (!(m_pErrorInfo->message.IsEmpty())) |
+ e.reset(); |
+ return e.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
@@ -567,9 +551,9 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
switch (m_pToken->m_type) { |
case TOKlparen: { |
NextToken(); |
- CFX_PtrArray* pArray = nullptr; |
+ std::unique_ptr<CFX_PtrArray> pArray; |
if (m_pToken->m_type != TOKrparen) { |
- pArray = new CFX_PtrArray(); |
+ pArray.reset(new CFX_PtrArray()); |
while (m_pToken->m_type != TOKrparen) { |
CXFA_FMSimpleExpression* e = ParseSimpleExpression(); |
if (e) { |
@@ -589,7 +573,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
} |
} |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMCallExpression(line, e, pArray, FALSE); |
+ e = new CXFA_FMCallExpression(line, e, pArray.release(), FALSE); |
NextToken(); |
if (m_pToken->m_type != TOKlbracket) { |
continue; |
@@ -600,14 +584,13 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
FX_WSTRC(L""), s); |
} else { |
delete e; |
- e = 0; |
+ e = nullptr; |
} |
} else { |
- int32_t nSize = pArray ? pArray->GetSize() : 0; |
- for (int32_t i = 0; i < nSize; ++i) { |
- delete static_cast<CXFA_FMSimpleExpression*>(pArray->GetAt(i)); |
+ if (pArray) { |
+ for (int32_t i = 0; i < pArray->GetSize(); ++i) |
+ delete static_cast<CXFA_FMSimpleExpression*>(pArray->GetAt(i)); |
} |
- delete pArray; |
delete e; |
e = nullptr; |
} |
@@ -623,9 +606,9 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
CXFA_FMSimpleExpression* pExpCall; |
pExpAccessor = e; |
NextToken(); |
- CFX_PtrArray* pArray = 0; |
+ std::unique_ptr<CFX_PtrArray> pArray; |
if (m_pToken->m_type != TOKrparen) { |
- pArray = new CFX_PtrArray(); |
+ pArray.reset(new CFX_PtrArray()); |
while (m_pToken->m_type != TOKrparen) { |
CXFA_FMSimpleExpression* exp = ParseSimpleExpression(); |
pArray->Add(exp); |
@@ -645,8 +628,8 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
if (m_pErrorInfo->message.IsEmpty()) { |
CXFA_FMSimpleExpression* pIdentifier = |
new CXFA_FMIdentifierExpressionn(tempLine, tempStr); |
- pExpCall = |
- new CXFA_FMCallExpression(line, pIdentifier, pArray, TRUE); |
+ pExpCall = new CXFA_FMCallExpression(line, pIdentifier, |
+ pArray.release(), TRUE); |
e = new CXFA_FMMethodCallExpression(line, pExpAccessor, pExpCall); |
NextToken(); |
if (m_pToken->m_type != TOKlbracket) { |
@@ -658,34 +641,26 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
FX_WSTRC(L""), s); |
} else { |
delete e; |
- e = 0; |
+ e = nullptr; |
} |
} else { |
- int32_t iSize = pArray->GetSize(); |
- for (int32_t i = 0; i < iSize; ++i) { |
- CXFA_FMSimpleExpression* pTemp = |
- (CXFA_FMSimpleExpression*)pArray->GetAt(i); |
- delete pTemp; |
+ if (pArray) { |
+ for (int32_t i = 0; i < pArray->GetSize(); ++i) { |
+ delete static_cast<CXFA_FMSimpleExpression*>( |
+ pArray->GetAt(i)); |
+ } |
} |
- delete pArray; |
delete e; |
- e = 0; |
+ e = nullptr; |
} |
} else if (m_pToken->m_type == TOKlbracket) { |
- CXFA_FMSimpleExpression* s = ParseIndexExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s(ParseIndexExpression()); |
if (!(m_pErrorInfo->message.IsEmpty())) { |
- if (s) { |
- delete s; |
- s = 0; |
- } |
- if (e) { |
- delete e; |
- e = 0; |
- } |
- return e; |
+ delete e; |
+ return nullptr; |
} |
e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdot, tempStr, |
- s); |
+ s.release()); |
} else { |
CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression( |
tempLine, ACCESSOR_NO_INDEX, NULL, FALSE); |
@@ -706,20 +681,13 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
FX_DWORD tempLine = m_pToken->m_uLinenum; |
NextToken(); |
if (m_pToken->m_type == TOKlbracket) { |
- CXFA_FMSimpleExpression* s = ParseIndexExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s(ParseIndexExpression()); |
if (!(m_pErrorInfo->message.IsEmpty())) { |
- if (s) { |
- delete s; |
- s = 0; |
- } |
- if (e) { |
- delete e; |
- e = 0; |
- } |
- return e; |
+ delete e; |
+ return nullptr; |
} |
e = new CXFA_FMDotDotAccessorExpression(tempLine, e, TOKdotdot, |
- tempStr, s); |
+ tempStr, s.release()); |
} else { |
CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression( |
tempLine, ACCESSOR_NO_INDEX, NULL, FALSE); |
@@ -741,20 +709,13 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
FX_DWORD tempLine = m_pToken->m_uLinenum; |
NextToken(); |
if (m_pToken->m_type == TOKlbracket) { |
- CXFA_FMSimpleExpression* s = ParseIndexExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> s(ParseIndexExpression()); |
if (!(m_pErrorInfo->message.IsEmpty())) { |
- if (s) { |
- delete s; |
- s = 0; |
- } |
- if (e) { |
- delete e; |
- e = 0; |
- } |
- return e; |
+ delete e; |
+ return nullptr; |
} |
e = new CXFA_FMDotAccessorExpression(tempLine, e, TOKdotscream, |
- tempStr, s); |
+ tempStr, s.release()); |
} else { |
CXFA_FMSimpleExpression* s = new CXFA_FMIndexExpression( |
tempLine, ACCESSOR_NO_INDEX, NULL, FALSE); |
@@ -784,24 +745,22 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression( |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseIndexExpression() { |
- CXFA_FMSimpleExpression* pExp = 0; |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp; |
FX_DWORD line = m_pToken->m_uLinenum; |
NextToken(); |
- CXFA_FMSimpleExpression* s = 0; |
+ std::unique_ptr<CXFA_FMSimpleExpression> s; |
XFA_FM_AccessorIndex accessorIndex = ACCESSOR_NO_RELATIVEINDEX; |
if (m_pToken->m_type == TOKmul) { |
- pExp = new CXFA_FMIndexExpression(line, accessorIndex, s, TRUE); |
+ pExp.reset( |
+ new CXFA_FMIndexExpression(line, accessorIndex, s.release(), TRUE)); |
NextToken(); |
if (m_pToken->m_type != TOKrbracket) { |
CFX_WideString ws_TempString = m_pToken->m_wstring; |
Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, |
XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); |
- if (pExp) { |
- delete pExp; |
- pExp = 0; |
- } |
+ pExp.reset(); |
} |
- return pExp; |
+ return pExp.release(); |
} |
if (m_pToken->m_type == TOKplus) { |
accessorIndex = ACCESSOR_POSITIVE_INDEX; |
@@ -810,47 +769,46 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseIndexExpression() { |
accessorIndex = ACCESSOR_NEGATIVE_INDEX; |
NextToken(); |
} |
- s = ParseSimpleExpression(); |
+ s.reset(ParseSimpleExpression()); |
if (m_pToken->m_type != TOKrbracket) { |
CFX_WideString ws_TempString = m_pToken->m_wstring; |
Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, |
XFA_FM_KeywordToString(TOKrparen), ws_TempString.c_str()); |
- if (s) { |
- delete s; |
- } |
} else { |
- pExp = new CXFA_FMIndexExpression(line, accessorIndex, s, FALSE); |
+ pExp.reset( |
+ new CXFA_FMIndexExpression(line, accessorIndex, s.release(), FALSE)); |
} |
- return pExp; |
+ return pExp.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseParenExpression() { |
- CXFA_FMSimpleExpression *pExp1 = 0, *pExp2 = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
Check(TOKlparen); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp1; |
if (m_pToken->m_type != TOKrparen) { |
- pExp1 = ParseLogicalOrExpression(); |
+ pExp1.reset(ParseLogicalOrExpression()); |
while (m_pToken->m_type == TOKassign) { |
NextToken(); |
- pExp2 = ParseLogicalOrExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pExp2( |
+ ParseLogicalOrExpression()); |
if (m_pErrorInfo->message.IsEmpty()) { |
- pExp1 = new CXFA_FMAssignExpression(line, TOKassign, pExp1, pExp2); |
+ pExp1.reset(new CXFA_FMAssignExpression( |
+ line, TOKassign, pExp1.release(), pExp2.release())); |
} else { |
- delete pExp1; |
- pExp1 = 0; |
+ pExp1.reset(); |
} |
} |
Check(TOKrparen); |
} else { |
NextToken(); |
} |
- return pExp1; |
+ return pExp1.release(); |
} |
CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() { |
FX_DWORD line = m_pToken->m_uLinenum; |
- CXFA_FMExpression* e = 0; |
- CFX_PtrArray* expression = new CFX_PtrArray(); |
+ CXFA_FMExpression* e = nullptr; |
+ std::unique_ptr<CFX_PtrArray> expression(new CFX_PtrArray()); |
while (1) { |
switch (m_pToken->m_type) { |
case TOKeof: |
@@ -878,48 +836,30 @@ CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() { |
} |
break; |
} |
- CXFA_FMBlockExpression* pExp = 0; |
+ std::unique_ptr<CXFA_FMBlockExpression> pExp; |
if (m_pErrorInfo->message.IsEmpty()) { |
- pExp = new CXFA_FMBlockExpression(line, expression); |
+ pExp.reset(new CXFA_FMBlockExpression(line, expression.release())); |
} else { |
- int32_t size = expression->GetSize(); |
- int32_t index = 0; |
- while (index < size) { |
- e = (CXFA_FMExpression*)expression->GetAt(index); |
- delete e; |
- index++; |
- } |
- expression->RemoveAll(); |
- delete expression; |
- expression = 0; |
+ for (int i = 0; i < expression->GetSize(); ++i) |
+ delete static_cast<CXFA_FMExpression*>(expression->GetAt(i)); |
} |
- return pExp; |
+ return pExp.release(); |
} |
CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() { |
- CXFA_FMSimpleExpression* pExpression = 0; |
- CXFA_FMExpression* pIfExpression = 0; |
- CXFA_FMExpression* pElseExpression = 0; |
FX_DWORD 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) { |
- if (pExpression) { |
- delete pExpression; |
- } |
- pExpression = ParseSimpleExpression(); |
- if (m_pToken->m_type == TOKcomma) { |
- NextToken(); |
- } else { |
+ pExpression.reset(ParseSimpleExpression()); |
+ if (m_pToken->m_type != TOKcomma) |
break; |
- } |
+ NextToken(); |
} |
Check(TOKrparen); |
if (m_pToken->m_type != TOKthen) { |
- if (pExpression) { |
- delete pExpression; |
- } |
m_lexer->SetCurrentLine(line); |
m_pToken = new CXFA_FMToken(line); |
m_pToken->m_type = TOKidentifier; |
@@ -929,22 +869,23 @@ CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() { |
return ParseExpExpression(); |
} |
Check(TOKthen); |
- pIfExpression = ParseBlockExpression(); |
+ std::unique_ptr<CXFA_FMExpression> pIfExpression(ParseBlockExpression()); |
+ std::unique_ptr<CXFA_FMExpression> pElseExpression; |
switch (m_pToken->m_type) { |
case TOKeof: |
case TOKendif: |
Check(TOKendif); |
break; |
case TOKif: |
- pElseExpression = ParseIfExpression(); |
+ pElseExpression.reset(ParseIfExpression()); |
Check(TOKendif); |
break; |
case TOKelseif: |
- pElseExpression = ParseIfExpression(); |
+ pElseExpression.reset(ParseIfExpression()); |
break; |
case TOKelse: |
NextToken(); |
- pElseExpression = ParseBlockExpression(); |
+ pElseExpression.reset(ParseBlockExpression()); |
Check(TOKendif); |
break; |
default: |
@@ -953,54 +894,35 @@ CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() { |
NextToken(); |
break; |
} |
- CXFA_FMIfExpression* pExp = 0; |
+ std::unique_ptr<CXFA_FMIfExpression> pExp; |
if (m_pErrorInfo->message.IsEmpty()) { |
- pExp = new CXFA_FMIfExpression(line, pExpression, pIfExpression, |
- pElseExpression); |
- } else { |
- if (pExpression) { |
- delete pExpression; |
- } |
- if (pIfExpression) { |
- delete pIfExpression; |
- } |
- if (pElseExpression) { |
- delete pElseExpression; |
- } |
+ pExp.reset(new CXFA_FMIfExpression(line, pExpression.release(), |
+ pIfExpression.release(), |
+ pElseExpression.release())); |
} |
- return pExp; |
+ return pExp.release(); |
} |
CXFA_FMExpression* CXFA_FMParse::ParseWhileExpression() { |
- CXFA_FMExpression* e = 0; |
- CXFA_FMSimpleExpression* pCondition = 0; |
- CXFA_FMExpression* pExpression = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
NextToken(); |
- pCondition = ParseParenExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pCondition(ParseParenExpression()); |
Check(TOKdo); |
- pExpression = ParseBlockExpression(); |
+ std::unique_ptr<CXFA_FMExpression> pExpression(ParseBlockExpression()); |
Check(TOKendwhile); |
- if (!m_pErrorInfo->message.IsEmpty()) { |
- if (pCondition) { |
- delete pCondition; |
- } |
- if (pExpression) { |
- delete pExpression; |
- } |
- delete e; |
- e = 0; |
- } else { |
- e = new CXFA_FMWhileExpression(line, pCondition, pExpression); |
+ std::unique_ptr<CXFA_FMExpression> e; |
+ if (m_pErrorInfo->message.IsEmpty()) { |
+ e.reset(new CXFA_FMWhileExpression(line, pCondition.release(), |
+ pExpression.release())); |
} |
- return e; |
+ return e.release(); |
} |
CXFA_FMSimpleExpression* CXFA_FMParse::ParseSubassignmentInForExpression() { |
- CXFA_FMSimpleExpression* e = 0; |
+ std::unique_ptr<CXFA_FMSimpleExpression> e; |
switch (m_pToken->m_type) { |
case TOKidentifier: |
- e = ParseSimpleExpression(); |
+ e.reset(ParseSimpleExpression()); |
break; |
default: |
CFX_WideString ws_TempString = m_pToken->m_wstring; |
@@ -1009,16 +931,11 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseSubassignmentInForExpression() { |
NextToken(); |
break; |
} |
- return e; |
+ return e.release(); |
} |
CXFA_FMExpression* CXFA_FMParse::ParseForExpression() { |
- CXFA_FMExpression* e = 0; |
CFX_WideStringC wsVariant; |
- CXFA_FMSimpleExpression* pAssignment = 0; |
- CXFA_FMSimpleExpression* pAccessor = 0; |
- CXFA_FMSimpleExpression* pStep = 0; |
- CXFA_FMExpression* pList = 0; |
FX_DWORD line = m_pToken->m_uLinenum; |
NextToken(); |
if (m_pToken->m_type != TOKidentifier) { |
@@ -1028,9 +945,10 @@ CXFA_FMExpression* CXFA_FMParse::ParseForExpression() { |
} |
wsVariant = m_pToken->m_wstring; |
NextToken(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pAssignment; |
if (m_pToken->m_type == TOKassign) { |
NextToken(); |
- pAssignment = ParseSimpleExpression(); |
+ pAssignment.reset(ParseSimpleExpression()); |
} else { |
CFX_WideString ws_TempString = m_pToken->m_wstring; |
Error(m_pToken->m_uLinenum, FMERR_EXPECTED_TOKEN, |
@@ -1047,39 +965,29 @@ CXFA_FMExpression* CXFA_FMParse::ParseForExpression() { |
(const FX_WCHAR*)ws_TempString); |
} |
NextToken(); |
- pAccessor = ParseSimpleExpression(); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pAccessor(ParseSimpleExpression()); |
+ std::unique_ptr<CXFA_FMSimpleExpression> pStep; |
if (m_pToken->m_type == TOKstep) { |
NextToken(); |
- pStep = ParseSimpleExpression(); |
+ pStep.reset(ParseSimpleExpression()); |
} |
Check(TOKdo); |
- pList = ParseBlockExpression(); |
+ std::unique_ptr<CXFA_FMExpression> pList(ParseBlockExpression()); |
Check(TOKendfor); |
+ std::unique_ptr<CXFA_FMExpression> e; |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMForExpression(line, wsVariant, pAssignment, pAccessor, |
- iDirection, pStep, pList); |
- } else { |
- if (pAssignment) { |
- delete pAssignment; |
- } |
- if (pAccessor) { |
- delete pAccessor; |
- } |
- if (pStep) { |
- delete pStep; |
- } |
- if (pList) { |
- delete pList; |
- } |
+ e.reset(new CXFA_FMForExpression(line, wsVariant, pAssignment.release(), |
+ pAccessor.release(), iDirection, |
+ pStep.release(), pList.release())); |
} |
- return e; |
+ return e.release(); |
} |
CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
- CXFA_FMExpression* e = 0; |
+ std::unique_ptr<CXFA_FMExpression> e; |
CFX_WideStringC wsIdentifier; |
- CFX_PtrArray* pAccessors = 0; |
- CXFA_FMExpression* pList = 0; |
+ std::unique_ptr<CFX_PtrArray> pAccessors; |
+ std::unique_ptr<CXFA_FMExpression> pList; |
FX_DWORD line = m_pToken->m_uLinenum; |
NextToken(); |
if (m_pToken->m_type != TOKidentifier) { |
@@ -1097,7 +1005,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
ws_TempString.c_str()); |
NextToken(); |
} else { |
- pAccessors = new CFX_PtrArray(); |
+ pAccessors.reset(new CFX_PtrArray()); |
while (m_pToken->m_type != TOKrparen) { |
CXFA_FMSimpleExpression* s = ParseSimpleExpression(); |
if (s) { |
@@ -1112,42 +1020,30 @@ CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() { |
Check(TOKrparen); |
} |
Check(TOKdo); |
- pList = ParseBlockExpression(); |
+ pList.reset(ParseBlockExpression()); |
Check(TOKendfor); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMForeachExpression(line, wsIdentifier, pAccessors, pList); |
+ e.reset(new CXFA_FMForeachExpression( |
+ line, wsIdentifier, pAccessors.release(), pList.release())); |
} else { |
if (pAccessors) { |
- CXFA_FMSimpleExpression* s = 0; |
- int32_t size = pAccessors->GetSize(); |
- int32_t index = 0; |
- while (index < size) { |
- s = (CXFA_FMSimpleExpression*)pAccessors->GetAt(index); |
- delete s; |
- index++; |
- } |
- pAccessors->RemoveAll(); |
- delete pAccessors; |
- pAccessors = 0; |
- } |
- if (pList) { |
- delete pList; |
+ for (int i = 0; i < pAccessors->GetSize(); ++i) |
+ delete static_cast<CXFA_FMSimpleExpression*>(pAccessors->GetAt(i)); |
} |
} |
- return e; |
+ return e.release(); |
} |
CXFA_FMExpression* CXFA_FMParse::ParseDoExpression() { |
- CXFA_FMExpression* e = 0; |
+ std::unique_ptr<CXFA_FMExpression> e; |
FX_DWORD line = m_pToken->m_uLinenum; |
NextToken(); |
- e = ParseBlockExpression(); |
+ e.reset(ParseBlockExpression()); |
Check(TOKend); |
if (m_pErrorInfo->message.IsEmpty()) { |
- e = new CXFA_FMDoExpression(line, e); |
+ e.reset(new CXFA_FMDoExpression(line, e.release())); |
} else { |
- delete e; |
- e = 0; |
+ e.reset(); |
} |
- return e; |
+ return e.release(); |
} |