• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2022 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef ECMASCRIPT_RUNTIME_CALL_ID_H
17 #define ECMASCRIPT_RUNTIME_CALL_ID_H
18 
19 #include "ecmascript/base/config.h"
20 #include "ecmascript/dfx/vmstat/runtime_stat.h"
21 #include "ecmascript/stubs/runtime_stubs.h"
22 
23 namespace panda::ecmascript {
24 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
25 #define INTERPRETER_CALLER_LIST(V)  \
26     V(RunInternal)                  \
27     V(Ldnan)                        \
28     V(Ldinfinity)                   \
29     V(Ldundefined)                  \
30     V(Ldboolean)                    \
31     V(Ldnumber)                     \
32     V(Ldstring)                     \
33     V(Ldnull)                       \
34     V(Ldsymbol)                     \
35     V(Ldfunction)                   \
36     V(Ldglobal)                     \
37     V(Ldtrue)                       \
38     V(Ldfalse)                      \
39     V(Tonumber)                     \
40     V(Toboolean)                    \
41     V(Add2)                      \
42     V(Sub2)                      \
43     V(Mul2)                      \
44     V(Div2)                      \
45     V(Mod2)                      \
46     V(Eq)                        \
47     V(NotEq)                     \
48     V(Less)                      \
49     V(LessEq)                    \
50     V(Greater)                   \
51     V(GreaterEq)                 \
52     V(StrictNotEq)               \
53     V(StrictEq)                  \
54     V(Shl2)                      \
55     V(Shr2)                      \
56     V(Ashr2)                     \
57     V(And2)                      \
58     V(Or2)                       \
59     V(Xor2)                      \
60     V(Neg)                       \
61     V(Not)                       \
62     V(Inc)                       \
63     V(Dec)                       \
64     V(Exp)                       \
65     V(Throw)                     \
66     V(LdObjByIndex)              \
67     V(StObjByIndex)              \
68     V(LdObjByName)               \
69     V(StObjByName)               \
70     V(LdObjByValue)              \
71     V(StObjByValue)              \
72     V(StOwnByName)               \
73     V(StOwnById)                 \
74     V(StOwnByValue)              \
75     V(Trygetobjprop)                \
76     V(Delobjprop)                   \
77     V(Defineglobalvar)              \
78     V(Definelocalvar)               \
79     V(Definefuncexpr)               \
80     V(DefineFunc)                \
81     V(NewobjRange)               \
82     V(Refeq)                     \
83     V(Typeof)                    \
84     V(Ldnewobjrange)             \
85     V(IsIn)                      \
86     V(Instanceof)                \
87     V(NewObjApply)               \
88     V(CallArg0)                  \
89     V(CallArg1)                  \
90     V(CallArg2)                  \
91     V(CallArg3)                  \
92     V(CallThisRange)             \
93     V(CallRange)                 \
94     V(CallSpread)                \
95     V(Newlexenv)                 \
96     V(NewlexenvwithName)         \
97     V(Stlexvar)                  \
98     V(Ldlexvar)                  \
99     V(Ldlexenv)                  \
100     V(GetPropIterator)              \
101     V(CreateIterResultObj)          \
102     V(SuspendGenerator)             \
103     V(ResumeGenerator)              \
104     V(GetResumeMode)                \
105     V(CreateGeneratorObj)           \
106     V(DefineGetterSetterByValue)    \
107     V(AsyncFunctionEnter)           \
108     V(AsyncFunctionAwaitUncaught)   \
109     V(AsyncFunctionResolveOrReject) \
110     V(ThrowUndefined)               \
111     V(ThrowConstAssignment)         \
112     V(ThrowUndefinedIfHole)         \
113     V(Copyrestargs)                 \
114     V(Trystobjprop)                 \
115     V(GetTemplateObject)            \
116     V(GetIterator)                  \
117     V(GetAsyncIterator)             \
118     V(ThrowIfNotObject)             \
119     V(ThrowThrowNotExists)          \
120     V(CreateObjectWithExcludedKeys) \
121     V(ThrowPatternNonCoercible)     \
122     V(IterNext)                     \
123     V(CloseIterator)                \
124     V(StArraySpread)                \
125     V(GetCallSpreadArgs)            \
126     V(TryLoadICByName)              \
127     V(LoadICByName)                 \
128     V(GetPropertyByName)            \
129     V(TryLoadICByValue)             \
130     V(LoadICByValue)                \
131     V(TryStoreICByName)             \
132     V(StoreICByName)                \
133     V(TryStoreICByValue)            \
134     V(StoreICByValue)               \
135     V(NotifyInlineCache)            \
136     V(LoadGlobalICByName)           \
137     V(StoreGlobalICByName)          \
138     V(StoreICWithHandler)           \
139     V(StorePrototype)               \
140     V(StoreWithTransition)          \
141     V(StoreTransWithProto)          \
142     V(StoreWithAOT)                 \
143     V(StoreField)                   \
144     V(StoreGlobal)                  \
145     V(LoadPrototype)                \
146     V(LoadICWithHandler)            \
147     V(StoreElement)                 \
148     V(CallGetter)                   \
149     V(CallSetter)                   \
150     V(AddPropertyByName)            \
151     V(AddPropertyByIndex)           \
152     V(GetPropertyByIndex)           \
153     V(GetPropertyByValue)           \
154     V(SetPropertyByIndex)           \
155     V(SetPropertyByValue)           \
156     V(FastTypeOf)                   \
157     V(FastSetPropertyByIndex)       \
158     V(FastSetPropertyByValue)       \
159     V(FastGetPropertyByName)        \
160     V(FastGetPropertyByValue)       \
161     V(FastGetPropertyByIndex)       \
162     V(NewLexicalEnv)                \
163     V(ExecuteNative)                \
164     V(Execute)                      \
165     V(AsmExecute)                   \
166     V(ExecuteAot)                   \
167     V(ToJSTaggedValueWithInt32)     \
168     V(ToJSTaggedValueWithUint32)    \
169     V(ThrowIfSuperNotCorrectCall)   \
170     V(CreateEmptyArray)             \
171     V(CreateEmptyObject)            \
172     V(CreateObjectWithBuffer)       \
173     V(CreateObjectHavingMethod)     \
174     V(SetObjectWithProto)           \
175     V(getmodulenamespace)           \
176     V(StModuleVar)                  \
177     V(LdModuleVar)                  \
178     V(CreateRegExpWithLiteral)      \
179     V(CreateArrayWithBuffer)        \
180     V(GetNextPropName)              \
181     V(CopyDataProperties)           \
182     V(GetUnmapedArgs)               \
183     V(TryStGlobalByName)            \
184     V(LdGlobalVar)                  \
185     V(StGlobalVar)                  \
186     V(TryUpdateGlobalRecord)        \
187     V(LdGlobalRecord)               \
188     V(StGlobalRecord)               \
189     V(ThrowReferenceError)          \
190     V(ThrowTypeError)               \
191     V(ThrowSyntaxError)             \
192     V(NewClassFunc)                 \
193     V(DefineClass)                  \
194     V(SuperCall)                    \
195     V(SuperCallSpread)              \
196     V(DefineMethod)                 \
197     V(LdSuperByValue)               \
198     V(StSuperByValue)               \
199     V(ThrowDeleteSuperProperty)     \
200     V(ModWithTSType)                \
201     V(MulWithTSType)                \
202     V(SubWithTSType)                \
203     V(DivWithTSType)                \
204     V(AddWithTSType)                \
205     V(GetBitOPDate)                 \
206     V(ShlWithTSType)                \
207     V(ShrWithTSType)                \
208     V(AshrWithTSType)               \
209     V(AndWithTSType)                \
210     V(OrWithTSType)                 \
211     V(XorWithTSType)                \
212     V(EqualWithIC)                  \
213     V(NotEqualWithIC)               \
214     V(Compare)                      \
215     V(LessWithIC)                   \
216     V(LessEqWithIC)                 \
217     V(GreaterWithIC)                \
218     V(SetPropertyByName)            \
219     V(GreaterEqWithIC)              \
220     V(LdBigInt)                     \
221     V(Tonumeric)                    \
222     V(CreateAsyncGeneratorObj)      \
223     V(AsyncGeneratorResolve)        \
224     V(GetSuperConstructor)          \
225     V(DynamicImport)                \
226     V(LdPatchVar)                   \
227     V(StPatchVar)                   \
228     V(AsyncGeneratorReject)         \
229     V(NotifyConcurrentResult)       \
230     V(SetGeneratorState)
231 
232 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
233 #define BUILTINS_API_LIST(V)                   \
234     V(Array, Constructor)                     \
235     V(Array, From)                            \
236     V(Array, Of)                              \
237     V(Array, IsArray)                         \
238     V(Array, Entries)                         \
239     V(Array, Species)                         \
240     V(Array, Concat)                          \
241     V(Array, CopyWithin)                      \
242     V(Array, Every)                           \
243     V(Array, Fill)                            \
244     V(Array, Filter)                          \
245     V(Array, Find)                            \
246     V(Array, FindIndex)                       \
247     V(Array, ForEach)                         \
248     V(Array, IndexOf)                         \
249     V(Array, Join)                            \
250     V(Array, Keys)                            \
251     V(Array, LastIndexOf)                     \
252     V(Array, Map)                             \
253     V(Array, Pop)                             \
254     V(Array, Push)                            \
255     V(Array, Reduce)                          \
256     V(Array, ReduceRight)                     \
257     V(Array, Reverse)                         \
258     V(Array, Shift)                           \
259     V(Array, Slice)                           \
260     V(Array, Some)                            \
261     V(Array, Sort)                            \
262     V(Array, Splice)                          \
263     V(Array, ToLocaleString)                  \
264     V(Array, ToString)                        \
265     V(Array, Unshift)                         \
266     V(Array, Values)                          \
267     V(Array, Includes)                        \
268     V(Array, Flat)                            \
269     V(Array, FlatMap)                         \
270     V(ArrayBuffer, Constructor)               \
271     V(ArrayBuffer, Slice)                     \
272     V(ArrayBuffer, GetValueFromBuffer)        \
273     V(ArrayBuffer, SetValueInBuffer)          \
274     V(ArrayBuffer, CloneArrayBuffer)          \
275     V(ArrayBuffer, AllocateArrayBuffer)       \
276     V(SharedArrayBuffer, Constructor)         \
277     V(SharedArrayBuffer, Slice)               \
278     V(SharedArrayBuffer, AllocateSharedArrayBuffer) \
279     V(SharedArrayBuffer, IsSharedArrayBuffer) \
280     V(SharedArrayBuffer, Species)             \
281     V(SharedArrayBuffer, GetByteLength)       \
282     V(AsyncFunction, Constructor)             \
283     V(Boolean, Constructor)                   \
284     V(Boolean, ThisBooleanValue)              \
285     V(DataView, Constructor)                  \
286     V(DataView, GetBuffer)                    \
287     V(DataView, GetByteLength)                \
288     V(DataView, GetOffset)                    \
289     V(DataView, GetViewValue)                 \
290     V(DataView, SetViewValue)                 \
291     V(Date, Constructor)                      \
292     V(Date, Now)                              \
293     V(Date, UTC)                              \
294     V(Date, Parse)                            \
295     V(Date, GetDateField)                     \
296     V(Date, GetTime)                          \
297     V(Date, SetTime)                          \
298     V(Date, ToJSON)                           \
299     V(Date, ValueOf)                          \
300     V(Date, ToPrimitive)                      \
301     V(Function, Constructor)                  \
302     V(Function, PrototypeApply)               \
303     V(Function, PrototypeBind)                \
304     V(Function, PrototypeCall)                \
305     V(Function, PrototypeToString)            \
306     V(Function, PrototypeHasInstance)         \
307     V(Generator, Constructor)                 \
308     V(Generator, PrototypeNext)               \
309     V(Generator, PrototypeReturn)             \
310     V(Generator, PrototypeThrow)              \
311     V(Global, IsFinite)                       \
312     V(Global, IsNaN)                          \
313     V(Global, PrintEntryPoint)                \
314     V(Global, NewobjRange)                 \
315     V(Global, CallJsBoundFunction)            \
316     V(Global, CallJsProxy)                    \
317     V(Global, DecodeURI)                      \
318     V(Global, EncodeURI)                      \
319     V(Global, DecodeURIComponent)             \
320     V(Global, EncodeURIComponent)             \
321     V(Iterator, Constructor)                  \
322     V(Iterator, Next)                         \
323     V(Iterator, Throw)                        \
324     V(Iterator, Return)                       \
325     V(Iterator, GetObj)                       \
326     V(AsyncIterator, Constructor)             \
327     V(AsyncIterator, Next)                    \
328     V(AsyncIterator, Throw)                   \
329     V(AsyncIterator, Return)                  \
330     V(AsyncIterator, GetObj)                  \
331     V(Json, Parse)                            \
332     V(Json, Stringify)                        \
333     V(Map, Constructor)                       \
334     V(Map, Species)                           \
335     V(Map, Clear)                             \
336     V(Map, Delete)                            \
337     V(Map, Entries)                           \
338     V(Map, Get)                               \
339     V(Map, Has)                               \
340     V(Map, Keys)                              \
341     V(Map, Set)                               \
342     V(Map, GetSize)                           \
343     V(Map, Values)                            \
344     V(Map, ForEach)                           \
345     V(Math, Abs)                              \
346     V(Math, Acos)                             \
347     V(Math, Acosh)                            \
348     V(Math, Asin)                             \
349     V(Math, Asinh)                            \
350     V(Math, Atan)                             \
351     V(Math, Atanh)                            \
352     V(Math, Atan2)                            \
353     V(Math, Cbrt)                             \
354     V(Math, Ceil)                             \
355     V(Math, Clz32)                            \
356     V(Math, Cos)                              \
357     V(Math, Cosh)                             \
358     V(Math, Exp)                              \
359     V(Math, Expm1)                            \
360     V(Math, Floor)                            \
361     V(Math, Fround)                           \
362     V(Math, Hypot)                            \
363     V(Math, Imul)                             \
364     V(Math, Log)                              \
365     V(Math, Log1p)                            \
366     V(Math, Log10)                            \
367     V(Math, Log2)                             \
368     V(Math, Max)                              \
369     V(Math, Min)                              \
370     V(Math, Pow)                              \
371     V(Math, Random)                           \
372     V(Math, Round)                            \
373     V(Math, Sign)                             \
374     V(Math, Sin)                              \
375     V(Math, Sinh)                             \
376     V(Math, Sqrt)                             \
377     V(Math, Tan)                              \
378     V(Math, Tanh)                             \
379     V(Math, Trunc)                            \
380     V(Atomics, Add)                           \
381     V(Atomics, And)                           \
382     V(Atomics, Or)                            \
383     V(Atomics, Xor)                           \
384     V(Atomics, Sub)                           \
385     V(Atomics, Exchange)                      \
386     V(Atomics, CompareExchange)               \
387     V(Atomics, Store)                         \
388     V(Atomics, Load)                          \
389     V(Atomics, IsLockFree)                    \
390     V(Atomics, Wait)                          \
391     V(Atomics, Notify)                        \
392     V(Number, Constructor)                    \
393     V(Number, IsFinite)                       \
394     V(Number, IsInteger)                      \
395     V(Number, IsNaN)                          \
396     V(Number, IsSafeInteger)                  \
397     V(Number, ParseFloat)                     \
398     V(Number, ParseInt)                       \
399     V(Number, ToExponential)                  \
400     V(Number, ToFixed)                        \
401     V(Number, ToLocaleString)                 \
402     V(Number, ToPrecision)                    \
403     V(Number, ToString)                       \
404     V(Number, ValueOf)                        \
405     V(Number, ThisNumberValue)                \
406     V(BigInt, Constructor)                    \
407     V(BigInt, AsUintN)                        \
408     V(BigInt, AsIntN)                         \
409     V(BigInt, ToLocaleString)                 \
410     V(BigInt, ToString)                       \
411     V(BigInt, ValueOf)                        \
412     V(BigInt, ThisBigIntValue)                \
413     V(AsyncGenerator, Constructor)            \
414     V(AsyncGenerator, PrototypeNext)          \
415     V(AsyncGenerator, PrototypeReturn)        \
416     V(AsyncGenerator, PrototypeThrow)         \
417     V(Object, Constructor)                    \
418     V(Object, Assign)                         \
419     V(Object, Create)                         \
420     V(Object, CreateDataPropertyOnObjectFunctions) \
421     V(Object, DefineProperties)               \
422     V(Object, DefineProperty)                 \
423     V(Object, Freeze)                         \
424     V(Object, FromEntries)                    \
425     V(Object, GetOwnPropertyDescriptor)       \
426     V(Object, GetOwnPropertyKeys)             \
427     V(Object, GetOwnPropertyNames)            \
428     V(Object, GetOwnPropertySymbols)          \
429     V(Object, GetPrototypeOf)                 \
430     V(Object, Is)                             \
431     V(Object, Keys)                           \
432     V(Object, Values)                         \
433     V(Object, PreventExtensions)              \
434     V(Object, Seal)                           \
435     V(Object, SetPrototypeOf)                 \
436     V(Object, HasOwnProperty)                 \
437     V(Object, IsPrototypeOf)                  \
438     V(Object, ToLocaleString)                 \
439     V(Object, GetBuiltinTag)                  \
440     V(Object, ToString)                       \
441     V(Object, ValueOf)                        \
442     V(Object, ProtoGetter)                    \
443     V(Object, ProtoSetter)                    \
444     V(PromiseHandler, Resolve)                \
445     V(PromiseHandler, Reject)                 \
446     V(PromiseHandler, Executor)               \
447     V(PromiseHandler, ResolveElementFunction) \
448     V(PromiseHandler, AllSettledResolveElementFunction) \
449     V(PromiseHandler, AllSettledRejectElementFunction) \
450     V(PromiseHandler, AnyRejectElementFunction) \
451     V(PromiseJob, Reaction)                   \
452     V(PromiseJob, ResolveThenableJob)         \
453     V(PromiseJob, DynamicImportJob)           \
454     V(Promise, Constructor)                   \
455     V(Promise, All)                           \
456     V(Promise, Race)                          \
457     V(Promise, Reject)                        \
458     V(Promise, Resolve)                       \
459     V(Promise, GetSpecies)                    \
460     V(Promise, Catch)                         \
461     V(Promise, Then)                          \
462     V(Promise, PerformPromiseThen)            \
463     V(Promise, Finally)                       \
464     V(Promise, Any)                           \
465     V(Promise, PerformPromiseAny)             \
466     V(Promise, AllSettled)                    \
467     V(Promise, PerformPromiseAllSettled)      \
468     V(Proxy, Constructor)                     \
469     V(Proxy, Revocable)                       \
470     V(Proxy, InvalidateProxyFunction)         \
471     V(Reflect, Apply)                         \
472     V(Reflect, Constructor)                   \
473     V(Reflect, DefineProperty)                \
474     V(Reflect, DeleteProperty)                \
475     V(Reflect, Get)                           \
476     V(Reflect, GetOwnPropertyDescriptor)      \
477     V(Reflect, GetPrototypeOf)                \
478     V(Reflect, Has)                           \
479     V(Reflect, OwnKeys)                       \
480     V(Reflect, PreventExtensions)             \
481     V(Reflect, Set)                           \
482     V(Reflect, SetPrototypeOf)                \
483     V(RegExp, Constructor)                    \
484     V(RegExp, Exec)                           \
485     V(RegExp, Test)                           \
486     V(RegExp, ToString)                       \
487     V(RegExp, GetFlags)                       \
488     V(RegExp, GetSpecies)                     \
489     V(RegExp, Match)                          \
490     V(RegExp, MatchAll)                       \
491     V(RegExp, Replace)                        \
492     V(RegExp, Search)                         \
493     V(RegExp, Split)                          \
494     V(RegExp, Create)                         \
495     V(Set, Constructor)                       \
496     V(Set, Species)                           \
497     V(Set, Add)                               \
498     V(Set, Clear)                             \
499     V(Set, Delete)                            \
500     V(Set, Entries)                           \
501     V(Set, Has)                               \
502     V(Set, GetSize)                           \
503     V(Set, Values)                            \
504     V(Set, ForEach)                           \
505     V(StringIterator, Next)                   \
506     V(String, Constructor)                    \
507     V(String, FromCharCode)                   \
508     V(String, FromCodePoint)                  \
509     V(String, Raw)                            \
510     V(String, GetSubstitution)                \
511     V(String, CharAt)                         \
512     V(String, CharCodeAt)                     \
513     V(String, CodePointAt)                    \
514     V(String, Concat)                         \
515     V(String, EndsWith)                       \
516     V(String, Includes)                       \
517     V(String, IndexOf)                        \
518     V(String, LastIndexOf)                    \
519     V(String, LocaleCompare)                  \
520     V(String, Match)                          \
521     V(String, MatchAll)                       \
522     V(String, Normalize)                      \
523     V(String, PadStart)                       \
524     V(String, PadEnd)                         \
525     V(String, Repeat)                         \
526     V(String, Replace)                        \
527     V(String, ReplaceAll)                     \
528     V(String, Search)                         \
529     V(String, Slice)                          \
530     V(String, Split)                          \
531     V(String, StartsWith)                     \
532     V(String, Substring)                      \
533     V(String, ToLocaleLowerCase)              \
534     V(String, ToLocaleUpperCase)              \
535     V(String, ToLowerCase)                    \
536     V(String, ToString)                       \
537     V(String, ToUpperCase)                    \
538     V(String, Trim)                           \
539     V(String, TrimStart)                      \
540     V(String, TrimEnd)                        \
541     V(String, TrimLeft)                       \
542     V(String, TrimRight)                      \
543     V(String, GetStringIterator)              \
544     V(String, SubStr)                         \
545     V(Symbol, Constructor)                    \
546     V(Symbol, ToString)                       \
547     V(Symbol, ValueOf)                        \
548     V(Symbol, For)                            \
549     V(Symbol, KeyFor)                         \
550     V(Symbol, DescriptionGetter)              \
551     V(Symbol, ThisSymbolValue)                \
552     V(Symbol, ToPrimitive)                    \
553     V(Symbol, SymbolDescriptiveString)        \
554     V(TypedArray, BaseConstructor)            \
555     V(TypedArray, From)                       \
556     V(TypedArray, Of)                         \
557     V(TypedArray, Species)                    \
558     V(TypedArray, GetBuffer)                  \
559     V(TypedArray, GetByteLength)              \
560     V(TypedArray, GetByteOffset)              \
561     V(TypedArray, CopyWithin)                 \
562     V(TypedArray, Entries)                    \
563     V(TypedArray, Every)                      \
564     V(TypedArray, Filter)                     \
565     V(TypedArray, ForEach)                    \
566     V(TypedArray, Join)                       \
567     V(TypedArray, Keys)                       \
568     V(TypedArray, GetLength)                  \
569     V(TypedArray, Map)                        \
570     V(TypedArray, Set)                        \
571     V(TypedArray, Slice)                      \
572     V(TypedArray, Sort)                       \
573     V(TypedArray, Subarray)                   \
574     V(TypedArray, Values)                     \
575     V(TypedArray, ToStringTag)                \
576     V(WeakMap, Constructor)                   \
577     V(WeakMap, Delete)                        \
578     V(WeakMap, Get)                           \
579     V(WeakMap, Has)                           \
580     V(WeakMap, Set)                           \
581     V(WeakSet, Constructor)                   \
582     V(WeakSet, Delete)                        \
583     V(WeakSet, Add)                           \
584     V(WeakSet, Has)                           \
585     V(WeakRef, Constructor)                   \
586     V(WeakRef, Deref)                         \
587     V(FinalizationRegistry, Constructor)      \
588     V(FinalizationRegistry, Register)         \
589     V(FinalizationRegistry, Unregister)       \
590     V(ArrayList, Constructor)                 \
591     V(ArrayList, Add)                         \
592     V(ArrayList, Insert)                      \
593     V(ArrayList, Clear)                       \
594     V(ArrayList, Clone)                       \
595     V(ArrayList, Has)                         \
596     V(ArrayList, GetCapacity)                 \
597     V(ArrayList, IncreaseCapacityTo)          \
598     V(ArrayList, TrimToCurrentLength)         \
599     V(ArrayList, GetIndexOf)                  \
600     V(ArrayList, IsEmpty)                     \
601     V(ArrayList, GetLastIndexOf)              \
602     V(ArrayList, RemoveByIndex)               \
603     V(ArrayList, Remove)                      \
604     V(ArrayList, RemoveByRange)               \
605     V(ArrayList, ReplaceAllElements)          \
606     V(ArrayList, Sort)                        \
607     V(ArrayList, SubArrayList)                \
608     V(ArrayList, ConvertToArray)              \
609     V(ArrayList, ForEach)                     \
610     V(ArrayList, GetIteratorObj)              \
611     V(ArrayList, Get)                         \
612     V(ArrayList, Set)                         \
613     V(ArrayList, GetSize)                     \
614     V(LightWeightMap, Constructor)            \
615     V(LightWeightMap, HasAll)                 \
616     V(LightWeightMap, HasKey)                 \
617     V(LightWeightMap, HasValue)               \
618     V(LightWeightMap, IncreaseCapacityTo)     \
619     V(LightWeightMap, Entries)                \
620     V(LightWeightMap, Get)                    \
621     V(LightWeightMap, GetIndexOfKey)          \
622     V(LightWeightMap, GetIndexOfValue)        \
623     V(LightWeightMap, IsEmpty)                \
624     V(LightWeightMap, GetKeyAt)               \
625     V(LightWeightMap, Keys)                   \
626     V(LightWeightMap, SetAll)                 \
627     V(LightWeightMap, Set)                    \
628     V(LightWeightMap, Remove)                 \
629     V(LightWeightMap, RemoveAt)               \
630     V(LightWeightMap, Clear)                  \
631     V(LightWeightMap, SetValueAt)             \
632     V(LightWeightMap, ForEach)                \
633     V(LightWeightMap, ToString)               \
634     V(LightWeightMap, GetValueAt)             \
635     V(LightWeightMap, Length)                 \
636     V(LightWeightSet, Constructor)            \
637     V(LightWeightSet, Add)                    \
638     V(LightWeightSet, AddAll)                 \
639     V(LightWeightSet, IsEmpty)                \
640     V(LightWeightSet, GetValueAt)             \
641     V(LightWeightSet, HasAll)                 \
642     V(LightWeightSet, Has)                    \
643     V(LightWeightSet, HasHash)                \
644     V(LightWeightSet, Equal)                  \
645     V(LightWeightSet, IncreaseCapacityTo)     \
646     V(LightWeightSet, GetIteratorObj)         \
647     V(LightWeightSet, Values)                 \
648     V(LightWeightSet, Entries)                \
649     V(LightWeightSet, ForEach)                \
650     V(LightWeightSet, GetIndexOf)             \
651     V(LightWeightSet, Remove)                 \
652     V(LightWeightSet, RemoveAt)               \
653     V(LightWeightSet, Clear)                  \
654     V(LightWeightSet, ToString)               \
655     V(LightWeightSet, ToArray)                \
656     V(LightWeightSet, GetSize)                \
657     V(PlainArray, Constructor)                \
658     V(PlainArray, Add)                        \
659     V(PlainArray, Clear)                      \
660     V(PlainArray, Clone)                      \
661     V(PlainArray, Has)                        \
662     V(PlainArray, Get)                        \
663     V(PlainArray, GetIteratorObj)             \
664     V(PlainArray, ForEach)                    \
665     V(PlainArray, ToString)                   \
666     V(PlainArray, GetIndexOfKey)              \
667     V(PlainArray, GetIndexOfValue)            \
668     V(PlainArray, IsEmpty)                    \
669     V(PlainArray, GetKeyAt)                   \
670     V(PlainArray, Remove)                     \
671     V(PlainArray, RemoveAt)                   \
672     V(PlainArray, RemoveRangeFrom)            \
673     V(PlainArray, SetValueAt)                 \
674     V(PlainArray, GetValueAt)                 \
675     V(PlainArray, GetSize)                    \
676     V(HashMap, Constructor)                   \
677     V(HashMap, HasKey)                        \
678     V(HashMap, HasValue)                      \
679     V(HashMap, Replace)                       \
680     V(HashMap, Keys)                          \
681     V(HashMap, Values)                        \
682     V(HashMap, Entries)                       \
683     V(HashMap, ForEach)                       \
684     V(HashMap, Set)                           \
685     V(HashMap, SetAll)                        \
686     V(HashMap, Remove)                        \
687     V(HashMap, Get)                           \
688     V(HashMap, Clear)                         \
689     V(HashMap, GetLength)                     \
690     V(HashMap, IsEmpty)                       \
691     V(HashSet, Constructor)                   \
692     V(HashSet, IsEmpty)                       \
693     V(HashSet, Has)                           \
694     V(HashSet, Add)                           \
695     V(HashSet, Remove)                        \
696     V(HashSet, Clear)                         \
697     V(HashSet, GetLength)                     \
698     V(HashSet, Values)                        \
699     V(HashSet, Entries)                       \
700     V(HashSet, ForEach)                       \
701     V(TreeMap, Constructor)                   \
702     V(TreeMap, HasKey)                        \
703     V(TreeMap, HasValue)                      \
704     V(TreeMap, GetFirstKey)                   \
705     V(TreeMap, GetLastKey)                    \
706     V(TreeMap, Set)                           \
707     V(TreeMap, Get)                           \
708     V(TreeMap, SetAll)                        \
709     V(TreeMap, Remove)                        \
710     V(TreeMap, Clear)                         \
711     V(TreeMap, GetLowerKey)                   \
712     V(TreeMap, GetHigherKey)                  \
713     V(TreeMap, Replace)                       \
714     V(TreeMap, IsEmpty)                       \
715     V(TreeMap, GetLength)                     \
716     V(TreeMap, Keys)                          \
717     V(TreeMap, Values)                        \
718     V(TreeMap, Entries)                       \
719     V(TreeMap, ForEach)                       \
720     V(TreeSet, Constructor)                   \
721     V(TreeSet, Add)                           \
722     V(TreeSet, Remove)                        \
723     V(TreeSet, Clear)                         \
724     V(TreeSet, Has)                           \
725     V(TreeSet, GetFirstValue)                 \
726     V(TreeSet, GetLastValue)                  \
727     V(TreeSet, GetLowerValue)                 \
728     V(TreeSet, GetHigherValue)                \
729     V(TreeSet, PopFirst)                      \
730     V(TreeSet, PopLast)                       \
731     V(TreeSet, IsEmpty)                       \
732     V(TreeSet, GetLength)                     \
733     V(TreeSet, Values)                        \
734     V(TreeSet, ForEach)                       \
735     V(TreeSet, Entries)                       \
736     V(Deque, Constructor)                     \
737     V(Deque, InsertFront)                     \
738     V(Deque, InsertEnd)                       \
739     V(Deque, GetFirst)                        \
740     V(Deque, GetLast)                         \
741     V(Deque, GetFront)                        \
742     V(Deque, GetTail)                         \
743     V(Deque, Has)                             \
744     V(Deque, PopFirst)                        \
745     V(Deque, PopLast)                         \
746     V(Deque, ForEach)                         \
747     V(Deque, GetIteratorObj)                  \
748     V(Deque, GetSize)                         \
749     V(Stack, Constructor)                     \
750     V(Stack, Iterator)                        \
751     V(Stack, IsEmpty)                         \
752     V(Stack, Push)                            \
753     V(Stack, Peek)                            \
754     V(Stack, Pop)                             \
755     V(Stack, Locate)                          \
756     V(Stack, ForEach)                         \
757     V(Stack, GetLength)                       \
758     V(Vector, Constructor)                    \
759     V(Vector, Add)                            \
760     V(Vector, Insert)                         \
761     V(Vector, SetLength)                      \
762     V(Vector, GetCapacity)                    \
763     V(Vector, IncreaseCapacityTo)             \
764     V(Vector, Get)                            \
765     V(Vector, GetIndexOf)                     \
766     V(Vector, GetIndexFrom)                   \
767     V(Vector, IsEmpty)                        \
768     V(Vector, GetLastElement)                 \
769     V(Vector, GetLastIndexOf)                 \
770     V(Vector, GetLastIndexFrom)               \
771     V(Vector, Remove)                         \
772     V(Vector, RemoveByIndex)                  \
773     V(Vector, RemoveByRange)                  \
774     V(Vector, Set)                            \
775     V(Vector, SubVector)                      \
776     V(Vector, ToString)                       \
777     V(Vector, GetSize)                        \
778     V(Vector, ForEach)                        \
779     V(Vector, ReplaceAllElements)             \
780     V(Vector, Has)                            \
781     V(Vector, Sort)                           \
782     V(Vector, Clear)                          \
783     V(Vector, Clone)                          \
784     V(Vector, CopyToArray)                    \
785     V(Vector, ConvertToArray)                 \
786     V(Vector, GetFirstElement)                \
787     V(Vector, TrimToCurrentLength)            \
788     V(Vector, GetIteratorObj)                 \
789     V(Queue, Constructor)                     \
790     V(Queue, Add)                             \
791     V(Queue, GetFirst)                        \
792     V(Queue, Pop)                             \
793     V(Queue, ForEach)                         \
794     V(Queue, GetIteratorObj)                  \
795     V(Queue, GetSize)                         \
796     V(List, Constructor)                      \
797     V(List, Add)                              \
798     V(List, GetFirst)                         \
799     V(List, GetLast)                          \
800     V(List, Insert)                           \
801     V(List, Clear)                            \
802     V(List, RemoveByIndex)                    \
803     V(List, Remove)                           \
804     V(List, Has)                              \
805     V(List, IsEmpty)                          \
806     V(List, Get)                              \
807     V(List, GetIndexOf)                       \
808     V(List, GetLastIndexOf)                   \
809     V(List, Set)                              \
810     V(List, ForEach)                          \
811     V(List, ReplaceAllElements)               \
812     V(List, GetIteratorObj)                   \
813     V(List, Equal)                            \
814     V(List, Sort)                             \
815     V(List, ConvertToArray)                   \
816     V(List, GetSubList)                       \
817     V(List, Length)                           \
818     V(LinkedList, Constructor)                \
819     V(LinkedList, Length)                     \
820     V(LinkedList, Add)                        \
821     V(LinkedList, GetFirst)                   \
822     V(LinkedList, GetLast)                    \
823     V(LinkedList, Insert)                     \
824     V(LinkedList, AddFirst)                   \
825     V(LinkedList, Clear)                      \
826     V(LinkedList, Clone)                      \
827     V(LinkedList, Has)                        \
828     V(LinkedList, Get)                        \
829     V(LinkedList, GetIndexOf)                 \
830     V(LinkedList, GetLastIndexOf)             \
831     V(LinkedList, RemoveByIndex)              \
832     V(LinkedList, Remove)                     \
833     V(LinkedList, RemoveFirst)                \
834     V(LinkedList, RemoveLast)                 \
835     V(LinkedList, RemoveFirstFound)           \
836     V(LinkedList, RemoveLastFound)            \
837     V(LinkedList, Set)                        \
838     V(LinkedList, ConvertToArray)             \
839     V(LinkedList, ForEach)                    \
840     V(LinkedList, GetIteratorObj)
841 
842 #define ABSTRACT_OPERATION_LIST(V) \
843     V(JSTaggedValue, ToString)     \
844 
845 #define MEM_ALLOCATE_AND_GC_LIST(V)  \
846     V(FullGC_RunPhases)              \
847     V(PartialGC_RunPhases)               \
848     V(STWYoungGC_RunPhases)          \
849     V(ConcurrentMarking)             \
850     V(ConcurrentMarkingInitialize)   \
851     V(WaitConcurrentMarkingFinished) \
852     V(ReMarking)                     \
853     V(ConcurrentSweepingInitialize)  \
854     V(ConcurrentSweepingWait)        \
855     V(ParallelEvacuationInitialize)  \
856     V(ParallelEvacuation)            \
857     V(ParallelUpdateReference)       \
858     V(WaitUpdateFinished)            \
859     V(UpdateRoot)                    \
860     V(UpdateWeakReference)           \
861     V(ParallelEvacuator)             \
862     V(ParallelEvacuatorInitialize)   \
863     V(ParallelEvacuatorFinalize)     \
864     V(HugeSpaceExpand)               \
865     V(NonMovableSpaceExpand)         \
866     V(HeapPrepare)                   \
867 
868 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
869 #define INTERPRETER_CALLER_ID(name) INTERPRETER_ID_##name,
870 #define RUNTIME_CALLER_ID(name) RUNTIME_ID_##name,
871 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
872 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
873 #define BUILTINS_API_ID(class, name) BUILTINS_ID_##class##_##name,
874 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
875 #define ABSTRACT_OPERATION_ID(class, name) ABSTRACT_ID_##class##_##name,
876 
877 #define MEM_ALLOCATE_AND_GC_ID(name) MEM_ID##name,
878 
879 enum EcmaRuntimeCallerId {
880     INTERPRETER_CALLER_LIST(INTERPRETER_CALLER_ID) BUILTINS_API_LIST(BUILTINS_API_ID)
881     ABSTRACT_OPERATION_LIST(ABSTRACT_OPERATION_ID)
882     MEM_ALLOCATE_AND_GC_LIST(MEM_ALLOCATE_AND_GC_ID)
883 #define DEF_RUNTIME_ID(name) RUNTIME_ID_##name,
884     RUNTIME_STUB_WITH_GC_LIST(DEF_RUNTIME_ID)
885 #undef DEF_RUNTIME_ID
886     RUNTIME_CALLER_NUMBER,
887 };
888 
889 #if ECMASCRIPT_ENABLE_INTERPRETER_RUNTIME_STAT
890 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
891 #define INTERPRETER_TRACE(thread, name)                                                        \
892     [[maybe_unused]] JSThread *_js_thread_ = thread;                                           \
893     [[maybe_unused]] EcmaRuntimeStat *_run_stat_ = _js_thread_->GetEcmaVM()->GetRuntimeStat(); \
894     RuntimeTimerScope interpret_##name##_scope_(INTERPRETER_CALLER_ID(name) _run_stat_)
895 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
896 #define RUNTIME_TRACE(thread, name)                                                            \
897     [[maybe_unused]] JSThread *_js_thread_ = thread;                                           \
898     [[maybe_unused]] EcmaRuntimeStat *_run_stat_ = _js_thread_->GetEcmaVM()->GetRuntimeStat(); \
899     RuntimeTimerScope interpret_##name##_scope_(RUNTIME_CALLER_ID(name) _run_stat_);           \
900     [[maybe_unused]] RuntimeStateScope _runtime_state_##name##_scope_(_js_thread_)
901 #else
902 #define INTERPRETER_TRACE(thread, name) static_cast<void>(0) // NOLINT(cppcoreguidelines-macro-usage)
903 #if defined(ECMASCRIPT_SUPPORT_CPUPROFILER)
904 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
905 #define RUNTIME_TRACE(thread, name)                                                            \
906     [[maybe_unused]] JSThread *_js_thread_ = thread;                                           \
907     [[maybe_unused]] RuntimeStateScope _runtime_state_##name##_scope_(_js_thread_)
908 #else
909 #define RUNTIME_TRACE(thread, name) static_cast<void>(0) // NOLINT(cppcoreguidelines-macro-usage)
910 #endif // defined(ECMASCRIPT_SUPPORT_CPUPROFILER)
911 #endif // ECMASCRIPT_ENABLE_INTERPRETER_RUNTIME_STAT
912 
913 #if ECMASCRIPT_ENABLE_BUILTINS_RUNTIME_STAT
914 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
915 #define BUILTINS_API_TRACE(thread, class, name)                                                \
916     [[maybe_unused]] JSThread *_js_thread_ = thread;                                           \
917     [[maybe_unused]] EcmaRuntimeStat *_run_stat_ = _js_thread_->GetEcmaVM()->GetRuntimeStat(); \
918     RuntimeTimerScope builtins_##class##name##_scope_(BUILTINS_API_ID(class, name) _run_stat_)
919 
920 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
921 #define ABSTRACT_OPERATION_TRACE(thread, class, name)                                          \
922     [[maybe_unused]] JSThread *_js_thread_ = thread;                                           \
923     [[maybe_unused]] EcmaRuntimeStat *_run_stat_ = _js_thread_->GetEcmaVM()->GetRuntimeStat(); \
924     RuntimeTimerScope abstract_##class##name##_scope_(ABSTRACT_OPERATION_ID(class, name) _run_stat_)
925 #else
926 #define BUILTINS_API_TRACE(thread, class, name) static_cast<void>(0) // NOLINT(cppcoreguidelines-macro-usage)
927 #define ABSTRACT_OPERATION_TRACE(class, name) static_cast<void>(0) // NOLINT(cppcoreguidelines-macro-usage)
928 #endif // ECMASCRIPT_ENABLE_BUILTINS_RUNTIME_STAT
929 
930 #if ECMASCRIPT_ENABLE_ALLOCATE_AND_GC_RUNTIME_STAT
931 #define MEM_ALLOCATE_AND_GC_TRACE(vm, name)             \
932     CHECK_JS_THREAD(vm);                                \
933     EcmaRuntimeStat *_run_stat_ = vm->GetRuntimeStat(); \
934     RuntimeTimerScope mem_##name##_scope_(MEM_ALLOCATE_AND_GC_ID(name) _run_stat_)
935 #else
936 #define MEM_ALLOCATE_AND_GC_TRACE(vm, name) static_cast<void>(0) // NOLINT(cppcoreguidelines-macro-usage)
937 #endif // ECMASCRIPT_ENABLE_ALLOCATE_AND_GC_RUNTIME_STAT
938 }  // namespace panda::ecmascript
939 #endif
940