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