14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2022-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_BUILTINS_CALL_SIGNATURE_H
174514f5e3Sopenharmony_ci#define ECMASCRIPT_COMPILER_BUILTINS_CALL_SIGNATURE_H
184514f5e3Sopenharmony_ci
194514f5e3Sopenharmony_ci#include "ecmascript/base/config.h"
204514f5e3Sopenharmony_ci#include "ecmascript/compiler/call_signature.h"
214514f5e3Sopenharmony_ci
224514f5e3Sopenharmony_cinamespace panda::ecmascript::kungfu {
234514f5e3Sopenharmony_ci
244514f5e3Sopenharmony_ci#define PADDING_BUILTINS_STUB_LIST(V)               \
254514f5e3Sopenharmony_ci    V(NONE)
264514f5e3Sopenharmony_ci
274514f5e3Sopenharmony_ci// BUILTINS_STUB_LIST is shared both ASM Interpreter and AOT.
284514f5e3Sopenharmony_ci// AOT_BUILTINS_STUB_LIST is used in AOT only.
294514f5e3Sopenharmony_ci#define BUILTINS_STUB_LIST(V, D, C)                 \
304514f5e3Sopenharmony_ci    BUILTINS_METHOD_STUB_LIST(D, D, D, D)           \
314514f5e3Sopenharmony_ci    BUILTINS_WITH_CONTAINERS_STUB_BUILDER(D)        \
324514f5e3Sopenharmony_ci    AOT_AND_BUILTINS_STUB_LIST(V)                   \
334514f5e3Sopenharmony_ci    BUILTINS_CONSTRUCTOR_STUB_LIST(C)               \
344514f5e3Sopenharmony_ci    BUILTINS_ARKTOOLS_STUB_BUILDER(D)
354514f5e3Sopenharmony_ci
364514f5e3Sopenharmony_ci#define BUILTINS_NOSTUB_LIST(V)                     \
374514f5e3Sopenharmony_ci    V(ObjectConstructor)                            \
384514f5e3Sopenharmony_ci    V(GlobalDecodeURIComponent)
394514f5e3Sopenharmony_ci
404514f5e3Sopenharmony_ci#define BUILTINS_METHOD_STUB_LIST(V, T, D, K)       \
414514f5e3Sopenharmony_ci    BUILTINS_WITH_STRING_STUB_BUILDER(V)            \
424514f5e3Sopenharmony_ci    BUILTINS_WITH_OBJECT_STUB_BUILDER(T)            \
434514f5e3Sopenharmony_ci    BUILTINS_WITH_ARRAY_STUB_BUILDER(V)             \
444514f5e3Sopenharmony_ci    BUILTINS_WITH_SET_STUB_BUILDER(D)               \
454514f5e3Sopenharmony_ci    BUILTINS_WITH_MAP_STUB_BUILDER(D)               \
464514f5e3Sopenharmony_ci    BUILTINS_WITH_FUNCTION_STUB_BUILDER(V)          \
474514f5e3Sopenharmony_ci    BUILTINS_WITH_NUMBER_STUB_BUILDER(T)            \
484514f5e3Sopenharmony_ci    BUILTINS_WITH_TYPEDARRAY_STUB_BUILDER(V)        \
494514f5e3Sopenharmony_ci    BUILTINS_WITH_DATAVIEW_STUB_BUILDER(K)          \
504514f5e3Sopenharmony_ci    BUILTINS_WITH_REFLECT_STUB_BUILDER(T)           \
514514f5e3Sopenharmony_ci    BUILTINS_WITH_COLLATOR_STUB_BUILDER(V)          \
524514f5e3Sopenharmony_ci    BUILTINS_WITH_REGEXP_STUB_BUILDER(V)
534514f5e3Sopenharmony_ci
544514f5e3Sopenharmony_ci#define BUILTINS_WITH_STRING_STUB_BUILDER(V)                                            \
554514f5e3Sopenharmony_ci    V(CharAt,             String,   Hole())                                             \
564514f5e3Sopenharmony_ci    V(FromCharCode,       String,   Hole())                                             \
574514f5e3Sopenharmony_ci    V(CharCodeAt,         String,   DoubleToTaggedDoublePtr(Double(base::NAN_VALUE)))   \
584514f5e3Sopenharmony_ci    V(CodePointAt,        String,   Undefined())                                        \
594514f5e3Sopenharmony_ci    V(IndexOf,            String,   IntToTaggedPtr(Int32(-1)))                          \
604514f5e3Sopenharmony_ci    V(Substring,          String,   IntToTaggedPtr(Int32(-1)))                          \
614514f5e3Sopenharmony_ci    V(SubStr,             String,   Undefined())                                        \
624514f5e3Sopenharmony_ci    V(Replace,            String,   Undefined())                                        \
634514f5e3Sopenharmony_ci    V(Trim,               String,   Undefined())                                        \
644514f5e3Sopenharmony_ci    V(TrimStart,          String,   Undefined())                                        \
654514f5e3Sopenharmony_ci    V(TrimEnd,            String,   Undefined())                                        \
664514f5e3Sopenharmony_ci    V(TrimLeft,           String,   Undefined())                                        \
674514f5e3Sopenharmony_ci    V(TrimRight,          String,   Undefined())                                        \
684514f5e3Sopenharmony_ci    V(PadStart,           String,   Undefined())                                        \
694514f5e3Sopenharmony_ci    V(PadEnd,             String,   Undefined())                                        \
704514f5e3Sopenharmony_ci    V(Concat,             String,   Undefined())                                        \
714514f5e3Sopenharmony_ci    V(Slice,              String,   Undefined())                                        \
724514f5e3Sopenharmony_ci    V(ToLowerCase,        String,   Undefined())                                        \
734514f5e3Sopenharmony_ci    V(StartsWith,         String,   TaggedFalse())                                      \
744514f5e3Sopenharmony_ci    V(EndsWith,           String,   TaggedFalse())                                      \
754514f5e3Sopenharmony_ci    V(GetStringIterator,  String,   Undefined())
764514f5e3Sopenharmony_ci
774514f5e3Sopenharmony_ci#define BUILTINS_WITH_OBJECT_STUB_BUILDER(V)                                      \
784514f5e3Sopenharmony_ci    V(ToString,                    Object,   Undefined())                         \
794514f5e3Sopenharmony_ci    V(Create,                      Object,   Undefined())                         \
804514f5e3Sopenharmony_ci    V(Assign,                      Object,   Undefined())                         \
814514f5e3Sopenharmony_ci    V(HasOwnProperty,              Object,   TaggedFalse())                       \
824514f5e3Sopenharmony_ci    V(Keys,                        Object,   Undefined())                         \
834514f5e3Sopenharmony_ci    V(GetPrototypeOf,              Object,   Undefined())                         \
844514f5e3Sopenharmony_ci    V(GetOwnPropertyNames,         Object,   Undefined())                         \
854514f5e3Sopenharmony_ci    V(GetOwnPropertySymbols,       Object,   Undefined())                         \
864514f5e3Sopenharmony_ci    V(Entries,                     Object,   Undefined())                         \
874514f5e3Sopenharmony_ci    V(IsFrozen,                    Object,   Undefined())                         \
884514f5e3Sopenharmony_ci    V(IsSealed,                    Object,   Undefined())                         \
894514f5e3Sopenharmony_ci    V(GetOwnPropertyDescriptors,   Object,   Undefined())                         \
904514f5e3Sopenharmony_ci    V(SetPrototypeOf,              Object,   Undefined())
914514f5e3Sopenharmony_ci
924514f5e3Sopenharmony_ci#define BUILTINS_WITH_ARRAY_STUB_BUILDER(V)         \
934514f5e3Sopenharmony_ci    V(With,          Array,   Undefined())          \
944514f5e3Sopenharmony_ci    V(Unshift,       Array,   Undefined())          \
954514f5e3Sopenharmony_ci    V(Shift,         Array,   Undefined())          \
964514f5e3Sopenharmony_ci    V(Concat,        Array,   Undefined())          \
974514f5e3Sopenharmony_ci    V(Filter,        Array,   Undefined())          \
984514f5e3Sopenharmony_ci    V(Find,          Array,   Undefined())          \
994514f5e3Sopenharmony_ci    V(FindIndex,     Array,   Undefined())          \
1004514f5e3Sopenharmony_ci    V(From,          Array,   Undefined())          \
1014514f5e3Sopenharmony_ci    V(Splice,        Array,   Undefined())          \
1024514f5e3Sopenharmony_ci    V(ToSpliced,     Array,   Undefined())          \
1034514f5e3Sopenharmony_ci    V(ForEach,       Array,   Undefined())          \
1044514f5e3Sopenharmony_ci    V(IndexOf,       Array,   Undefined())          \
1054514f5e3Sopenharmony_ci    V(LastIndexOf,   Array,   Undefined())          \
1064514f5e3Sopenharmony_ci    V(Pop,           Array,   Undefined())          \
1074514f5e3Sopenharmony_ci    V(Slice,         Array,   Undefined())          \
1084514f5e3Sopenharmony_ci    V(Reduce,        Array,   Undefined())          \
1094514f5e3Sopenharmony_ci    V(Reverse,       Array,   Undefined())          \
1104514f5e3Sopenharmony_ci    V(ToReversed,    Array,   Undefined())          \
1114514f5e3Sopenharmony_ci    V(Push,          Array,   Undefined())          \
1124514f5e3Sopenharmony_ci    V(Values,        Array,   Undefined())          \
1134514f5e3Sopenharmony_ci    V(Includes,      Array,   Undefined())          \
1144514f5e3Sopenharmony_ci    V(CopyWithin,    Array,   Undefined())          \
1154514f5e3Sopenharmony_ci    V(Some,          Array,   Undefined())          \
1164514f5e3Sopenharmony_ci    V(Fill,          Array,   Undefined())          \
1174514f5e3Sopenharmony_ci    V(Every,         Array,   Undefined())          \
1184514f5e3Sopenharmony_ci    V(FindLastIndex, Array,   Undefined())          \
1194514f5e3Sopenharmony_ci    V(FindLast,      Array,   Undefined())          \
1204514f5e3Sopenharmony_ci    V(ReduceRight,   Array,   Undefined())          \
1214514f5e3Sopenharmony_ci    V(Map,           Array,   Undefined())          \
1224514f5e3Sopenharmony_ci    V(FlatMap,       Array,   Undefined())          \
1234514f5e3Sopenharmony_ci    V(ToSorted,      Array,   Undefined())          \
1244514f5e3Sopenharmony_ci    V(IsArray,       Array,   Undefined())
1254514f5e3Sopenharmony_ci
1264514f5e3Sopenharmony_ci#define BUILTINS_WITH_SET_STUB_BUILDER(V)           \
1274514f5e3Sopenharmony_ci    V(Clear,    Set,   Undefined())                 \
1284514f5e3Sopenharmony_ci    V(Values,   Set,   Undefined())                 \
1294514f5e3Sopenharmony_ci    V(Entries,  Set,   Undefined())                 \
1304514f5e3Sopenharmony_ci    V(ForEach,  Set,   Undefined())                 \
1314514f5e3Sopenharmony_ci    V(Add,      Set,   Undefined())                 \
1324514f5e3Sopenharmony_ci    V(Delete,   Set,   Undefined())                 \
1334514f5e3Sopenharmony_ci    V(Has,      Set,   Undefined())
1344514f5e3Sopenharmony_ci
1354514f5e3Sopenharmony_ci#define BUILTINS_WITH_MAP_STUB_BUILDER(V)           \
1364514f5e3Sopenharmony_ci    V(Clear,    Map,   Undefined())                 \
1374514f5e3Sopenharmony_ci    V(Values,   Map,   Undefined())                 \
1384514f5e3Sopenharmony_ci    V(Entries,  Map,   Undefined())                 \
1394514f5e3Sopenharmony_ci    V(Keys,     Map,   Undefined())                 \
1404514f5e3Sopenharmony_ci    V(ForEach,  Map,   Undefined())                 \
1414514f5e3Sopenharmony_ci    V(Set,      Map,   Undefined())                 \
1424514f5e3Sopenharmony_ci    V(Delete,   Map,   Undefined())                 \
1434514f5e3Sopenharmony_ci    V(Has,      Map,   Undefined())                 \
1444514f5e3Sopenharmony_ci    V(Get,      Map,   Undefined())
1454514f5e3Sopenharmony_ci
1464514f5e3Sopenharmony_ci#define BUILTINS_WITH_FUNCTION_STUB_BUILDER(V)      \
1474514f5e3Sopenharmony_ci    V(PrototypeApply,  Function,  Undefined())      \
1484514f5e3Sopenharmony_ci    V(PrototypeBind,   Function,  Undefined())      \
1494514f5e3Sopenharmony_ci    V(PrototypeCall,   Function,  Undefined())
1504514f5e3Sopenharmony_ci
1514514f5e3Sopenharmony_ci#define BUILTINS_WITH_NUMBER_STUB_BUILDER(V)        \
1524514f5e3Sopenharmony_ci    V(ParseFloat,      Number,    Undefined())      \
1534514f5e3Sopenharmony_ci    V(ParseInt,        Number,    Undefined())      \
1544514f5e3Sopenharmony_ci    V(IsFinite,        Number,    Undefined())      \
1554514f5e3Sopenharmony_ci    V(IsNaN,           Number,    Undefined())      \
1564514f5e3Sopenharmony_ci    V(IsInteger,       Number,    Undefined())      \
1574514f5e3Sopenharmony_ci    V(IsSafeInteger,   Number,    Undefined())      \
1584514f5e3Sopenharmony_ci    V(ToString,        Number,    Undefined())
1594514f5e3Sopenharmony_ci
1604514f5e3Sopenharmony_ci#define BUILTINS_WITH_REFLECT_STUB_BUILDER(V)       \
1614514f5e3Sopenharmony_ci    V(Get,             Reflect,   Undefined())
1624514f5e3Sopenharmony_ci
1634514f5e3Sopenharmony_ci#define BUILTINS_WITH_COLLATOR_STUB_BUILDER(V)      \
1644514f5e3Sopenharmony_ci    V(ResolvedOptions, Collator,   Undefined())
1654514f5e3Sopenharmony_ci
1664514f5e3Sopenharmony_ci#define BUILTINS_WITH_REGEXP_STUB_BUILDER(V)        \
1674514f5e3Sopenharmony_ci    V(GetFlags,        RegExp,   Undefined())
1684514f5e3Sopenharmony_ci
1694514f5e3Sopenharmony_ci#define BUILTINS_WITH_TYPEDARRAY_STUB_BUILDER(V)    \
1704514f5e3Sopenharmony_ci    V(Reverse,         TypedArray,  Undefined())    \
1714514f5e3Sopenharmony_ci    V(LastIndexOf,     TypedArray,  Undefined())    \
1724514f5e3Sopenharmony_ci    V(IndexOf,         TypedArray,  Undefined())    \
1734514f5e3Sopenharmony_ci    V(Find,            TypedArray,  Undefined())    \
1744514f5e3Sopenharmony_ci    V(Includes,        TypedArray,  Undefined())    \
1754514f5e3Sopenharmony_ci    V(CopyWithin,      TypedArray,  Undefined())    \
1764514f5e3Sopenharmony_ci    V(ReduceRight,     TypedArray,  Undefined())    \
1774514f5e3Sopenharmony_ci    V(Reduce,          TypedArray,  Undefined())    \
1784514f5e3Sopenharmony_ci    V(Every,           TypedArray,  Undefined())    \
1794514f5e3Sopenharmony_ci    V(Some,            TypedArray,  Undefined())    \
1804514f5e3Sopenharmony_ci    V(Filter,          TypedArray,  Undefined())    \
1814514f5e3Sopenharmony_ci    V(With,            TypedArray,  Undefined())    \
1824514f5e3Sopenharmony_ci    V(Entries,         TypedArray,  Undefined())    \
1834514f5e3Sopenharmony_ci    V(Keys,            TypedArray,  Undefined())    \
1844514f5e3Sopenharmony_ci    V(Values,          TypedArray,  Undefined())    \
1854514f5e3Sopenharmony_ci    V(Slice,           TypedArray,  Undefined())    \
1864514f5e3Sopenharmony_ci    V(SubArray,        TypedArray,  Undefined())    \
1874514f5e3Sopenharmony_ci    V(Sort,            TypedArray,  Undefined())    \
1884514f5e3Sopenharmony_ci    V(GetByteLength,   TypedArray,  Undefined())    \
1894514f5e3Sopenharmony_ci    V(GetByteOffset,   TypedArray,  Undefined())    \
1904514f5e3Sopenharmony_ci    V(Set,             TypedArray,  Undefined())    \
1914514f5e3Sopenharmony_ci    V(FindIndex,       TypedArray,  Undefined())    \
1924514f5e3Sopenharmony_ci    V(FindLastIndex,   TypedArray,  Undefined())    \
1934514f5e3Sopenharmony_ci    V(ToSorted,        TypedArray,  Undefined())    \
1944514f5e3Sopenharmony_ci    V(Of,              TypedArray,  Undefined())    \
1954514f5e3Sopenharmony_ci    V(Map,             TypedArray,  Undefined())    \
1964514f5e3Sopenharmony_ci    V(ToReversed,      TypedArray,  Undefined())
1974514f5e3Sopenharmony_ci
1984514f5e3Sopenharmony_ci#define BUILTINS_WITH_DATAVIEW_STUB_BUILDER(V)                           \
1994514f5e3Sopenharmony_ci    V(SetInt32,     DataView,  INT32,     SetTypedValue, Undefined())    \
2004514f5e3Sopenharmony_ci    V(SetFloat32,   DataView,  FLOAT32,   SetTypedValue, Undefined())    \
2014514f5e3Sopenharmony_ci    V(SetFloat64,   DataView,  FLOAT64,   SetTypedValue, Undefined())
2024514f5e3Sopenharmony_ci
2034514f5e3Sopenharmony_ci#define BUILTINS_WITH_CONTAINERS_STUB_BUILDER(V)                                                               \
2044514f5e3Sopenharmony_ci    V(ForEach,            ArrayList,      ContainersCommonFuncCall,  ARRAYLIST_FOREACH,            JS_POINTER) \
2054514f5e3Sopenharmony_ci    V(ForEach,            Deque,          DequeCommonFuncCall,       DEQUE_FOREACH,                JS_POINTER) \
2064514f5e3Sopenharmony_ci    V(ForEach,            HashMap,        ContainersHashCall,        HASHMAP_FOREACH,              JS_POINTER) \
2074514f5e3Sopenharmony_ci    V(ForEach,            HashSet,        ContainersHashCall,        HASHSET_FOREACH,              JS_POINTER) \
2084514f5e3Sopenharmony_ci    V(ForEach,            LightWeightMap, ContainersLightWeightCall, LIGHTWEIGHTMAP_FOREACH,       JS_POINTER) \
2094514f5e3Sopenharmony_ci    V(ForEach,            LightWeightSet, ContainersLightWeightCall, LIGHTWEIGHTSET_FOREACH,       JS_POINTER) \
2104514f5e3Sopenharmony_ci    V(ForEach,            LinkedList,     ContainersLinkedListCall,  LINKEDLIST_FOREACH,           JS_POINTER) \
2114514f5e3Sopenharmony_ci    V(ForEach,            List,           ContainersLinkedListCall,  LIST_FOREACH,                 JS_POINTER) \
2124514f5e3Sopenharmony_ci    V(ForEach,            PlainArray,     ContainersCommonFuncCall,  PLAINARRAY_FOREACH,           JS_POINTER) \
2134514f5e3Sopenharmony_ci    V(ForEach,            Queue,          QueueCommonFuncCall,       QUEUE_FOREACH,                JS_POINTER) \
2144514f5e3Sopenharmony_ci    V(ForEach,            Stack,          ContainersCommonFuncCall,  STACK_FOREACH,                JS_POINTER) \
2154514f5e3Sopenharmony_ci    V(ForEach,            Vector,         ContainersCommonFuncCall,  VECTOR_FOREACH,               JS_POINTER) \
2164514f5e3Sopenharmony_ci    V(ReplaceAllElements, ArrayList,      ContainersCommonFuncCall,  ARRAYLIST_REPLACEALLELEMENTS, JS_POINTER) \
2174514f5e3Sopenharmony_ci    V(ReplaceAllElements, Vector,         ContainersCommonFuncCall,  VECTOR_REPLACEALLELEMENTS,    JS_POINTER)
2184514f5e3Sopenharmony_ci
2194514f5e3Sopenharmony_ci#define BUILTINS_ARKTOOLS_STUB_BUILDER(V) \
2204514f5e3Sopenharmony_ci    V(HashCode, ArkTools, Undefined())
2214514f5e3Sopenharmony_ci
2224514f5e3Sopenharmony_ci#define BUILTINS_CONSTRUCTOR_STUB_LIST(V)           \
2234514f5e3Sopenharmony_ci    V(BooleanConstructor)                           \
2244514f5e3Sopenharmony_ci    V(NumberConstructor)                            \
2254514f5e3Sopenharmony_ci    V(ProxyConstructor)                             \
2264514f5e3Sopenharmony_ci    V(DateConstructor)                              \
2274514f5e3Sopenharmony_ci    V(ArrayConstructor)                             \
2284514f5e3Sopenharmony_ci    V(SetConstructor)                               \
2294514f5e3Sopenharmony_ci    V(MapConstructor)                               \
2304514f5e3Sopenharmony_ci    V(Int8ArrayConstructor)                         \
2314514f5e3Sopenharmony_ci    V(Uint8ArrayConstructor)                        \
2324514f5e3Sopenharmony_ci    V(Uint8ClampedArrayConstructor)                 \
2334514f5e3Sopenharmony_ci    V(Int16ArrayConstructor)                        \
2344514f5e3Sopenharmony_ci    V(Uint16ArrayConstructor)                       \
2354514f5e3Sopenharmony_ci    V(Int32ArrayConstructor)                        \
2364514f5e3Sopenharmony_ci    V(Uint32ArrayConstructor)                       \
2374514f5e3Sopenharmony_ci    V(Float32ArrayConstructor)                      \
2384514f5e3Sopenharmony_ci    V(Float64ArrayConstructor)                      \
2394514f5e3Sopenharmony_ci    V(BigInt64ArrayConstructor)                     \
2404514f5e3Sopenharmony_ci    V(BigUint64ArrayConstructor)
2414514f5e3Sopenharmony_ci
2424514f5e3Sopenharmony_ci#define AOT_AND_BUILTINS_STUB_LIST(V)               \
2434514f5e3Sopenharmony_ci    V(StringLocaleCompare)                                \
2444514f5e3Sopenharmony_ci    V(StringIteratorProtoNext)                   \
2454514f5e3Sopenharmony_ci    V(ArraySort)
2464514f5e3Sopenharmony_ci
2474514f5e3Sopenharmony_ci#define AOT_BUILTINS_STUB_LIST(V)                   \
2484514f5e3Sopenharmony_ci    V(JsonStringify)                                    \
2494514f5e3Sopenharmony_ci    V(MapProtoIterator)                                 \
2504514f5e3Sopenharmony_ci    V(MapIteratorProtoNext)                             \
2514514f5e3Sopenharmony_ci    V(SetProtoIterator)                                 \
2524514f5e3Sopenharmony_ci    V(SetIteratorProtoNext)                             \
2534514f5e3Sopenharmony_ci    V(StringProtoIterator)                              \
2544514f5e3Sopenharmony_ci    V(ArrayProtoIterator)                               \
2554514f5e3Sopenharmony_ci    V(ArrayIteratorProtoNext)                           \
2564514f5e3Sopenharmony_ci    V(TypeArrayProtoIterator)                           \
2574514f5e3Sopenharmony_ci    V(IteratorProtoReturn)
2584514f5e3Sopenharmony_ci
2594514f5e3Sopenharmony_ci// List of builtins which will try to be inlined in TypedNativeInlineLoweringPass
2604514f5e3Sopenharmony_ci#define AOT_BUILTINS_INLINE_LIST(V)                 \
2614514f5e3Sopenharmony_ci    V(MathAcos)                                     \
2624514f5e3Sopenharmony_ci    V(MathAcosh)                                    \
2634514f5e3Sopenharmony_ci    V(MathAsin)                                     \
2644514f5e3Sopenharmony_ci    V(MathAsinh)                                    \
2654514f5e3Sopenharmony_ci    V(MathAtan)                                     \
2664514f5e3Sopenharmony_ci    V(MathAtan2)                                    \
2674514f5e3Sopenharmony_ci    V(MathAtanh)                                    \
2684514f5e3Sopenharmony_ci    V(MathCos)                                      \
2694514f5e3Sopenharmony_ci    V(MathCosh)                                     \
2704514f5e3Sopenharmony_ci    V(MathSign)                                     \
2714514f5e3Sopenharmony_ci    V(MathSin)                                      \
2724514f5e3Sopenharmony_ci    V(MathSinh)                                     \
2734514f5e3Sopenharmony_ci    V(MathSqrt)                                     \
2744514f5e3Sopenharmony_ci    V(MathTan)                                      \
2754514f5e3Sopenharmony_ci    V(MathCbrt)                                     \
2764514f5e3Sopenharmony_ci    V(MathTanh)                                     \
2774514f5e3Sopenharmony_ci    V(MathLog)                                      \
2784514f5e3Sopenharmony_ci    V(MathLog2)                                     \
2794514f5e3Sopenharmony_ci    V(MathLog10)                                    \
2804514f5e3Sopenharmony_ci    V(MathLog1p)                                    \
2814514f5e3Sopenharmony_ci    V(MathExp)                                      \
2824514f5e3Sopenharmony_ci    V(MathExpm1)                                    \
2834514f5e3Sopenharmony_ci    V(MathClz32)                                    \
2844514f5e3Sopenharmony_ci    V(MathPow)                                      \
2854514f5e3Sopenharmony_ci    V(MathTrunc)                                    \
2864514f5e3Sopenharmony_ci    V(MathCeil)                                     \
2874514f5e3Sopenharmony_ci    V(MathFloor)                                    \
2884514f5e3Sopenharmony_ci    V(MathAbs)                                      \
2894514f5e3Sopenharmony_ci    V(MathRound)                                    \
2904514f5e3Sopenharmony_ci    V(MathFRound)                                   \
2914514f5e3Sopenharmony_ci    V(MathMin)                                      \
2924514f5e3Sopenharmony_ci    V(MathMax)                                      \
2934514f5e3Sopenharmony_ci    V(MathImul)                                     \
2944514f5e3Sopenharmony_ci    V(DateGetTime)                                  \
2954514f5e3Sopenharmony_ci    V(DateNow)                                      \
2964514f5e3Sopenharmony_ci    V(GlobalIsFinite)                               \
2974514f5e3Sopenharmony_ci    V(GlobalIsNan)                                  \
2984514f5e3Sopenharmony_ci    V(BigIntConstructor)                            \
2994514f5e3Sopenharmony_ci    V(ArrayBufferIsView)                            \
3004514f5e3Sopenharmony_ci    V(BigIntAsIntN)                                 \
3014514f5e3Sopenharmony_ci    V(BigIntAsUintN)                                \
3024514f5e3Sopenharmony_ci    V(DataViewGetFloat32)                           \
3034514f5e3Sopenharmony_ci    V(DataViewGetFloat64)                           \
3044514f5e3Sopenharmony_ci    V(DataViewGetInt8)                              \
3054514f5e3Sopenharmony_ci    V(DataViewGetInt16)                             \
3064514f5e3Sopenharmony_ci    V(DataViewGetInt32)                             \
3074514f5e3Sopenharmony_ci    V(DataViewGetUint16)                            \
3084514f5e3Sopenharmony_ci    V(DataViewGetUint32)                            \
3094514f5e3Sopenharmony_ci    V(DataViewGetUint8)                             \
3104514f5e3Sopenharmony_ci    V(DataViewSetInt8)                              \
3114514f5e3Sopenharmony_ci    V(DataViewSetInt16)                             \
3124514f5e3Sopenharmony_ci    V(DataViewSetUint8)                             \
3134514f5e3Sopenharmony_ci    V(DataViewSetUint16)                            \
3144514f5e3Sopenharmony_ci    V(DataViewSetUint32)                            \
3154514f5e3Sopenharmony_ci    V(ObjectIs)                                     \
3164514f5e3Sopenharmony_ci    V(ObjectGetProto)                               \
3174514f5e3Sopenharmony_ci    V(ObjectIsPrototypeOf)                          \
3184514f5e3Sopenharmony_ci    V(ReflectGetPrototypeOf)                        \
3194514f5e3Sopenharmony_ci    V(ReflectHas)                                   \
3204514f5e3Sopenharmony_ci    V(ReflectConstruct)                             \
3214514f5e3Sopenharmony_ci    V(ReflectApply)                                 \
3224514f5e3Sopenharmony_ci    V(FunctionPrototypeHasInstance)                 \
3234514f5e3Sopenharmony_ci    V(ArrayKeys)                                    \
3244514f5e3Sopenharmony_ci    V(ArrayEntries)                                 \
3254514f5e3Sopenharmony_ci    V(TYPED_BUILTINS_INLINE_FIRST = MathAcos)       \
3264514f5e3Sopenharmony_ci    V(TYPED_BUILTINS_INLINE_LAST = ArrayEntries)
3274514f5e3Sopenharmony_ci
3284514f5e3Sopenharmony_ciclass BuiltinsStubCSigns {
3294514f5e3Sopenharmony_cipublic:
3304514f5e3Sopenharmony_ci    enum ID {
3314514f5e3Sopenharmony_ci#define DEF_STUB_ID(name) name,
3324514f5e3Sopenharmony_ci#define DEF_STUB_ID_DYN(name, type, ...) type##name,
3334514f5e3Sopenharmony_ci        PADDING_BUILTINS_STUB_LIST(DEF_STUB_ID)
3344514f5e3Sopenharmony_ci        BUILTINS_STUB_LIST(DEF_STUB_ID, DEF_STUB_ID_DYN, DEF_STUB_ID)
3354514f5e3Sopenharmony_ci        NUM_OF_BUILTINS_STUBS,
3364514f5e3Sopenharmony_ci        BUILTINS_NOSTUB_LIST(DEF_STUB_ID)
3374514f5e3Sopenharmony_ci        AOT_BUILTINS_STUB_LIST(DEF_STUB_ID)
3384514f5e3Sopenharmony_ci        AOT_BUILTINS_INLINE_LIST(DEF_STUB_ID)
3394514f5e3Sopenharmony_ci#undef DEF_STUB_ID_DYN
3404514f5e3Sopenharmony_ci#undef DEF_STUB_ID
3414514f5e3Sopenharmony_ci        BUILTINS_CONSTRUCTOR_STUB_FIRST = BooleanConstructor,
3424514f5e3Sopenharmony_ci        TYPED_BUILTINS_FIRST = JsonStringify,
3434514f5e3Sopenharmony_ci        TYPED_BUILTINS_LAST = IteratorProtoReturn,
3444514f5e3Sopenharmony_ci        INVALID = 0xFFFF,
3454514f5e3Sopenharmony_ci    };
3464514f5e3Sopenharmony_ci    static_assert(ID::NONE == 0);
3474514f5e3Sopenharmony_ci
3484514f5e3Sopenharmony_ci    static void Initialize();
3494514f5e3Sopenharmony_ci
3504514f5e3Sopenharmony_ci    static void GetCSigns(std::vector<const CallSignature*>& callSigns);
3514514f5e3Sopenharmony_ci
3524514f5e3Sopenharmony_ci    static const CallSignature *Get(size_t index)
3534514f5e3Sopenharmony_ci    {
3544514f5e3Sopenharmony_ci        ASSERT(index < NUM_OF_BUILTINS_STUBS);
3554514f5e3Sopenharmony_ci        return &callSigns_[index];
3564514f5e3Sopenharmony_ci    }
3574514f5e3Sopenharmony_ci
3584514f5e3Sopenharmony_ci    static const std::string &GetName(int index)
3594514f5e3Sopenharmony_ci    {
3604514f5e3Sopenharmony_ci        ASSERT(index < NUM_OF_BUILTINS_STUBS);
3614514f5e3Sopenharmony_ci        return callSigns_[index].GetName();
3624514f5e3Sopenharmony_ci    }
3634514f5e3Sopenharmony_ci
3644514f5e3Sopenharmony_ci    static const CallSignature* BuiltinsCSign()
3654514f5e3Sopenharmony_ci    {
3664514f5e3Sopenharmony_ci        return &builtinsCSign_;
3674514f5e3Sopenharmony_ci    }
3684514f5e3Sopenharmony_ci
3694514f5e3Sopenharmony_ci    static const CallSignature* BuiltinsWithArgvCSign()
3704514f5e3Sopenharmony_ci    {
3714514f5e3Sopenharmony_ci        return &builtinsWithArgvCSign_;
3724514f5e3Sopenharmony_ci    }
3734514f5e3Sopenharmony_ci
3744514f5e3Sopenharmony_ci    static bool IsFastBuiltin(ID builtinId)
3754514f5e3Sopenharmony_ci    {
3764514f5e3Sopenharmony_ci        return builtinId > NONE && builtinId < NUM_OF_BUILTINS_STUBS;
3774514f5e3Sopenharmony_ci    }
3784514f5e3Sopenharmony_ci
3794514f5e3Sopenharmony_ci    static bool IsTypedBuiltin(ID builtinId)
3804514f5e3Sopenharmony_ci    {
3814514f5e3Sopenharmony_ci        return (BuiltinsStubCSigns::ID::StringLocaleCompare == builtinId) ||
3824514f5e3Sopenharmony_ci               (BuiltinsStubCSigns::ID::StringIteratorProtoNext == builtinId) ||
3834514f5e3Sopenharmony_ci               (BuiltinsStubCSigns::ID::ArraySort == builtinId) ||
3844514f5e3Sopenharmony_ci               (BuiltinsStubCSigns::ID::GlobalDecodeURIComponent == builtinId) ||
3854514f5e3Sopenharmony_ci               ((BuiltinsStubCSigns::ID::TYPED_BUILTINS_FIRST <= builtinId) &&
3864514f5e3Sopenharmony_ci               (builtinId <= BuiltinsStubCSigns::ID::TYPED_BUILTINS_LAST));
3874514f5e3Sopenharmony_ci    }
3884514f5e3Sopenharmony_ci
3894514f5e3Sopenharmony_ci    static bool IsTypedInlineBuiltin(ID builtinId)
3904514f5e3Sopenharmony_ci    {
3914514f5e3Sopenharmony_ci        if (TYPED_BUILTINS_INLINE_FIRST <= builtinId && builtinId <= TYPED_BUILTINS_INLINE_LAST) {
3924514f5e3Sopenharmony_ci            return true;
3934514f5e3Sopenharmony_ci        }
3944514f5e3Sopenharmony_ci        if (BuiltinsStubCSigns::ID::DataViewSetInt32 <= builtinId &&
3954514f5e3Sopenharmony_ci            builtinId <= BuiltinsStubCSigns::ID::DataViewSetFloat64) {
3964514f5e3Sopenharmony_ci            return true;
3974514f5e3Sopenharmony_ci        }
3984514f5e3Sopenharmony_ci        // NOTE(schernykh): try to remove this switch and move StringFromCharCode to TYPED_BUILTINS_INLINE list
3994514f5e3Sopenharmony_ci        switch (builtinId) {
4004514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArraySort:
4014514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringFromCharCode:
4024514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringCharCodeAt:
4034514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringSubstring:
4044514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringSubStr:
4054514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringSlice:
4064514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapGet:
4074514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapHas:
4084514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapKeys:
4094514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapValues:
4104514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapEntries:
4114514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetHas:
4124514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapDelete:
4134514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetDelete:
4144514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::TypedArrayEntries:
4154514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::TypedArrayKeys:
4164514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::TypedArrayValues:
4174514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetValues:
4184514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetEntries:
4194514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapClear:
4204514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetClear:
4214514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetAdd:
4224514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberParseFloat:
4234514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberParseInt:
4244514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberIsFinite:
4254514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberIsNaN:
4264514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberIsInteger:
4274514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberIsSafeInteger:
4284514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectIs:
4294514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectGetPrototypeOf:
4304514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectGetProto:
4314514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectCreate:
4324514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectIsPrototypeOf:
4334514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectHasOwnProperty:
4344514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectGetPrototypeOf:
4354514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectGet:
4364514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectHas:
4374514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectConstruct:
4384514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectApply:
4394514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::FunctionPrototypeApply:
4404514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::FunctionPrototypeBind:
4414514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::FunctionPrototypeCall:
4424514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::FunctionPrototypeHasInstance:
4434514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayIndexOf:
4444514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayIncludes:
4454514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayValues:
4464514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayForEach:
4474514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayFind:
4484514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayFindIndex:
4494514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayFilter:
4504514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayMap:
4514514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArraySome:
4524514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayEvery:
4534514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayPop:
4544514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArraySlice:
4554514f5e3Sopenharmony_ci                return true;
4564514f5e3Sopenharmony_ci            default:
4574514f5e3Sopenharmony_ci                return false;
4584514f5e3Sopenharmony_ci        }
4594514f5e3Sopenharmony_ci        return false;
4604514f5e3Sopenharmony_ci    }
4614514f5e3Sopenharmony_ci
4624514f5e3Sopenharmony_ci    static bool IsTypedBuiltinNumber(ID builtinId)
4634514f5e3Sopenharmony_ci    {
4644514f5e3Sopenharmony_ci        return BuiltinsStubCSigns::ID::NumberConstructor == builtinId;
4654514f5e3Sopenharmony_ci    }
4664514f5e3Sopenharmony_ci
4674514f5e3Sopenharmony_ci    static bool IsTypedBuiltinGlobal(ID builtinId)
4684514f5e3Sopenharmony_ci    {
4694514f5e3Sopenharmony_ci        return BuiltinsStubCSigns::ID::GlobalDecodeURIComponent == builtinId;
4704514f5e3Sopenharmony_ci    }
4714514f5e3Sopenharmony_ci
4724514f5e3Sopenharmony_ci    static bool IsTypedBuiltinCallThis0(ID builtinId)
4734514f5e3Sopenharmony_ci    {
4744514f5e3Sopenharmony_ci        switch (builtinId) {
4754514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapIteratorProtoNext:
4764514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetIteratorProtoNext:
4774514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringIteratorProtoNext:
4784514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayIteratorProtoNext:
4794514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::IteratorProtoReturn:
4804514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArraySort:
4814514f5e3Sopenharmony_ci                return true;
4824514f5e3Sopenharmony_ci            default:
4834514f5e3Sopenharmony_ci                return false;
4844514f5e3Sopenharmony_ci        }
4854514f5e3Sopenharmony_ci    }
4864514f5e3Sopenharmony_ci
4874514f5e3Sopenharmony_ci    static bool IsTypedBuiltinCallThis1(ID builtinId)
4884514f5e3Sopenharmony_ci    {
4894514f5e3Sopenharmony_ci        switch (builtinId) {
4904514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::JsonStringify:
4914514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringLocaleCompare:
4924514f5e3Sopenharmony_ci                return true;
4934514f5e3Sopenharmony_ci            default:
4944514f5e3Sopenharmony_ci                return false;
4954514f5e3Sopenharmony_ci        }
4964514f5e3Sopenharmony_ci    }
4974514f5e3Sopenharmony_ci
4984514f5e3Sopenharmony_ci    static bool IsTypedBuiltinCallThis3(ID builtinId)
4994514f5e3Sopenharmony_ci    {
5004514f5e3Sopenharmony_ci        switch (builtinId) {
5014514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringLocaleCompare:
5024514f5e3Sopenharmony_ci                return true;
5034514f5e3Sopenharmony_ci            default:
5044514f5e3Sopenharmony_ci                return false;
5054514f5e3Sopenharmony_ci        }
5064514f5e3Sopenharmony_ci    }
5074514f5e3Sopenharmony_ci
5084514f5e3Sopenharmony_ci    static ConstantIndex GetConstantIndex(ID builtinId)
5094514f5e3Sopenharmony_ci    {
5104514f5e3Sopenharmony_ci        switch (builtinId) {
5114514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathAcos:
5124514f5e3Sopenharmony_ci                return ConstantIndex::MATH_ACOS_INDEX;
5134514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathAcosh:
5144514f5e3Sopenharmony_ci                return ConstantIndex::MATH_ACOSH_INDEX;
5154514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathAsin:
5164514f5e3Sopenharmony_ci                return ConstantIndex::MATH_ASIN_INDEX;
5174514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathAsinh:
5184514f5e3Sopenharmony_ci                return ConstantIndex::MATH_ASINH_INDEX;
5194514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathAtan:
5204514f5e3Sopenharmony_ci                return ConstantIndex::MATH_ATAN_INDEX;
5214514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathAtan2:
5224514f5e3Sopenharmony_ci                return ConstantIndex::MATH_ATAN2_INDEX;
5234514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathAtanh:
5244514f5e3Sopenharmony_ci                return ConstantIndex::MATH_ATANH_INDEX;
5254514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathCos:
5264514f5e3Sopenharmony_ci                return ConstantIndex::MATH_COS_INDEX;
5274514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathCosh:
5284514f5e3Sopenharmony_ci                return ConstantIndex::MATH_COSH_INDEX;
5294514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathSign:
5304514f5e3Sopenharmony_ci                return ConstantIndex::MATH_SIGN_INDEX;
5314514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathSin:
5324514f5e3Sopenharmony_ci                return ConstantIndex::MATH_SIN_INDEX;
5334514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathSinh:
5344514f5e3Sopenharmony_ci                return ConstantIndex::MATH_SINH_INDEX;
5354514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathTan:
5364514f5e3Sopenharmony_ci                return ConstantIndex::MATH_TAN_INDEX;
5374514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathTanh:
5384514f5e3Sopenharmony_ci                return ConstantIndex::MATH_TANH_INDEX;
5394514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathAbs:
5404514f5e3Sopenharmony_ci                return ConstantIndex::MATH_ABS_INDEX;
5414514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathLog:
5424514f5e3Sopenharmony_ci                return ConstantIndex::MATH_LOG_INDEX;
5434514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathLog2:
5444514f5e3Sopenharmony_ci                return ConstantIndex::MATH_LOG2_INDEX;
5454514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathLog10:
5464514f5e3Sopenharmony_ci                return ConstantIndex::MATH_LOG10_INDEX;
5474514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathLog1p:
5484514f5e3Sopenharmony_ci                return ConstantIndex::MATH_LOG1P_INDEX;
5494514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathExp:
5504514f5e3Sopenharmony_ci                return ConstantIndex::MATH_EXP_INDEX;
5514514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathExpm1:
5524514f5e3Sopenharmony_ci                return ConstantIndex::MATH_EXPM1_INDEX;
5534514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathClz32:
5544514f5e3Sopenharmony_ci                return ConstantIndex::MATH_CLZ32_INDEX;
5554514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathPow:
5564514f5e3Sopenharmony_ci                return ConstantIndex::MATH_POW_INDEX;
5574514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathCbrt:
5584514f5e3Sopenharmony_ci                return ConstantIndex::MATH_CBRT_INDEX;
5594514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathTrunc:
5604514f5e3Sopenharmony_ci                return ConstantIndex::MATH_TRUNC_INDEX;
5614514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathCeil:
5624514f5e3Sopenharmony_ci                return ConstantIndex::MATH_CEIL_INDEX;
5634514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathFloor:
5644514f5e3Sopenharmony_ci                return ConstantIndex::MATH_FLOOR_INDEX;
5654514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathMin:
5664514f5e3Sopenharmony_ci                return ConstantIndex::MATH_MIN_INDEX;
5674514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathMax:
5684514f5e3Sopenharmony_ci                return ConstantIndex::MATH_MAX_INDEX;
5694514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathSqrt:
5704514f5e3Sopenharmony_ci                return ConstantIndex::MATH_SQRT_INDEX;
5714514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathRound:
5724514f5e3Sopenharmony_ci                return ConstantIndex::MATH_ROUND_INDEX;
5734514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathFRound:
5744514f5e3Sopenharmony_ci                return ConstantIndex::MATH_FROUND_INDEX;
5754514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MathImul:
5764514f5e3Sopenharmony_ci                return ConstantIndex::MATH_IMUL_INDEX;
5774514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapGet:
5784514f5e3Sopenharmony_ci                return ConstantIndex::MAP_GET_INDEX;
5794514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapHas:
5804514f5e3Sopenharmony_ci                return ConstantIndex::MAP_HAS_INDEX;
5814514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapKeys:
5824514f5e3Sopenharmony_ci                return ConstantIndex::MAP_KEYS_INDEX;
5834514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapValues:
5844514f5e3Sopenharmony_ci                return ConstantIndex::MAP_VALUES_INDEX;
5854514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapEntries:
5864514f5e3Sopenharmony_ci                return ConstantIndex::MAP_ENTRIES_INDEX;
5874514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetHas:
5884514f5e3Sopenharmony_ci                return ConstantIndex::SET_HAS_INDEX;
5894514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapDelete:
5904514f5e3Sopenharmony_ci                return ConstantIndex::MAP_DELETE_INDEX;
5914514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetDelete:
5924514f5e3Sopenharmony_ci                return ConstantIndex::SET_DELETE_INDEX;
5934514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetValues:
5944514f5e3Sopenharmony_ci                return ConstantIndex::SET_VALUES_INDEX;
5954514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetEntries:
5964514f5e3Sopenharmony_ci                return ConstantIndex::SET_ENTRIES_INDEX;
5974514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapClear:
5984514f5e3Sopenharmony_ci                return ConstantIndex::MAP_CLEAR_INDEX;
5994514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetClear:
6004514f5e3Sopenharmony_ci                return ConstantIndex::SET_CLEAR_INDEX;
6014514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetAdd:
6024514f5e3Sopenharmony_ci                return ConstantIndex::SET_ADD_INDEX;
6034514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringLocaleCompare:
6044514f5e3Sopenharmony_ci                return ConstantIndex::LOCALE_COMPARE_FUNCTION_INDEX;
6054514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringCharCodeAt:
6064514f5e3Sopenharmony_ci                return ConstantIndex::STRING_CHAR_CODE_AT_INDEX;
6074514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringSubstring:
6084514f5e3Sopenharmony_ci                return ConstantIndex::STRING_SUB_STRING_INDEX;
6094514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringSubStr:
6104514f5e3Sopenharmony_ci                return ConstantIndex::STRING_SUB_STR_INDEX;
6114514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringSlice:
6124514f5e3Sopenharmony_ci                return ConstantIndex::STRING_SLICE_INDEX;
6134514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArraySort:
6144514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_SORT_FUNCTION_INDEX;
6154514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::JsonStringify:
6164514f5e3Sopenharmony_ci                return ConstantIndex::JSON_STRINGIFY_FUNCTION_INDEX;
6174514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::MapIteratorProtoNext:
6184514f5e3Sopenharmony_ci                return ConstantIndex::MAP_ITERATOR_PROTO_NEXT_INDEX;
6194514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::SetIteratorProtoNext:
6204514f5e3Sopenharmony_ci                return ConstantIndex::SET_ITERATOR_PROTO_NEXT_INDEX;
6214514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringIteratorProtoNext:
6224514f5e3Sopenharmony_ci                return ConstantIndex::STRING_ITERATOR_PROTO_NEXT_INDEX;
6234514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayIteratorProtoNext:
6244514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_ITERATOR_PROTO_NEXT_INDEX;
6254514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::IteratorProtoReturn:
6264514f5e3Sopenharmony_ci                return ConstantIndex::ITERATOR_PROTO_RETURN_INDEX;
6274514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::StringFromCharCode:
6284514f5e3Sopenharmony_ci                return ConstantIndex::STRING_FROM_CHAR_CODE_INDEX;
6294514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DateGetTime:
6304514f5e3Sopenharmony_ci                return ConstantIndex::DATE_GET_TIME_INDEX;
6314514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DateNow:
6324514f5e3Sopenharmony_ci                return ConstantIndex::DATE_NOW_INDEX;
6334514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::TypedArrayEntries:
6344514f5e3Sopenharmony_ci                return ConstantIndex::TYPED_ARRAY_ENTRIES_INDEX;
6354514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::TypedArrayKeys:
6364514f5e3Sopenharmony_ci                return ConstantIndex::TYPED_ARRAY_KEYS_INDEX;
6374514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::TypedArrayValues:
6384514f5e3Sopenharmony_ci                return ConstantIndex::TYPED_ARRAY_VALUES_INDEX;
6394514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::GlobalIsFinite:
6404514f5e3Sopenharmony_ci                return ConstantIndex::GLOBAL_IS_FINITE_INDEX;
6414514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::GlobalIsNan:
6424514f5e3Sopenharmony_ci                return ConstantIndex::GLOBAL_IS_NAN_INDEX;
6434514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayBufferIsView:
6444514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_BUFFER_IS_VIEW_INDEX;
6454514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewGetFloat32:
6464514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_GET_FLOAT32_INDEX;
6474514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewGetFloat64:
6484514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_GET_FLOAT64_INDEX;
6494514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewGetInt8:
6504514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_GET_INT8_INDEX;
6514514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewGetInt16:
6524514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_GET_INT16_INDEX;
6534514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewGetInt32:
6544514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_GET_INT32_INDEX;
6554514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewGetUint16:
6564514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_GET_UINT16_INDEX;
6574514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewGetUint32:
6584514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_GET_UINT32_INDEX;
6594514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewGetUint8:
6604514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_GET_UINT8_INDEX;
6614514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewSetFloat32:
6624514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_SET_FLOAT32_INDEX;
6634514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewSetFloat64:
6644514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_SET_FLOAT64_INDEX;
6654514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewSetInt8:
6664514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_SET_INT8_INDEX;
6674514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewSetInt16:
6684514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_SET_INT16_INDEX;
6694514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewSetInt32:
6704514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_SET_INT32_INDEX;
6714514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewSetUint8:
6724514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_SET_UINT8_INDEX;
6734514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewSetUint16:
6744514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_SET_UINT16_INDEX;
6754514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::DataViewSetUint32:
6764514f5e3Sopenharmony_ci                return ConstantIndex::DATA_VIEW_SET_UINT32_INDEX;
6774514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::BigIntAsIntN:
6784514f5e3Sopenharmony_ci                return ConstantIndex::BIGINT_AS_INTN_INDEX;
6794514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::BigIntAsUintN:
6804514f5e3Sopenharmony_ci                return ConstantIndex::BIGINT_AS_UINTN_INDEX;
6814514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberIsFinite:
6824514f5e3Sopenharmony_ci                return ConstantIndex::NUMBER_IS_FINITE_INDEX;
6834514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberIsInteger:
6844514f5e3Sopenharmony_ci                return ConstantIndex::NUMBER_IS_INTEGER_INDEX;
6854514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberIsNaN:
6864514f5e3Sopenharmony_ci                return ConstantIndex::NUMBER_IS_NAN_INDEX;
6874514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberIsSafeInteger:
6884514f5e3Sopenharmony_ci                return ConstantIndex::NUMBER_IS_SAFEINTEGER_INDEX;
6894514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberParseFloat:
6904514f5e3Sopenharmony_ci                return ConstantIndex::NUMBER_PARSE_FLOAT_INDEX;
6914514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::NumberParseInt:
6924514f5e3Sopenharmony_ci                return ConstantIndex::NUMBER_PARSE_INT_INDEX;
6934514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectIs:
6944514f5e3Sopenharmony_ci                return ConstantIndex::OBJECT_IS_INDEX;
6954514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectGetPrototypeOf:
6964514f5e3Sopenharmony_ci                return ConstantIndex::OBJECT_GET_PROTOTYPE_OF_INDEX;
6974514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectGetProto:
6984514f5e3Sopenharmony_ci                return ConstantIndex::OBJECT_GET_PROTO_INDEX;
6994514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectCreate:
7004514f5e3Sopenharmony_ci                return ConstantIndex::OBJECT_CREATE_INDEX;
7014514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectIsPrototypeOf:
7024514f5e3Sopenharmony_ci                return ConstantIndex::OBJECT_IS_PROTOTYPE_OF_INDEX;
7034514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ObjectHasOwnProperty:
7044514f5e3Sopenharmony_ci                return ConstantIndex::OBJECT_HAS_OWN_PROPERTY_INDEX;
7054514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectGetPrototypeOf:
7064514f5e3Sopenharmony_ci                return ConstantIndex::REFLECT_GET_PROTOTYPE_OF_INDEX;
7074514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectGet:
7084514f5e3Sopenharmony_ci                return ConstantIndex::REFLECT_GET_INDEX;
7094514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectHas:
7104514f5e3Sopenharmony_ci                return ConstantIndex::REFLECT_HAS_INDEX;
7114514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectConstruct:
7124514f5e3Sopenharmony_ci                return ConstantIndex::REFLECT_CONSTRUCT_INDEX;
7134514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ReflectApply:
7144514f5e3Sopenharmony_ci                return ConstantIndex::REFLECT_APPLY_INDEX;
7154514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::FunctionPrototypeApply:
7164514f5e3Sopenharmony_ci                return ConstantIndex::FUNCTION_PROTOTYPE_APPLY_INDEX;
7174514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::FunctionPrototypeBind:
7184514f5e3Sopenharmony_ci                return ConstantIndex::FUNCTION_PROTOTYPE_BIND_INDEX;
7194514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::FunctionPrototypeCall:
7204514f5e3Sopenharmony_ci                return ConstantIndex::FUNCTION_PROTOTYPE_CALL_INDEX;
7214514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::FunctionPrototypeHasInstance:
7224514f5e3Sopenharmony_ci                return ConstantIndex::FUNCTION_PROTOTYPE_HAS_INSTANCE_INDEX;
7234514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayIndexOf:
7244514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_INDEXOF_INDEX;
7254514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayIncludes:
7264514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_INCLUDES_INDEX;
7274514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayValues:
7284514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_VALUES_INDEX;
7294514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayEntries:
7304514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_ENTRIES_INDEX;
7314514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayKeys:
7324514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_KEYS_INDEX;
7334514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayForEach:
7344514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_FOREACH_INDEX;
7354514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayFind:
7364514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_FIND_INDEX;
7374514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayFindIndex:
7384514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_FINDINDEX_INDEX;
7394514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayFilter:
7404514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_FILTER_INDEX;
7414514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayMap:
7424514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_MAP_INDEX;
7434514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArraySome:
7444514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_SOME_INDEX;
7454514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayEvery:
7464514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_EVERY_INDEX;
7474514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArrayPop:
7484514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_POP_INDEX;
7494514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::ArraySlice:
7504514f5e3Sopenharmony_ci                return ConstantIndex::ARRAY_SLICE_INDEX;
7514514f5e3Sopenharmony_ci            case BuiltinsStubCSigns::ID::GlobalDecodeURIComponent:
7524514f5e3Sopenharmony_ci                return ConstantIndex::GLOBAL_DECODE_URI_COMPONENT;
7534514f5e3Sopenharmony_ci            default:
7544514f5e3Sopenharmony_ci                LOG_COMPILER(INFO) << "GetConstantIndex Invalid Id:" << builtinId;
7554514f5e3Sopenharmony_ci                return ConstantIndex::INVALID;
7564514f5e3Sopenharmony_ci        }
7574514f5e3Sopenharmony_ci    }
7584514f5e3Sopenharmony_ci
7594514f5e3Sopenharmony_ci    static bool CheckBuiltinsIdInvalid(ID builtinId)
7604514f5e3Sopenharmony_ci    {
7614514f5e3Sopenharmony_ci        auto result = kungfu::BuiltinsStubCSigns::GetConstantIndex(builtinId);
7624514f5e3Sopenharmony_ci        return result == ConstantIndex::INVALID;
7634514f5e3Sopenharmony_ci    }
7644514f5e3Sopenharmony_ci
7654514f5e3Sopenharmony_ci    static size_t GetGlobalEnvIndex(ID builtinId);
7664514f5e3Sopenharmony_ci
7674514f5e3Sopenharmony_ci    static std::string GetBuiltinName(ID id)
7684514f5e3Sopenharmony_ci    {
7694514f5e3Sopenharmony_ci        static const std::map<BuiltinsStubCSigns::ID, const std::string> builtinId2Str = {
7704514f5e3Sopenharmony_ci            {MathAcos, "Math.acos"},
7714514f5e3Sopenharmony_ci            {MathAcosh, "Math.acosh"},
7724514f5e3Sopenharmony_ci            {MathAsin, "Math.asin"},
7734514f5e3Sopenharmony_ci            {MathAsinh, "Math.asinh"},
7744514f5e3Sopenharmony_ci            {MathAtan, "Math.atan"},
7754514f5e3Sopenharmony_ci            {MathAtan2, "Math.atan2"},
7764514f5e3Sopenharmony_ci            {MathAtanh, "Math.atanh"},
7774514f5e3Sopenharmony_ci            {MathCos, "Math.cos"},
7784514f5e3Sopenharmony_ci            {MathCosh, "Math.cosh"},
7794514f5e3Sopenharmony_ci            {MathSign, "Math.sign"},
7804514f5e3Sopenharmony_ci            {MathSin, "Math.sin"},
7814514f5e3Sopenharmony_ci            {MathSinh, "Math.sinh"},
7824514f5e3Sopenharmony_ci            {MathTan, "Math.tan"},
7834514f5e3Sopenharmony_ci            {MathTanh, "Math.tanh"},
7844514f5e3Sopenharmony_ci            {MathLog, "Math.log"},
7854514f5e3Sopenharmony_ci            {MathLog2, "Math.log2"},
7864514f5e3Sopenharmony_ci            {MathLog10, "Math.log10"},
7874514f5e3Sopenharmony_ci            {MathLog1p, "Math.log1p"},
7884514f5e3Sopenharmony_ci            {MathExp, "Math.exp"},
7894514f5e3Sopenharmony_ci            {MathExpm1, "Math.expm1"},
7904514f5e3Sopenharmony_ci            {MathClz32, "Math.clz32"},
7914514f5e3Sopenharmony_ci            {MathSqrt, "Math.sqrt"},
7924514f5e3Sopenharmony_ci            {MathCbrt, "Math.cbrt"},
7934514f5e3Sopenharmony_ci            {MathAbs, "Math.abs"},
7944514f5e3Sopenharmony_ci            {MathPow, "Math.pow"},
7954514f5e3Sopenharmony_ci            {MathTrunc, "Math.trunc"},
7964514f5e3Sopenharmony_ci            {MathRound, "Math.round"},
7974514f5e3Sopenharmony_ci            {MathFRound, "Math.fround"},
7984514f5e3Sopenharmony_ci            {MathCeil, "Math.ceil"},
7994514f5e3Sopenharmony_ci            {MathFloor, "Math.floor"},
8004514f5e3Sopenharmony_ci            {MathImul, "Math.imul"},
8014514f5e3Sopenharmony_ci            {MathMax, "Math.max"},
8024514f5e3Sopenharmony_ci            {MathMin, "Math.min"},
8034514f5e3Sopenharmony_ci            {DateGetTime, "Date.prototype.getTime"},
8044514f5e3Sopenharmony_ci            {DateNow, "Date.now"},
8054514f5e3Sopenharmony_ci            {TypedArrayEntries, "TypedArray.entries"},
8064514f5e3Sopenharmony_ci            {TypedArrayKeys, "TypedArray.keys"},
8074514f5e3Sopenharmony_ci            {TypedArrayValues, "TypedArray.values"},
8084514f5e3Sopenharmony_ci            {GlobalIsFinite, "isFinite"},
8094514f5e3Sopenharmony_ci            {GlobalIsNan, "isNan"},
8104514f5e3Sopenharmony_ci            {BigIntAsIntN, "BigInt.asIntN"},
8114514f5e3Sopenharmony_ci            {BigIntAsUintN, "BigInt.asUintN"},
8124514f5e3Sopenharmony_ci            {MapGet, "Map.get"},
8134514f5e3Sopenharmony_ci            {MapHas, "Map.has"},
8144514f5e3Sopenharmony_ci            {MapKeys, "Map.keys"},
8154514f5e3Sopenharmony_ci            {MapValues, "Map.values"},
8164514f5e3Sopenharmony_ci            {MapEntries, "Map.entries"},
8174514f5e3Sopenharmony_ci            {SetValues, "Set.values"},
8184514f5e3Sopenharmony_ci            {SetEntries, "Set.entries"},
8194514f5e3Sopenharmony_ci            {SetHas, "Set.has"},
8204514f5e3Sopenharmony_ci            {MapDelete, "Map.delete"},
8214514f5e3Sopenharmony_ci            {SetDelete, "Set.delete"},
8224514f5e3Sopenharmony_ci            {MapClear, "Map.clear"},
8234514f5e3Sopenharmony_ci            {SetClear, "Set.clear"},
8244514f5e3Sopenharmony_ci            {SetAdd, "Set.add"},
8254514f5e3Sopenharmony_ci            {BigIntConstructor, "BigInt"},
8264514f5e3Sopenharmony_ci            {NumberParseFloat, "Number.parseFloat"},
8274514f5e3Sopenharmony_ci            {NumberIsInteger, "Number.isInteger"},
8284514f5e3Sopenharmony_ci            {NumberIsSafeInteger, "Number.isSafeInteger"},
8294514f5e3Sopenharmony_ci            {NumberParseInt, "Number.parseInt"},
8304514f5e3Sopenharmony_ci            {StringCharCodeAt, "String.prototype.charCodeAt"},
8314514f5e3Sopenharmony_ci            {StringSubstring, "String.prototype.substring"},
8324514f5e3Sopenharmony_ci            {StringSubStr, "String.prototype.substr"},
8334514f5e3Sopenharmony_ci            {StringSlice, "String.prototype.slice"},
8344514f5e3Sopenharmony_ci            {ObjectIs, "Object.is"},
8354514f5e3Sopenharmony_ci            {ObjectGetPrototypeOf, "Object.getPrototypeOf"},
8364514f5e3Sopenharmony_ci            {ObjectGetProto, "Object.prototype.getProto"},
8374514f5e3Sopenharmony_ci            {ObjectCreate, "Object.create"},
8384514f5e3Sopenharmony_ci            {ObjectIsPrototypeOf, "Object.prototype.isPrototypeOf"},
8394514f5e3Sopenharmony_ci            {ObjectHasOwnProperty, "Object.prototype.hasOwnProperty"},
8404514f5e3Sopenharmony_ci            {ReflectGetPrototypeOf, "Reflect.getPrototypeOf"},
8414514f5e3Sopenharmony_ci            {ReflectGet, "Reflect.get"},
8424514f5e3Sopenharmony_ci            {ReflectHas, "Reflect.has"},
8434514f5e3Sopenharmony_ci            {ReflectConstruct, "Reflect.construct"},
8444514f5e3Sopenharmony_ci            {ReflectApply, "Reflect.apply"},
8454514f5e3Sopenharmony_ci            {FunctionPrototypeApply, "Function.prototype.apply"},
8464514f5e3Sopenharmony_ci            {FunctionPrototypeBind, "Function.prototype.bind"},
8474514f5e3Sopenharmony_ci            {FunctionPrototypeCall, "Function.prototype.call"},
8484514f5e3Sopenharmony_ci            {FunctionPrototypeHasInstance, "Function.prototype.hasInstance"},
8494514f5e3Sopenharmony_ci            {ArrayIncludes, "Array.prototype.includes"},
8504514f5e3Sopenharmony_ci            {ArrayIndexOf, "Array.prototype.indexOf"},
8514514f5e3Sopenharmony_ci            {ArrayEntries, "Array.prototype.entries"},
8524514f5e3Sopenharmony_ci            {ArrayValues, "Array.prototype.values"},
8534514f5e3Sopenharmony_ci            {ArrayKeys, "Array.prototype.keys"},
8544514f5e3Sopenharmony_ci            {ArrayFind, "Array.prototype.find"},
8554514f5e3Sopenharmony_ci            {ArrayFindIndex, "Array.prototype.findIndex"},
8564514f5e3Sopenharmony_ci            {ArrayForEach, "Array.prototype.foreach"},
8574514f5e3Sopenharmony_ci            {ArrayFilter, "Array.prototype.filter"},
8584514f5e3Sopenharmony_ci            {ArraySome, "Array.prototype.some"},
8594514f5e3Sopenharmony_ci            {ArrayMap, "Array.prototype.map"},
8604514f5e3Sopenharmony_ci            {ArrayEvery, "Array.prototype.every"},
8614514f5e3Sopenharmony_ci            {ArrayPop, "Array.prototype.pop"},
8624514f5e3Sopenharmony_ci            {ArraySlice, "Array.prototype.slice"},
8634514f5e3Sopenharmony_ci            {DataViewGetInt8, "DataView.prototype.GetInt8"},
8644514f5e3Sopenharmony_ci            {DataViewGetUint8, "DataView.prototype.GetUint8"},
8654514f5e3Sopenharmony_ci            {DataViewGetInt16, "DataView.prototype.GetInt16"},
8664514f5e3Sopenharmony_ci            {DataViewGetUint16, "DataView.prototype.GetUint16"},
8674514f5e3Sopenharmony_ci            {DataViewGetInt32, "DataView.prototype.GetInt32"},
8684514f5e3Sopenharmony_ci            {DataViewGetUint32, "DataView.prototype.GetUint32"},
8694514f5e3Sopenharmony_ci            {DataViewGetFloat32, "DataView.prototype.GetFloat32"},
8704514f5e3Sopenharmony_ci            {DataViewGetFloat64, "DataView.prototype.GetFloat64"},
8714514f5e3Sopenharmony_ci            {DataViewSetInt8, "DataView.prototype.SetInt8"},
8724514f5e3Sopenharmony_ci            {DataViewSetUint8, "DataView.prototype.SetUint8"},
8734514f5e3Sopenharmony_ci            {DataViewSetInt16, "DataView.prototype.SetInt16"},
8744514f5e3Sopenharmony_ci            {DataViewSetUint16, "DataView.prototype.SetUint16"},
8754514f5e3Sopenharmony_ci            {DataViewSetInt32, "DataView.prototype.SetInt32"},
8764514f5e3Sopenharmony_ci            {DataViewSetUint32, "DataView.prototype.SetUint32"},
8774514f5e3Sopenharmony_ci            {DataViewSetFloat32, "DataView.prototype.SetFloat32"},
8784514f5e3Sopenharmony_ci            {DataViewSetFloat64, "DataView.prototype.SetFloat64"},
8794514f5e3Sopenharmony_ci        };
8804514f5e3Sopenharmony_ci        if (builtinId2Str.count(id) > 0) {
8814514f5e3Sopenharmony_ci            return builtinId2Str.at(id);
8824514f5e3Sopenharmony_ci        }
8834514f5e3Sopenharmony_ci        return "";
8844514f5e3Sopenharmony_ci    }
8854514f5e3Sopenharmony_ci
8864514f5e3Sopenharmony_ci    static ID GetBuiltinId(std::string idStr)
8874514f5e3Sopenharmony_ci    {
8884514f5e3Sopenharmony_ci        static const std::map<const std::string, BuiltinsStubCSigns::ID> str2BuiltinId = {
8894514f5e3Sopenharmony_ci            {"acos", MathAcos},
8904514f5e3Sopenharmony_ci            {"acosh", MathAcosh},
8914514f5e3Sopenharmony_ci            {"asin", MathAsin},
8924514f5e3Sopenharmony_ci            {"asinh", MathAsinh},
8934514f5e3Sopenharmony_ci            {"atan", MathAtan},
8944514f5e3Sopenharmony_ci            {"atan2", MathAtan2},
8954514f5e3Sopenharmony_ci            {"atanh", MathAtanh},
8964514f5e3Sopenharmony_ci            {"cos", MathCos},
8974514f5e3Sopenharmony_ci            {"cosh", MathCosh},
8984514f5e3Sopenharmony_ci            {"sign", MathSign},
8994514f5e3Sopenharmony_ci            {"sin", MathSin},
9004514f5e3Sopenharmony_ci            {"sinh", MathSinh},
9014514f5e3Sopenharmony_ci            {"tan", MathTan},
9024514f5e3Sopenharmony_ci            {"tanh", MathTanh},
9034514f5e3Sopenharmony_ci            {"log", MathLog},
9044514f5e3Sopenharmony_ci            {"log2", MathLog2},
9054514f5e3Sopenharmony_ci            {"log10", MathLog10},
9064514f5e3Sopenharmony_ci            {"log1p", MathLog1p},
9074514f5e3Sopenharmony_ci            {"exp", MathExp},
9084514f5e3Sopenharmony_ci            {"expm1", MathExpm1},
9094514f5e3Sopenharmony_ci            {"clz32", MathClz32},
9104514f5e3Sopenharmony_ci            {"sqrt", MathSqrt},
9114514f5e3Sopenharmony_ci            {"cbrt", MathCbrt},
9124514f5e3Sopenharmony_ci            {"abs", MathAbs},
9134514f5e3Sopenharmony_ci            {"pow", MathPow},
9144514f5e3Sopenharmony_ci            {"trunc", MathTrunc},
9154514f5e3Sopenharmony_ci            {"round", MathRound},
9164514f5e3Sopenharmony_ci            {"fround", MathFRound},
9174514f5e3Sopenharmony_ci            {"ceil", MathCeil},
9184514f5e3Sopenharmony_ci            {"floor", MathFloor},
9194514f5e3Sopenharmony_ci            {"imul", MathImul},
9204514f5e3Sopenharmony_ci            {"max", MathMax},
9214514f5e3Sopenharmony_ci            {"min", MathMin},
9224514f5e3Sopenharmony_ci            {"localeCompare", StringLocaleCompare},
9234514f5e3Sopenharmony_ci            {"next", StringIteratorProtoNext},
9244514f5e3Sopenharmony_ci            {"sort", ArraySort},
9254514f5e3Sopenharmony_ci            {"stringify", JsonStringify},
9264514f5e3Sopenharmony_ci            {"getTime", DateGetTime},
9274514f5e3Sopenharmony_ci            {"now", DateNow},
9284514f5e3Sopenharmony_ci            {"isFinite", GlobalIsFinite},
9294514f5e3Sopenharmony_ci            {"isNan", GlobalIsNan},
9304514f5e3Sopenharmony_ci            {"asIntN", BigIntAsIntN},
9314514f5e3Sopenharmony_ci            {"asUintN", BigIntAsUintN},
9324514f5e3Sopenharmony_ci            {"mapDelete", MapDelete},
9334514f5e3Sopenharmony_ci            {"setDelete", SetDelete},
9344514f5e3Sopenharmony_ci            {"BigInt", BigIntConstructor},
9354514f5e3Sopenharmony_ci            {"charCodeAt", StringCharCodeAt},
9364514f5e3Sopenharmony_ci            {"substring", StringSubstring},
9374514f5e3Sopenharmony_ci            {"substr", StringSubStr},
9384514f5e3Sopenharmony_ci            {"slice", StringSlice},
9394514f5e3Sopenharmony_ci            {"is", ObjectIs},
9404514f5e3Sopenharmony_ci            {"getPrototypeOf", ObjectGetPrototypeOf},
9414514f5e3Sopenharmony_ci            {"create", ObjectCreate},
9424514f5e3Sopenharmony_ci            {"isPrototypeOf", ObjectIsPrototypeOf},
9434514f5e3Sopenharmony_ci            {"hasOwnProperty", ObjectHasOwnProperty},
9444514f5e3Sopenharmony_ci            {"reflectGetPrototypeOf", ReflectGetPrototypeOf},
9454514f5e3Sopenharmony_ci            {"get", ReflectGet},
9464514f5e3Sopenharmony_ci            {"has", ReflectHas},
9474514f5e3Sopenharmony_ci            {"construct", ReflectConstruct},
9484514f5e3Sopenharmony_ci            {"ReflectApply", ReflectApply},
9494514f5e3Sopenharmony_ci            {"apply", FunctionPrototypeApply},
9504514f5e3Sopenharmony_ci            {"bind", FunctionPrototypeBind},
9514514f5e3Sopenharmony_ci            {"call", FunctionPrototypeCall},
9524514f5e3Sopenharmony_ci            {"hasInstance", FunctionPrototypeHasInstance},
9534514f5e3Sopenharmony_ci            {"includes", ArrayIncludes},
9544514f5e3Sopenharmony_ci            {"indexOf", ArrayIndexOf},
9554514f5e3Sopenharmony_ci            {"entries", ArrayEntries},
9564514f5e3Sopenharmony_ci            {"values", ArrayValues},
9574514f5e3Sopenharmony_ci            {"keys", ArrayKeys},
9584514f5e3Sopenharmony_ci            {"find", ArrayFind},
9594514f5e3Sopenharmony_ci            {"findIndex", ArrayFindIndex},
9604514f5e3Sopenharmony_ci            {"foreach", ArrayForEach},
9614514f5e3Sopenharmony_ci            {"filter", ArrayFilter},
9624514f5e3Sopenharmony_ci            {"some", ArraySome},
9634514f5e3Sopenharmony_ci            {"map", ArrayMap},
9644514f5e3Sopenharmony_ci            {"every", ArrayEvery},
9654514f5e3Sopenharmony_ci            {"pop", ArrayPop},
9664514f5e3Sopenharmony_ci            {"slice", ArraySlice},
9674514f5e3Sopenharmony_ci            {"getUint8", DataViewGetUint8},
9684514f5e3Sopenharmony_ci            {"getInt8", DataViewGetInt8},
9694514f5e3Sopenharmony_ci            {"getUint16", DataViewGetUint16},
9704514f5e3Sopenharmony_ci            {"getInt16", DataViewGetInt16},
9714514f5e3Sopenharmony_ci            {"getUint32", DataViewGetUint32},
9724514f5e3Sopenharmony_ci            {"getInt32", DataViewGetInt32},
9734514f5e3Sopenharmony_ci            {"getFloat32", DataViewGetFloat32},
9744514f5e3Sopenharmony_ci            {"getFloat64", DataViewGetFloat64},
9754514f5e3Sopenharmony_ci            {"setUint8", DataViewSetUint8},
9764514f5e3Sopenharmony_ci            {"setInt8", DataViewSetInt8},
9774514f5e3Sopenharmony_ci            {"setUint16", DataViewSetUint16},
9784514f5e3Sopenharmony_ci            {"setInt16", DataViewSetInt16},
9794514f5e3Sopenharmony_ci            {"setUint32", DataViewSetUint32},
9804514f5e3Sopenharmony_ci            {"setInt32", DataViewSetInt32},
9814514f5e3Sopenharmony_ci            {"setFloat32", DataViewSetFloat32},
9824514f5e3Sopenharmony_ci            {"setFloat64", DataViewSetFloat64},
9834514f5e3Sopenharmony_ci        };
9844514f5e3Sopenharmony_ci        if (str2BuiltinId.count(idStr) > 0) {
9854514f5e3Sopenharmony_ci            return str2BuiltinId.at(idStr);
9864514f5e3Sopenharmony_ci        }
9874514f5e3Sopenharmony_ci        return NONE;
9884514f5e3Sopenharmony_ci    }
9894514f5e3Sopenharmony_ci
9904514f5e3Sopenharmony_ciprivate:
9914514f5e3Sopenharmony_ci    static CallSignature callSigns_[NUM_OF_BUILTINS_STUBS];
9924514f5e3Sopenharmony_ci    static CallSignature builtinsCSign_;
9934514f5e3Sopenharmony_ci    static CallSignature builtinsWithArgvCSign_;
9944514f5e3Sopenharmony_ci};
9954514f5e3Sopenharmony_ci
9964514f5e3Sopenharmony_cienum class BuiltinsArgs : size_t {
9974514f5e3Sopenharmony_ci    GLUE = 0,
9984514f5e3Sopenharmony_ci    NATIVECODE,
9994514f5e3Sopenharmony_ci    FUNC,
10004514f5e3Sopenharmony_ci    NEWTARGET,
10014514f5e3Sopenharmony_ci    THISVALUE,
10024514f5e3Sopenharmony_ci    NUMARGS,
10034514f5e3Sopenharmony_ci    ARG0_OR_ARGV,
10044514f5e3Sopenharmony_ci    ARG1,
10054514f5e3Sopenharmony_ci    ARG2,
10064514f5e3Sopenharmony_ci    NUM_OF_INPUTS,
10074514f5e3Sopenharmony_ci};
10084514f5e3Sopenharmony_ci
10094514f5e3Sopenharmony_ci#define BUILTINS_STUB_ID(name) kungfu::BuiltinsStubCSigns::name
10104514f5e3Sopenharmony_ci// to distinguish with the positive method offset of js function
10114514f5e3Sopenharmony_ci#define PGO_BUILTINS_STUB_ID(name) ((-1) * kungfu::BuiltinsStubCSigns::name)
10124514f5e3Sopenharmony_ci#define IS_TYPED_BUILTINS_ID(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltin(id)
10134514f5e3Sopenharmony_ci#define IS_TYPED_INLINE_BUILTINS_ID(id) kungfu::BuiltinsStubCSigns::IsTypedInlineBuiltin(id)
10144514f5e3Sopenharmony_ci#define IS_TYPED_BUILTINS_NUMBER_ID(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinNumber(id)
10154514f5e3Sopenharmony_ci#define IS_TYPED_BUILTINS_GLOBAL_ID(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinGlobal(id)
10164514f5e3Sopenharmony_ci#define IS_TYPED_BUILTINS_ID_CALL_THIS0(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis0(id)
10174514f5e3Sopenharmony_ci#define IS_TYPED_BUILTINS_ID_CALL_THIS1(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis1(id)
10184514f5e3Sopenharmony_ci#define IS_TYPED_BUILTINS_ID_CALL_THIS3(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis3(id)
10194514f5e3Sopenharmony_ci#define GET_TYPED_CONSTANT_INDEX(id) kungfu::BuiltinsStubCSigns::GetConstantIndex(id)
10204514f5e3Sopenharmony_ci#define IS_INVALID_ID(id) kungfu::BuiltinsStubCSigns::CheckBuiltinsIdInvalid(id)
10214514f5e3Sopenharmony_ci#define GET_TYPED_GLOBAL_ENV_INDEX(id) kungfu::BuiltinsStubCSigns::GetGlobalEnvIndex(id)
10224514f5e3Sopenharmony_ci}  // namespace panda::ecmascript::kungfu
10234514f5e3Sopenharmony_ci#endif  // ECMASCRIPT_COMPILER_BUILTINS_CALL_SIGNATURE_H
1024