• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef ECMASCRIPT_BUILTINS_H
17 #define ECMASCRIPT_BUILTINS_H
18 
19 #include "ecmascript/builtins/builtins_lazy_callback.h"
20 #include "ecmascript/global_env.h"
21 #include "ecmascript/js_function.h"
22 #include "ecmascript/js_handle.h"
23 #include "ecmascript/js_tagged_value.h"
24 #include "ecmascript/js_thread.h"
25 #include "ecmascript/object_factory.h"
26 
27 namespace panda::ecmascript {
28 struct ErrorParameter {
29     EcmaEntrypoint nativeConstructor{nullptr};
30     EcmaEntrypoint nativeMethod{nullptr};
31     std::string_view nativePropertyName{};
32     JSType nativeJstype{JSType::INVALID};
33 };
34 
35 enum FunctionLength : uint8_t { ZERO = 0, ONE, TWO, THREE, FOUR };
36 
37 class Builtins {
38 public:
39     Builtins() = default;
Builtins(JSThread * thread,ObjectFactory * factory,EcmaVM * vm)40     Builtins(JSThread *thread, ObjectFactory *factory, EcmaVM *vm)
41         : thread_(thread), factory_(factory), vm_(vm) {}
42     ~Builtins() = default;
43     NO_COPY_SEMANTIC(Builtins);
44     NO_MOVE_SEMANTIC(Builtins);
45 
46     void Initialize(const JSHandle<GlobalEnv> &env, JSThread *thread, bool lazyInit = false, bool isRealm = false);
47     void InitializeForSnapshot(JSThread *thread);
48 
49 private:
50     JSThread *thread_{nullptr};
51     ObjectFactory *factory_{nullptr};
52     EcmaVM *vm_{nullptr};
53 
54     JSHandle<JSFunction> NewBuiltinConstructor(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &prototype,
55                                                EcmaEntrypoint ctorFunc, std::string_view name, int length,
56                                                kungfu::BuiltinsStubCSigns::ID builtinId =
57                                                kungfu::BuiltinsStubCSigns::INVALID) const;
58 
59     JSHandle<JSFunction> NewBuiltinCjsCtor(const JSHandle<GlobalEnv> &env,
60                                            const JSHandle<JSObject> &prototype, EcmaEntrypoint ctorFunc,
61                                            std::string_view name, int length) const;
62 
63     JSHandle<JSFunction> NewFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &key,
64                                      EcmaEntrypoint func, int length,
65                                      kungfu::BuiltinsStubCSigns::ID builtinId =
66                                      kungfu::BuiltinsStubCSigns::INVALID) const;
67 
68     void InitializePropertyDetector(const JSHandle<GlobalEnv> &env, bool lazyInit) const;
69 
70     void SetLazyAccessor(const JSHandle<JSObject> &object, const JSHandle<JSTaggedValue> &key,
71         const JSHandle<AccessorData> &accessor) const;
72 
73     void InitializeCtor(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &prototype,
74                         const JSHandle<JSFunction> &ctor, std::string_view name, int length) const;
75 
76     void InitializeGlobalObject(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &globalObject);
77 
78     void InitializeFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &emptyFuncClass) const;
79 
80     void InitializeObject(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &objFuncPrototype,
81                           const JSHandle<JSObject> &objFunc);
82 
83     void InitializeNumber(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &globalObject,
84                           const JSHandle<JSHClass> &primRefObjClass);
85 
86     void InitializeBigInt(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &primRefObjClass) const;
87 
88     void InitializeBigIntWithRealm(const JSHandle<GlobalEnv> &realm) const;
89 
90     void InitializeDate(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
91     void LazyInitializeDate(const JSHandle<GlobalEnv> &env) const;
92 
93     void InitializeBoolean(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &primRefObjClass) const;
94 
95     void InitializeSymbol(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
96 
97     void InitializeSymbolWithRealm(const JSHandle<GlobalEnv> &realm, const JSHandle<JSHClass> &objFuncInstanceHClass);
98 
99     void InitializeArray(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
100 
101     void InitializeTypedArray(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
102     void LazyInitializeTypedArray(const JSHandle<GlobalEnv> &env) const;
103 
104     void InitializeInt8Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
105     void LazyInitializeInt8Array(const JSHandle<GlobalEnv> &env) const;
106 
107     void InitializeUint8Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
108     void LazyInitializeUint8Array(const JSHandle<GlobalEnv> &env) const;
109 
110     void InitializeUint8ClampedArray(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
111     void LazyInitializeUint8ClampedArray(const JSHandle<GlobalEnv> &env) const;
112 
113     void InitializeInt16Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
114     void LazyInitializeInt16Array(const JSHandle<GlobalEnv> &env) const;
115 
116     void InitializeUint16Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
117     void LazyInitializeUint16Array(const JSHandle<GlobalEnv> &env) const;
118 
119     void InitializeInt32Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
120     void LazyInitializeInt32Array(const JSHandle<GlobalEnv> &env) const;
121 
122     void InitializeUint32Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
123     void LazyInitializeUint32Array(const JSHandle<GlobalEnv> &env) const;
124 
125     void InitializeFloat32Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
126     void LazyInitializeFloat32Array(const JSHandle<GlobalEnv> &env) const;
127 
128     void InitializeFloat64Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
129     void LazyInitializeFloat64Array(const JSHandle<GlobalEnv> &env) const;
130 
131     void InitializeBigInt64Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
132     void LazyInitializeBigInt64Array(const JSHandle<GlobalEnv> &env) const;
133 
134     void InitializeBigUint64Array(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
135     void LazyInitializeBigUint64Array(const JSHandle<GlobalEnv> &env) const;
136 
137     void InitializeAllTypeError(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
138 
139     void InitializeAllTypeErrorWithRealm(const JSHandle<GlobalEnv> &realm) const;
140 
141     void InitializeError(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass,
142                          const JSType &errorTag) const;
143 
144     void SetErrorWithRealm(const JSHandle<GlobalEnv> &realm, const JSType &errorTag) const;
145 
146     void InitializeRegExp(const JSHandle<GlobalEnv> &env);
147 
148     // for Intl.
149     JSHandle<JSFunction> NewIntlConstructor(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &prototype,
150                                             EcmaEntrypoint ctorFunc, std::string_view name, int length);
151     void InitializeIntlCtor(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &prototype,
152                             const JSHandle<JSFunction> &ctor, std::string_view name, int length);
153     void InitializeIntl(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeValue);
154     void InitializeLocale(const JSHandle<GlobalEnv> &env);
155     void InitializeDateTimeFormat(const JSHandle<GlobalEnv> &env);
156     void InitializeRelativeTimeFormat(const JSHandle<GlobalEnv> &env);
157     void InitializeNumberFormat(const JSHandle<GlobalEnv> &env);
158     void InitializeCollator(const JSHandle<GlobalEnv> &env);
159     void InitializePluralRules(const JSHandle<GlobalEnv> &env);
160     void InitializeDisplayNames(const JSHandle<GlobalEnv> &env);
161     void InitializeListFormat(const JSHandle<GlobalEnv> &env);
162 
163     void LazyInitializeLocale(const JSHandle<GlobalEnv> &env) const;
164     void LazyInitializeDateTimeFormat(const JSHandle<GlobalEnv> &env) const;
165     void LazyInitializeNumberFormat(const JSHandle<GlobalEnv> &env) const;
166     void LazyInitializeRelativeTimeFormat(const JSHandle<GlobalEnv> &env) const;
167     void LazyInitializeCollator(const JSHandle<GlobalEnv> &env) const;
168     void LazyInitializePluralRules(const JSHandle<GlobalEnv> &env) const;
169     void LazyInitializeDisplayNames(const JSHandle<GlobalEnv> &env) const;
170     void LazyInitializeListFormat(const JSHandle<GlobalEnv> &env) const;
171 
172     void GeneralUpdateError(ErrorParameter *error, EcmaEntrypoint constructor, EcmaEntrypoint method,
173                             std::string_view name, JSType type) const;
174 
175     void InitializeSet(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
176     void LazyInitializeSet(const JSHandle<GlobalEnv> &env);
177 
178     void InitializeMap(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
179     void LazyInitializeMap(const JSHandle<GlobalEnv> &env) const;
180 
181     void InitializeWeakMap(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
182     void LazyInitializeWeakMap(const JSHandle<GlobalEnv> &env) const;
183 
184     void InitializeWeakSet(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
185     void LazyInitializeWeakSet(const JSHandle<GlobalEnv> &env) const;
186 
187     void InitializeWeakRef(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
188     void LazyInitializeWeakRef(const JSHandle<GlobalEnv> &env) const;
189 
190     void InitializeFinalizationRegistry(const JSHandle<GlobalEnv> &env,
191                                         const JSHandle<JSHClass> &objFuncClass) const;
192     void LazyInitializeFinalizationRegistry(const JSHandle<GlobalEnv> &env) const;
193 
194     void InitializeMath(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
195 
196     void InitializeAtomics(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
197 
198     void InitializeJson(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
199 
200     void InitializeString(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
201 
202     void InitializeIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
203 
204     void InitializeRegexpIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
205 
206     void InitializeStringIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
207 
208     void InitializeAsyncFromSyncIterator(const JSHandle<GlobalEnv> &env,
209                                          const JSHandle<JSHClass> &iteratorFuncClass) const;
210 
211     void InitializeForinIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
212 
213     void InitializeMapIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
214 
215     void InitializeSetIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
216 
217     void InitializeArrayIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &iteratorFuncClass) const;
218 
219     void InitializeArrayBuffer(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
220     void LazyInitializeArrayBuffer(const JSHandle<GlobalEnv> &env) const;
221 
222     void InitializeSharedArrayBuffer(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
223     void LazyInitializeSharedArrayBuffer(const JSHandle<GlobalEnv> &env) const;
224 
225     void InitializeDataView(const JSHandle<GlobalEnv> &env, JSHandle<JSTaggedValue> objFuncPrototypeVal) const;
226     void LazyInitializeDataView(const JSHandle<GlobalEnv> &env) const;
227 
228     void InitializeForPromiseFuncClass(const JSHandle<GlobalEnv> &env);
229 
230     void InitializeProxy(const JSHandle<GlobalEnv> &env);
231 
232     void InitializeReflect(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &objFuncPrototypeVal) const;
233 
234     void InitializeAsyncFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
235 
236     void InitializeGeneratorFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
237 
238     void InitializeAsyncGeneratorFunction(const JSHandle<GlobalEnv> &env,
239                                           const JSHandle<JSHClass> &objFuncClass) const;
240 
241     void InitializeAsyncGenerator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
242 
243     void InitializeAsyncIterator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
244 
245     void InitializeGenerator(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
246 
247     JSHandle<JSFunction> InitializeExoticConstructor(const JSHandle<GlobalEnv> &env, EcmaEntrypoint ctorFunc,
248                                                      std::string_view name, int length);
249 
250     void InitializePromise(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &promiseFuncClass);
251 
252     void InitializePromiseJob(const JSHandle<GlobalEnv> &env);
253 
254     void InitializeModuleNamespace(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &objFuncClass) const;
255 
256     void InitializeCjsModule(const JSHandle<GlobalEnv> &env) const;
257 
258     void InitializeCjsExports(const JSHandle<GlobalEnv> &env) const;
259 
260     void InitializeCjsRequire(const JSHandle<GlobalEnv> &env) const;
261 
262     void InitializeDefaultExportOfScript(const JSHandle<GlobalEnv> &env) const;
263 
264     void SetFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj, std::string_view key,
265                      EcmaEntrypoint func, int length, kungfu::BuiltinsStubCSigns::ID builtinId =
266                      kungfu::BuiltinsStubCSigns::INVALID) const;
267 
268     void SetFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj, const JSHandle<JSTaggedValue> &key,
269                      EcmaEntrypoint func, int length, kungfu::BuiltinsStubCSigns::ID builtinId =
270                      kungfu::BuiltinsStubCSigns::INVALID) const;
271 
272     JSHandle<JSFunction> SetAndReturnFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
273                                               const char *key, EcmaEntrypoint func, int length,
274                                               kungfu::BuiltinsStubCSigns::ID builtinId =
275                                               kungfu::BuiltinsStubCSigns::INVALID) const ;
276 
277     JSHandle<JSFunction> SetAndReturnFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
278                                               const JSHandle<JSTaggedValue> &key, EcmaEntrypoint func, int length,
279                                               kungfu::BuiltinsStubCSigns::ID builtinId =
280                                               kungfu::BuiltinsStubCSigns::INVALID) const;
281 
282     void SetFuncToObjAndGlobal(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &globalObject,
283                                const JSHandle<JSObject> &obj, std::string_view key, EcmaEntrypoint func, int length,
284                                kungfu::BuiltinsStubCSigns::ID builtinId = kungfu::BuiltinsStubCSigns::INVALID);
285 
286     template<int type = JSSymbol::SYMBOL_DEFAULT_TYPE>
287     void SetFunctionAtSymbol(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
288                              const JSHandle<JSTaggedValue> &symbol, std::string_view name, EcmaEntrypoint func,
289                              int length) const;
290 
291     template<int type = JSSymbol::SYMBOL_DEFAULT_TYPE>
292     JSHandle<JSTaggedValue> SetAndReturnFunctionAtSymbol(const JSHandle<GlobalEnv> &env,
293                                                          const JSHandle<JSObject> &obj,
294                                                          const JSHandle<JSTaggedValue> &symbol,
295                                                          std::string_view name,
296                                                          EcmaEntrypoint func,
297                                                          int length) const;
298 
299     void SetStringTagSymbol(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
300                             std::string_view key) const;
301     JSHandle<JSTaggedValue> CreateGetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
302                                          std::string_view name, int length) const;
303     JSHandle<JSTaggedValue> CreateGetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
304                                          JSHandle<JSTaggedValue> key, int length) const;
305 
306     void SetConstant(const JSHandle<JSObject> &obj, std::string_view key, JSTaggedValue value) const;
307 
308     void SetGlobalThis(const JSHandle<JSObject> &obj, std::string_view key,
309                        const JSHandle<JSTaggedValue> &globalValue);
310 
311     void SetAttribute(const JSHandle<JSObject> &obj, std::string_view key,  std::string_view value) const;
312 
313     void SetNoneAttributeProperty(const JSHandle<JSObject> &obj, std::string_view key,
314                                   const JSHandle<JSTaggedValue> &value) const;
315 
316     void StrictModeForbiddenAccessCallerArguments(const JSHandle<GlobalEnv> &env,
317                                                   const JSHandle<JSObject> &prototype) const;
318 
319     JSHandle<JSTaggedValue> CreateSetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
320                                          std::string_view name, int length) const;
321     JSHandle<JSTaggedValue> CreateSetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
322                                          JSHandle<JSTaggedValue> key, int length) const;
323 
324     void SetArgumentsSharedAccessor(const JSHandle<GlobalEnv> &env);
325     void SetAccessor(const JSHandle<JSObject> &obj, const JSHandle<JSTaggedValue> &key,
326                      const JSHandle<JSTaggedValue> &getter, const JSHandle<JSTaggedValue> &setter) const;
327     void SetGetter(const JSHandle<JSObject> &obj, const JSHandle<JSTaggedValue> &key,
328                    const JSHandle<JSTaggedValue> &getter) const;
329     JSHandle<JSObject> InitializeArkTools(const JSHandle<GlobalEnv> &env) const;
330     void InitializeGlobalRegExp(JSHandle<JSObject> &obj) const;
331     // Using to initialize jsapi container
332     JSHandle<JSObject> InitializeArkPrivate(const JSHandle<GlobalEnv> &env) const;
333     void SetConstantObject(const JSHandle<JSObject> &obj, std::string_view key,
334                            JSHandle<JSTaggedValue> &value) const;
335     void SetFrozenFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj, std::string_view key,
336                            EcmaEntrypoint func, int length) const;
337     void SetNonConstantObject(const JSHandle<JSObject> &obj, std::string_view key,
338                               JSHandle<JSTaggedValue> &value) const;
339     void InitializeSObjectAndSFunction(const JSHandle<GlobalEnv> &env);
340     void InitializeSObject(const JSHandle<GlobalEnv> &env, const JSHandle<JSHClass> &sObjIHClass,
341                            const JSHandle<JSObject> &sObjFuncPrototype) const;
342     void InitializeSFunciton(const JSHandle<GlobalEnv> &env,
343                              const JSHandle<JSHClass> &sFuncPrototypeHClass) const;
344     void InitializeSCtor(const JSHandle<JSHClass> &protoHClass, const JSHandle<JSFunction> &ctor,
345                          std::string_view name, int length) const;
346 
347     void SetSFunctionName(const JSHandle<JSFunction> &ctor, std::string_view name) const;
348     void SetSFunctionName(const JSHandle<JSFunction> &ctor, const JSHandle<JSTaggedValue> &name) const;
349     void SetSFunctionLength(const JSHandle<JSFunction> &ctor, int length) const;
350 
351     JSHandle<JSFunction> NewSFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSTaggedValue> &key,
352                                       EcmaEntrypoint func, int length,
353                                       kungfu::BuiltinsStubCSigns::ID builtinId =
354                                       kungfu::BuiltinsStubCSigns::INVALID) const;
355 
356     void SetSFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj, std::string_view key,
357                       EcmaEntrypoint func, int length, kungfu::BuiltinsStubCSigns::ID builtinId =
358                       kungfu::BuiltinsStubCSigns::INVALID) const;
359 
360     void SetSFunction(const JSHandle<GlobalEnv> &env, const JSHandle<JSObject> &obj,
361                       const JSHandle<JSTaggedValue> &key, EcmaEntrypoint func, int length,
362                       kungfu::BuiltinsStubCSigns::ID builtinId = kungfu::BuiltinsStubCSigns::INVALID) const;
363     void SetSAccessor(const JSHandle<JSObject> &obj, const JSHandle<JSTaggedValue> &key,
364                       const JSHandle<JSTaggedValue> &getter, const JSHandle<JSTaggedValue> &setter) const;
365 
366     JSHandle<JSTaggedValue> CreateSGetterSetter(const JSHandle<GlobalEnv> &env, EcmaEntrypoint func,
367                                                 std::string_view name, int length) const;
368     void SharedStrictModeForbiddenAccessCallerArguments(const JSHandle<GlobalEnv> &env,
369                                                         const JSHandle<JSObject> &prototype) const;
370     friend class builtins::BuiltinsLazyCallback;
371 };
372 }  // namespace panda::ecmascript
373 #endif  // ECMASCRIPT_BUILTINS_H
374