#ifndef XFA_FXFA_FORMCALC_CXFA_FMEXPRESSION_H_
#define XFA_FXFA_FORMCALC_CXFA_FMEXPRESSION_H_
#include <optional>
#include <vector>
#include "core/fxcrt/widestring.h"
#include "core/fxcrt/widetext_buffer.h"
#include "fxjs/gc/heap.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> { … };
class CXFA_FMSimpleExpression : public CXFA_FMExpression { … };
class CXFA_FMChainableExpression : public CXFA_FMSimpleExpression { … };
class CXFA_FMNullExpression final : public CXFA_FMSimpleExpression { … };
class CXFA_FMNumberExpression final : public CXFA_FMSimpleExpression { … };
class CXFA_FMStringExpression final : public CXFA_FMSimpleExpression { … };
class CXFA_FMIdentifierExpression final : public CXFA_FMSimpleExpression { … };
class CXFA_FMAssignExpression final : public CXFA_FMChainableExpression { … };
class CXFA_FMBinExpression : public CXFA_FMChainableExpression { … };
class CXFA_FMLogicalOrExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMLogicalAndExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMEqualExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMNotEqualExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMGtExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMGeExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMLtExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMLeExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMPlusExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMMinusExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMMulExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMDivExpression final : public CXFA_FMBinExpression { … };
class CXFA_FMUnaryExpression : public CXFA_FMSimpleExpression { … };
class CXFA_FMPosExpression final : public CXFA_FMUnaryExpression { … };
class CXFA_FMNegExpression final : public CXFA_FMUnaryExpression { … };
class CXFA_FMNotExpression final : public CXFA_FMUnaryExpression { … };
class CXFA_FMCallExpression final : public CXFA_FMSimpleExpression { … };
class CXFA_FMDotAccessorExpression final : public CXFA_FMChainableExpression { … };
class CXFA_FMIndexExpression final : public CXFA_FMSimpleExpression { … };
class CXFA_FMDotDotAccessorExpression final
: public CXFA_FMChainableExpression { … };
class CXFA_FMMethodCallExpression final : public CXFA_FMChainableExpression { … };
class CXFA_FMFunctionDefinition final : public CXFA_FMExpression { … };
class CXFA_FMVarExpression final : public CXFA_FMExpression { … };
class CXFA_FMExpExpression final : public CXFA_FMExpression { … };
class CXFA_FMBlockExpression final : public CXFA_FMExpression { … };
class CXFA_FMDoExpression final : public CXFA_FMExpression { … };
class CXFA_FMIfExpression final : public CXFA_FMExpression { … };
class CXFA_FMWhileExpression final : public CXFA_FMExpression { … };
class CXFA_FMBreakExpression final : public CXFA_FMExpression { … };
class CXFA_FMContinueExpression final : public CXFA_FMExpression { … };
class CXFA_FMForExpression final : public CXFA_FMExpression { … };
class CXFA_FMForeachExpression final : public CXFA_FMExpression { … };
class CXFA_FMAST : public cppgc::GarbageCollected<CXFA_FMAST> { … };
bool CXFA_IsTooBig(const WideTextBuffer& js);
#endif