7#ifndef XFA_FXFA_FORMCALC_CXFA_FMEXPRESSION_H_
8#define XFA_FXFA_FORMCALC_CXFA_FMEXPRESSION_H_
12#include "core/fxcrt/widestring.h"
13#include "core/fxcrt/widetext_buffer.h"
14#include "fxjs/gc/heap.h"
15#include "third_party/abseil-cpp/absl/types/optional.h"
16#include "v8/include/cppgc/garbage-collected.h"
17#include "v8/include/cppgc/member.h"
18#include "xfa/fxfa/formcalc/cxfa_fmlexer.h"
25 virtual void Trace(
cppgc::Visitor* visitor)
const;
49 void Trace(
cppgc::Visitor* visitor)
const override;
60 cppgc::Member<CXFA_FMSimpleExpression> m_pExp1;
61 cppgc::Member<CXFA_FMSimpleExpression> m_pExp2;
72 CXFA_FMNullExpression();
83 explicit CXFA_FMNumberExpression(WideString wsNumber);
85 WideString m_wsNumber;
96 explicit CXFA_FMStringExpression(WideString wsString);
98 WideString m_wsString;
109 explicit CXFA_FMIdentifierExpression(WideString wsIdentifier);
111 WideString m_wsIdentifier;
279 void Trace(
cppgc::Visitor* visitor)
const override;
289 cppgc::Member<CXFA_FMSimpleExpression> m_pExp;
324 void Trace(
cppgc::Visitor* visitor)
const override;
331 CXFA_FMCallExpression(
333 std::vector<cppgc::Member<CXFA_FMSimpleExpression>>&& pArguments,
336 cppgc::Member<CXFA_FMSimpleExpression> m_pExp;
337 std::vector<cppgc::Member<CXFA_FMSimpleExpression>> m_Arguments;
351 WideString wsIdentifier,
354 WideString m_wsIdentifier;
369 void Trace(
cppgc::Visitor* visitor)
const override;
377 cppgc::Member<CXFA_FMSimpleExpression> m_pExp;
382class CXFA_FMDotDotAccessorExpression
final
393 WideString wsIdentifier,
396 WideString m_wsIdentifier;
416 void Trace(
cppgc::Visitor* visitor)
const override;
420 CXFA_FMFunctionDefinition(
422 std::vector<WideString>&& arguments,
423 std::vector<cppgc::Member<CXFA_FMExpression>>&& expressions);
425 const WideString m_wsName;
426 std::vector<WideString>
const m_pArguments;
427 std::vector<cppgc::Member<CXFA_FMExpression>>
const m_pExpressions;
435 void Trace(
cppgc::Visitor* visitor)
const override;
441 WideString
const m_wsName;
442 cppgc::Member<CXFA_FMSimpleExpression>
const m_pInit;
450 void Trace(
cppgc::Visitor* visitor)
const override;
456 cppgc::Member<CXFA_FMSimpleExpression>
const m_pExpression;
464 void Trace(
cppgc::Visitor* visitor)
const override;
468 CXFA_FMBlockExpression(
469 std::vector<cppgc::Member<CXFA_FMExpression>>&& pExpressionList);
471 std::vector<cppgc::Member<CXFA_FMExpression>>
const m_ExpressionList;
479 void Trace(
cppgc::Visitor* visitor)
const override;
485 cppgc::Member<CXFA_FMExpression>
const m_pList;
493 void Trace(
cppgc::Visitor* visitor)
const override;
500 std::vector<cppgc::Member<CXFA_FMIfExpression>>&& pElseIfExpressions,
501 CXFA_FMExpression* pElseExpression);
503 cppgc::Member<CXFA_FMSimpleExpression>
const m_pExpression;
504 cppgc::Member<CXFA_FMExpression>
const m_pIfExpression;
505 std::vector<cppgc::Member<CXFA_FMIfExpression>>
const m_pElseIfExpressions;
506 cppgc::Member<CXFA_FMExpression>
const m_pElseExpression;
514 void Trace(
cppgc::Visitor* visitor)
const override;
521 cppgc::Member<CXFA_FMSimpleExpression>
const m_pCondition;
522 cppgc::Member<CXFA_FMExpression>
const m_pExpression;
533 CXFA_FMBreakExpression();
544 CXFA_FMContinueExpression();
552 void Trace(
cppgc::Visitor* visitor)
const override;
556 CXFA_FMForExpression(WideString wsVariant,
563 const WideString m_wsVariant;
564 const bool m_bDirection;
565 cppgc::Member<CXFA_FMSimpleExpression>
const m_pAssignment;
566 cppgc::Member<CXFA_FMSimpleExpression>
const m_pAccessor;
567 cppgc::Member<CXFA_FMSimpleExpression>
const m_pStep;
568 cppgc::Member<CXFA_FMExpression>
const m_pList;
576 void Trace(
cppgc::Visitor* visitor)
const override;
581 CXFA_FMForeachExpression(
582 WideString wsIdentifier,
583 std::vector<cppgc::Member<CXFA_FMSimpleExpression>>&& pAccessors,
584 CXFA_FMExpression* pList);
586 const WideString m_wsIdentifier;
587 std::vector<cppgc::Member<CXFA_FMSimpleExpression>>
const m_pAccessors;
588 cppgc::Member<CXFA_FMExpression>
const m_pList;
596 void Trace(
cppgc::Visitor* visitor)
const;
601 std::vector<cppgc::Member<CXFA_FMExpression>> expressions);
const FXJSE_CLASS_DESCRIPTOR kFormCalcDescriptor
void SetScale(uint8_t newScale)
CFGAS_Decimal(uint64_t val)
CFGAS_Decimal(float val, uint8_t scale)
CFGAS_Decimal(WideStringView str)
CFGAS_Decimal operator*(const CFGAS_Decimal &val) const
CFGAS_Decimal(uint32_t val)
WideString ToWideString() const
CFGAS_Decimal operator/(const CFGAS_Decimal &val) const
CFGAS_Decimal(int32_t val)
XFA_SCRIPTATTRIBUTEINFO script_attribute
CXFA_Object * GetThisObject() const
friend class EventParamScope
v8::Local< v8::Value > GlobalPropertyGetter()
static ByteString Local2IsoDate(CFXJSE_HostObject *pThis, ByteStringView bsDate, ByteStringView bsFormat, ByteStringView bsLocale)
static ByteString Num2AllTime(CFXJSE_HostObject *pThis, int32_t iTime, ByteStringView bsFormat, ByteStringView bsLocale, bool bGM)
CXFA_Document * GetDocument() const
static ByteString GetStandardTimeFormat(CFXJSE_HostObject *pThis, int32_t iStyle, ByteStringView bsLocale)
static ByteString GetStandardDateFormat(CFXJSE_HostObject *pThis, int32_t iStyle, ByteStringView bsLocale)
CFXJSE_FormCalcContext * AsFormCalcContext() override
static ByteString GetLocalDateFormat(CFXJSE_HostObject *pThis, int32_t iStyle, ByteStringView bsLocale, bool bStandard)
~CFXJSE_FormCalcContext() override
CFXJSE_FormCalcContext(v8::Isolate *pIsolate, CFXJSE_Context *pScriptContext, CXFA_Document *pDoc)
static ByteString GetLocalTimeFormat(CFXJSE_HostObject *pThis, int32_t iStyle, ByteStringView bsLocale, bool bStandard)
static ByteString IsoDate2Local(CFXJSE_HostObject *pThis, ByteStringView bsDate, ByteStringView bsFormat, ByteStringView bsLocale)
static ByteString IsoTime2Local(CFXJSE_HostObject *pThis, ByteStringView bsTime, ByteStringView bsFormat, ByteStringView bsLocale)
virtual CFXJSE_FormCalcContext * AsFormCalcContext()
uint8_t GetSecond() const
uint8_t GetMinute() const
uint16_t GetMillisecond() const
CXFA_FFNotify * GetNotify() const
CXFA_LocaleMgr * GetLocaleMgr()
CFXJSE_Engine * GetScriptContext() const
virtual bool PostRequestURL(const WideString &wsURL, const WideString &wsData, const WideString &wsContentType, const WideString &wsEncode, const WideString &wsHeader, WideString &wsResponse)=0
virtual bool PutRequestURL(const WideString &wsURL, const WideString &wsData, const WideString &wsEncode)=0
CXFA_FFApp::CallbackIface * GetAppProvider()
absl::optional< WideTextBuffer > ToJavaScript() const
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMAssignExpression() override
~CXFA_FMBinExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
CXFA_FMBinExpression(const WideString &opName, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2)
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMBlockExpression() override
~CXFA_FMBreakExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMCallExpression() override
uint32_t IsMethodWithObjParam(const WideString &methodName) const
bool IsBuiltInFunc(WideTextBuffer *funcName) const
~CXFA_FMChainableExpression() override
CXFA_FMSimpleExpression * GetSecondExpression() const
CXFA_FMChainableExpression(XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp1, CXFA_FMSimpleExpression *pExp2)
CXFA_FMSimpleExpression * GetFirstExpression() const
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMContinueExpression() override
~CXFA_FMDivExpression() override
~CXFA_FMDoExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMDotAccessorExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMDotDotAccessorExpression() override
~CXFA_FMEqualExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMExpExpression() override
virtual ~CXFA_FMExpression()
virtual bool ToJavaScript(WideTextBuffer *js, ReturnType type) const =0
~CXFA_FMForExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMForeachExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMFunctionDefinition() override
~CXFA_FMGeExpression() override
~CXFA_FMGtExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMIdentifierExpression() override
~CXFA_FMIfExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMIndexExpression() override
~CXFA_FMLeExpression() override
~CXFA_FMLogicalAndExpression() override
~CXFA_FMLogicalOrExpression() override
~CXFA_FMLtExpression() override
~CXFA_FMMethodCallExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMMinusExpression() override
~CXFA_FMMulExpression() override
~CXFA_FMNegExpression() override
~CXFA_FMNotEqualExpression() override
~CXFA_FMNotExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMNullExpression() override
~CXFA_FMNumberExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
CXFA_FMParser(cppgc::Heap *heap, CXFA_FMLexer *pLexer)
void SetMaxParseDepthForTest(unsigned long max_depth)
~CXFA_FMPlusExpression() override
~CXFA_FMPosExpression() override
CXFA_FMSimpleExpression(XFA_FM_TOKEN op)
~CXFA_FMSimpleExpression() override
XFA_FM_TOKEN GetOperatorToken() const
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMStringExpression() override
~CXFA_FMUnaryExpression() override
CXFA_FMUnaryExpression(const WideString &opName, XFA_FM_TOKEN op, CXFA_FMSimpleExpression *pExp)
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMVarExpression() override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
bool ToJavaScript(WideTextBuffer *js, ReturnType type) const override
~CXFA_FMWhileExpression() override
GCedLocaleIface * GetDefLocale() override
GCedLocaleIface * GetLocaleByName(const WideString &wsLocaleName) override
CXFA_LocaleValue(ValueType dwType, const WideString &wsValue, const WideString &wsFormat, GCedLocaleIface *pLocale, CXFA_LocaleMgr *pLocaleMgr)
double GetDoubleNum() const
CFX_DateTime GetTime() const
const WideString & GetValue() const
CFX_DateTime GetDate() const
bool FormatPatterns(WideString &wsResult, const WideString &wsFormat, GCedLocaleIface *pLocale, XFA_ValuePicture eValueType) const
GCedLocaleIface * GetLocale()
int GetTimeZoneInMinutes() const
virtual WideString GetDatePattern(DateTimeSubcategory eType) const =0
virtual int GetTimeZoneInMinutes() const =0
virtual WideString GetDateTimeSymbols() const =0
virtual WideString GetTimePattern(DateTimeSubcategory eType) const =0
ByteString(const char *ptr)
bool EqualNoCase(ByteStringView str) const
static ByteString Format(const char *pFormat,...)
ByteString & operator+=(const ByteString &str)
ByteString & operator+=(char ch)
static ByteString FormatInteger(int i)
bool operator==(const ByteString &other) const
bool operator==(const char *ptr) const
ByteString & operator+=(const char *str)
const char * c_str() const
ByteString & operator=(const ByteString &that)
int Compare(ByteStringView str) const
ByteString ToUTF8() const
WideString & operator=(WideString &&that) noexcept
static WideString FromUTF8(ByteStringView str)
CharType operator[](const size_t index) const
const wchar_t * c_str() const
WideString(const wchar_t *ptr)
ByteString ToASCII() const
static WideString FromASCII(ByteStringView str)
void AppendChar(wchar_t wch)
WideString MakeString() const
WideStringView AsStringView() const
bool CXFA_IsTooBig(const WideTextBuffer &js)
CXFA_Node * ToNode(CXFA_Object *pObj)
time_t FXSYS_time(time_t *tloc)
int FXSYS_WideHexCharToInt(wchar_t c)
bool FXSYS_IsDecimalDigit(wchar_t c)
bool FXSYS_IsWideHexDigit(wchar_t c)
struct tm * FXSYS_localtime(const time_t *tp)
void FX_Random_GenerateMT(uint32_t *pBuffer, int32_t iCount)
int32_t FXSYS_atoi(const char *str)
#define CONSTRUCT_VIA_MAKE_GARBAGE_COLLECTED
ByteString operator+(const ByteString &str1, const ByteString &str2)
WideString operator+(const WideString &str1, const WideString &str2)
ByteString operator+(const ByteString &str1, const char *str2)
WideString operator+(const wchar_t *str1, const WideString &str2)
WideString operator+(const WideString &str1, const wchar_t *str2)
bool IsBoolean(v8::Local< v8::Value > value)
bool IsArray(v8::Local< v8::Value > value)
bool IsUndefined(v8::Local< v8::Value > value)
bool IsNumber(v8::Local< v8::Value > value)
bool IsObject(v8::Local< v8::Value > value)
bool IsString(v8::Local< v8::Value > value)
ByteString ReentrantToByteStringHelper(v8::Isolate *pIsolate, v8::Local< v8::Value > pValue)
bool ReentrantToBooleanHelper(v8::Isolate *pIsolate, v8::Local< v8::Value > pValue)
bool IsNull(v8::Local< v8::Value > value)
int32_t ReentrantToInt32Helper(v8::Isolate *pIsolate, v8::Local< v8::Value > pValue)
XFA_ScriptType eValueType
XFA_ATTRIBUTE_CALLBACK callback
#define UNOWNED_PTR_EXCLUSION