14514f5e3Sopenharmony_ci/*
24514f5e3Sopenharmony_ci * Copyright (c) 2021-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_BUILTINS_H
174514f5e3Sopenharmony_ci#define ECMASCRIPT_BUILTINS_H
184514f5e3Sopenharmony_ci
194514f5e3Sopenharmony_ci#include "ecmascript/builtins/builtins_lazy_callback.h"
204514f5e3Sopenharmony_ci#include "ecmascript/global_env.h"
214514f5e3Sopenharmony_ci#include "ecmascript/js_function.h"
224514f5e3Sopenharmony_ci#include "ecmascript/js_handle.h"
234514f5e3Sopenharmony_ci#include "ecmascript/js_hclass.h"
244514f5e3Sopenharmony_ci#include "ecmascript/js_symbol.h"
254514f5e3Sopenharmony_ci#include "ecmascript/js_tagged_value.h"
264514f5e3Sopenharmony_ci#include "ecmascript/js_thread.h"
274514f5e3Sopenharmony_ci#include "ecmascript/object_factory.h"
284514f5e3Sopenharmony_ci
294514f5e3Sopenharmony_cinamespace panda::ecmascript {
304514f5e3Sopenharmony_cistruct ErrorParameter {
314514f5e3Sopenharmony_ci    EcmaEntrypoint nativeConstructor{nullptr};
324514f5e3Sopenharmony_ci    EcmaEntrypoint nativeMethod{nullptr};
334514f5e3Sopenharmony_ci    std::string_view nativePropertyName{};
344514f5e3Sopenharmony_ci    JSType nativeJstype{JSType::INVALID};
354514f5e3Sopenharmony_ci};
364514f5e3Sopenharmony_ci
374514f5e3Sopenharmony_cienum FunctionLength : uint8_t { ZERO = 0, ONE, TWO, THREE, FOUR };
384514f5e3Sopenharmony_ci
394514f5e3Sopenharmony_ciclass Builtins {
404514f5e3Sopenharmony_cipublic:
414514f5e3Sopenharmony_ci    Builtins() = default;
424514f5e3Sopenharmony_ci    Builtins(JSThread *thread, ObjectFactory *factory, EcmaVM *vm)
434514f5e3Sopenharmony_ci        : thread_(thread), factory_(factory), vm_(vm) {}
444514f5e3Sopenharmony_ci    ~Builtins() = default;
454514f5e3Sopenharmony_ci    NO_COPY_SEMANTIC(Builtins);
464514f5e3Sopenharmony_ci    NO_MOVE_SEMANTIC(Builtins);
474514f5e3Sopenharmony_ci
484514f5e3Sopenharmony_ci    void Initialize(const JSHandle<GlobalEnv> &env, JSThread *thread, bool lazyInit = false, bool isRealm = false);
494514f5e3Sopenharmony_ci    void InitializeForSnapshot(JSThread *thread);
504514f5e3Sopenharmony_ci
514514f5e3Sopenharmony_ciprivate:
524514f5e3Sopenharmony_ci    JSThread *thread_{nullptr};
534514f5e3Sopenharmony_ci    ObjectFactory *factory_{nullptr};
544514f5e3Sopenharmony_ci    EcmaVM *vm_{nullptr};
554514f5e3Sopenharmony_ci    SharedHeap *sHeap_{nullptr};
564514f5e3Sopenharmony_ci
574514f5e3Sopenharmony_ci    JSHandle<JSFunction> NewBuiltinConstructor(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &prototype,
584514f5e3Sopenharmony_ci                                               EcmaEntrypoint ctorFunc, std::string_view name, int length,
594514f5e3Sopenharmony_ci                                               kungfu::BuiltinsStubCSigns::ID builtinId =
604514f5e3Sopenharmony_ci                                               kungfu::BuiltinsStubCSigns::INVALID) const;
614514f5e3Sopenharmony_ci
624514f5e3Sopenharmony_ci    JSHandle<JSFunction> NewBuiltinCjsCtor(const JSHandle<GlobalEnv> &env,
634514f5e3Sopenharmony_ci                                           const JSHandle<JSObject> &prototype, EcmaEntrypoint ctorFunc,
644514f5e3Sopenharmony_ci                                           std::string_view name, int length) const;
654514f5e3Sopenharmony_ci
664514f5e3Sopenharmony_ci    JSHandle<JSFunction> NewFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &key,
674514f5e3Sopenharmony_ci                                     EcmaEntrypoint func, int length,
684514f5e3Sopenharmony_ci                                     kungfu::BuiltinsStubCSigns::ID builtinId =
694514f5e3Sopenharmony_ci                                     kungfu::BuiltinsStubCSigns::INVALID) const;
704514f5e3Sopenharmony_ci
714514f5e3Sopenharmony_ci    void InitializePropertyDetector(const JSHandle<GlobalEnv> &env, bool lazyInit) const;
724514f5e3Sopenharmony_ci
734514f5e3Sopenharmony_ci    void SetLazyAccessor(const JSHandle<JSObject> &object, const JSHandle<JSTaggedValue> &key,
744514f5e3Sopenharmony_ci        const JSHandle<AccessorData> &accessor) const;
754514f5e3Sopenharmony_ci
764514f5e3Sopenharmony_ci    void InitializeCtor(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &prototype,
774514f5e3Sopenharmony_ci                        const JSHandle<JSFunction> &ctor, std::string_view name, int length) const;
784514f5e3Sopenharmony_ci
794514f5e3Sopenharmony_ci    void InitializeGlobalObject(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &globalObject);
804514f5e3Sopenharmony_ci
814514f5e3Sopenharmony_ci    void InitializeFunction(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
824514f5e3Sopenharmony_ci
834514f5e3Sopenharmony_ci    void InitializeFunctionPrototype(const JSHandle<GlobalEnv> &env, JSHandle<JSFunction> &funcFuncPrototype,
844514f5e3Sopenharmony_ci        JSHandle<JSFunction> &funcFunc) const;
854514f5e3Sopenharmony_ci
864514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateFunctionHClass(const JSHandle<JSFunction> &funcPrototype) const;
874514f5e3Sopenharmony_ci
884514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateFunctionPrototypeHClass(const JSHandle<GlobalEnv> &env,
894514f5e3Sopenharmony_ci                                                     const JSHandle<JSTaggedValue> &ObjPrototypeVal) const;
904514f5e3Sopenharmony_ci
914514f5e3Sopenharmony_ci    void InitializeObject(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &objFuncPrototype,
924514f5e3Sopenharmony_ci                          const JSHandle<JSObject> &objFunc);
934514f5e3Sopenharmony_ci
944514f5e3Sopenharmony_ci    void InitializeNumber(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &globalObject,
954514f5e3Sopenharmony_ci                          const JSHandle<JSHClass> &primRefObjClass);
964514f5e3Sopenharmony_ci
974514f5e3Sopenharmony_ci    void InitializeBigInt(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &primRefObjClass) const;
984514f5e3Sopenharmony_ci
994514f5e3Sopenharmony_ci    void InitializeBigIntWithRealm(const JSHandle<GlobalEnv> &realm) const;
1004514f5e3Sopenharmony_ci
1014514f5e3Sopenharmony_ci    void InitializeDate(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
1024514f5e3Sopenharmony_ci    void LazyInitializeDate(const JSHandle<GlobalEnv> &env) const;
1034514f5e3Sopenharmony_ci
1044514f5e3Sopenharmony_ci    void InitializeBoolean(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &primRefObjClass) const;
1054514f5e3Sopenharmony_ci
1064514f5e3Sopenharmony_ci    void InitializeSymbol(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1074514f5e3Sopenharmony_ci
1084514f5e3Sopenharmony_ci    void InitializeSymbolWithRealm(const JSHandle<GlobalEnv> &realm, const JSHandle<JSHClass> &objFuncInstanceHClass);
1094514f5e3Sopenharmony_ci
1104514f5e3Sopenharmony_ci    void InitializeArray(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
1114514f5e3Sopenharmony_ci
1124514f5e3Sopenharmony_ci    JSHandle<JSObject> InitializeArrayPrototype(JSHandle<JSHClass> &arrBaseFuncInstanceHClass) const;
1134514f5e3Sopenharmony_ci
1144514f5e3Sopenharmony_ci    JSHandle<JSHClass> InitializeArrayPrototypeHClass(const JSHandle<JSObject> &arrFuncPrototype) const;
1154514f5e3Sopenharmony_ci
1164514f5e3Sopenharmony_ci    void InitializeSharedArray(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &sObjIHClass,
1174514f5e3Sopenharmony_ci                               JSHandle<JSFunction> &sFuncPrototype) const;
1184514f5e3Sopenharmony_ci
1194514f5e3Sopenharmony_ci    void InitializeTypedArray(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
1204514f5e3Sopenharmony_ci    void LazyInitializeTypedArray(const JSHandle<GlobalEnv> &env) const;
1214514f5e3Sopenharmony_ci
1224514f5e3Sopenharmony_ci    void InitializeInt8Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1234514f5e3Sopenharmony_ci    void LazyInitializeInt8Array(const JSHandle<GlobalEnv> &env) const;
1244514f5e3Sopenharmony_ci
1254514f5e3Sopenharmony_ci    void InitializeUint8Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1264514f5e3Sopenharmony_ci    void LazyInitializeUint8Array(const JSHandle<GlobalEnv> &env) const;
1274514f5e3Sopenharmony_ci
1284514f5e3Sopenharmony_ci    void InitializeUint8ClampedArray(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1294514f5e3Sopenharmony_ci    void LazyInitializeUint8ClampedArray(const JSHandle<GlobalEnv> &env) const;
1304514f5e3Sopenharmony_ci
1314514f5e3Sopenharmony_ci    void InitializeInt16Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1324514f5e3Sopenharmony_ci    void LazyInitializeInt16Array(const JSHandle<GlobalEnv> &env) const;
1334514f5e3Sopenharmony_ci
1344514f5e3Sopenharmony_ci    void InitializeUint16Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1354514f5e3Sopenharmony_ci    void LazyInitializeUint16Array(const JSHandle<GlobalEnv> &env) const;
1364514f5e3Sopenharmony_ci
1374514f5e3Sopenharmony_ci    void InitializeInt32Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1384514f5e3Sopenharmony_ci    void LazyInitializeInt32Array(const JSHandle<GlobalEnv> &env) const;
1394514f5e3Sopenharmony_ci
1404514f5e3Sopenharmony_ci    void InitializeUint32Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1414514f5e3Sopenharmony_ci    void LazyInitializeUint32Array(const JSHandle<GlobalEnv> &env) const;
1424514f5e3Sopenharmony_ci
1434514f5e3Sopenharmony_ci    void InitializeFloat32Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1444514f5e3Sopenharmony_ci    void LazyInitializeFloat32Array(const JSHandle<GlobalEnv> &env) const;
1454514f5e3Sopenharmony_ci
1464514f5e3Sopenharmony_ci    void InitializeFloat64Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1474514f5e3Sopenharmony_ci    void LazyInitializeFloat64Array(const JSHandle<GlobalEnv> &env) const;
1484514f5e3Sopenharmony_ci
1494514f5e3Sopenharmony_ci    void InitializeBigInt64Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1504514f5e3Sopenharmony_ci    void LazyInitializeBigInt64Array(const JSHandle<GlobalEnv> &env) const;
1514514f5e3Sopenharmony_ci
1524514f5e3Sopenharmony_ci    void InitializeBigUint64Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1534514f5e3Sopenharmony_ci    void LazyInitializeBigUint64Array(const JSHandle<GlobalEnv> &env) const;
1544514f5e3Sopenharmony_ci
1554514f5e3Sopenharmony_ci    void InitializeAllTypeError(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
1564514f5e3Sopenharmony_ci
1574514f5e3Sopenharmony_ci    void InitializeAllTypeErrorWithRealm(const JSHandle<GlobalEnv> &realm) const;
1584514f5e3Sopenharmony_ci
1594514f5e3Sopenharmony_ci    void InitializeError(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass,
1604514f5e3Sopenharmony_ci                         const JSType &errorTag) const;
1614514f5e3Sopenharmony_ci
1624514f5e3Sopenharmony_ci    void SetErrorWithRealm(const JSHandle<GlobalEnv> &realm, const JSType &errorTag) const;
1634514f5e3Sopenharmony_ci
1644514f5e3Sopenharmony_ci    void InitializeRegExp(const JSHandle<GlobalEnv> &env);
1654514f5e3Sopenharmony_ci
1664514f5e3Sopenharmony_ci    // for Intl.
1674514f5e3Sopenharmony_ci    JSHandle<JSFunction> NewIntlConstructor(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &prototype,
1684514f5e3Sopenharmony_ci                                            EcmaEntrypoint ctorFunc, std::string_view name, int length);
1694514f5e3Sopenharmony_ci    void InitializeIntlCtor(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &prototype,
1704514f5e3Sopenharmony_ci                            const JSHandle<JSFunction> &ctor, std::string_view name, int length);
1714514f5e3Sopenharmony_ci    void InitializeIntl(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeValue);
1724514f5e3Sopenharmony_ci    void InitializeLocale(const JSHandle<GlobalEnv> &env);
1734514f5e3Sopenharmony_ci    void InitializeDateTimeFormat(const JSHandle<GlobalEnv> &env);
1744514f5e3Sopenharmony_ci    void InitializeRelativeTimeFormat(const JSHandle<GlobalEnv> &env);
1754514f5e3Sopenharmony_ci    void InitializeNumberFormat(const JSHandle<GlobalEnv> &env);
1764514f5e3Sopenharmony_ci    void InitializeCollator(const JSHandle<GlobalEnv> &env);
1774514f5e3Sopenharmony_ci    void InitializePluralRules(const JSHandle<GlobalEnv> &env);
1784514f5e3Sopenharmony_ci    void InitializeDisplayNames(const JSHandle<GlobalEnv> &env);
1794514f5e3Sopenharmony_ci    void InitializeListFormat(const JSHandle<GlobalEnv> &env);
1804514f5e3Sopenharmony_ci    void InitializeSegmenter(const JSHandle<GlobalEnv> &env);
1814514f5e3Sopenharmony_ci    void InitializeSegments(const JSHandle<GlobalEnv> &env);
1824514f5e3Sopenharmony_ci
1834514f5e3Sopenharmony_ci    void LazyInitializeLocale(const JSHandle<GlobalEnv> &env) const;
1844514f5e3Sopenharmony_ci    void LazyInitializeDateTimeFormat(const JSHandle<GlobalEnv> &env) const;
1854514f5e3Sopenharmony_ci    void LazyInitializeNumberFormat(const JSHandle<GlobalEnv> &env) const;
1864514f5e3Sopenharmony_ci    void LazyInitializeRelativeTimeFormat(const JSHandle<GlobalEnv> &env) const;
1874514f5e3Sopenharmony_ci    void LazyInitializeCollator(const JSHandle<GlobalEnv> &env) const;
1884514f5e3Sopenharmony_ci    void LazyInitializePluralRules(const JSHandle<GlobalEnv> &env) const;
1894514f5e3Sopenharmony_ci    void LazyInitializeDisplayNames(const JSHandle<GlobalEnv> &env) const;
1904514f5e3Sopenharmony_ci    void LazyInitializeListFormat(const JSHandle<GlobalEnv> &env) const;
1914514f5e3Sopenharmony_ci    void LazyInitializeSegmenter(const JSHandle<GlobalEnv> &env) const;
1924514f5e3Sopenharmony_ci    void LazyInitializeSegments(const JSHandle<GlobalEnv> &env) const;
1934514f5e3Sopenharmony_ci
1944514f5e3Sopenharmony_ci    void GeneralUpdateError(ErrorParameter *error, EcmaEntrypoint constructor, EcmaEntrypoint method,
1954514f5e3Sopenharmony_ci                            std::string_view name, JSType type) const;
1964514f5e3Sopenharmony_ci
1974514f5e3Sopenharmony_ci    void InitializeSet(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
1984514f5e3Sopenharmony_ci    void LazyInitializeSet(const JSHandle<GlobalEnv> &env);
1994514f5e3Sopenharmony_ci
2004514f5e3Sopenharmony_ci    void InitializeMap(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
2014514f5e3Sopenharmony_ci    void LazyInitializeMap(const JSHandle<GlobalEnv> &env) const;
2024514f5e3Sopenharmony_ci
2034514f5e3Sopenharmony_ci    void InitializeWeakMap(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2044514f5e3Sopenharmony_ci    void LazyInitializeWeakMap(const JSHandle<GlobalEnv> &env) const;
2054514f5e3Sopenharmony_ci
2064514f5e3Sopenharmony_ci    void InitializeWeakSet(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2074514f5e3Sopenharmony_ci    void LazyInitializeWeakSet(const JSHandle<GlobalEnv> &env) const;
2084514f5e3Sopenharmony_ci
2094514f5e3Sopenharmony_ci    void InitializeWeakRef(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2104514f5e3Sopenharmony_ci    void LazyInitializeWeakRef(const JSHandle<GlobalEnv> &env) const;
2114514f5e3Sopenharmony_ci
2124514f5e3Sopenharmony_ci    void InitializeFinalizationRegistry(const JSHandle<GlobalEnv> &env,
2134514f5e3Sopenharmony_ci                                        const JSHandle<JSHClass> &objFuncClass) const;
2144514f5e3Sopenharmony_ci    void LazyInitializeFinalizationRegistry(const JSHandle<GlobalEnv> &env) const;
2154514f5e3Sopenharmony_ci
2164514f5e3Sopenharmony_ci    void InitializeMath(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
2174514f5e3Sopenharmony_ci
2184514f5e3Sopenharmony_ci    void InitializeAtomics(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
2194514f5e3Sopenharmony_ci
2204514f5e3Sopenharmony_ci    void InitializeJson(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
2214514f5e3Sopenharmony_ci
2224514f5e3Sopenharmony_ci    void InitializeSendableJson(const JSHandle<GlobalEnv> &env,
2234514f5e3Sopenharmony_ci                                const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
2244514f5e3Sopenharmony_ci
2254514f5e3Sopenharmony_ci    void InitializeString(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
2264514f5e3Sopenharmony_ci
2274514f5e3Sopenharmony_ci    void InitializeIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2284514f5e3Sopenharmony_ci
2294514f5e3Sopenharmony_ci    void InitializeRegexpIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
2304514f5e3Sopenharmony_ci
2314514f5e3Sopenharmony_ci    void InitializeStringIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
2324514f5e3Sopenharmony_ci
2334514f5e3Sopenharmony_ci    void InitializeSegmentIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
2344514f5e3Sopenharmony_ci
2354514f5e3Sopenharmony_ci    void InitializeAsyncFromSyncIterator(const JSHandle<GlobalEnv> &env,
2364514f5e3Sopenharmony_ci                                         const JSHandle<JSHClass> &iteratorFuncClass) const;
2374514f5e3Sopenharmony_ci
2384514f5e3Sopenharmony_ci    void InitializeForinIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
2394514f5e3Sopenharmony_ci
2404514f5e3Sopenharmony_ci    void InitializeMapIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
2414514f5e3Sopenharmony_ci    void InitializeSMapIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
2424514f5e3Sopenharmony_ci
2434514f5e3Sopenharmony_ci    void InitializeSetIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
2444514f5e3Sopenharmony_ci    void InitializeSSetIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
2454514f5e3Sopenharmony_ci
2464514f5e3Sopenharmony_ci    void InitializeArrayIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass,
2474514f5e3Sopenharmony_ci                                 const JSHandle<JSHClass> &iteratorPrototypeClass) const;
2484514f5e3Sopenharmony_ci    void InitializeSArrayIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
2494514f5e3Sopenharmony_ci
2504514f5e3Sopenharmony_ci    void InitializeArrayBuffer(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2514514f5e3Sopenharmony_ci    void LazyInitializeArrayBuffer(const JSHandle<GlobalEnv> &env) const;
2524514f5e3Sopenharmony_ci
2534514f5e3Sopenharmony_ci    void InitializeSharedArrayBuffer(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2544514f5e3Sopenharmony_ci    void LazyInitializeSharedArrayBuffer(const JSHandle<GlobalEnv> &env) const;
2554514f5e3Sopenharmony_ci
2564514f5e3Sopenharmony_ci    void InitializeDataView(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
2574514f5e3Sopenharmony_ci    void LazyInitializeDataView(const JSHandle<GlobalEnv> &env) const;
2584514f5e3Sopenharmony_ci
2594514f5e3Sopenharmony_ci    void InitializeForPromiseFuncClass(const JSHandle<GlobalEnv> &env);
2604514f5e3Sopenharmony_ci
2614514f5e3Sopenharmony_ci    void InitializeProxy(const JSHandle<GlobalEnv> &env);
2624514f5e3Sopenharmony_ci
2634514f5e3Sopenharmony_ci    void InitializeReflect(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
2644514f5e3Sopenharmony_ci
2654514f5e3Sopenharmony_ci    void InitializeAsyncFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2664514f5e3Sopenharmony_ci
2674514f5e3Sopenharmony_ci    void InitializeGeneratorFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2684514f5e3Sopenharmony_ci
2694514f5e3Sopenharmony_ci    void InitializeAsyncGeneratorFunction(const JSHandle<GlobalEnv> &env,
2704514f5e3Sopenharmony_ci                                          const JSHandle<JSHClass> &objFuncClass) const;
2714514f5e3Sopenharmony_ci
2724514f5e3Sopenharmony_ci    void InitializeAsyncGenerator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2734514f5e3Sopenharmony_ci
2744514f5e3Sopenharmony_ci    void InitializeAsyncIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2754514f5e3Sopenharmony_ci
2764514f5e3Sopenharmony_ci    void InitializeGenerator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2774514f5e3Sopenharmony_ci
2784514f5e3Sopenharmony_ci    JSHandle<JSFunction> InitializeExoticConstructor(const JSHandle<GlobalEnv> &env, EcmaEntrypoint ctorFunc,
2794514f5e3Sopenharmony_ci                                                     std::string_view name, int length);
2804514f5e3Sopenharmony_ci
2814514f5e3Sopenharmony_ci    void InitializePromise(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &promiseFuncClass);
2824514f5e3Sopenharmony_ci
2834514f5e3Sopenharmony_ci    void InitializePromiseJob(const JSHandle<GlobalEnv> &env);
2844514f5e3Sopenharmony_ci
2854514f5e3Sopenharmony_ci    void InitializeModuleNamespace(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
2864514f5e3Sopenharmony_ci
2874514f5e3Sopenharmony_ci    void InitializeSModuleNamespace(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &sObjIHClass) const;
2884514f5e3Sopenharmony_ci
2894514f5e3Sopenharmony_ci    void InitializeNativeModuleFailureInfo(const JSHandle<GlobalEnv> &env,
2904514f5e3Sopenharmony_ci                                           const JSHandle<JSHClass> &objFuncClass) const;
2914514f5e3Sopenharmony_ci
2924514f5e3Sopenharmony_ci    void InitializeCjsModule(const JSHandle<GlobalEnv> &env) const;
2934514f5e3Sopenharmony_ci
2944514f5e3Sopenharmony_ci    void InitializeCjsExports(const JSHandle<GlobalEnv> &env) const;
2954514f5e3Sopenharmony_ci
2964514f5e3Sopenharmony_ci    void InitializeCjsRequire(const JSHandle<GlobalEnv> &env) const;
2974514f5e3Sopenharmony_ci
2984514f5e3Sopenharmony_ci    void InitializeDefaultExportOfScript(const JSHandle<GlobalEnv> &env) const;
2994514f5e3Sopenharmony_ci
3004514f5e3Sopenharmony_ci    void SetFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj, std::string_view key,
3014514f5e3Sopenharmony_ci                     EcmaEntrypoint func, int length, kungfu::BuiltinsStubCSigns::ID builtinId =
3024514f5e3Sopenharmony_ci                     kungfu::BuiltinsStubCSigns::INVALID) const;
3034514f5e3Sopenharmony_ci
3044514f5e3Sopenharmony_ci    void SetFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj, const JSHandle<JSTaggedValue> &key,
3054514f5e3Sopenharmony_ci                     EcmaEntrypoint func, int length, kungfu::BuiltinsStubCSigns::ID builtinId =
3064514f5e3Sopenharmony_ci                     kungfu::BuiltinsStubCSigns::INVALID) const;
3074514f5e3Sopenharmony_ci
3084514f5e3Sopenharmony_ci    JSHandle<JSFunction> SetAndReturnFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
3094514f5e3Sopenharmony_ci                                              const char *key, EcmaEntrypoint func, int length,
3104514f5e3Sopenharmony_ci                                              kungfu::BuiltinsStubCSigns::ID builtinId =
3114514f5e3Sopenharmony_ci                                              kungfu::BuiltinsStubCSigns::INVALID) const ;
3124514f5e3Sopenharmony_ci
3134514f5e3Sopenharmony_ci    JSHandle<JSFunction> SetAndReturnFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
3144514f5e3Sopenharmony_ci                                              const JSHandle<JSTaggedValue> &key, EcmaEntrypoint func, int length,
3154514f5e3Sopenharmony_ci                                              kungfu::BuiltinsStubCSigns::ID builtinId =
3164514f5e3Sopenharmony_ci                                              kungfu::BuiltinsStubCSigns::INVALID) const;
3174514f5e3Sopenharmony_ci
3184514f5e3Sopenharmony_ci    void SetFuncToObjAndGlobal(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &globalObject,
3194514f5e3Sopenharmony_ci                               const JSHandle<JSObject> &obj, std::string_view key, EcmaEntrypoint func, int length,
3204514f5e3Sopenharmony_ci                               kungfu::BuiltinsStubCSigns::ID builtinId = kungfu::BuiltinsStubCSigns::INVALID);
3214514f5e3Sopenharmony_ci
3224514f5e3Sopenharmony_ci    template<int type = JSSymbol::SYMBOL_DEFAULT_TYPE>
3234514f5e3Sopenharmony_ci    void SetFunctionAtSymbol(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
3244514f5e3Sopenharmony_ci                             const JSHandle<JSTaggedValue> &symbol, std::string_view name, EcmaEntrypoint func,
3254514f5e3Sopenharmony_ci                             int length) const;
3264514f5e3Sopenharmony_ci
3274514f5e3Sopenharmony_ci    template<int type = JSSymbol::SYMBOL_DEFAULT_TYPE>
3284514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> SetAndReturnFunctionAtSymbol(const JSHandle<GlobalEnv> &env,
3294514f5e3Sopenharmony_ci                                                         const JSHandle<JSObject> &obj,
3304514f5e3Sopenharmony_ci                                                         const JSHandle<JSTaggedValue> &symbol,
3314514f5e3Sopenharmony_ci                                                         std::string_view name,
3324514f5e3Sopenharmony_ci                                                         EcmaEntrypoint func,
3334514f5e3Sopenharmony_ci                                                         int length,
3344514f5e3Sopenharmony_ci                                                         kungfu::BuiltinsStubCSigns::ID builtinId =
3354514f5e3Sopenharmony_ci                                                         kungfu::BuiltinsStubCSigns::INVALID) const;
3364514f5e3Sopenharmony_ci
3374514f5e3Sopenharmony_ci    void SetStringTagSymbol(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
3384514f5e3Sopenharmony_ci                            std::string_view key) const;
3394514f5e3Sopenharmony_ci
3404514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> CreateGetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
3414514f5e3Sopenharmony_ci                                         std::string_view name, int length,
3424514f5e3Sopenharmony_ci                                         kungfu::BuiltinsStubCSigns::ID builtinId =
3434514f5e3Sopenharmony_ci                                         kungfu::BuiltinsStubCSigns::INVALID) const;
3444514f5e3Sopenharmony_ci
3454514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> CreateGetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
3464514f5e3Sopenharmony_ci                                         JSHandle<JSTaggedValue> key, int length,
3474514f5e3Sopenharmony_ci                                         kungfu::BuiltinsStubCSigns::ID builtinId =
3484514f5e3Sopenharmony_ci                                         kungfu::BuiltinsStubCSigns::INVALID) const;
3494514f5e3Sopenharmony_ci
3504514f5e3Sopenharmony_ci    void SetConstant(const JSHandle<JSObject> &obj, std::string_view key, JSTaggedValue value) const;
3514514f5e3Sopenharmony_ci
3524514f5e3Sopenharmony_ci    void SetGlobalThis(const JSHandle<JSObject> &obj, std::string_view key,
3534514f5e3Sopenharmony_ci                       const JSHandle<JSTaggedValue> &globalValue);
3544514f5e3Sopenharmony_ci
3554514f5e3Sopenharmony_ci    void SetAttribute(const JSHandle<JSObject> &obj, std::string_view key,  std::string_view value) const;
3564514f5e3Sopenharmony_ci
3574514f5e3Sopenharmony_ci    void SetNoneAttributeProperty(const JSHandle<JSObject> &obj, std::string_view key,
3584514f5e3Sopenharmony_ci                                  const JSHandle<JSTaggedValue> &value) const;
3594514f5e3Sopenharmony_ci
3604514f5e3Sopenharmony_ci    void StrictModeForbiddenAccessCallerArguments(const JSHandle<GlobalEnv> &env, uint32_t &index,
3614514f5e3Sopenharmony_ci                                                  const JSHandle<JSObject> &prototype) const;
3624514f5e3Sopenharmony_ci    void SetInlineAccessor(const JSHandle<JSObject> &obj, uint32_t index,
3634514f5e3Sopenharmony_ci                           const JSHandle<JSTaggedValue> &getter, const JSHandle<JSTaggedValue> &setter) const;
3644514f5e3Sopenharmony_ci
3654514f5e3Sopenharmony_ci    void SetInlineFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
3664514f5e3Sopenharmony_ci                           const JSHandle<JSTaggedValue> &key, EcmaEntrypoint func, uint32_t index, int length,
3674514f5e3Sopenharmony_ci                           kungfu::BuiltinsStubCSigns::ID builtinId = kungfu::BuiltinsStubCSigns::INVALID) const;
3684514f5e3Sopenharmony_ci
3694514f5e3Sopenharmony_ci    void SetInlineFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj, std::string_view key,
3704514f5e3Sopenharmony_ci                           EcmaEntrypoint func, uint32_t index, int length,
3714514f5e3Sopenharmony_ci                           kungfu::BuiltinsStubCSigns::ID builtinId = kungfu::BuiltinsStubCSigns::INVALID) const;
3724514f5e3Sopenharmony_ci
3734514f5e3Sopenharmony_ci    JSHandle<JSFunction> SetInlineFunctionAndRetJSFunction(const JSHandle<GlobalEnv> &env,
3744514f5e3Sopenharmony_ci        const JSHandle<JSObject> &obj, std::string_view key,
3754514f5e3Sopenharmony_ci        EcmaEntrypoint func, uint32_t index, int length,
3764514f5e3Sopenharmony_ci        kungfu::BuiltinsStubCSigns::ID builtinId) const;
3774514f5e3Sopenharmony_ci
3784514f5e3Sopenharmony_ci    void SetFunctionPrototype(const JSHandle<JSFunction> &ctor, const JSTaggedValue &prototype) const;
3794514f5e3Sopenharmony_ci
3804514f5e3Sopenharmony_ci    void SetFunctionLength(const JSHandle<JSFunction> &ctor, int length) const;
3814514f5e3Sopenharmony_ci
3824514f5e3Sopenharmony_ci    void SetFunctionName(const JSHandle<JSFunction> &ctor, std::string_view name) const;
3834514f5e3Sopenharmony_ci
3844514f5e3Sopenharmony_ci    void SetFunctionName(const JSHandle<JSFunction> &ctor, const JSHandle<JSTaggedValue> &name) const;
3854514f5e3Sopenharmony_ci
3864514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> CreateSetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
3874514f5e3Sopenharmony_ci                                         std::string_view name, int length) const;
3884514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> CreateSetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
3894514f5e3Sopenharmony_ci                                         JSHandle<JSTaggedValue> key, int length) const;
3904514f5e3Sopenharmony_ci
3914514f5e3Sopenharmony_ci    void SetArgumentsSharedAccessor(const JSHandle<GlobalEnv> &env);
3924514f5e3Sopenharmony_ci    void SetAccessor(const JSHandle<JSObject> &obj, const JSHandle<JSTaggedValue> &key,
3934514f5e3Sopenharmony_ci                     const JSHandle<JSTaggedValue> &getter, const JSHandle<JSTaggedValue> &setter) const;
3944514f5e3Sopenharmony_ci    void SetGetter(const JSHandle<JSObject> &obj, const JSHandle<JSTaggedValue> &key,
3954514f5e3Sopenharmony_ci                   const JSHandle<JSTaggedValue> &getter) const;
3964514f5e3Sopenharmony_ci    JSHandle<JSObject> InitializeArkTools(const JSHandle<GlobalEnv> &env) const;
3974514f5e3Sopenharmony_ci    JSHandle<JSObject> InitializeGcBuiltins(const JSHandle<GlobalEnv> &env) const;
3984514f5e3Sopenharmony_ci    void InitializeGlobalRegExp(JSHandle<JSObject> &obj) const;
3994514f5e3Sopenharmony_ci    // Using to initialize jsapi container
4004514f5e3Sopenharmony_ci    JSHandle<JSObject> InitializeArkPrivate(const JSHandle<GlobalEnv> &env) const;
4014514f5e3Sopenharmony_ci    void SetConstantObject(const JSHandle<JSObject> &obj, std::string_view key,
4024514f5e3Sopenharmony_ci                           JSHandle<JSTaggedValue> &value) const;
4034514f5e3Sopenharmony_ci    void SetFrozenFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj, std::string_view key,
4044514f5e3Sopenharmony_ci                           EcmaEntrypoint func, int length) const;
4054514f5e3Sopenharmony_ci    void SetNonConstantObject(const JSHandle<JSObject> &obj, std::string_view key,
4064514f5e3Sopenharmony_ci                              JSHandle<JSTaggedValue> &value) const;
4074514f5e3Sopenharmony_ci    void RegisterSendableContainers(const JSHandle<GlobalEnv> &env) const;
4084514f5e3Sopenharmony_ci
4094514f5e3Sopenharmony_ci    // For SharedObject/SharedFunction
4104514f5e3Sopenharmony_ci    void InitializeSObjectAndSFunction(const JSHandle<GlobalEnv> &env) const;
4114514f5e3Sopenharmony_ci    void CopySObjectAndSFunction(const JSHandle<GlobalEnv> &env, const JSTaggedValue &srcEnv) const;
4124514f5e3Sopenharmony_ci    void InitializeSObject(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &sObjIHClass,
4134514f5e3Sopenharmony_ci                           const JSHandle<JSObject> &sObjPrototype,
4144514f5e3Sopenharmony_ci                           const JSHandle<JSFunction> &sFuncPrototype) const;
4154514f5e3Sopenharmony_ci    void InitializeSFunction(const JSHandle<GlobalEnv> &env,
4164514f5e3Sopenharmony_ci                             const JSHandle<JSFunction> &sFuncPrototype) const;
4174514f5e3Sopenharmony_ci    void InitializeSAsyncFunction(const JSHandle<GlobalEnv> &env,
4184514f5e3Sopenharmony_ci                                  const JSHandle<JSHClass> &sObjIHClass) const;
4194514f5e3Sopenharmony_ci    void InitializeSArrayBuffer(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &objFuncClass,
4204514f5e3Sopenharmony_ci                                const JSHandle<JSFunction> &sFuncPrototype) const;
4214514f5e3Sopenharmony_ci    void InitializeSSet(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &sObjPrototype,
4224514f5e3Sopenharmony_ci                        const JSHandle<JSFunction> &sFuncPrototype) const;
4234514f5e3Sopenharmony_ci    void InitializeSMap(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &sObjPrototype,
4244514f5e3Sopenharmony_ci                        const JSHandle<JSFunction> &sFuncPrototype) const;
4254514f5e3Sopenharmony_ci    void InitializeSTypedArray(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &sObjPrototype,
4264514f5e3Sopenharmony_ci                               const JSHandle<JSFunction> &sFuncPrototype) const;
4274514f5e3Sopenharmony_ci    void InitializeSInt8Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4284514f5e3Sopenharmony_ci    void InitializeSUint8Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4294514f5e3Sopenharmony_ci    void InitializeSUint8ClampedArray(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4304514f5e3Sopenharmony_ci    void InitializeSInt16Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4314514f5e3Sopenharmony_ci    void InitializeSUint16Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4324514f5e3Sopenharmony_ci    void InitializeSInt32Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4334514f5e3Sopenharmony_ci    void InitializeSUint32Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4344514f5e3Sopenharmony_ci    void InitializeSFloat32Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4354514f5e3Sopenharmony_ci    void InitializeSFloat64Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4364514f5e3Sopenharmony_ci    void InitializeSBigInt64Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4374514f5e3Sopenharmony_ci    void InitializeSBigUint64Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
4384514f5e3Sopenharmony_ci
4394514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSObjectFunctionHClass(const JSHandle<JSFunction> &sFuncPrototype) const;
4404514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSObjectPrototypeHClass() const;
4414514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSFunctionHClass(const JSHandle<JSFunction> &sFuncPrototype) const;
4424514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSFunctionPrototypeHClass(const JSHandle<JSTaggedValue> &sObjPrototypeVal) const;
4434514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSSetPrototypeHClass(const JSHandle<JSObject> &sObjPrototype) const;
4444514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSSetFunctionHClass(const JSHandle<JSFunction> &sFuncPrototype) const;
4454514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSMapPrototypeHClass(const JSHandle<JSObject> &sObjPrototype) const;
4464514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSMapFunctionHClass(const JSHandle<JSFunction> &sFuncPrototype) const;
4474514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSArrayPrototypeHClass(const JSHandle<JSObject> &sObjPrototype) const;
4484514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSArrayFunctionHClass(const JSHandle<JSFunction> &sFuncPrototype) const;
4494514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSTypedArrayPrototypeHClass(const JSHandle<JSObject> &sObjPrototype) const;
4504514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSTypedArrayFunctionHClass(const JSHandle<JSFunction> &sFuncPrototype) const;
4514514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSSpecificTypedArrayFuncHClass(const JSHandle<JSFunction> &sFuncPrototype) const;
4524514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSSpecificTypedArrayInstanceHClass(const JSHandle<JSObject> &sObjPrototype) const;
4534514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSArrayBufferPrototypeHClass(const JSHandle<JSObject> &sObjPrototype) const;
4544514f5e3Sopenharmony_ci    JSHandle<JSHClass> CreateSArrayBufferFunctionHClass(const JSHandle<JSFunction> &sFuncPrototype) const;
4554514f5e3Sopenharmony_ci
4564514f5e3Sopenharmony_ci    void InitializeSCtor(const JSHandle<JSHClass> &protoHClass, const JSHandle<JSFunction> &ctor,
4574514f5e3Sopenharmony_ci                         std::string_view name, int length) const;
4584514f5e3Sopenharmony_ci
4594514f5e3Sopenharmony_ci    void SetSFunctionName(const JSHandle<JSFunction> &ctor, std::string_view name) const;
4604514f5e3Sopenharmony_ci    void SetSFunctionName(const JSHandle<JSFunction> &ctor, const JSHandle<JSTaggedValue> &name) const;
4614514f5e3Sopenharmony_ci    void SetSFunctionLength(const JSHandle<JSFunction> &ctor, int length) const;
4624514f5e3Sopenharmony_ci    void SetSFunctionPrototype(const JSHandle<JSFunction> &ctor, const JSTaggedValue &prototype) const;
4634514f5e3Sopenharmony_ci
4644514f5e3Sopenharmony_ci    JSHandle<JSFunction> NewSFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &key,
4654514f5e3Sopenharmony_ci                                      EcmaEntrypoint func, int length,
4664514f5e3Sopenharmony_ci                                      kungfu::BuiltinsStubCSigns::ID builtinId =
4674514f5e3Sopenharmony_ci                                      kungfu::BuiltinsStubCSigns::INVALID) const;
4684514f5e3Sopenharmony_ci
4694514f5e3Sopenharmony_ci    void SetSFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj, std::string_view key,
4704514f5e3Sopenharmony_ci                      EcmaEntrypoint func, uint32_t index, int length, kungfu::BuiltinsStubCSigns::ID builtinId =
4714514f5e3Sopenharmony_ci                      kungfu::BuiltinsStubCSigns::INVALID) const;
4724514f5e3Sopenharmony_ci
4734514f5e3Sopenharmony_ci    void SetSFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
4744514f5e3Sopenharmony_ci                      const JSHandle<JSTaggedValue> &key, EcmaEntrypoint func, uint32_t index, int length,
4754514f5e3Sopenharmony_ci                      kungfu::BuiltinsStubCSigns::ID builtinId = kungfu::BuiltinsStubCSigns::INVALID) const;
4764514f5e3Sopenharmony_ci    void SetSAccessor(const JSHandle<JSObject> &obj, uint32_t index,
4774514f5e3Sopenharmony_ci                      const JSHandle<JSTaggedValue> &getter, const JSHandle<JSTaggedValue> &setter) const;
4784514f5e3Sopenharmony_ci
4794514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> CreateSGetterSetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
4804514f5e3Sopenharmony_ci                                                std::string_view name, int length) const;
4814514f5e3Sopenharmony_ci    void SharedStrictModeForbiddenAccessCallerArguments(const JSHandle<GlobalEnv> &env, uint32_t &index,
4824514f5e3Sopenharmony_ci                                                        const JSHandle<JSObject> &prototype) const;
4834514f5e3Sopenharmony_ci    JSHandle<JSTaggedValue> CreateArrayUnscopables(JSThread *thread) const;
4844514f5e3Sopenharmony_ci    void InitializeSSymbolAttributes(const JSHandle<GlobalEnv> &env);
4854514f5e3Sopenharmony_ci    friend class builtins::BuiltinsLazyCallback;
4864514f5e3Sopenharmony_ci};
4874514f5e3Sopenharmony_ci}  // namespace panda::ecmascript
4884514f5e3Sopenharmony_ci#endif  // ECMASCRIPT_BUILTINS_H
489