aboutsummaryrefslogtreecommitdiff
path: root/xfa/fxfa/formcalc/cxfa_fmexpression.h
diff options
context:
space:
mode:
Diffstat (limited to 'xfa/fxfa/formcalc/cxfa_fmexpression.h')
-rw-r--r--xfa/fxfa/formcalc/cxfa_fmexpression.h608
1 files changed, 608 insertions, 0 deletions
diff --git a/xfa/fxfa/formcalc/cxfa_fmexpression.h b/xfa/fxfa/formcalc/cxfa_fmexpression.h
new file mode 100644
index 000000000..e00921f70
--- /dev/null
+++ b/xfa/fxfa/formcalc/cxfa_fmexpression.h
@@ -0,0 +1,608 @@
+// Copyright 2014 The PDFium Authors
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
+
+#ifndef XFA_FXFA_FORMCALC_CXFA_FMEXPRESSION_H_
+#define XFA_FXFA_FORMCALC_CXFA_FMEXPRESSION_H_
+
+#include <vector>
+
+#include "core/fxcrt/widestring.h"
+#include "core/fxcrt/widetext_buffer.h"
+#include "fxjs/gc/heap.h"
+#include "third_party/abseil-cpp/absl/types/optional.h"
+#include "v8/include/cppgc/garbage-collected.h"
+#include "v8/include/cppgc/member.h"
+#include "xfa/fxfa/formcalc/cxfa_fmlexer.h"
+
+class CXFA_FMExpression : public cppgc::GarbageCollected<CXFA_FMExpression> {
+ public:
+ enum class ReturnType { kImplied, kInferred };
+
+ virtual ~CXFA_FMExpression();
+ virtual void Trace(cppgc::Visitor* visitor) const;
+
+ virtual bool ToJavaScript(WideTextBuffer* js, ReturnType type) const = 0;
+
+ protected:
+ CXFA_FMExpression();
+};
+
+class CXFA_FMSimpleExpression : public CXFA_FMExpression {
+ public:
+ ~CXFA_FMSimpleExpression() override;
+
+ XFA_FM_TOKEN GetOperatorToken() const { return m_op; }
+
+ protected:
+ explicit CXFA_FMSimpleExpression(XFA_FM_TOKEN op);
+
+ private:
+ const XFA_FM_TOKEN m_op;
+};
+
+class CXFA_FMChainableExpression : public CXFA_FMSimpleExpression {
+ public:
+ ~CXFA_FMChainableExpression() override;
+ void Trace(cppgc::Visitor* visitor) const override;
+
+ protected:
+ CXFA_FMChainableExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+
+ CXFA_FMSimpleExpression* GetFirstExpression() const { return m_pExp1; }
+ CXFA_FMSimpleExpression* GetSecondExpression() const { return m_pExp2; }
+
+ private:
+ cppgc::Member<CXFA_FMSimpleExpression> m_pExp1;
+ cppgc::Member<CXFA_FMSimpleExpression> m_pExp2;
+};
+
+class CXFA_FMNullExpression final : public CXFA_FMSimpleExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMNullExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMNullExpression();
+};
+
+class CXFA_FMNumberExpression final : public CXFA_FMSimpleExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMNumberExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ explicit CXFA_FMNumberExpression(WideString wsNumber);
+
+ WideString m_wsNumber;
+};
+
+class CXFA_FMStringExpression final : public CXFA_FMSimpleExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMStringExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ explicit CXFA_FMStringExpression(WideString wsString);
+
+ WideString m_wsString;
+};
+
+class CXFA_FMIdentifierExpression final : public CXFA_FMSimpleExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMIdentifierExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ explicit CXFA_FMIdentifierExpression(WideString wsIdentifier);
+
+ WideString m_wsIdentifier;
+};
+
+class CXFA_FMAssignExpression final : public CXFA_FMChainableExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMAssignExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMAssignExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMBinExpression : public CXFA_FMChainableExpression {
+ public:
+ ~CXFA_FMBinExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ protected:
+ CXFA_FMBinExpression(const WideString& opName,
+ XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+
+ private:
+ WideString m_OpName;
+};
+
+class CXFA_FMLogicalOrExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMLogicalOrExpression() override;
+
+ private:
+ CXFA_FMLogicalOrExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMLogicalAndExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMLogicalAndExpression() override;
+
+ private:
+ CXFA_FMLogicalAndExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMEqualExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMEqualExpression() override;
+
+ private:
+ CXFA_FMEqualExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMNotEqualExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMNotEqualExpression() override;
+
+ private:
+ CXFA_FMNotEqualExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMGtExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMGtExpression() override;
+
+ private:
+ CXFA_FMGtExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMGeExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMGeExpression() override;
+
+ private:
+ CXFA_FMGeExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMLtExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMLtExpression() override;
+
+ private:
+ CXFA_FMLtExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMLeExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMLeExpression() override;
+
+ private:
+ CXFA_FMLeExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMPlusExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMPlusExpression() override;
+
+ private:
+ CXFA_FMPlusExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMMinusExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMMinusExpression() override;
+
+ private:
+ CXFA_FMMinusExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMMulExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMMulExpression() override;
+
+ private:
+ CXFA_FMMulExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMDivExpression final : public CXFA_FMBinExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMDivExpression() override;
+
+ private:
+ CXFA_FMDivExpression(XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp1,
+ CXFA_FMSimpleExpression* pExp2);
+};
+
+class CXFA_FMUnaryExpression : public CXFA_FMSimpleExpression {
+ public:
+ ~CXFA_FMUnaryExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ protected:
+ CXFA_FMUnaryExpression(const WideString& opName,
+ XFA_FM_TOKEN op,
+ CXFA_FMSimpleExpression* pExp);
+
+ private:
+ WideString m_OpName;
+ cppgc::Member<CXFA_FMSimpleExpression> m_pExp;
+};
+
+class CXFA_FMPosExpression final : public CXFA_FMUnaryExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMPosExpression() override;
+
+ private:
+ explicit CXFA_FMPosExpression(CXFA_FMSimpleExpression* pExp);
+};
+
+class CXFA_FMNegExpression final : public CXFA_FMUnaryExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMNegExpression() override;
+
+ private:
+ explicit CXFA_FMNegExpression(CXFA_FMSimpleExpression* pExp);
+};
+
+class CXFA_FMNotExpression final : public CXFA_FMUnaryExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMNotExpression() override;
+
+ private:
+ explicit CXFA_FMNotExpression(CXFA_FMSimpleExpression* pExp);
+};
+
+class CXFA_FMCallExpression final : public CXFA_FMSimpleExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMCallExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ bool IsBuiltInFunc(WideTextBuffer* funcName) const;
+ uint32_t IsMethodWithObjParam(const WideString& methodName) const;
+
+ private:
+ CXFA_FMCallExpression(
+ CXFA_FMSimpleExpression* pExp,
+ std::vector<cppgc::Member<CXFA_FMSimpleExpression>>&& pArguments,
+ bool bIsSomMethod);
+
+ cppgc::Member<CXFA_FMSimpleExpression> m_pExp;
+ std::vector<cppgc::Member<CXFA_FMSimpleExpression>> m_Arguments;
+ bool m_bIsSomMethod;
+};
+
+class CXFA_FMDotAccessorExpression final : public CXFA_FMChainableExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMDotAccessorExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMDotAccessorExpression(CXFA_FMSimpleExpression* pAccessor,
+ XFA_FM_TOKEN op,
+ WideString wsIdentifier,
+ CXFA_FMSimpleExpression* pIndexExp);
+
+ WideString m_wsIdentifier;
+};
+
+class CXFA_FMIndexExpression final : public CXFA_FMSimpleExpression {
+ public:
+ enum class AccessorIndex : uint8_t {
+ kNoIndex,
+ kNoRelativeIndex,
+ kPositiveIndex,
+ kNegativeIndex
+ };
+
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMIndexExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMIndexExpression(AccessorIndex accessorIndex,
+ CXFA_FMSimpleExpression* pIndexExp,
+ bool bIsStarIndex);
+
+ cppgc::Member<CXFA_FMSimpleExpression> m_pExp;
+ AccessorIndex m_accessorIndex;
+ bool m_bIsStarIndex;
+};
+
+class CXFA_FMDotDotAccessorExpression final
+ : public CXFA_FMChainableExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMDotDotAccessorExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMDotDotAccessorExpression(CXFA_FMSimpleExpression* pAccessor,
+ XFA_FM_TOKEN op,
+ WideString wsIdentifier,
+ CXFA_FMSimpleExpression* pIndexExp);
+
+ WideString m_wsIdentifier;
+};
+
+class CXFA_FMMethodCallExpression final : public CXFA_FMChainableExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMMethodCallExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMMethodCallExpression(CXFA_FMSimpleExpression* pAccessorExp1,
+ CXFA_FMSimpleExpression* pCallExp);
+};
+
+class CXFA_FMFunctionDefinition final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMFunctionDefinition() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMFunctionDefinition(
+ WideString wsName,
+ std::vector<WideString>&& arguments,
+ std::vector<cppgc::Member<CXFA_FMExpression>>&& expressions);
+
+ const WideString m_wsName;
+ std::vector<WideString> const m_pArguments;
+ std::vector<cppgc::Member<CXFA_FMExpression>> const m_pExpressions;
+};
+
+class CXFA_FMVarExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMVarExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMVarExpression(WideString wsName, CXFA_FMSimpleExpression* pInit);
+
+ WideString const m_wsName;
+ cppgc::Member<CXFA_FMSimpleExpression> const m_pInit;
+};
+
+class CXFA_FMExpExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMExpExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ explicit CXFA_FMExpExpression(CXFA_FMSimpleExpression* pExpression);
+
+ cppgc::Member<CXFA_FMSimpleExpression> const m_pExpression;
+};
+
+class CXFA_FMBlockExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMBlockExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMBlockExpression(
+ std::vector<cppgc::Member<CXFA_FMExpression>>&& pExpressionList);
+
+ std::vector<cppgc::Member<CXFA_FMExpression>> const m_ExpressionList;
+};
+
+class CXFA_FMDoExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMDoExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ explicit CXFA_FMDoExpression(CXFA_FMExpression* pList);
+
+ cppgc::Member<CXFA_FMExpression> const m_pList;
+};
+
+class CXFA_FMIfExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMIfExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMIfExpression(
+ CXFA_FMSimpleExpression* pExpression,
+ CXFA_FMExpression* pIfExpression,
+ std::vector<cppgc::Member<CXFA_FMIfExpression>>&& pElseIfExpressions,
+ CXFA_FMExpression* pElseExpression);
+
+ cppgc::Member<CXFA_FMSimpleExpression> const m_pExpression;
+ cppgc::Member<CXFA_FMExpression> const m_pIfExpression;
+ std::vector<cppgc::Member<CXFA_FMIfExpression>> const m_pElseIfExpressions;
+ cppgc::Member<CXFA_FMExpression> const m_pElseExpression;
+};
+
+class CXFA_FMWhileExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMWhileExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMWhileExpression(CXFA_FMSimpleExpression* pCodition,
+ CXFA_FMExpression* pExpression);
+
+ cppgc::Member<CXFA_FMSimpleExpression> const m_pCondition;
+ cppgc::Member<CXFA_FMExpression> const m_pExpression;
+};
+
+class CXFA_FMBreakExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMBreakExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMBreakExpression();
+};
+
+class CXFA_FMContinueExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMContinueExpression() override;
+
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMContinueExpression();
+};
+
+class CXFA_FMForExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMForExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ CXFA_FMForExpression(WideString wsVariant,
+ CXFA_FMSimpleExpression* pAssignment,
+ CXFA_FMSimpleExpression* pAccessor,
+ int32_t iDirection,
+ CXFA_FMSimpleExpression* pStep,
+ CXFA_FMExpression* pList);
+
+ const WideString m_wsVariant;
+ const bool m_bDirection;
+ cppgc::Member<CXFA_FMSimpleExpression> const m_pAssignment;
+ cppgc::Member<CXFA_FMSimpleExpression> const m_pAccessor;
+ cppgc::Member<CXFA_FMSimpleExpression> const m_pStep;
+ cppgc::Member<CXFA_FMExpression> const m_pList;
+};
+
+class CXFA_FMForeachExpression final : public CXFA_FMExpression {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMForeachExpression() override;
+
+ void Trace(cppgc::Visitor* visitor) const override;
+ bool ToJavaScript(WideTextBuffer* js, ReturnType type) const override;
+
+ private:
+ // Takes ownership of |pAccessors|.
+ CXFA_FMForeachExpression(
+ WideString wsIdentifier,
+ std::vector<cppgc::Member<CXFA_FMSimpleExpression>>&& pAccessors,
+ CXFA_FMExpression* pList);
+
+ const WideString m_wsIdentifier;
+ std::vector<cppgc::Member<CXFA_FMSimpleExpression>> const m_pAccessors;
+ cppgc::Member<CXFA_FMExpression> const m_pList;
+};
+
+class CXFA_FMAST : public cppgc::GarbageCollected<CXFA_FMAST> {
+ public:
+ CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED;
+ ~CXFA_FMAST();
+
+ void Trace(cppgc::Visitor* visitor) const;
+ absl::optional<WideTextBuffer> ToJavaScript() const;
+
+ private:
+ explicit CXFA_FMAST(
+ std::vector<cppgc::Member<CXFA_FMExpression>> expressions);
+
+ std::vector<cppgc::Member<CXFA_FMExpression>> const expressions_;
+};
+
+bool CXFA_IsTooBig(const WideTextBuffer& js);
+
+#endif // XFA_FXFA_FORMCALC_CXFA_FMEXPRESSION_H_