Home | History | Annotate | Download | only in fm2js
      1 // Copyright 2014 PDFium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 // Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com
      6 
      7 #ifndef XFA_FXFA_FM2JS_XFA_FM2JSCONTEXT_H_
      8 #define XFA_FXFA_FM2JS_XFA_FM2JSCONTEXT_H_
      9 
     10 #include <memory>
     11 #include <vector>
     12 
     13 #include "fxjs/cfxjse_arguments.h"
     14 #include "fxjs/cfxjse_context.h"
     15 #include "xfa/fxfa/parser/xfa_resolvenode_rs.h"
     16 
     17 class CXFA_FM2JSContext : public CFXJSE_HostObject {
     18  public:
     19   CXFA_FM2JSContext(v8::Isolate* pScriptIsolate,
     20                     CFXJSE_Context* pScriptContext,
     21                     CXFA_Document* pDoc);
     22   ~CXFA_FM2JSContext() override;
     23 
     24   static void Abs(CFXJSE_Value* pThis,
     25                   const CFX_ByteStringC& szFuncName,
     26                   CFXJSE_Arguments& args);
     27   static void Avg(CFXJSE_Value* pThis,
     28                   const CFX_ByteStringC& szFuncName,
     29                   CFXJSE_Arguments& args);
     30   static void Ceil(CFXJSE_Value* pThis,
     31                    const CFX_ByteStringC& szFuncName,
     32                    CFXJSE_Arguments& args);
     33   static void Count(CFXJSE_Value* pThis,
     34                     const CFX_ByteStringC& szFuncName,
     35                     CFXJSE_Arguments& args);
     36   static void Floor(CFXJSE_Value* pThis,
     37                     const CFX_ByteStringC& szFuncName,
     38                     CFXJSE_Arguments& args);
     39   static void Max(CFXJSE_Value* pThis,
     40                   const CFX_ByteStringC& szFuncName,
     41                   CFXJSE_Arguments& args);
     42   static void Min(CFXJSE_Value* pThis,
     43                   const CFX_ByteStringC& szFuncName,
     44                   CFXJSE_Arguments& args);
     45   static void Mod(CFXJSE_Value* pThis,
     46                   const CFX_ByteStringC& szFuncName,
     47                   CFXJSE_Arguments& args);
     48   static void Round(CFXJSE_Value* pThis,
     49                     const CFX_ByteStringC& szFuncName,
     50                     CFXJSE_Arguments& args);
     51   static void Sum(CFXJSE_Value* pThis,
     52                   const CFX_ByteStringC& szFuncName,
     53                   CFXJSE_Arguments& args);
     54   static void Date(CFXJSE_Value* pThis,
     55                    const CFX_ByteStringC& szFuncName,
     56                    CFXJSE_Arguments& args);
     57   static void Date2Num(CFXJSE_Value* pThis,
     58                        const CFX_ByteStringC& szFuncName,
     59                        CFXJSE_Arguments& args);
     60   static void DateFmt(CFXJSE_Value* pThis,
     61                       const CFX_ByteStringC& szFuncName,
     62                       CFXJSE_Arguments& args);
     63   static void IsoDate2Num(CFXJSE_Value* pThis,
     64                           const CFX_ByteStringC& szFuncName,
     65                           CFXJSE_Arguments& args);
     66   static void IsoTime2Num(CFXJSE_Value* pThis,
     67                           const CFX_ByteStringC& szFuncName,
     68                           CFXJSE_Arguments& args);
     69   static void LocalDateFmt(CFXJSE_Value* pThis,
     70                            const CFX_ByteStringC& szFuncName,
     71                            CFXJSE_Arguments& args);
     72   static void LocalTimeFmt(CFXJSE_Value* pThis,
     73                            const CFX_ByteStringC& szFuncName,
     74                            CFXJSE_Arguments& args);
     75   static void Num2Date(CFXJSE_Value* pThis,
     76                        const CFX_ByteStringC& szFuncName,
     77                        CFXJSE_Arguments& args);
     78   static void Num2GMTime(CFXJSE_Value* pThis,
     79                          const CFX_ByteStringC& szFuncName,
     80                          CFXJSE_Arguments& args);
     81   static void Num2Time(CFXJSE_Value* pThis,
     82                        const CFX_ByteStringC& szFuncName,
     83                        CFXJSE_Arguments& args);
     84   static void Time(CFXJSE_Value* pThis,
     85                    const CFX_ByteStringC& szFuncName,
     86                    CFXJSE_Arguments& args);
     87   static void Time2Num(CFXJSE_Value* pThis,
     88                        const CFX_ByteStringC& szFuncName,
     89                        CFXJSE_Arguments& args);
     90   static void TimeFmt(CFXJSE_Value* pThis,
     91                       const CFX_ByteStringC& szFuncName,
     92                       CFXJSE_Arguments& args);
     93 
     94   static bool IsIsoDateFormat(const FX_CHAR* pData,
     95                               int32_t iLength,
     96                               int32_t& iStyle,
     97                               int32_t& iYear,
     98                               int32_t& iMonth,
     99                               int32_t& iDay);
    100   static bool IsIsoTimeFormat(const FX_CHAR* pData,
    101                               int32_t iLength,
    102                               int32_t& iHour,
    103                               int32_t& iMinute,
    104                               int32_t& iSecond,
    105                               int32_t& iMilliSecond,
    106                               int32_t& iZoneHour,
    107                               int32_t& iZoneMinute);
    108   static bool IsIsoDateTimeFormat(const FX_CHAR* pData,
    109                                   int32_t iLength,
    110                                   int32_t& iYear,
    111                                   int32_t& iMonth,
    112                                   int32_t& iDay,
    113                                   int32_t& iHour,
    114                                   int32_t& iMinute,
    115                                   int32_t& iSecond,
    116                                   int32_t& iMillionSecond,
    117                                   int32_t& iZoneHour,
    118                                   int32_t& iZoneMinute);
    119   static bool Local2IsoDate(CFXJSE_Value* pThis,
    120                             const CFX_ByteStringC& szDate,
    121                             const CFX_ByteStringC& szFormat,
    122                             const CFX_ByteStringC& szLocale,
    123                             CFX_ByteString& strIsoDate);
    124   static bool Local2IsoTime(CFXJSE_Value* pThis,
    125                             const CFX_ByteStringC& szTime,
    126                             const CFX_ByteStringC& szFormat,
    127                             const CFX_ByteStringC& szLocale,
    128                             CFX_ByteString& strIsoTime);
    129   static bool IsoDate2Local(CFXJSE_Value* pThis,
    130                             const CFX_ByteStringC& szDate,
    131                             const CFX_ByteStringC& szFormat,
    132                             const CFX_ByteStringC& szLocale,
    133                             CFX_ByteString& strLocalDate);
    134   static bool IsoTime2Local(CFXJSE_Value* pThis,
    135                             const CFX_ByteStringC& szTime,
    136                             const CFX_ByteStringC& szFormat,
    137                             const CFX_ByteStringC& szLocale,
    138                             CFX_ByteString& strLocalTime);
    139   static bool GetGMTTime(CFXJSE_Value* pThis,
    140                          const CFX_ByteStringC& szTime,
    141                          const CFX_ByteStringC& szFormat,
    142                          const CFX_ByteStringC& szLocale,
    143                          CFX_ByteString& strGMTTime);
    144   static int32_t DateString2Num(const CFX_ByteStringC& szDateString);
    145   static void GetLocalDateFormat(CFXJSE_Value* pThis,
    146                                  int32_t iStyle,
    147                                  const CFX_ByteStringC& szLocalStr,
    148                                  CFX_ByteString& strFormat,
    149                                  bool bStandard);
    150   static void GetLocalTimeFormat(CFXJSE_Value* pThis,
    151                                  int32_t iStyle,
    152                                  const CFX_ByteStringC& szLocalStr,
    153                                  CFX_ByteString& strFormat,
    154                                  bool bStandard);
    155   static void GetStandardDateFormat(CFXJSE_Value* pThis,
    156                                     int32_t iStyle,
    157                                     const CFX_ByteStringC& szLocalStr,
    158                                     CFX_ByteString& strFormat);
    159   static void GetStandardTimeFormat(CFXJSE_Value* pThis,
    160                                     int32_t iStyle,
    161                                     const CFX_ByteStringC& szLocalStr,
    162                                     CFX_ByteString& strFormat);
    163 
    164   static void Num2AllTime(CFXJSE_Value* pThis,
    165                           int32_t iTime,
    166                           const CFX_ByteStringC& szFormat,
    167                           const CFX_ByteStringC& szLocale,
    168                           bool bGM,
    169                           CFX_ByteString& strTime);
    170   static void GetLocalTimeZone(int32_t& iHour, int32_t& iMin, int32_t& iSec);
    171 
    172   static void Apr(CFXJSE_Value* pThis,
    173                   const CFX_ByteStringC& szFuncName,
    174                   CFXJSE_Arguments& args);
    175   static void CTerm(CFXJSE_Value* pThis,
    176                     const CFX_ByteStringC& szFuncName,
    177                     CFXJSE_Arguments& args);
    178   static void FV(CFXJSE_Value* pThis,
    179                  const CFX_ByteStringC& szFuncName,
    180                  CFXJSE_Arguments& args);
    181   static void IPmt(CFXJSE_Value* pThis,
    182                    const CFX_ByteStringC& szFuncName,
    183                    CFXJSE_Arguments& args);
    184   static void NPV(CFXJSE_Value* pThis,
    185                   const CFX_ByteStringC& szFuncName,
    186                   CFXJSE_Arguments& args);
    187   static void Pmt(CFXJSE_Value* pThis,
    188                   const CFX_ByteStringC& szFuncName,
    189                   CFXJSE_Arguments& args);
    190   static void PPmt(CFXJSE_Value* pThis,
    191                    const CFX_ByteStringC& szFuncName,
    192                    CFXJSE_Arguments& args);
    193   static void PV(CFXJSE_Value* pThis,
    194                  const CFX_ByteStringC& szFuncName,
    195                  CFXJSE_Arguments& args);
    196   static void Rate(CFXJSE_Value* pThis,
    197                    const CFX_ByteStringC& szFuncName,
    198                    CFXJSE_Arguments& args);
    199   static void Term(CFXJSE_Value* pThis,
    200                    const CFX_ByteStringC& szFuncName,
    201                    CFXJSE_Arguments& args);
    202   static void Choose(CFXJSE_Value* pThis,
    203                      const CFX_ByteStringC& szFuncName,
    204                      CFXJSE_Arguments& args);
    205   static void Exists(CFXJSE_Value* pThis,
    206                      const CFX_ByteStringC& szFuncName,
    207                      CFXJSE_Arguments& args);
    208   static void HasValue(CFXJSE_Value* pThis,
    209                        const CFX_ByteStringC& szFuncName,
    210                        CFXJSE_Arguments& args);
    211   static void Oneof(CFXJSE_Value* pThis,
    212                     const CFX_ByteStringC& szFuncName,
    213                     CFXJSE_Arguments& args);
    214   static void Within(CFXJSE_Value* pThis,
    215                      const CFX_ByteStringC& szFuncName,
    216                      CFXJSE_Arguments& args);
    217   static void If(CFXJSE_Value* pThis,
    218                  const CFX_ByteStringC& szFuncName,
    219                  CFXJSE_Arguments& args);
    220   static void Eval(CFXJSE_Value* pThis,
    221                    const CFX_ByteStringC& szFuncName,
    222                    CFXJSE_Arguments& args);
    223   static void Ref(CFXJSE_Value* pThis,
    224                   const CFX_ByteStringC& szFuncName,
    225                   CFXJSE_Arguments& args);
    226   static void UnitType(CFXJSE_Value* pThis,
    227                        const CFX_ByteStringC& szFuncName,
    228                        CFXJSE_Arguments& args);
    229   static void UnitValue(CFXJSE_Value* pThis,
    230                         const CFX_ByteStringC& szFuncName,
    231                         CFXJSE_Arguments& args);
    232 
    233   static void At(CFXJSE_Value* pThis,
    234                  const CFX_ByteStringC& szFuncName,
    235                  CFXJSE_Arguments& args);
    236   static void Concat(CFXJSE_Value* pThis,
    237                      const CFX_ByteStringC& szFuncName,
    238                      CFXJSE_Arguments& args);
    239   static void Decode(CFXJSE_Value* pThis,
    240                      const CFX_ByteStringC& szFuncName,
    241                      CFXJSE_Arguments& args);
    242   static void DecodeURL(const CFX_ByteStringC& szURLString,
    243                         CFX_ByteTextBuf& szResultBuf);
    244   static void DecodeHTML(const CFX_ByteStringC& szHTMLString,
    245                          CFX_ByteTextBuf& szResultBuf);
    246   static void DecodeXML(const CFX_ByteStringC& szXMLString,
    247                         CFX_ByteTextBuf& szResultBuf);
    248   static void Encode(CFXJSE_Value* pThis,
    249                      const CFX_ByteStringC& szFuncName,
    250                      CFXJSE_Arguments& args);
    251   static void EncodeURL(const CFX_ByteStringC& szURLString,
    252                         CFX_ByteTextBuf& szResultBuf);
    253   static void EncodeHTML(const CFX_ByteStringC& szHTMLString,
    254                          CFX_ByteTextBuf& szResultBuf);
    255   static void EncodeXML(const CFX_ByteStringC& szXMLString,
    256                         CFX_ByteTextBuf& szResultBuf);
    257   static bool HTMLSTR2Code(const CFX_WideStringC& pData, uint32_t& iCode);
    258   static bool HTMLCode2STR(uint32_t iCode, CFX_WideString& wsHTMLReserve);
    259   static void Format(CFXJSE_Value* pThis,
    260                      const CFX_ByteStringC& szFuncName,
    261                      CFXJSE_Arguments& args);
    262   static void Left(CFXJSE_Value* pThis,
    263                    const CFX_ByteStringC& szFuncName,
    264                    CFXJSE_Arguments& args);
    265   static void Len(CFXJSE_Value* pThis,
    266                   const CFX_ByteStringC& szFuncName,
    267                   CFXJSE_Arguments& args);
    268   static void Lower(CFXJSE_Value* pThis,
    269                     const CFX_ByteStringC& szFuncName,
    270                     CFXJSE_Arguments& args);
    271   static void Ltrim(CFXJSE_Value* pThis,
    272                     const CFX_ByteStringC& szFuncName,
    273                     CFXJSE_Arguments& args);
    274   static void Parse(CFXJSE_Value* pThis,
    275                     const CFX_ByteStringC& szFuncName,
    276                     CFXJSE_Arguments& args);
    277   static void Replace(CFXJSE_Value* pThis,
    278                       const CFX_ByteStringC& szFuncName,
    279                       CFXJSE_Arguments& args);
    280   static void Right(CFXJSE_Value* pThis,
    281                     const CFX_ByteStringC& szFuncName,
    282                     CFXJSE_Arguments& args);
    283   static void Rtrim(CFXJSE_Value* pThis,
    284                     const CFX_ByteStringC& szFuncName,
    285                     CFXJSE_Arguments& args);
    286   static void Space(CFXJSE_Value* pThis,
    287                     const CFX_ByteStringC& szFuncName,
    288                     CFXJSE_Arguments& args);
    289   static void Str(CFXJSE_Value* pThis,
    290                   const CFX_ByteStringC& szFuncName,
    291                   CFXJSE_Arguments& args);
    292   static void Stuff(CFXJSE_Value* pThis,
    293                     const CFX_ByteStringC& szFuncName,
    294                     CFXJSE_Arguments& args);
    295   static void Substr(CFXJSE_Value* pThis,
    296                      const CFX_ByteStringC& szFuncName,
    297                      CFXJSE_Arguments& args);
    298   static void Uuid(CFXJSE_Value* pThis,
    299                    const CFX_ByteStringC& szFuncName,
    300                    CFXJSE_Arguments& args);
    301   static void Upper(CFXJSE_Value* pThis,
    302                     const CFX_ByteStringC& szFuncName,
    303                     CFXJSE_Arguments& args);
    304   static void WordNum(CFXJSE_Value* pThis,
    305                       const CFX_ByteStringC& szFuncName,
    306                       CFXJSE_Arguments& args);
    307   static void TrillionUS(const CFX_ByteStringC& szData,
    308                          CFX_ByteTextBuf& strBuf);
    309   static void WordUS(const CFX_ByteStringC& szData,
    310                      int32_t iStyle,
    311                      CFX_ByteTextBuf& strBuf);
    312 
    313   static void Get(CFXJSE_Value* pThis,
    314                   const CFX_ByteStringC& szFuncName,
    315                   CFXJSE_Arguments& args);
    316   static void Post(CFXJSE_Value* pThis,
    317                    const CFX_ByteStringC& szFuncName,
    318                    CFXJSE_Arguments& args);
    319   static void Put(CFXJSE_Value* pThis,
    320                   const CFX_ByteStringC& szFuncName,
    321                   CFXJSE_Arguments& args);
    322   static void assign_value_operator(CFXJSE_Value* pThis,
    323                                     const CFX_ByteStringC& szFuncName,
    324                                     CFXJSE_Arguments& args);
    325   static void logical_or_operator(CFXJSE_Value* pThis,
    326                                   const CFX_ByteStringC& szFuncName,
    327                                   CFXJSE_Arguments& args);
    328   static void logical_and_operator(CFXJSE_Value* pThis,
    329                                    const CFX_ByteStringC& szFuncName,
    330                                    CFXJSE_Arguments& args);
    331   static void equality_operator(CFXJSE_Value* pThis,
    332                                 const CFX_ByteStringC& szFuncName,
    333                                 CFXJSE_Arguments& args);
    334   static void notequality_operator(CFXJSE_Value* pThis,
    335                                    const CFX_ByteStringC& szFuncName,
    336                                    CFXJSE_Arguments& args);
    337   static bool fm_ref_equal(CFXJSE_Value* pThis, CFXJSE_Arguments& args);
    338   static void less_operator(CFXJSE_Value* pThis,
    339                             const CFX_ByteStringC& szFuncName,
    340                             CFXJSE_Arguments& args);
    341   static void lessequal_operator(CFXJSE_Value* pThis,
    342                                  const CFX_ByteStringC& szFuncName,
    343                                  CFXJSE_Arguments& args);
    344   static void greater_operator(CFXJSE_Value* pThis,
    345                                const CFX_ByteStringC& szFuncName,
    346                                CFXJSE_Arguments& args);
    347   static void greaterequal_operator(CFXJSE_Value* pThis,
    348                                     const CFX_ByteStringC& szFuncName,
    349                                     CFXJSE_Arguments& args);
    350   static void plus_operator(CFXJSE_Value* pThis,
    351                             const CFX_ByteStringC& szFuncName,
    352                             CFXJSE_Arguments& args);
    353   static void minus_operator(CFXJSE_Value* pThis,
    354                              const CFX_ByteStringC& szFuncName,
    355                              CFXJSE_Arguments& args);
    356   static void multiple_operator(CFXJSE_Value* pThis,
    357                                 const CFX_ByteStringC& szFuncName,
    358                                 CFXJSE_Arguments& args);
    359   static void divide_operator(CFXJSE_Value* pThis,
    360                               const CFX_ByteStringC& szFuncName,
    361                               CFXJSE_Arguments& args);
    362   static void positive_operator(CFXJSE_Value* pThis,
    363                                 const CFX_ByteStringC& szFuncName,
    364                                 CFXJSE_Arguments& args);
    365   static void negative_operator(CFXJSE_Value* pThis,
    366                                 const CFX_ByteStringC& szFuncName,
    367                                 CFXJSE_Arguments& args);
    368   static void logical_not_operator(CFXJSE_Value* pThis,
    369                                    const CFX_ByteStringC& szFuncName,
    370                                    CFXJSE_Arguments& args);
    371   static void dot_accessor(CFXJSE_Value* pThis,
    372                            const CFX_ByteStringC& szFuncName,
    373                            CFXJSE_Arguments& args);
    374   static void dotdot_accessor(CFXJSE_Value* pThis,
    375                               const CFX_ByteStringC& szFuncName,
    376                               CFXJSE_Arguments& args);
    377   static void eval_translation(CFXJSE_Value* pThis,
    378                                const CFX_ByteStringC& szFuncName,
    379                                CFXJSE_Arguments& args);
    380   static void is_fm_object(CFXJSE_Value* pThis,
    381                            const CFX_ByteStringC& szFuncName,
    382                            CFXJSE_Arguments& args);
    383   static void is_fm_array(CFXJSE_Value* pThis,
    384                           const CFX_ByteStringC& szFuncName,
    385                           CFXJSE_Arguments& args);
    386   static void get_fm_value(CFXJSE_Value* pThis,
    387                            const CFX_ByteStringC& szFuncName,
    388                            CFXJSE_Arguments& args);
    389   static void get_fm_jsobj(CFXJSE_Value* pThis,
    390                            const CFX_ByteStringC& szFuncName,
    391                            CFXJSE_Arguments& args);
    392   static void fm_var_filter(CFXJSE_Value* pThis,
    393                             const CFX_ByteStringC& szFuncName,
    394                             CFXJSE_Arguments& args);
    395   static void concat_fm_object(CFXJSE_Value* pThis,
    396                                const CFX_ByteStringC& szFuncName,
    397                                CFXJSE_Arguments& args);
    398 
    399   static int32_t hvalue_get_array_length(CFXJSE_Value* pThis,
    400                                          CFXJSE_Value* arg);
    401   static bool simpleValueCompare(CFXJSE_Value* pThis,
    402                                  CFXJSE_Value* firstValue,
    403                                  CFXJSE_Value* secondValue);
    404   static void unfoldArgs(
    405       CFXJSE_Value* pThis,
    406       CFXJSE_Arguments& args,
    407       std::vector<std::unique_ptr<CFXJSE_Value>>* resultValues,
    408       int32_t iStart = 0);
    409   static void GetObjectDefaultValue(CFXJSE_Value* pObjectValue,
    410                                     CFXJSE_Value* pDefaultValue);
    411   static bool SetObjectDefaultValue(CFXJSE_Value* pObjectValue,
    412                                     CFXJSE_Value* pNewValue);
    413   static void GenerateSomExpression(const CFX_ByteStringC& szName,
    414                                     int32_t iIndexFlags,
    415                                     int32_t iIndexValue,
    416                                     bool bIsStar,
    417                                     CFX_ByteString& szSomExp);
    418   static bool GetObjectForName(CFXJSE_Value* pThis,
    419                                CFXJSE_Value* accessorValue,
    420                                const CFX_ByteStringC& szAccessorName);
    421   static int32_t ResolveObjects(CFXJSE_Value* pThis,
    422                                 CFXJSE_Value* pParentValue,
    423                                 const CFX_ByteStringC& bsSomExp,
    424                                 XFA_RESOLVENODE_RS& resoveNodeRS,
    425                                 bool bdotAccessor = true,
    426                                 bool bHasNoResolveName = false);
    427   static void ParseResolveResult(
    428       CFXJSE_Value* pThis,
    429       const XFA_RESOLVENODE_RS& resoveNodeRS,
    430       CFXJSE_Value* pParentValue,
    431       std::vector<std::unique_ptr<CFXJSE_Value>>* resultValues,
    432       bool* bAttribute);
    433 
    434   static std::unique_ptr<CFXJSE_Value> GetSimpleValue(CFXJSE_Value* pThis,
    435                                                       CFXJSE_Arguments& args,
    436                                                       uint32_t index);
    437   static bool ValueIsNull(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
    438   static int32_t ValueToInteger(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
    439   static FX_FLOAT ValueToFloat(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
    440   static FX_DOUBLE ValueToDouble(CFXJSE_Value* pThis, CFXJSE_Value* pValue);
    441   static void ValueToUTF8String(CFXJSE_Value* pValue,
    442                                 CFX_ByteString& outputValue);
    443   static double ExtractDouble(CFXJSE_Value* pThis,
    444                               CFXJSE_Value* src,
    445                               bool* ret);
    446 
    447   static int32_t Translate(const CFX_WideStringC& wsFormcalc,
    448                            CFX_WideTextBuf& wsJavascript,
    449                            CFX_WideString& wsError);
    450 
    451   void GlobalPropertyGetter(CFXJSE_Value* pValue);
    452 
    453  private:
    454   v8::Isolate* GetScriptRuntime() const { return m_pIsolate; }
    455   CXFA_Document* GetDocument() const { return m_pDocument; }
    456 
    457   void ThrowNoDefaultPropertyException(const CFX_ByteStringC& name) const;
    458   void ThrowCompilerErrorException() const;
    459   void ThrowDivideByZeroException() const;
    460   void ThrowServerDeniedException() const;
    461   void ThrowPropertyNotInObjectException(const CFX_WideString& name,
    462                                          const CFX_WideString& exp) const;
    463   void ThrowArgumentMismatchException() const;
    464   void ThrowParamCountMismatchException(const CFX_WideString& method) const;
    465   void ThrowException(const FX_WCHAR* str, ...) const;
    466 
    467   v8::Isolate* m_pIsolate;
    468   CFXJSE_Class* m_pFMClass;
    469   std::unique_ptr<CFXJSE_Value> m_pValue;
    470   CXFA_Document* const m_pDocument;
    471 };
    472 
    473 #endif  // XFA_FXFA_FM2JS_XFA_FM2JSCONTEXT_H_
    474