14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd.
34514f5e3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
44514f5e3Sopenharmony_ci * you may not use this file except in compliance with the License.
54514f5e3Sopenharmony_ci * You may obtain a copy of the License at
64514f5e3Sopenharmony_ci *
74514f5e3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
84514f5e3Sopenharmony_ci *
94514f5e3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
104514f5e3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
114514f5e3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
124514f5e3Sopenharmony_ci * See the License for the specific language governing permissions and
134514f5e3Sopenharmony_ci * limitations under the License.
144514f5e3Sopenharmony_ci */
154514f5e3Sopenharmony_ci
164514f5e3Sopenharmony_ci#ifndef ECMASCRIPT_COMPILER_COMMON_STUB_CSIGNS_H
174514f5e3Sopenharmony_ci#define ECMASCRIPT_COMPILER_COMMON_STUB_CSIGNS_H
184514f5e3Sopenharmony_ci
194514f5e3Sopenharmony_ci#include "ecmascript/compiler/call_signature.h"
204514f5e3Sopenharmony_ci
214514f5e3Sopenharmony_cinamespace panda::ecmascript::kungfu {
224514f5e3Sopenharmony_ci#define COMMON_STUB_LIST(V)           \
234514f5e3Sopenharmony_ci    V(Add)                            \
244514f5e3Sopenharmony_ci    V(Sub)                            \
254514f5e3Sopenharmony_ci    V(Mul)                            \
264514f5e3Sopenharmony_ci    V(Div)                            \
274514f5e3Sopenharmony_ci    V(Mod)                            \
284514f5e3Sopenharmony_ci    V(Equal)                          \
294514f5e3Sopenharmony_ci    V(NotEqual)                       \
304514f5e3Sopenharmony_ci    V(StrictEqual)                    \
314514f5e3Sopenharmony_ci    V(StrictNotEqual)                 \
324514f5e3Sopenharmony_ci    V(Less)                           \
334514f5e3Sopenharmony_ci    V(LessEq)                         \
344514f5e3Sopenharmony_ci    V(Greater)                        \
354514f5e3Sopenharmony_ci    V(GreaterEq)                      \
364514f5e3Sopenharmony_ci    V(Shl)                            \
374514f5e3Sopenharmony_ci    V(Shr)                            \
384514f5e3Sopenharmony_ci    V(Ashr)                           \
394514f5e3Sopenharmony_ci    V(And)                            \
404514f5e3Sopenharmony_ci    V(Or)                             \
414514f5e3Sopenharmony_ci    V(Xor)                            \
424514f5e3Sopenharmony_ci    V(Instanceof)                     \
434514f5e3Sopenharmony_ci    V(TypeOf)                         \
444514f5e3Sopenharmony_ci    V(Inc)                            \
454514f5e3Sopenharmony_ci    V(Dec)                            \
464514f5e3Sopenharmony_ci    V(Neg)                            \
474514f5e3Sopenharmony_ci    V(Not)                            \
484514f5e3Sopenharmony_ci    V(ToBooleanTrue)                  \
494514f5e3Sopenharmony_ci    V(ToBooleanFalse)                 \
504514f5e3Sopenharmony_ci    V(GetPropertyByName)              \
514514f5e3Sopenharmony_ci    V(DeprecatedGetPropertyByName)    \
524514f5e3Sopenharmony_ci    V(SetPropertyByName)              \
534514f5e3Sopenharmony_ci    V(DeprecatedSetPropertyByName)    \
544514f5e3Sopenharmony_ci    V(SetPropertyByNameWithOwn)       \
554514f5e3Sopenharmony_ci    V(GetPropertyByIndex)             \
564514f5e3Sopenharmony_ci    V(SetPropertyByIndex)             \
574514f5e3Sopenharmony_ci    V(SetPropertyByIndexWithOwn)      \
584514f5e3Sopenharmony_ci    V(GetPropertyByValue)             \
594514f5e3Sopenharmony_ci    V(DeprecatedGetPropertyByValue)   \
604514f5e3Sopenharmony_ci    V(SetPropertyByValue)             \
614514f5e3Sopenharmony_ci    V(DeprecatedSetPropertyByValue)   \
624514f5e3Sopenharmony_ci    V(TryLdGlobalByName)              \
634514f5e3Sopenharmony_ci    V(TryStGlobalByName)              \
644514f5e3Sopenharmony_ci    V(LdGlobalVar)                    \
654514f5e3Sopenharmony_ci    V(LdObjByIndex)                   \
664514f5e3Sopenharmony_ci    V(StGlobalVar)                    \
674514f5e3Sopenharmony_ci    V(StObjByIndex)                   \
684514f5e3Sopenharmony_ci    V(StOwnByIndex)                   \
694514f5e3Sopenharmony_ci    V(StOwnByName)                    \
704514f5e3Sopenharmony_ci    V(StOwnByNameWithNameSet)         \
714514f5e3Sopenharmony_ci    V(StOwnByValue)                   \
724514f5e3Sopenharmony_ci    V(StOwnByValueWithNameSet)        \
734514f5e3Sopenharmony_ci    V(SetPropertyByValueWithOwn)      \
744514f5e3Sopenharmony_ci    V(TryLoadICByName)                \
754514f5e3Sopenharmony_ci    V(TryLoadICByValue)               \
764514f5e3Sopenharmony_ci    V(TryStoreICByName)               \
774514f5e3Sopenharmony_ci    V(TryStoreICByValue)              \
784514f5e3Sopenharmony_ci    V(SetValueWithBarrier)            \
794514f5e3Sopenharmony_ci    V(SetNonSValueWithBarrier)        \
804514f5e3Sopenharmony_ci    V(SetValueWithEdenBarrier)        \
814514f5e3Sopenharmony_ci    V(SetNonSValueWithEdenBarrier)    \
824514f5e3Sopenharmony_ci    V(SetSValueWithBarrier)           \
834514f5e3Sopenharmony_ci    V(NewLexicalEnv)                  \
844514f5e3Sopenharmony_ci    V(CopyRestArgs)                   \
854514f5e3Sopenharmony_ci    V(GetUnmappedArgs)                \
864514f5e3Sopenharmony_ci    V(GetCallSpreadArgs)              \
874514f5e3Sopenharmony_ci    V(NewThisObjectChecked)           \
884514f5e3Sopenharmony_ci    V(ConstructorCheck)               \
894514f5e3Sopenharmony_ci    V(CreateEmptyArray)               \
904514f5e3Sopenharmony_ci    V(CreateArrayWithBuffer)          \
914514f5e3Sopenharmony_ci    V(NewJSObject)                    \
924514f5e3Sopenharmony_ci    V(JsBoundCallInternal)            \
934514f5e3Sopenharmony_ci    V(CreateStringBySingleCharCode)   \
944514f5e3Sopenharmony_ci    V(Getpropiterator)                \
954514f5e3Sopenharmony_ci    V(Getnextpropname)                \
964514f5e3Sopenharmony_ci    V(CreateJSSetIterator)            \
974514f5e3Sopenharmony_ci    V(JSSetEntries)                   \
984514f5e3Sopenharmony_ci    V(CreateJSMapIterator)            \
994514f5e3Sopenharmony_ci    V(JSMapKeys)                      \
1004514f5e3Sopenharmony_ci    V(JSMapValues)                    \
1014514f5e3Sopenharmony_ci    V(JSMapGet)                       \
1024514f5e3Sopenharmony_ci    V(JSMapHas)                       \
1034514f5e3Sopenharmony_ci    V(JSSetHas)                       \
1044514f5e3Sopenharmony_ci    V(JSSetAdd)                       \
1054514f5e3Sopenharmony_ci    V(JSMapDelete)                    \
1064514f5e3Sopenharmony_ci    V(JSSetDelete)                    \
1074514f5e3Sopenharmony_ci    V(CreateJSTypedArrayEntries)      \
1084514f5e3Sopenharmony_ci    V(CreateJSTypedArrayKeys)         \
1094514f5e3Sopenharmony_ci    V(CreateJSTypedArrayValues)       \
1104514f5e3Sopenharmony_ci    V(GetSingleCharCodeByIndex)       \
1114514f5e3Sopenharmony_ci    V(FastStringEqual)                \
1124514f5e3Sopenharmony_ci    V(FastStringAdd)                  \
1134514f5e3Sopenharmony_ci    V(Definefunc)                     \
1144514f5e3Sopenharmony_ci    V(DefineField)                    \
1154514f5e3Sopenharmony_ci    V(ConvertCharToInt32)             \
1164514f5e3Sopenharmony_ci    V(ConvertCharToDouble)            \
1174514f5e3Sopenharmony_ci    V(DeleteObjectProperty)           \
1184514f5e3Sopenharmony_ci    V(SameValue)                      \
1194514f5e3Sopenharmony_ci    V(StringIteratorNext)             \
1204514f5e3Sopenharmony_ci    V(VerifyBarrier)
1214514f5e3Sopenharmony_ci
1224514f5e3Sopenharmony_ci#define COMMON_STUB_ID_LIST(V)          \
1234514f5e3Sopenharmony_ci    COMMON_STUB_LIST(V)
1244514f5e3Sopenharmony_ci
1254514f5e3Sopenharmony_ciclass CommonStubCSigns {
1264514f5e3Sopenharmony_cipublic:
1274514f5e3Sopenharmony_ci    enum ID {
1284514f5e3Sopenharmony_ci#define DEF_STUB_ID(name) name,
1294514f5e3Sopenharmony_ci        COMMON_STUB_ID_LIST(DEF_STUB_ID)
1304514f5e3Sopenharmony_ci#undef DEF_STUB_ID
1314514f5e3Sopenharmony_ci        NUM_OF_STUBS
1324514f5e3Sopenharmony_ci    };
1334514f5e3Sopenharmony_ci
1344514f5e3Sopenharmony_ci    static void Initialize();
1354514f5e3Sopenharmony_ci
1364514f5e3Sopenharmony_ci    static void GetCSigns(std::vector<const CallSignature*>& callSigns);
1374514f5e3Sopenharmony_ci
1384514f5e3Sopenharmony_ci    static const CallSignature *Get(size_t index)
1394514f5e3Sopenharmony_ci    {
1404514f5e3Sopenharmony_ci        ASSERT(index < NUM_OF_STUBS);
1414514f5e3Sopenharmony_ci        return &callSigns_[index];
1424514f5e3Sopenharmony_ci    }
1434514f5e3Sopenharmony_ci
1444514f5e3Sopenharmony_ci    static const std::string &GetName(size_t index)
1454514f5e3Sopenharmony_ci    {
1464514f5e3Sopenharmony_ci        ASSERT(index < NUM_OF_STUBS);
1474514f5e3Sopenharmony_ci        return callSigns_[index].GetName();
1484514f5e3Sopenharmony_ci    }
1494514f5e3Sopenharmony_ci
1504514f5e3Sopenharmony_ciprivate:
1514514f5e3Sopenharmony_ci    static CallSignature callSigns_[NUM_OF_STUBS];
1524514f5e3Sopenharmony_ci};
1534514f5e3Sopenharmony_ci}  // namespace panda::ecmascript::kungfu
1544514f5e3Sopenharmony_ci#endif  // ECMASCRIPT_COMPILER_COMMON_STUB_CSIGNS_H
155