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 165 namespace panda::ecmascript::builtins { 166 class BuiltinsArkTools : public base::BuiltinsBase { 167 public: 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 GetArkToolsFunctions()407 static Span<const base::BuiltinFunctionEntry> GetArkToolsFunctions() 408 { 409 return Span<const base::BuiltinFunctionEntry>(ARK_TOOLS_FUNCTIONS); 410 } 411 412 private: 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