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