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