• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2024 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_COMPILER_BUILTINS_CALL_SIGNATURE_H
17 #define ECMASCRIPT_COMPILER_BUILTINS_CALL_SIGNATURE_H
18 
19 #include <map>
20 #include <unordered_map>
21 #include <unordered_set>
22 
23 #include "ecmascript/compiler/builtins/builtins_call_signature_id_properties.h"
24 #include "ecmascript/base/config.h"
25 #include "ecmascript/compiler/call_signature.h"
26 #include "ecmascript/global_env_constants.h"
27 #include "ecmascript/global_env_fields.h"
28 
29 namespace panda::ecmascript::kungfu {
30 
31 class BuiltinsStubCSigns {
32 public:
33     using ID = stubcsigns::BuiltinsStubCSignsID;
34     static_assert(ID::NONE == 0);
35     static constexpr int NONE = ID::NONE;
36     static constexpr int NUM_OF_BUILTINS_STUBS = ID::NUM_OF_BUILTINS_STUBS;
37 
38     enum CALL_SIGNATURE_ID {
39 #define DEF_STUB_ID(name) ID_##name,
40 #define DEF_STUB_ID_DYN(name, type, ...) ID_##type##name,
41         PADDING_BUILTINS_STUB_LIST(DEF_STUB_ID)
42         BUILTINS_STUB_LIST(DEF_STUB_ID, DEF_STUB_ID_DYN, DEF_STUB_ID)
43 #undef DEF_STUB_ID_DYN
44 #undef DEF_STUB_ID
45 #define DEF_STUB_ID(name) ID_##name##StwCopy,
46 #define DEF_STUB_ID_DYN(name, type, ...) ID_##type##name##StwCopy,
47         BUILTINS_STW_COPY_STUB_LIST(DEF_STUB_ID, DEF_STUB_ID_DYN, DEF_STUB_ID)
48 #undef DEF_STUB_ID_DYN
49 #undef DEF_STUB_ID
50         NUM_OF_BUILTINS_STUBS_EXTEND,
51     };
52     static_assert(CALL_SIGNATURE_ID::ID_NONE == 0);
53 #define ASSERT_ID_EQUAL(name) \
54     static_assert(static_cast<uint32_t>(ID::name) == static_cast<uint32_t>(CALL_SIGNATURE_ID::ID_##name));
55 
56 #define ASSERT_ID_EQUAL_DYN(name, type, ...) \
57     static_assert(static_cast<uint32_t>(ID::type##name) == static_cast<uint32_t>(CALL_SIGNATURE_ID::ID_##type##name));
58 
59     BUILTINS_STUB_LIST(ASSERT_ID_EQUAL, ASSERT_ID_EQUAL_DYN, ASSERT_ID_EQUAL)
60 #undef ASSERT_ID_EQUAL_DYN
61 #undef ASSERT_ID_EQUAL
62 
63     static void Initialize();
64 
65     static void GetCSigns(std::vector<const CallSignature*>& callSigns);
66 
Get(size_t index)67     static const CallSignature *Get(size_t index)
68     {
69         ASSERT(index < NUM_OF_BUILTINS_STUBS_EXTEND);
70         return &callSigns_[index];
71     }
72 
GetName(int index)73     static const std::string &GetName(int index)
74     {
75         ASSERT(index < NUM_OF_BUILTINS_STUBS_EXTEND);
76         return callSigns_[index].GetName();
77     }
78 
BuiltinsCSign()79     static const CallSignature* BuiltinsCSign()
80     {
81         return &builtinsCSign_;
82     }
83 
BuiltinsWithArgvCSign()84     static const CallSignature* BuiltinsWithArgvCSign()
85     {
86         return &builtinsWithArgvCSign_;
87     }
88 
IsFastBuiltin(ID builtinId)89     static bool IsFastBuiltin(ID builtinId)
90     {
91         return builtinId > NONE && builtinId < NUM_OF_BUILTINS_STUBS;
92     }
93 
IsTypedBuiltin(ID builtinId)94     static bool IsTypedBuiltin(ID builtinId)
95     {
96         return (BuiltinsStubCSigns::ID::StringLocaleCompare == builtinId) ||
97                (BuiltinsStubCSigns::ID::StringIteratorProtoNext == builtinId) ||
98                (BuiltinsStubCSigns::ID::ArrayIteratorProtoNext == builtinId) ||
99                (BuiltinsStubCSigns::ID::MapIteratorProtoNext == builtinId) ||
100                (BuiltinsStubCSigns::ID::SetIteratorProtoNext == builtinId) ||
101                (BuiltinsStubCSigns::ID::ArraySort == builtinId) ||
102                (BuiltinsStubCSigns::ID::ArrayConcat == builtinId) ||
103                (BuiltinsStubCSigns::ID::GlobalDecodeURIComponent == builtinId) ||
104                ((BuiltinsStubCSigns::ID::TYPED_BUILTINS_FIRST <= builtinId) &&
105                (builtinId <= BuiltinsStubCSigns::ID::TYPED_BUILTINS_LAST)) ||
106                IsAOTCallThisBuiltin(builtinId);
107     }
108 
IsAOTCallThisBuiltin(ID builtinId)109     static bool IsAOTCallThisBuiltin([[maybe_unused]]ID builtinId)
110     {
111 #define BUILTINS_ID(METHOD, OBJECT, ...)  ID::OBJECT##METHOD,
112         static std::unordered_set<BuiltinsStubCSigns::ID> callThisBuiltinsIds = {
113             BUILTINS_METHOD_STUB_LIST(BUILTINS_ID, BUILTINS_ID, BUILTINS_ID, BUILTINS_ID)
114         };
115 #undef BUILTINS_ID
116 #if ENABLE_NEXT_OPTIMIZATION
117         return callThisBuiltinsIds.count(builtinId);
118 #else
119         return false;
120 #endif
121     }
122 
IsTypedInlineBuiltin(ID builtinId)123     static bool IsTypedInlineBuiltin(ID builtinId)
124     {
125         if (ID::TYPED_BUILTINS_INLINE_FIRST <= builtinId && builtinId <= ID::TYPED_BUILTINS_INLINE_LAST) {
126             return true;
127         }
128         if (BuiltinsStubCSigns::ID::DataViewSetInt32 <= builtinId &&
129             builtinId <= BuiltinsStubCSigns::ID::DataViewSetFloat64) {
130             return true;
131         }
132         // NOTE(schernykh): try to remove this switch and move StringFromCharCode to TYPED_BUILTINS_INLINE list
133         switch (builtinId) {
134             case BuiltinsStubCSigns::ID::ArraySort:
135             case BuiltinsStubCSigns::ID::StringFromCharCode:
136             case BuiltinsStubCSigns::ID::StringCharCodeAt:
137             case BuiltinsStubCSigns::ID::StringSubstring:
138             case BuiltinsStubCSigns::ID::StringSubStr:
139             case BuiltinsStubCSigns::ID::StringSlice:
140             case BuiltinsStubCSigns::ID::MapGet:
141             case BuiltinsStubCSigns::ID::MapHas:
142             case BuiltinsStubCSigns::ID::MapKeys:
143             case BuiltinsStubCSigns::ID::MapValues:
144             case BuiltinsStubCSigns::ID::MapEntries:
145             case BuiltinsStubCSigns::ID::SetHas:
146             case BuiltinsStubCSigns::ID::MapDelete:
147             case BuiltinsStubCSigns::ID::SetDelete:
148             case BuiltinsStubCSigns::ID::TypedArrayEntries:
149             case BuiltinsStubCSigns::ID::TypedArrayKeys:
150             case BuiltinsStubCSigns::ID::TypedArrayValues:
151             case BuiltinsStubCSigns::ID::SetValues:
152             case BuiltinsStubCSigns::ID::SetEntries:
153             case BuiltinsStubCSigns::ID::MapClear:
154             case BuiltinsStubCSigns::ID::SetClear:
155             case BuiltinsStubCSigns::ID::SetAdd:
156             case BuiltinsStubCSigns::ID::NumberParseFloat:
157             case BuiltinsStubCSigns::ID::NumberParseInt:
158             case BuiltinsStubCSigns::ID::NumberIsFinite:
159             case BuiltinsStubCSigns::ID::NumberIsNaN:
160             case BuiltinsStubCSigns::ID::NumberIsInteger:
161             case BuiltinsStubCSigns::ID::NumberIsSafeInteger:
162             case BuiltinsStubCSigns::ID::ObjectIs:
163             case BuiltinsStubCSigns::ID::ObjectGetPrototypeOf:
164             case BuiltinsStubCSigns::ID::ObjectGetProto:
165             case BuiltinsStubCSigns::ID::ObjectCreate:
166             case BuiltinsStubCSigns::ID::ObjectIsPrototypeOf:
167             case BuiltinsStubCSigns::ID::ObjectHasOwnProperty:
168             case BuiltinsStubCSigns::ID::ReflectGetPrototypeOf:
169             case BuiltinsStubCSigns::ID::ReflectGet:
170             case BuiltinsStubCSigns::ID::ReflectHas:
171             case BuiltinsStubCSigns::ID::ReflectConstruct:
172             case BuiltinsStubCSigns::ID::ReflectApply:
173             case BuiltinsStubCSigns::ID::FunctionPrototypeApply:
174             case BuiltinsStubCSigns::ID::FunctionPrototypeBind:
175             case BuiltinsStubCSigns::ID::FunctionPrototypeCall:
176             case BuiltinsStubCSigns::ID::FunctionPrototypeHasInstance:
177             case BuiltinsStubCSigns::ID::ArrayIndexOf:
178             case BuiltinsStubCSigns::ID::ArrayIncludes:
179             case BuiltinsStubCSigns::ID::ArrayValues:
180             case BuiltinsStubCSigns::ID::ArrayForEach:
181             case BuiltinsStubCSigns::ID::ArrayFind:
182             case BuiltinsStubCSigns::ID::ArrayFindIndex:
183             case BuiltinsStubCSigns::ID::ArrayFilter:
184             case BuiltinsStubCSigns::ID::ArrayMap:
185             case BuiltinsStubCSigns::ID::ArraySome:
186             case BuiltinsStubCSigns::ID::ArrayEvery:
187             case BuiltinsStubCSigns::ID::ArrayPop:
188             case BuiltinsStubCSigns::ID::ArraySlice:
189             case BuiltinsStubCSigns::ID::ArrayPush:
190                 return true;
191             default:
192                 return false;
193         }
194         return false;
195     }
196 
IsTypedBuiltinNumber(ID builtinId)197     static bool IsTypedBuiltinNumber(ID builtinId)
198     {
199         return BuiltinsStubCSigns::ID::NumberConstructor == builtinId;
200     }
201 
IsTypedBuiltinGlobal(ID builtinId)202     static bool IsTypedBuiltinGlobal(ID builtinId)
203     {
204         return BuiltinsStubCSigns::ID::GlobalDecodeURIComponent == builtinId;
205     }
206 
IsTypedBuiltinCallThis0(ID builtinId)207     static bool IsTypedBuiltinCallThis0(ID builtinId)
208     {
209         switch (builtinId) {
210             case BuiltinsStubCSigns::ID::MapIteratorProtoNext:
211             case BuiltinsStubCSigns::ID::SetIteratorProtoNext:
212             case BuiltinsStubCSigns::ID::StringIteratorProtoNext:
213             case BuiltinsStubCSigns::ID::ArrayIteratorProtoNext:
214             case BuiltinsStubCSigns::ID::IteratorProtoReturn:
215             case BuiltinsStubCSigns::ID::ArrayConcat:
216             case BuiltinsStubCSigns::ID::ArraySort:
217                 return true;
218             default:
219                 return IsAOTCallThisBuiltin(builtinId);
220         }
221     }
222 
IsTypedBuiltinCallThis1(ID builtinId)223     static bool IsTypedBuiltinCallThis1(ID builtinId)
224     {
225         switch (builtinId) {
226             case BuiltinsStubCSigns::ID::ArrayConcat:
227             case BuiltinsStubCSigns::ID::JsonStringify:
228             case BuiltinsStubCSigns::ID::StringLocaleCompare:
229                 return true;
230             default:
231                 return IsAOTCallThisBuiltin(builtinId);
232         }
233     }
234 
IsTypedBuiltinCallThis2(ID builtinId)235     static bool IsTypedBuiltinCallThis2(ID builtinId)
236     {
237         return IsAOTCallThisBuiltin(builtinId);
238     }
239 
IsTypedBuiltinCallThis3(ID builtinId)240     static bool IsTypedBuiltinCallThis3(ID builtinId)
241     {
242         switch (builtinId) {
243             case BuiltinsStubCSigns::ID::StringLocaleCompare:
244                 return true;
245             default:
246                 return IsAOTCallThisBuiltin(builtinId);
247         }
248     }
249 
IsSideEffectBuiltin(ID builtinId)250     static bool IsSideEffectBuiltin(ID builtinId)
251     {
252         switch (builtinId) {
253             case BuiltinsStubCSigns::ID::StringLocaleCompare:
254                 return false;
255             default:
256                 return true;
257         }
258     }
259 
CheckBuiltinsIdInvalid(ID builtinId)260     static bool CheckBuiltinsIdInvalid(ID builtinId)
261     {
262         auto result = kungfu::BuiltinsStubCSigns::GetGlobalEnvFieldIndex(builtinId);
263         return result == GlobalEnvField::INVALID;
264     }
265 
266     static size_t GetGlobalEnvIndex(ID builtinId);
267 
GetBuiltinName(ID id)268     static std::string GetBuiltinName(ID id)
269     {
270         // Note: this function will be refactored soon in future.
271         using namespace stubcsigns;
272         static const std::map<BuiltinsStubCSigns::ID, const std::string> builtinId2Str = {
273             {MathAcos, "Math.acos"},
274             {MathAcosh, "Math.acosh"},
275             {MathAsin, "Math.asin"},
276             {MathAsinh, "Math.asinh"},
277             {MathAtan, "Math.atan"},
278             {MathAtan2, "Math.atan2"},
279             {MathAtanh, "Math.atanh"},
280             {MathCos, "Math.cos"},
281             {MathCosh, "Math.cosh"},
282             {MathSign, "Math.sign"},
283             {MathSin, "Math.sin"},
284             {MathSinh, "Math.sinh"},
285             {MathTan, "Math.tan"},
286             {MathTanh, "Math.tanh"},
287             {MathLog, "Math.log"},
288             {MathLog2, "Math.log2"},
289             {MathLog10, "Math.log10"},
290             {MathLog1p, "Math.log1p"},
291             {MathExp, "Math.exp"},
292             {MathExpm1, "Math.expm1"},
293             {MathClz32, "Math.clz32"},
294             {MathSqrt, "Math.sqrt"},
295             {MathCbrt, "Math.cbrt"},
296             {MathAbs, "Math.abs"},
297             {MathPow, "Math.pow"},
298             {MathTrunc, "Math.trunc"},
299             {MathRound, "Math.round"},
300             {MathFRound, "Math.fround"},
301             {MathCeil, "Math.ceil"},
302             {MathFloor, "Math.floor"},
303             {MathImul, "Math.imul"},
304             {MathMax, "Math.max"},
305             {MathMin, "Math.min"},
306             {DateGetTime, "Date.prototype.getTime"},
307             {DateNow, "Date.now"},
308             {TypedArrayEntries, "TypedArray.entries"},
309             {TypedArrayKeys, "TypedArray.keys"},
310             {TypedArrayValues, "TypedArray.values"},
311             {GlobalIsFinite, "isFinite"},
312             {GlobalIsNan, "isNan"},
313             {BigIntAsIntN, "BigInt.asIntN"},
314             {BigIntAsUintN, "BigInt.asUintN"},
315             {MapGet, "Map.get"},
316             {MapHas, "Map.has"},
317             {MapKeys, "Map.keys"},
318             {MapValues, "Map.values"},
319             {MapEntries, "Map.entries"},
320             {SetValues, "Set.values"},
321             {SetEntries, "Set.entries"},
322             {SetHas, "Set.has"},
323             {MapDelete, "Map.delete"},
324             {SetDelete, "Set.delete"},
325             {MapClear, "Map.clear"},
326             {SetClear, "Set.clear"},
327             {SetAdd, "Set.add"},
328             {BigIntConstructor, "BigInt"},
329             {NumberParseFloat, "Number.parseFloat"},
330             {NumberIsInteger, "Number.isInteger"},
331             {NumberIsSafeInteger, "Number.isSafeInteger"},
332             {NumberParseInt, "Number.parseInt"},
333             {StringCharCodeAt, "String.prototype.charCodeAt"},
334             {StringSubstring, "String.prototype.substring"},
335             {StringSubStr, "String.prototype.substr"},
336             {StringSlice, "String.prototype.slice"},
337             {ObjectIs, "Object.is"},
338             {ObjectGetPrototypeOf, "Object.getPrototypeOf"},
339             {ObjectGetProto, "Object.prototype.getProto"},
340             {ObjectCreate, "Object.create"},
341             {ObjectIsPrototypeOf, "Object.prototype.isPrototypeOf"},
342             {ObjectHasOwnProperty, "Object.prototype.hasOwnProperty"},
343             {ReflectGetPrototypeOf, "Reflect.getPrototypeOf"},
344             {ReflectGet, "Reflect.get"},
345             {ReflectHas, "Reflect.has"},
346             {ReflectConstruct, "Reflect.construct"},
347             {ReflectApply, "Reflect.apply"},
348             {FunctionPrototypeApply, "Function.prototype.apply"},
349             {FunctionPrototypeBind, "Function.prototype.bind"},
350             {FunctionPrototypeCall, "Function.prototype.call"},
351             {FunctionPrototypeHasInstance, "Function.prototype.hasInstance"},
352             {ArrayIncludes, "Array.prototype.includes"},
353             {ArrayIndexOf, "Array.prototype.indexOf"},
354             {ArrayEntries, "Array.prototype.entries"},
355             {ArrayValues, "Array.prototype.values"},
356             {ArrayKeys, "Array.prototype.keys"},
357             {ArrayFind, "Array.prototype.find"},
358             {ArrayFindIndex, "Array.prototype.findIndex"},
359             {ArrayForEach, "Array.prototype.foreach"},
360             {ArrayFilter, "Array.prototype.filter"},
361             {ArraySome, "Array.prototype.some"},
362             {ArrayMap, "Array.prototype.map"},
363             {ArrayEvery, "Array.prototype.every"},
364             {ArrayPop, "Array.prototype.pop"},
365             {ArrayPush, "Array.prototype.push"},
366             {ArraySlice, "Array.prototype.slice"},
367             {DataViewGetInt8, "DataView.prototype.GetInt8"},
368             {DataViewGetUint8, "DataView.prototype.GetUint8"},
369             {DataViewGetInt16, "DataView.prototype.GetInt16"},
370             {DataViewGetUint16, "DataView.prototype.GetUint16"},
371             {DataViewGetInt32, "DataView.prototype.GetInt32"},
372             {DataViewGetUint32, "DataView.prototype.GetUint32"},
373             {DataViewGetFloat32, "DataView.prototype.GetFloat32"},
374             {DataViewGetFloat64, "DataView.prototype.GetFloat64"},
375             {DataViewSetInt8, "DataView.prototype.SetInt8"},
376             {DataViewSetUint8, "DataView.prototype.SetUint8"},
377             {DataViewSetInt16, "DataView.prototype.SetInt16"},
378             {DataViewSetUint16, "DataView.prototype.SetUint16"},
379             {DataViewSetInt32, "DataView.prototype.SetInt32"},
380             {DataViewSetUint32, "DataView.prototype.SetUint32"},
381             {DataViewSetFloat32, "DataView.prototype.SetFloat32"},
382             {DataViewSetFloat64, "DataView.prototype.SetFloat64"},
383             {ArrayIteratorProtoNext, "ArrayIterator.next"},
384             {MapIteratorProtoNext, "MapIterator.next"},
385             {SetIteratorProtoNext, "SetIterator.next"},
386             {StringLocaleCompare, "String.LocaleCompare"},
387             {ArraySort, "Array.Sort"},
388         };
389         if (builtinId2Str.count(id) > 0) {
390             return builtinId2Str.at(id);
391         }
392 #define ID_TO_STRING(Method, Object, ...)  {BuiltinsStubCSigns::ID::Object##Method, #Object"."#Method},
393         static const std::unordered_map<BuiltinsStubCSigns::ID, const std::string> builtinId2Str2 = {
394             BUILTINS_METHOD_STUB_LIST(ID_TO_STRING, ID_TO_STRING, ID_TO_STRING, ID_TO_STRING)
395         };
396 #undef ID_TO_STRING
397         if (builtinId2Str2.count(id) > 0) {
398             return builtinId2Str2.at(id);
399         }
400         return "unnamed-builtin-"+std::to_string(id);
401     }
402 
GetGlobalEnvFieldIndex(ID builtinId)403     static GlobalEnvField GetGlobalEnvFieldIndex(ID builtinId)
404     {
405         ASSERT(builtinId != kungfu::BuiltinsStubCSigns::ID::INVALID);
406 #define GET_BUILTIN_GLOBAL_ENV_FIELD_INDEX(type, name, index) \
407     case kungfu::BuiltinsStubCSigns::ID::name:                \
408         return GlobalEnvField::index;
409 #define GET_BUILTIN_METHOD_STUB_INDEX_IMPL4(name, builtin, unused, index) \
410     GET_BUILTIN_GLOBAL_ENV_FIELD_INDEX(unused, builtin##name, index##_INDEX)
411 #define GET_BUILTIN_METHOD_STUB_INDEX_IMPL6(name, builtin, unused0, unused1, unused2, index) \
412     GET_BUILTIN_GLOBAL_ENV_FIELD_INDEX(unused0, builtin##name, index##_INDEX)
413         switch (builtinId) {
414             GLOBAL_ENV_INLINED_BUILTINS(GET_BUILTIN_GLOBAL_ENV_FIELD_INDEX)
415             BUILTINS_METHOD_STUB_LIST(GET_BUILTIN_METHOD_STUB_INDEX_IMPL4, GET_BUILTIN_METHOD_STUB_INDEX_IMPL4,
416                                       GET_BUILTIN_METHOD_STUB_INDEX_IMPL4, GET_BUILTIN_METHOD_STUB_INDEX_IMPL6)
417             default:
418                 LOG_ECMA(DEBUG) << "GetGlobalEnvFieldIndex Invalid Id:" << builtinId;
419                 return GlobalEnvField::INVALID;
420         }
421 #undef SET_BUILTIN_METHOD_STUB_IMPL6
422 #undef SET_BUILTIN_METHOD_STUB_IMPL4
423 #undef SET_BUILTIN_FUNCTION_CASE
424     }
425 
426 private:
427     static CallSignature callSigns_[NUM_OF_BUILTINS_STUBS_EXTEND];
428     static CallSignature builtinsCSign_;
429     static CallSignature builtinsWithArgvCSign_;
430 };
431 
432 enum class BuiltinsArgs : size_t {
433     GLUE = 0,
434     NATIVECODE,
435     FUNC,
436     NEWTARGET,
437     THISVALUE,
438     NUMARGS,
439     ARG0_OR_ARGV,
440     ARG1,
441     ARG2,
442     NUM_OF_INPUTS,
443 };
444 
445 #define BUILTINS_STUB_ID(name) (::panda::ecmascript::kungfu::BuiltinsStubCSigns::ID::name)
446 // to distinguish with the positive method offset of js function
447 #define PGO_BUILTINS_STUB_ID(name) ((-1) * (::panda::ecmascript::kungfu::BuiltinsStubCSigns::ID::name))
448 #define IS_TYPED_BUILTINS_ID(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltin(id)
449 #define IS_TYPED_INLINE_BUILTINS_ID(id) kungfu::BuiltinsStubCSigns::IsTypedInlineBuiltin(id)
450 #define IS_TYPED_BUILTINS_NUMBER_ID(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinNumber(id)
451 #define IS_TYPED_BUILTINS_GLOBAL_ID(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinGlobal(id)
452 #define IS_TYPED_BUILTINS_ID_CALL_THIS0(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis0(id)
453 #define IS_TYPED_BUILTINS_ID_CALL_THIS1(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis1(id)
454 #define IS_TYPED_BUILTINS_ID_CALL_THIS2(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis2(id)
455 #define IS_TYPED_BUILTINS_ID_CALL_THIS3(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis3(id)
456 #define GET_TYPED_ENV_FIELD_INEDX(id) kungfu::BuiltinsStubCSigns::GetGlobalEnvFieldIndex(id)
457 #define IS_INVALID_ID(id) kungfu::BuiltinsStubCSigns::CheckBuiltinsIdInvalid(id)
458 #define GET_TYPED_GLOBAL_ENV_INDEX(id) kungfu::BuiltinsStubCSigns::GetGlobalEnvIndex(id)
459 #define IS_SIDE_EFFECT_BUILTINS_ID(id) kungfu::BuiltinsStubCSigns::IsSideEffectBuiltin(id)
460 }  // namespace panda::ecmascript::kungfu
461 #endif  // ECMASCRIPT_COMPILER_BUILTINS_CALL_SIGNATURE_H
462