diff options
Diffstat (limited to 'xfa/src/fxfa/src/fm2js/xfa_lexer.h')
-rw-r--r-- | xfa/src/fxfa/src/fm2js/xfa_lexer.h | 25 |
1 files changed, 14 insertions, 11 deletions
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 |