| Index: xfa/src/fxfa/src/fm2js/xfa_lexer.cpp
|
| diff --git a/xfa/src/fxfa/src/fm2js/xfa_lexer.cpp b/xfa/src/fxfa/src/fm2js/xfa_lexer.cpp
|
| index 8ecc85b4b7cfb2d0d745f56988bfb3010e68cea5..957c21b87418d0c5ddf895aaeab596bba7128084 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;
|
|
|