summaryrefslogtreecommitdiff
path: root/xfa/src/fxfa/src/fm2js/xfa_lexer.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/src/fxfa/src/fm2js/xfa_lexer.h')
-rw-r--r--xfa/src/fxfa/src/fm2js/xfa_lexer.h25
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