1/*
2 * Copyright (c) 2021 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_BUILTINS_ARK_TOOLS_H
17#define ECMASCRIPT_BUILTINS_BUILTINS_ARK_TOOLS_H
18
19#include "ecmascript/base/builtins_base.h"
20#include "ecmascript/js_thread.h"
21
22// List of functions in ArkTools, extension of ArkTS engine.
23// V(name, func, length, stubIndex)
24// where BuiltinsArkTools::func refers to the native implementation of ArkTools[name].
25//       kungfu::BuiltinsStubCSigns::stubIndex refers to the builtin stub index, or INVALID if no stub available.
26#define BUILTIN_ARK_TOOLS_FUNCTIONS_COMMON(V)                                             \
27    V("compareHClass",                  CompareHClass,                  2, INVALID)       \
28    V("dumpHClass",                     DumpHClass,                     1, INVALID)       \
29    V("excutePendingJob",               ExcutePendingJob,               0, INVALID)       \
30    V("forceFullGC",                    ForceFullGC,                    0, INVALID)       \
31    V("getHClass",                      GetHClass,                      1, INVALID)       \
32    V("getLexicalEnv",                  GetLexicalEnv,                  1, INVALID)       \
33    V("isSlicedString",                 IsSlicedString,                 1, INVALID)       \
34    V("hiddenStackSourceFile",          HiddenStackSourceFile,          0, INVALID)       \
35    V("hintGC",                         HintGC,                         0, INVALID)       \
36    V("isNotHoleProperty",              IsNotHoleProperty,              2, INVALID)       \
37    V("isPrototype",                    IsPrototype,                    1, INVALID)       \
38    V("isRegExpReplaceDetectorValid",   IsRegExpReplaceDetectorValid,   0, INVALID)       \
39    V("isRegExpFlagsDetectorValid",     IsRegExpFlagsDetectorValid,     0, INVALID)       \
40    V("isNumberStringNotRegexpLikeDetectorValid", IsNumberStringNotRegexpLikeDetectorValid, 0, INVALID)      \
41    V("isSymbolIteratorDetectorValid",  IsSymbolIteratorDetectorValid,  1, INVALID)       \
42    V("isTSHClass",                     IsTSHClass,                     1, INVALID)       \
43    V("pgoAssertType",                  PGOAssertType,                  2, INVALID)       \
44    V("print",                          ObjectDump,                     0, INVALID)       \
45    V("removeAOTFlag",                  RemoveAOTFlag,                  1, INVALID)       \
46    V("timeInUs",                       TimeInUs,                       0, INVALID)       \
47    V("getElementsKind",                GetElementsKind,                1, INVALID)       \
48    V("isAOTCompiled",                  IsAOTCompiled,                  1, INVALID)       \
49    V("isSameProfileTypeInfo",          IsSameProfileTypeInfo,          2, INVALID)       \
50    V("isProfileTypeInfoValid",         IsProfileTypeInfoValid,         1, INVALID)       \
51    V("isAOTDeoptimized",               IsAOTDeoptimized,               1, INVALID)       \
52    V("printTypedOpProfiler",           PrintTypedOpProfiler,           1, INVALID)       \
53    V("clearTypedOpProfiler",           ClearTypedOpProfiler,           0, INVALID)       \
54    V("isOnHeap",                       IsOnHeap,                       1, INVALID)       \
55    V("checkDeoptStatus",               CheckDeoptStatus,               2, INVALID)       \
56    V("checkCircularImport",            CheckCircularImport,            2, INVALID)       \
57    V("hashCode",                       HashCode,                       1, ArkToolsHashCode)    \
58    V("startRuntimeStat",               StartRuntimeStat,               0, INVALID)       \
59    V("stopRuntimeStat",                StopRuntimeStat,                0, INVALID)       \
60    V("iterateFrame",                   IterateFrame,                   0, INVALID)
61
62// List of mock ArkTools extension builtins
63#define BUILTIN_ARK_TOOLS_FUNCTIONS_REGRESS(V)                                                                \
64    V("prepareFunctionForOptimization",            PrepareFunctionForOptimization,            1, INVALID)     \
65    V("optimizeFunctionOnNextCall",                OptimizeFunctionOnNextCall,                1, INVALID)     \
66    V("optimizeMaglevOnNextCall",                  OptimizeMaglevOnNextCall,                  1, INVALID)     \
67    V("deoptimizeFunction",                        DeoptimizeFunction,                        1, INVALID)     \
68    V("optimizeOsr",                               OptimizeOsr,                               1, INVALID)     \
69    V("neverOptimizeFunction",                     NeverOptimizeFunction,                     1, INVALID)     \
70    V("heapObjectVerify",                          HeapObjectVerify,                          1, INVALID)     \
71    V("disableOptimizationFinalization",           DisableOptimizationFinalization,           0, INVALID)     \
72    V("deoptimizeNow",                             DeoptimizeNow,                             0, INVALID)     \
73    V("deoptimize_now",                            DeoptimizeNow,                             0, INVALID)     \
74    V("waitForBackgroundOptimization",             WaitForBackgroundOptimization,             0, INVALID)     \
75    V("gc",                                        Gc,                                        0, INVALID)     \
76    V("toLength",                                  ToLength,                                  1, INVALID)     \
77    V("hasHoleyElements",                          HasHoleyElements,                          1, INVALID)     \
78    V("hasDictionaryElements",                     HasDictionaryElements,                     1, INVALID)     \
79    V("hasSmiElements",                            HasSmiElements,                            1, INVALID)     \
80    V("hasDoubleElements",                         HasDoubleElements,                         1, INVALID)     \
81    V("hasObjectElements",                         HasObjectElements,                         1, INVALID)     \
82    V("arrayBufferDetach",                         ArrayBufferDetach,                         1, INVALID)     \
83    V("haveSameMap",                               HaveSameMap,                               2, INVALID)     \
84    V("isSameHeapObject",                          IsSameHeapObject,                          2, INVALID)     \
85    V("isSmi",                                     IsSmi,                                     1, INVALID)     \
86    V("createPrivateSymbol",                       CreatePrivateSymbol,                       1, INVALID)     \
87    V("isArray",                                   IsArray,                                   1, INVALID)     \
88    V("createDataProperty",                        CreateDataProperty,                        3, INVALID)     \
89    V("functionGetInferredName",                   FunctionGetInferredName,                   1, INVALID)     \
90    V("stringLessThan",                            StringLessThan,                            2, INVALID)     \
91    V("stringMaxLength",                           StringMaxLength,                           0, INVALID)     \
92    V("arrayBufferMaxByteLength",                  ArrayBufferMaxByteLength,                  0, INVALID)     \
93    V("typedArrayMaxLength",                       TypedArrayMaxLength,                       0, INVALID)     \
94    V("maxSmi",                                    MaxSmi,                                    0, INVALID)     \
95    V("is64Bit",                                   Is64Bit,                                   0, INVALID)     \
96    V("finalizeOptimization",                      FinalizeOptimization,                      0, INVALID)     \
97    V("ensureFeedbackVectorForFunction",           EnsureFeedbackVectorForFunction,           1, INVALID)     \
98    V("compileBaseline",                           CompileBaseline,                           1, INVALID)     \
99    V("debugGetLoadedScriptIds",                   DebugGetLoadedScriptIds,                   0, INVALID)     \
100    V("toFastProperties",                          ToFastProperties,                          1, INVALID)     \
101    V("abortJS",                                   AbortJS,                                   1, INVALID)     \
102    V("internalizeString",                         InternalizeString,                         1, INVALID)     \
103    V("handleDebuggerStatement",                   HandleDebuggerStatement,                   0, INVALID)     \
104    V("setAllocationTimeout",                      SetAllocationTimeout,                      0, INVALID)     \
105    V("hasFastProperties",                         HasFastProperties,                         1, INVALID)     \
106    V("hasOwnConstDataProperty",                   HasOwnConstDataProperty,                   2, INVALID)     \
107    V("getHoleNaNUpper",                           GetHoleNaNUpper,                           0, INVALID)     \
108    V("getHoleNaNLower",                           GetHoleNaNLower,                           0, INVALID)     \
109    V("systemBreak",                               SystemBreak,                               0, INVALID)     \
110    V("scheduleBreak",                             ScheduleBreak,                             0, INVALID)     \
111    V("enqueueMicrotask",                          EnqueueMicrotask,                          1, INVALID)     \
112    V("debugPrint",                                DebugPrint,                                1, INVALID)     \
113    V("getOptimizationStatus",                     GetOptimizationStatus,                     1, INVALID)     \
114    V("getUndetectable",                           GetUndetectable,                           0, INVALID)     \
115    V("setKeyedProperty",                          SetKeyedProperty,                          3, INVALID)     \
116    V("disassembleFunction",                       DisassembleFunction,                       1, INVALID)     \
117    V("tryMigrateInstance",                        TryMigrateInstance,                        1, INVALID)     \
118    V("inLargeObjectSpace",                        InLargeObjectSpace,                        1, INVALID)     \
119    V("performMicrotaskCheckpoint",                PerformMicrotaskCheckpoint,                0, INVALID)     \
120    V("isJSReceiver",                              IsJSReceiver,                              1, INVALID)     \
121    V("isDictPropertyConstTrackingEnabled",        IsDictPropertyConstTrackingEnabled,        1, INVALID)     \
122    V("allocateHeapNumber",                        AllocateHeapNumber,                        1, INVALID)     \
123    V("constructConsString",                       ConstructConsString,                       1, INVALID)     \
124    V("completeInobjectSlackTracking",             CompleteInobjectSlackTracking,             1, INVALID)     \
125    V("normalizeElements",                         NormalizeElements,                         1, INVALID)     \
126    V("call",                                      Call,                                      2, INVALID)     \
127    V("debugPushPromise",                          DebugPushPromise,                          1, INVALID)     \
128    V("setForceSlowPath",                          SetForceSlowPath,                          1, INVALID)     \
129    V("notifyContextDisposed",                     NotifyContextDisposed,                     0, INVALID)     \
130    V("optimizeObjectForAddingMultipleProperties", OptimizeObjectForAddingMultipleProperties, 2, INVALID)     \
131    V("isBeingInterpreted",                        IsBeingInterpreted,                        0, INVALID)     \
132    V("clearFunctionFeedback",                     ClearFunctionFeedback,                     1, INVALID)     \
133    V("inYoungSpace",                              InYoungSpace,                              1, INVALID)     \
134    V("inOldSpace",                                InOldSpace,                                1, INVALID)
135
136#define BUILTIN_ARK_TOOLS_FUNCTIONS_JITCOMPILE(V)                                                             \
137    V("jitCompileSync",                            JitCompileSync,                            1, INVALID)     \
138    V("jitCompileAsync",                           JitCompileAsync,                           1, INVALID)     \
139    V("waitJitCompileFinish",                      WaitJitCompileFinish,                      1, INVALID)     \
140    V("waitAllJitCompileFinish",                   WaitAllJitCompileFinish,                   0, INVALID)
141
142#if ECMASCRIPT_ENABLE_SCOPE_LOCK_STAT
143#define BUILTIN_ARK_TOOLS_FUNCTIONS_SCOPE_LOCK_STATS(V)                                   \
144    V("startScopeLockStats",            StartScopeLockStats,            0, INVALID)       \
145    V("stopScopeLockStats",             StopScopeLockStats,             0, INVALID)
146#else
147#define BUILTIN_ARK_TOOLS_FUNCTIONS_SCOPE_LOCK_STATS(V) // Nothing
148#endif
149
150#ifdef ECMASCRIPT_SUPPORT_CPUPROFILER
151#define BUILTIN_ARK_TOOLS_FUNCTIONS_CPUPROFILER(V)      \
152    V("startCpuProf", StartCpuProfiler, 0, INVALID)     \
153    V("stopCpuProf",  StopCpuProfiler,  0, INVALID)
154#else
155#define BUILTIN_ARK_TOOLS_FUNCTIONS_CPUPROFILER(V) // Nothing
156#endif
157
158#define BUILTIN_ARK_TOOLS_FUNCTIONS(V)                  \
159    BUILTIN_ARK_TOOLS_FUNCTIONS_COMMON(V)               \
160    BUILTIN_ARK_TOOLS_FUNCTIONS_CPUPROFILER(V)          \
161    BUILTIN_ARK_TOOLS_FUNCTIONS_REGRESS(V)              \
162    BUILTIN_ARK_TOOLS_FUNCTIONS_SCOPE_LOCK_STATS(V)     \
163    BUILTIN_ARK_TOOLS_FUNCTIONS_JITCOMPILE(V)
164
165namespace panda::ecmascript::builtins {
166class BuiltinsArkTools : public base::BuiltinsBase {
167public:
168    // Make sure the enable-ark-tools and open-ark-tools has been opened before use it
169    // Use through ArkTools.print(msg, [obj1, obj2, ... objn]) in js
170    static JSTaggedValue ObjectDump(EcmaRuntimeCallInfo *info);
171
172    static JSTaggedValue ExcutePendingJob(EcmaRuntimeCallInfo *info);
173
174    static JSTaggedValue GetLexicalEnv(EcmaRuntimeCallInfo *info);
175
176    static JSTaggedValue CompareHClass(EcmaRuntimeCallInfo *info);
177
178    static JSTaggedValue DumpHClass(EcmaRuntimeCallInfo *info);
179
180    // return whether the hclass used for object is created by static ts type
181    static JSTaggedValue IsTSHClass(EcmaRuntimeCallInfo *info);
182
183    static JSTaggedValue GetHClass(EcmaRuntimeCallInfo *info);
184
185    static JSTaggedValue IsSlicedString(EcmaRuntimeCallInfo *info);
186
187    static JSTaggedValue IsNotHoleProperty(EcmaRuntimeCallInfo *info);
188
189    static JSTaggedValue ForcePartialGC(EcmaRuntimeCallInfo *info);
190
191    static JSTaggedValue ForceFullGC(EcmaRuntimeCallInfo *info);
192
193    static JSTaggedValue HintGC(EcmaRuntimeCallInfo *info);
194
195    static JSTaggedValue HiddenStackSourceFile(EcmaRuntimeCallInfo *info);
196
197    static JSTaggedValue RemoveAOTFlag(EcmaRuntimeCallInfo *info);
198
199    static JSTaggedValue CheckCircularImport(EcmaRuntimeCallInfo *info);
200
201    static JSTaggedValue HashCode(EcmaRuntimeCallInfo *info);
202
203#if defined(ECMASCRIPT_SUPPORT_CPUPROFILER)
204    static JSTaggedValue StartCpuProfiler(EcmaRuntimeCallInfo *info);
205
206    static JSTaggedValue StopCpuProfiler(EcmaRuntimeCallInfo *info);
207
208    static std::string GetProfileName();
209
210    static bool CreateFile(std::string &fileName);
211#endif
212    // ArkTools.isPrototype(object)
213    static JSTaggedValue IsPrototype(EcmaRuntimeCallInfo *info);
214
215    // ArkTools.isAOTCompiledAssert(func)
216    static JSTaggedValue IsAOTCompiled(EcmaRuntimeCallInfo *info);
217
218    // ArkTools.isSameProfileTypeInfo(func1, func2)
219    static JSTaggedValue IsSameProfileTypeInfo(EcmaRuntimeCallInfo *info);
220
221    // ArkTools.isProfileTypeInfoValid(func)
222    static JSTaggedValue IsProfileTypeInfoValid(EcmaRuntimeCallInfo *info);
223
224    // ArkTools.isAOTCompiledAssert(func)
225    static JSTaggedValue IsAOTDeoptimized(EcmaRuntimeCallInfo *info);
226
227    // ArkTools.CheckDeoptStatus(func, deopt?)
228    static JSTaggedValue CheckDeoptStatus(EcmaRuntimeCallInfo *info);
229
230    // ArkTools.isOnHeap(object)
231    static JSTaggedValue IsOnHeap(EcmaRuntimeCallInfo *info);
232
233    // ArkTools.GetElementsKind(array)
234    static JSTaggedValue GetElementsKind(EcmaRuntimeCallInfo *info);
235
236    static JSTaggedValue PrintTypedOpProfiler(EcmaRuntimeCallInfo *info);
237
238    static JSTaggedValue ClearTypedOpProfiler(EcmaRuntimeCallInfo *info);
239
240    static JSTaggedValue IsRegExpReplaceDetectorValid(EcmaRuntimeCallInfo *info);
241
242    static JSTaggedValue IsRegExpFlagsDetectorValid(EcmaRuntimeCallInfo *info);
243
244    static JSTaggedValue IsNumberStringNotRegexpLikeDetectorValid(EcmaRuntimeCallInfo *info);
245
246    static JSTaggedValue IsSymbolIteratorDetectorValid(EcmaRuntimeCallInfo *info);
247
248    static JSTaggedValue TimeInUs(EcmaRuntimeCallInfo *info);
249
250#if ECMASCRIPT_ENABLE_SCOPE_LOCK_STAT
251    static JSTaggedValue StartScopeLockStats(EcmaRuntimeCallInfo *info);
252
253    static JSTaggedValue StopScopeLockStats(EcmaRuntimeCallInfo *info);
254#endif
255
256    static JSTaggedValue PrepareFunctionForOptimization(EcmaRuntimeCallInfo *info);
257
258    static JSTaggedValue OptimizeFunctionOnNextCall(EcmaRuntimeCallInfo *info);
259
260    static JSTaggedValue OptimizeMaglevOnNextCall(EcmaRuntimeCallInfo *info);
261
262    static JSTaggedValue DeoptimizeFunction(EcmaRuntimeCallInfo *info);
263
264    static JSTaggedValue OptimizeOsr(EcmaRuntimeCallInfo *info);
265
266    static JSTaggedValue NeverOptimizeFunction(EcmaRuntimeCallInfo *info);
267
268    static JSTaggedValue HeapObjectVerify(EcmaRuntimeCallInfo *info);
269
270    static JSTaggedValue DisableOptimizationFinalization(EcmaRuntimeCallInfo *info);
271
272    static JSTaggedValue DeoptimizeNow(EcmaRuntimeCallInfo *info);
273
274    static JSTaggedValue WaitForBackgroundOptimization(EcmaRuntimeCallInfo *info);
275
276    static JSTaggedValue Gc(EcmaRuntimeCallInfo *info);
277
278    static JSTaggedValue PGOAssertType(EcmaRuntimeCallInfo *info);
279
280    static JSTaggedValue ToLength(EcmaRuntimeCallInfo *info);
281
282    static JSTaggedValue HasHoleyElements(EcmaRuntimeCallInfo *info);
283
284    static JSTaggedValue HasDictionaryElements(EcmaRuntimeCallInfo *info);
285
286    static JSTaggedValue HasSmiElements(EcmaRuntimeCallInfo *info);
287
288    static JSTaggedValue HasDoubleElements(EcmaRuntimeCallInfo *info);
289
290    static JSTaggedValue HasObjectElements(EcmaRuntimeCallInfo *info);
291
292    static JSTaggedValue ArrayBufferDetach(EcmaRuntimeCallInfo *info);
293
294    static JSTaggedValue HaveSameMap(EcmaRuntimeCallInfo *info);
295
296    static JSTaggedValue IsSameHeapObject(EcmaRuntimeCallInfo *info);
297
298    static JSTaggedValue IsSmi(EcmaRuntimeCallInfo *info);
299
300    static JSTaggedValue CreatePrivateSymbol(EcmaRuntimeCallInfo *info);
301
302    static JSTaggedValue IsArray(EcmaRuntimeCallInfo *info);
303
304    static JSTaggedValue CreateDataProperty(EcmaRuntimeCallInfo *info);
305
306    static JSTaggedValue FunctionGetInferredName(EcmaRuntimeCallInfo *info);
307
308    static JSTaggedValue StringLessThan(EcmaRuntimeCallInfo *info);
309
310    static JSTaggedValue StringMaxLength(EcmaRuntimeCallInfo *info);
311
312    static JSTaggedValue ArrayBufferMaxByteLength(EcmaRuntimeCallInfo *info);
313
314    static JSTaggedValue TypedArrayMaxLength(EcmaRuntimeCallInfo *info);
315
316    static JSTaggedValue MaxSmi(EcmaRuntimeCallInfo *info);
317
318    static JSTaggedValue Is64Bit(EcmaRuntimeCallInfo *info);
319
320    static JSTaggedValue FinalizeOptimization(EcmaRuntimeCallInfo *info);
321
322    static JSTaggedValue EnsureFeedbackVectorForFunction(EcmaRuntimeCallInfo *info);
323
324    static JSTaggedValue CompileBaseline(EcmaRuntimeCallInfo *info);
325
326    static JSTaggedValue DebugGetLoadedScriptIds(EcmaRuntimeCallInfo *info);
327
328    static JSTaggedValue ToFastProperties(EcmaRuntimeCallInfo *info);
329
330    static JSTaggedValue AbortJS(EcmaRuntimeCallInfo *info);
331
332    static JSTaggedValue InternalizeString(EcmaRuntimeCallInfo *info);
333
334    static JSTaggedValue HandleDebuggerStatement(EcmaRuntimeCallInfo *info);
335
336    static JSTaggedValue SetAllocationTimeout(EcmaRuntimeCallInfo *info);
337
338    static JSTaggedValue HasFastProperties(EcmaRuntimeCallInfo *info);
339
340    static JSTaggedValue HasOwnConstDataProperty(EcmaRuntimeCallInfo *info);
341
342    static JSTaggedValue GetHoleNaNUpper(EcmaRuntimeCallInfo *info);
343
344    static JSTaggedValue GetHoleNaNLower(EcmaRuntimeCallInfo *info);
345
346    static JSTaggedValue SystemBreak(EcmaRuntimeCallInfo *info);
347
348    static JSTaggedValue ScheduleBreak(EcmaRuntimeCallInfo *info);
349
350    static JSTaggedValue EnqueueMicrotask(EcmaRuntimeCallInfo *info);
351
352    static JSTaggedValue DebugPrint(EcmaRuntimeCallInfo *info);
353
354    static JSTaggedValue GetOptimizationStatus(EcmaRuntimeCallInfo *info);
355
356    static JSTaggedValue GetUndetectable(EcmaRuntimeCallInfo *info);
357
358    static JSTaggedValue SetKeyedProperty(EcmaRuntimeCallInfo *info);
359
360    static JSTaggedValue DisassembleFunction(EcmaRuntimeCallInfo *info);
361
362    static JSTaggedValue TryMigrateInstance(EcmaRuntimeCallInfo *info);
363
364    static JSTaggedValue InLargeObjectSpace(EcmaRuntimeCallInfo *info);
365
366    static JSTaggedValue PerformMicrotaskCheckpoint(EcmaRuntimeCallInfo *info);
367
368    static JSTaggedValue IsJSReceiver(EcmaRuntimeCallInfo *info);
369
370    static JSTaggedValue IsDictPropertyConstTrackingEnabled(EcmaRuntimeCallInfo *info);
371
372    static JSTaggedValue AllocateHeapNumber(EcmaRuntimeCallInfo *info);
373
374    static JSTaggedValue ConstructConsString(EcmaRuntimeCallInfo *info);
375
376    static JSTaggedValue CompleteInobjectSlackTracking(EcmaRuntimeCallInfo *info);
377
378    static JSTaggedValue NormalizeElements(EcmaRuntimeCallInfo *info);
379
380    static JSTaggedValue Call(EcmaRuntimeCallInfo *info);
381
382    static JSTaggedValue DebugPushPromise(EcmaRuntimeCallInfo *info);
383
384    static JSTaggedValue SetForceSlowPath(EcmaRuntimeCallInfo *info);
385
386    static JSTaggedValue NotifyContextDisposed(EcmaRuntimeCallInfo *info);
387
388    static JSTaggedValue OptimizeObjectForAddingMultipleProperties(EcmaRuntimeCallInfo *info);
389
390    static JSTaggedValue IsBeingInterpreted(EcmaRuntimeCallInfo *info);
391
392    static JSTaggedValue ClearFunctionFeedback(EcmaRuntimeCallInfo *info);
393
394    static JSTaggedValue JitCompileSync(EcmaRuntimeCallInfo *info);
395    static JSTaggedValue JitCompileAsync(EcmaRuntimeCallInfo *info);
396    static JSTaggedValue WaitJitCompileFinish(EcmaRuntimeCallInfo *info);
397    static JSTaggedValue WaitAllJitCompileFinish(EcmaRuntimeCallInfo *info);
398
399    static JSTaggedValue StartRuntimeStat(EcmaRuntimeCallInfo *info);
400    static JSTaggedValue StopRuntimeStat(EcmaRuntimeCallInfo *info);
401
402    static JSTaggedValue IterateFrame(EcmaRuntimeCallInfo *info);
403
404    static JSTaggedValue InYoungSpace(EcmaRuntimeCallInfo *info);
405    static JSTaggedValue InOldSpace(EcmaRuntimeCallInfo *info);
406
407    static Span<const base::BuiltinFunctionEntry> GetArkToolsFunctions()
408    {
409        return Span<const base::BuiltinFunctionEntry>(ARK_TOOLS_FUNCTIONS);
410    }
411
412private:
413#define BUILTINS_ARK_TOOLS_FUNCTION_ENTRY(name, method, length, id) \
414    base::BuiltinFunctionEntry::Create(name, BuiltinsArkTools::method, length, kungfu::BuiltinsStubCSigns::id),
415
416    static constexpr std::array ARK_TOOLS_FUNCTIONS  = {
417        BUILTIN_ARK_TOOLS_FUNCTIONS(BUILTINS_ARK_TOOLS_FUNCTION_ENTRY)
418    };
419#undef BUILTINS_ARK_TOOLS_FUNCTION_ENTRY
420};
421}  // namespace panda::ecmascript::builtins
422
423#endif  // ECMASCRIPT_BUILTINS_BUILTINS_ARK_TOOLS_H
424