summaryrefslogtreecommitdiff
path: root/xfa/src/fxfa
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/src/fxfa')
-rw-r--r--xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp77
-rw-r--r--xfa/src/fxfa/src/fm2js/xfa_fmparse.h11
-rw-r--r--xfa/src/fxfa/src/fm2js/xfa_lexer.cpp92
-rw-r--r--xfa/src/fxfa/src/fm2js/xfa_lexer.h25
4 files changed, 95 insertions, 110 deletions
diff --git a/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp b/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp
index 9a01267e27..105c5144ca 100644
--- a/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp
+++ b/xfa/src/fxfa/src/fm2js/xfa_fmparse.cpp
@@ -5,33 +5,16 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "xfa_fm2js.h"
-CXFA_FMParse::CXFA_FMParse() {
- m_pScript = 0;
- m_uLength = 0;
- m_pErrorInfo = 0;
- m_lexer = 0;
- m_pToken = 0;
-}
-CXFA_FMParse::~CXFA_FMParse() {
- if (m_lexer) {
- delete m_lexer;
- }
- m_lexer = 0;
- m_pErrorInfo = 0;
- m_pScript = 0;
- m_pToken = 0;
-}
+
+CXFA_FMParse::CXFA_FMParse() : m_pToken(nullptr), m_pErrorInfo(0) {}
+
int32_t CXFA_FMParse::Init(const CFX_WideStringC& wsFormcalc,
CXFA_FMErrorInfo* pErrorInfo) {
- m_pScript = wsFormcalc.GetPtr();
- m_uLength = wsFormcalc.GetLength();
m_pErrorInfo = pErrorInfo;
- m_lexer = new CXFA_FMLexer(wsFormcalc, m_pErrorInfo);
- if (m_lexer == 0) {
- return -1;
- }
+ m_lexer.reset(new CXFA_FMLexer(wsFormcalc, m_pErrorInfo));
return 0;
}
+
void CXFA_FMParse::NextToken() {
m_pToken = m_lexer->NextToken();
while (m_pToken->m_type == TOKreserver) {
@@ -41,6 +24,7 @@ void CXFA_FMParse::NextToken() {
m_pToken = m_lexer->NextToken();
}
}
+
void CXFA_FMParse::Check(XFA_FM_TOKEN op) {
if (m_pToken->m_type != op) {
CFX_WideString ws_TempString = m_pToken->m_wstring;
@@ -49,6 +33,7 @@ void CXFA_FMParse::Check(XFA_FM_TOKEN op) {
}
NextToken();
}
+
void CXFA_FMParse::Error(FX_DWORD lineNum, XFA_FM_ERRMSG msg, ...) {
m_pErrorInfo->linenum = lineNum;
const FX_WCHAR* lpMessageInfo = XFA_FM_ErrorMsg(msg);
@@ -57,25 +42,17 @@ void CXFA_FMParse::Error(FX_DWORD lineNum, XFA_FM_ERRMSG msg, ...) {
m_pErrorInfo->message.FormatV(lpMessageInfo, ap);
va_end(ap);
}
+
CFX_PtrArray* CXFA_FMParse::ParseTopExpression() {
CXFA_FMExpression* e = 0;
CFX_PtrArray* expression = new CFX_PtrArray();
while (1) {
- if (m_pToken->m_type == TOKeof) {
- return expression;
- }
- if (m_pToken->m_type == TOKendfunc) {
- return expression;
- }
- if (m_pToken->m_type == TOKendif) {
- return expression;
- }
- if (m_pToken->m_type == TOKelseif) {
- return expression;
- }
- if (m_pToken->m_type == TOKelse) {
+ 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;
}
+
if (m_pToken->m_type == TOKfunc) {
e = ParseFunction();
if (e) {
@@ -94,6 +71,7 @@ CFX_PtrArray* CXFA_FMParse::ParseTopExpression() {
}
return expression;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseFunction() {
CXFA_FMExpression* e = 0;
CFX_WideStringC ident;
@@ -172,6 +150,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseFunction() {
}
return e;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseExpression() {
CXFA_FMExpression* e = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -221,6 +200,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseExpression() {
}
return e;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseVarExpression() {
CXFA_FMExpression* e = 0;
CFX_WideStringC ident;
@@ -246,6 +226,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseVarExpression() {
}
return e;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseSimpleExpression() {
FX_DWORD line = m_pToken->m_uLinenum;
CXFA_FMSimpleExpression *pExp1 = 0, *pExp2 = 0;
@@ -262,6 +243,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseSimpleExpression() {
}
return pExp1;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseExpExpression() {
CXFA_FMExpression* e = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -275,6 +257,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseExpExpression() {
}
return e;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalOrExpression() {
CXFA_FMSimpleExpression *e1 = 0, *e2 = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -299,6 +282,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalOrExpression() {
}
return e1;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalAndExpression() {
CXFA_FMSimpleExpression *e1 = 0, *e2 = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -323,6 +307,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseLogicalAndExpression() {
}
return e1;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseEqualityExpression() {
CXFA_FMSimpleExpression *e1 = 0, *e2 = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -358,6 +343,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseEqualityExpression() {
}
return e1;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() {
CXFA_FMSimpleExpression *e1 = 0, *e2 = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -415,6 +401,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseRelationalExpression() {
}
return e1;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseAddtiveExpression() {
CXFA_FMSimpleExpression *e1 = 0, *e2 = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -448,6 +435,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseAddtiveExpression() {
}
return e1;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseMultiplicativeExpression() {
CXFA_FMSimpleExpression *e1 = 0, *e2 = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -481,6 +469,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseMultiplicativeExpression() {
}
return e1;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseUnaryExpression() {
CXFA_FMSimpleExpression* e = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -518,6 +507,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseUnaryExpression() {
}
return e;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() {
CXFA_FMSimpleExpression* e = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -569,6 +559,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePrimaryExpression() {
}
return e;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression(
CXFA_FMSimpleExpression* e) {
FX_DWORD line = m_pToken->m_uLinenum;
@@ -586,7 +577,8 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression(
}
if (m_pToken->m_type == TOKcomma) {
NextToken();
- } else if (m_pToken->m_type == TOKeof) {
+ } else if (m_pToken->m_type == TOKeof ||
+ m_pToken->m_type == TOKreserver) {
break;
}
}
@@ -641,7 +633,8 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression(
pArray->Add(exp);
if (m_pToken->m_type == TOKcomma) {
NextToken();
- } else if (m_pToken->m_type == TOKeof) {
+ } else if (m_pToken->m_type == TOKeof ||
+ m_pToken->m_type == TOKreserver) {
break;
}
}
@@ -791,6 +784,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParsePostExpression(
}
return e;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseIndexExpression() {
CXFA_FMSimpleExpression* pExp = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -831,6 +825,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseIndexExpression() {
}
return pExp;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseParenExpression() {
CXFA_FMSimpleExpression *pExp1 = 0, *pExp2 = 0;
FX_DWORD line = m_pToken->m_uLinenum;
@@ -853,6 +848,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseParenExpression() {
}
return pExp1;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() {
FX_DWORD line = m_pToken->m_uLinenum;
CXFA_FMExpression* e = 0;
@@ -867,6 +863,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() {
case TOKendfor:
case TOKend:
case TOKendfunc:
+ case TOKreserver:
break;
case TOKfunc:
e = ParseFunction();
@@ -900,6 +897,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseBlockExpression() {
}
return pExp;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() {
CXFA_FMSimpleExpression* pExpression = 0;
CXFA_FMExpression* pIfExpression = 0;
@@ -974,6 +972,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseIfExpression() {
}
return pExp;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseWhileExpression() {
CXFA_FMExpression* e = 0;
CXFA_FMSimpleExpression* pCondition = 0;
@@ -998,6 +997,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseWhileExpression() {
}
return e;
}
+
CXFA_FMSimpleExpression* CXFA_FMParse::ParseSubassignmentInForExpression() {
CXFA_FMSimpleExpression* e = 0;
switch (m_pToken->m_type) {
@@ -1013,6 +1013,7 @@ CXFA_FMSimpleExpression* CXFA_FMParse::ParseSubassignmentInForExpression() {
}
return e;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseForExpression() {
CXFA_FMExpression* e = 0;
CFX_WideStringC wsVariant;
@@ -1075,6 +1076,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseForExpression() {
}
return e;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() {
CXFA_FMExpression* e = 0;
CFX_WideStringC wsIdentifier;
@@ -1136,6 +1138,7 @@ CXFA_FMExpression* CXFA_FMParse::ParseForeachExpression() {
}
return e;
}
+
CXFA_FMExpression* CXFA_FMParse::ParseDoExpression() {
CXFA_FMExpression* e = 0;
FX_DWORD line = m_pToken->m_uLinenum;
diff --git a/xfa/src/fxfa/src/fm2js/xfa_fmparse.h b/xfa/src/fxfa/src/fm2js/xfa_fmparse.h
index 45cd3db647..ed950c5aa4 100644
--- a/xfa/src/fxfa/src/fm2js/xfa_fmparse.h
+++ b/xfa/src/fxfa/src/fm2js/xfa_fmparse.h
@@ -6,10 +6,14 @@
#ifndef _XFA_FM_PARSE_H
#define _XFA_FM_PARSE_H
+
+#include <memory>
+
+#include "xfa/src/fxfa/src/fm2js/xfa_lexer.h"
+
class CXFA_FMParse {
public:
CXFA_FMParse();
- ~CXFA_FMParse();
int32_t Init(const CFX_WideStringC& wsFormcalc, CXFA_FMErrorInfo* pErrorInfo);
void NextToken();
void Check(XFA_FM_TOKEN op);
@@ -40,10 +44,9 @@ class CXFA_FMParse {
CXFA_FMSimpleExpression* ParseIndexExpression();
private:
- const FX_WCHAR* m_pScript;
- FX_STRSIZE m_uLength;
- CXFA_FMLexer* m_lexer;
+ std::unique_ptr<CXFA_FMLexer> m_lexer;
CXFA_FMToken* m_pToken;
CXFA_FMErrorInfo* m_pErrorInfo;
};
+
#endif
diff --git a/xfa/src/fxfa/src/fm2js/xfa_lexer.cpp b/xfa/src/fxfa/src/fm2js/xfa_lexer.cpp
index 8ecc85b4b7..957c21b874 100644
--- a/xfa/src/fxfa/src/fm2js/xfa_lexer.cpp
+++ b/xfa/src/fxfa/src/fm2js/xfa_lexer.cpp
@@ -5,6 +5,9 @@
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
#include "xfa_fm2js.h"
+
+namespace {
+
struct XFA_FMDChar {
static const FX_WCHAR* inc(const FX_WCHAR*& p) {
++p;
@@ -43,6 +46,7 @@ struct XFA_FMDChar {
const FX_WCHAR*& pEnd);
static FX_BOOL isUnicodeAlpha(uint16_t ch);
};
+
inline FX_BOOL XFA_FMDChar::isAvalid(const FX_WCHAR* p, FX_BOOL flag) {
if (*p == 0) {
return 1;
@@ -58,6 +62,7 @@ inline FX_BOOL XFA_FMDChar::isAvalid(const FX_WCHAR* p, FX_BOOL flag) {
}
return 0;
}
+
inline FX_BOOL XFA_FMDChar::string2number(const FX_WCHAR* s,
FX_DOUBLE* pValue,
const FX_WCHAR*& pEnd) {
@@ -66,6 +71,7 @@ inline FX_BOOL XFA_FMDChar::string2number(const FX_WCHAR* s,
}
return 0;
}
+
inline FX_BOOL XFA_FMDChar::isUnicodeAlpha(uint16_t ch) {
if (ch == 0 || ch == 0x0A || ch == 0x0D || ch == 0x09 || ch == 0x0B ||
ch == 0x0C || ch == 0x20 || ch == '.' || ch == ';' || ch == '"' ||
@@ -73,11 +79,11 @@ inline FX_BOOL XFA_FMDChar::isUnicodeAlpha(uint16_t ch) {
ch == ')' || ch == ']' || ch == '[' || ch == '&' || ch == '|' ||
ch == '+' || ch == '-' || ch == '*' || ch == '/') {
return FALSE;
- } else {
- return TRUE;
}
+ return TRUE;
}
-static XFA_FMKeyword keyWords[] = {
+
+XFA_FMKeyword keyWords[] = {
{TOKand, 0x00000026, L"&"},
{TOKlparen, 0x00000028, L"("},
{TOKrparen, 0x00000029, L")"},
@@ -138,48 +144,30 @@ static XFA_FMKeyword keyWords[] = {
{TOKfunc, 0xcdce60ec, L"func"},
{TOKendif, 0xe0e8fee6, L"endif"},
};
-static const FX_WORD KEYWORD_START = TOKdo;
-static const FX_WORD KEYWORD_END = TOKendif;
+
+const FX_WORD KEYWORD_START = TOKdo;
+const FX_WORD KEYWORD_END = TOKendif;
+
+} // namespace
+
const FX_WCHAR* XFA_FM_KeywordToString(XFA_FM_TOKEN op) {
return keyWords[op].m_keword;
}
-CXFA_FMToken::CXFA_FMToken() {
- m_type = TOKreserver;
- m_uLinenum = 1;
- m_pNext = 0;
-}
-CXFA_FMToken::CXFA_FMToken(FX_DWORD uLineNum) {
- m_type = TOKreserver;
- m_uLinenum = uLineNum;
- m_pNext = 0;
-}
-CXFA_FMToken::~CXFA_FMToken() {}
+
+CXFA_FMToken::CXFA_FMToken() : m_type(TOKreserver), m_uLinenum(1) {}
+
+CXFA_FMToken::CXFA_FMToken(FX_DWORD uLineNum)
+ : m_type(TOKreserver), m_uLinenum(uLineNum) {}
+
CXFA_FMLexer::CXFA_FMLexer(const CFX_WideStringC& wsFormCalc,
- CXFA_FMErrorInfo* pErrorInfo) {
- m_pScript = wsFormCalc.GetPtr();
- m_uLength = wsFormCalc.GetLength();
- m_uCurrentLine = 1;
- m_ptr = m_pScript;
- m_pToken = 0;
- m_pErrorInfo = pErrorInfo;
-}
+ CXFA_FMErrorInfo* pErrorInfo)
+ : m_ptr(wsFormCalc.GetPtr()), m_uCurrentLine(1), m_pErrorInfo(pErrorInfo) {}
+
CXFA_FMToken* CXFA_FMLexer::NextToken() {
- CXFA_FMToken* t = 0;
- if (!m_pToken) {
- m_pToken = Scan();
- } else {
- if (m_pToken->m_pNext) {
- t = m_pToken->m_pNext;
- delete m_pToken;
- m_pToken = t;
- } else {
- t = m_pToken;
- m_pToken = Scan();
- delete t;
- }
- }
- return m_pToken;
+ m_pToken.reset(Scan());
+ return m_pToken.get();
}
+
CXFA_FMToken* CXFA_FMLexer::Scan() {
uint16_t ch = 0;
CXFA_FMToken* p = new CXFA_FMToken(m_uCurrentLine);
@@ -217,9 +205,6 @@ CXFA_FMToken* CXFA_FMLexer::Scan() {
const FX_WCHAR* pTemp = 0;
p->m_type = TOKstring;
iRet = String(p, m_ptr, pTemp);
- if (iRet) {
- return p;
- }
m_ptr = pTemp;
}
return p;
@@ -414,6 +399,7 @@ CXFA_FMToken* CXFA_FMLexer::Scan() {
}
}
}
+
FX_DWORD CXFA_FMLexer::Number(CXFA_FMToken* t,
const FX_WCHAR* p,
const FX_WCHAR*& pEnd) {
@@ -427,6 +413,7 @@ FX_DWORD CXFA_FMLexer::Number(CXFA_FMToken* t,
t->m_wstring = CFX_WideStringC(p, (pEnd - p));
return 0;
}
+
FX_DWORD CXFA_FMLexer::String(CXFA_FMToken* t,
const FX_WCHAR* p,
const FX_WCHAR*& pEnd) {
@@ -466,6 +453,7 @@ FX_DWORD CXFA_FMLexer::String(CXFA_FMToken* t,
t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart));
return 0;
}
+
FX_DWORD CXFA_FMLexer::Identifiers(CXFA_FMToken* t,
const FX_WCHAR* p,
const FX_WCHAR*& pEnd) {
@@ -500,6 +488,7 @@ FX_DWORD CXFA_FMLexer::Identifiers(CXFA_FMToken* t,
t->m_wstring = CFX_WideStringC(pStart, (pEnd - pStart));
return 0;
}
+
void CXFA_FMLexer::Comment(const FX_WCHAR* p, const FX_WCHAR*& pEnd) {
unsigned ch = 0;
XFA_FMDChar::inc(p);
@@ -521,6 +510,7 @@ void CXFA_FMLexer::Comment(const FX_WCHAR* p, const FX_WCHAR*& pEnd) {
}
pEnd = p;
}
+
XFA_FM_TOKEN CXFA_FMLexer::IsKeyword(const CFX_WideStringC& str) {
int32_t iLength = str.GetLength();
uint32_t uHash = FX_HashCode_String_GetW(str.GetPtr(), iLength, TRUE);
@@ -540,22 +530,7 @@ XFA_FM_TOKEN CXFA_FMLexer::IsKeyword(const CFX_WideStringC& str) {
} while (iStart <= iEnd);
return TOKidentifier;
}
-CXFA_FMLexer::~CXFA_FMLexer() {
- m_pScript = 0;
- m_ptr = m_pScript;
- if (m_pToken) {
- CXFA_FMToken* t1 = m_pToken;
- CXFA_FMToken* t2 = t1->m_pNext;
- while (t2) {
- delete t1;
- t1 = t2;
- t2 = t2->m_pNext;
- }
- delete m_pToken;
- m_pToken = 0;
- }
- m_pErrorInfo = 0;
-}
+
void CXFA_FMLexer::Error(XFA_FM_ERRMSG msg, ...) {
m_pErrorInfo->linenum = m_uCurrentLine;
const FX_WCHAR* lpMessageInfo = XFA_FM_ErrorMsg(msg);
@@ -564,6 +539,7 @@ void CXFA_FMLexer::Error(XFA_FM_ERRMSG msg, ...) {
m_pErrorInfo->message.FormatV(lpMessageInfo, ap);
va_end(ap);
}
+
FX_BOOL CXFA_FMLexer::HasError() const {
if (m_pErrorInfo->message.IsEmpty()) {
return FALSE;
diff --git a/xfa/src/fxfa/src/fm2js/xfa_lexer.h b/xfa/src/fxfa/src/fm2js/xfa_lexer.h
index 85b647e46c..14b927d6d9 100644
--- a/xfa/src/fxfa/src/fm2js/xfa_lexer.h
+++ b/xfa/src/fxfa/src/fm2js/xfa_lexer.h
@@ -6,6 +6,9 @@
#ifndef _XFA_FM_LEXER_H
#define _XFA_FM_LEXER_H
+
+#include <memory>
+
enum XFA_FM_TOKEN {
TOKand,
TOKlparen,
@@ -76,26 +79,28 @@ enum XFA_FM_TOKEN {
TOKnumber,
TOKreserver
};
+
struct XFA_FMKeyword {
XFA_FM_TOKEN m_type;
uint32_t m_uHash;
const FX_WCHAR* m_keword;
};
+
const FX_WCHAR* XFA_FM_KeywordToString(XFA_FM_TOKEN op);
+
class CXFA_FMToken {
public:
CXFA_FMToken();
- CXFA_FMToken(FX_DWORD uLineNum);
- ~CXFA_FMToken();
+ explicit CXFA_FMToken(FX_DWORD uLineNum);
+
CFX_WideStringC m_wstring;
XFA_FM_TOKEN m_type;
FX_DWORD m_uLinenum;
- CXFA_FMToken* m_pNext;
};
+
class CXFA_FMLexer {
public:
CXFA_FMLexer(const CFX_WideStringC& wsFormcalc, CXFA_FMErrorInfo* pErrorInfo);
- ~CXFA_FMLexer();
CXFA_FMToken* NextToken();
FX_DWORD Number(CXFA_FMToken* t, const FX_WCHAR* p, const FX_WCHAR*& pEnd);
FX_DWORD String(CXFA_FMToken* t, const FX_WCHAR* p, const FX_WCHAR*& pEnd);
@@ -106,10 +111,8 @@ class CXFA_FMLexer {
XFA_FM_TOKEN IsKeyword(const CFX_WideStringC& p);
void SetCurrentLine(FX_DWORD line) { m_uCurrentLine = line; }
void SetToken(CXFA_FMToken* pToken) {
- if (m_pToken) {
- delete m_pToken;
- }
- m_pToken = pToken;
+ if (m_pToken.get() != pToken)
+ m_pToken.reset(pToken);
}
const FX_WCHAR* SavePos() { return m_ptr; }
void RestorePos(const FX_WCHAR* pPos) { m_ptr = pPos; }
@@ -118,11 +121,11 @@ class CXFA_FMLexer {
protected:
CXFA_FMToken* Scan();
- const FX_WCHAR* m_pScript;
+
const FX_WCHAR* m_ptr;
- FX_STRSIZE m_uLength;
FX_DWORD m_uCurrentLine;
- CXFA_FMToken* m_pToken;
+ std::unique_ptr<CXFA_FMToken> m_pToken;
CXFA_FMErrorInfo* m_pErrorInfo;
};
+
#endif