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 "ecmascript/base/config.h" 20 #include "ecmascript/compiler/call_signature.h" 21 22 namespace panda::ecmascript::kungfu { 23 24 #define PADDING_BUILTINS_STUB_LIST(V) \ 25 V(NONE) 26 27 // BUILTINS_STUB_LIST is shared both ASM Interpreter and AOT. 28 // AOT_BUILTINS_STUB_LIST is used in AOT only. 29 #define BUILTINS_STUB_LIST(V, D, C) \ 30 BUILTINS_METHOD_STUB_LIST(D, D, D, D) \ 31 BUILTINS_WITH_CONTAINERS_STUB_BUILDER(D) \ 32 AOT_AND_BUILTINS_STUB_LIST(V) \ 33 BUILTINS_CONSTRUCTOR_STUB_LIST(C) \ 34 BUILTINS_ARKTOOLS_STUB_BUILDER(D) 35 36 #define BUILTINS_NOSTUB_LIST(V) \ 37 V(ObjectConstructor) \ 38 V(Int8ArrayConstructor) \ 39 V(Uint8ArrayConstructor) \ 40 V(Uint8ClampedArrayConstructor) \ 41 V(Int16ArrayConstructor) \ 42 V(Uint16ArrayConstructor) \ 43 V(Int32ArrayConstructor) \ 44 V(Uint32ArrayConstructor) \ 45 V(Float32ArrayConstructor) \ 46 V(Float64ArrayConstructor) \ 47 V(BigInt64ArrayConstructor) \ 48 V(BigUint64ArrayConstructor) 49 50 #define BUILTINS_METHOD_STUB_LIST(V, T, D, K) \ 51 BUILTINS_WITH_STRING_STUB_BUILDER(V) \ 52 BUILTINS_WITH_OBJECT_STUB_BUILDER(T) \ 53 BUILTINS_WITH_ARRAY_STUB_BUILDER(V) \ 54 BUILTINS_WITH_SET_STUB_BUILDER(D) \ 55 BUILTINS_WITH_MAP_STUB_BUILDER(D) \ 56 BUILTINS_WITH_FUNCTION_STUB_BUILDER(V) \ 57 BUILTINS_WITH_NUMBER_STUB_BUILDER(T) \ 58 BUILTINS_WITH_TYPEDARRAY_STUB_BUILDER(V) \ 59 BUILTINS_WITH_DATAVIEW_STUB_BUILDER(K) \ 60 BUILTINS_WITH_REFLECT_STUB_BUILDER(T) 61 62 #define BUILTINS_WITH_STRING_STUB_BUILDER(V) \ 63 V(CharAt, String, Hole()) \ 64 V(FromCharCode, String, Hole()) \ 65 V(CharCodeAt, String, DoubleToTaggedDoublePtr(Double(base::NAN_VALUE))) \ 66 V(CodePointAt, String, Undefined()) \ 67 V(IndexOf, String, IntToTaggedPtr(Int32(-1))) \ 68 V(Substring, String, IntToTaggedPtr(Int32(-1))) \ 69 V(SubStr, String, Undefined()) \ 70 V(Replace, String, Undefined()) \ 71 V(Trim, String, Undefined()) \ 72 V(TrimStart, String, Undefined()) \ 73 V(TrimEnd, String, Undefined()) \ 74 V(TrimLeft, String, Undefined()) \ 75 V(TrimRight, String, Undefined()) \ 76 V(PadStart, String, Undefined()) \ 77 V(PadEnd, String, Undefined()) \ 78 V(Concat, String, Undefined()) \ 79 V(Slice, String, Undefined()) \ 80 V(ToLowerCase, String, Undefined()) \ 81 V(StartsWith, String, TaggedFalse()) \ 82 V(EndsWith, String, TaggedFalse()) \ 83 V(GetStringIterator, String, Undefined()) 84 85 #define BUILTINS_WITH_OBJECT_STUB_BUILDER(V) \ 86 V(ToString, Object, Undefined()) \ 87 V(Create, Object, Undefined()) \ 88 V(Assign, Object, Undefined()) \ 89 V(HasOwnProperty, Object, TaggedFalse()) \ 90 V(Keys, Object, Undefined()) \ 91 V(GetPrototypeOf, Object, Undefined()) \ 92 V(GetOwnPropertyNames, Object, Undefined()) \ 93 V(GetOwnPropertySymbols, Object, Undefined()) \ 94 V(Entries, Object, Undefined()) \ 95 V(IsFrozen, Object, Undefined()) \ 96 V(IsSealed, Object, Undefined()) \ 97 V(GetOwnPropertyDescriptors, Object, Undefined()) \ 98 V(SetPrototypeOf, Object, Undefined()) 99 100 #define BUILTINS_WITH_ARRAY_STUB_BUILDER(V) \ 101 V(With, Array, Undefined()) \ 102 V(Unshift, Array, Undefined()) \ 103 V(Shift, Array, Undefined()) \ 104 V(Concat, Array, Undefined()) \ 105 V(Filter, Array, Undefined()) \ 106 V(Find, Array, Undefined()) \ 107 V(FindIndex, Array, Undefined()) \ 108 V(From, Array, Undefined()) \ 109 V(Splice, Array, Undefined()) \ 110 V(ToSpliced, Array, Undefined()) \ 111 V(ForEach, Array, Undefined()) \ 112 V(IndexOf, Array, Undefined()) \ 113 V(LastIndexOf, Array, Undefined()) \ 114 V(Pop, Array, Undefined()) \ 115 V(Slice, Array, Undefined()) \ 116 V(Reduce, Array, Undefined()) \ 117 V(Reverse, Array, Undefined()) \ 118 V(ToReversed, Array, Undefined()) \ 119 V(Push, Array, Undefined()) \ 120 V(Values, Array, Undefined()) \ 121 V(Includes, Array, Undefined()) \ 122 V(CopyWithin, Array, Undefined()) \ 123 V(Some, Array, Undefined()) \ 124 V(Every, Array, Undefined()) \ 125 V(FindLastIndex, Array, Undefined()) \ 126 V(FindLast, Array, Undefined()) \ 127 V(ReduceRight, Array, Undefined()) \ 128 V(Map, Array, Undefined()) \ 129 V(FlatMap, Array, Undefined()) \ 130 V(ToSorted, Array, Undefined()) \ 131 V(IsArray, Array, Undefined()) 132 133 #define BUILTINS_WITH_SET_STUB_BUILDER(V) \ 134 V(Clear, Set, Undefined()) \ 135 V(Values, Set, Undefined()) \ 136 V(Entries, Set, Undefined()) \ 137 V(ForEach, Set, Undefined()) \ 138 V(Add, Set, Undefined()) \ 139 V(Delete, Set, Undefined()) \ 140 V(Has, Set, Undefined()) 141 142 #define BUILTINS_WITH_MAP_STUB_BUILDER(V) \ 143 V(Clear, Map, Undefined()) \ 144 V(Values, Map, Undefined()) \ 145 V(Entries, Map, Undefined()) \ 146 V(Keys, Map, Undefined()) \ 147 V(ForEach, Map, Undefined()) \ 148 V(Set, Map, Undefined()) \ 149 V(Delete, Map, Undefined()) \ 150 V(Has, Map, Undefined()) \ 151 V(Get, Map, Undefined()) 152 153 #define BUILTINS_WITH_FUNCTION_STUB_BUILDER(V) \ 154 V(PrototypeApply, Function, Undefined()) \ 155 V(PrototypeBind, Function, Undefined()) \ 156 V(PrototypeCall, Function, Undefined()) 157 158 #define BUILTINS_WITH_NUMBER_STUB_BUILDER(V) \ 159 V(ParseFloat, Number, Undefined()) \ 160 V(ParseInt, Number, Undefined()) \ 161 V(IsFinite, Number, Undefined()) \ 162 V(IsNaN, Number, Undefined()) \ 163 V(IsInteger, Number, Undefined()) \ 164 V(IsSafeInteger, Number, Undefined()) \ 165 V(ToString, Number, Undefined()) 166 167 #define BUILTINS_WITH_REFLECT_STUB_BUILDER(V) \ 168 V(Get, Reflect, Undefined()) 169 170 #define BUILTINS_WITH_TYPEDARRAY_STUB_BUILDER(V) \ 171 V(Reverse, TypedArray, Undefined()) \ 172 V(LastIndexOf, TypedArray, Undefined()) \ 173 V(IndexOf, TypedArray, Undefined()) \ 174 V(Find, TypedArray, Undefined()) \ 175 V(Includes, TypedArray, Undefined()) \ 176 V(CopyWithin, TypedArray, Undefined()) \ 177 V(ReduceRight, TypedArray, Undefined()) \ 178 V(Reduce, TypedArray, Undefined()) \ 179 V(Every, TypedArray, Undefined()) \ 180 V(Some, TypedArray, Undefined()) \ 181 V(Filter, TypedArray, Undefined()) \ 182 V(With, TypedArray, Undefined()) \ 183 V(Entries, TypedArray, Undefined()) \ 184 V(Keys, TypedArray, Undefined()) \ 185 V(Values, TypedArray, Undefined()) \ 186 V(Slice, TypedArray, Undefined()) \ 187 V(SubArray, TypedArray, Undefined()) \ 188 V(Sort, TypedArray, Undefined()) \ 189 V(GetByteLength, TypedArray, Undefined()) \ 190 V(GetByteOffset, TypedArray, Undefined()) \ 191 V(Set, TypedArray, Undefined()) \ 192 V(FindIndex, TypedArray, Undefined()) \ 193 V(FindLastIndex, TypedArray, Undefined()) \ 194 V(ToSorted, TypedArray, Undefined()) \ 195 V(Of, TypedArray, Undefined()) \ 196 V(Map, TypedArray, Undefined()) \ 197 V(ToReversed, TypedArray, Undefined()) 198 199 #define BUILTINS_WITH_DATAVIEW_STUB_BUILDER(V) \ 200 V(SetInt32, DataView, INT32, SetTypedValue, Undefined()) \ 201 V(SetFloat32, DataView, FLOAT32, SetTypedValue, Undefined()) \ 202 V(SetFloat64, DataView, FLOAT64, SetTypedValue, Undefined()) 203 204 #define BUILTINS_WITH_CONTAINERS_STUB_BUILDER(V) \ 205 V(ForEach, ArrayList, ContainersCommonFuncCall, ARRAYLIST_FOREACH, JS_POINTER) \ 206 V(ForEach, Deque, DequeCommonFuncCall, DEQUE_FOREACH, JS_POINTER) \ 207 V(ForEach, HashMap, ContainersHashCall, HASHMAP_FOREACH, JS_POINTER) \ 208 V(ForEach, HashSet, ContainersHashCall, HASHSET_FOREACH, JS_POINTER) \ 209 V(ForEach, LightWeightMap, ContainersLightWeightCall, LIGHTWEIGHTMAP_FOREACH, JS_POINTER) \ 210 V(ForEach, LightWeightSet, ContainersLightWeightCall, LIGHTWEIGHTSET_FOREACH, JS_POINTER) \ 211 V(ForEach, LinkedList, ContainersLinkedListCall, LINKEDLIST_FOREACH, JS_POINTER) \ 212 V(ForEach, List, ContainersLinkedListCall, LIST_FOREACH, JS_POINTER) \ 213 V(ForEach, PlainArray, ContainersCommonFuncCall, PLAINARRAY_FOREACH, JS_POINTER) \ 214 V(ForEach, Queue, QueueCommonFuncCall, QUEUE_FOREACH, JS_POINTER) \ 215 V(ForEach, Stack, ContainersCommonFuncCall, STACK_FOREACH, JS_POINTER) \ 216 V(ForEach, Vector, ContainersCommonFuncCall, VECTOR_FOREACH, JS_POINTER) \ 217 V(ReplaceAllElements, ArrayList, ContainersCommonFuncCall, ARRAYLIST_REPLACEALLELEMENTS, JS_POINTER) \ 218 V(ReplaceAllElements, Vector, ContainersCommonFuncCall, VECTOR_REPLACEALLELEMENTS, JS_POINTER) 219 220 #define BUILTINS_ARKTOOLS_STUB_BUILDER(V) \ 221 V(HashCode, ArkTools, Undefined()) 222 223 #define BUILTINS_CONSTRUCTOR_STUB_LIST(V) \ 224 V(BooleanConstructor) \ 225 V(NumberConstructor) \ 226 V(ProxyConstructor) \ 227 V(DateConstructor) \ 228 V(ArrayConstructor) \ 229 V(SetConstructor) \ 230 V(MapConstructor) 231 232 #define AOT_AND_BUILTINS_STUB_LIST(V) \ 233 V(StringLocaleCompare) \ 234 V(StringIteratorProtoNext) \ 235 V(ArraySort) 236 237 #define AOT_BUILTINS_STUB_LIST(V) \ 238 V(JsonStringify) \ 239 V(MapProtoIterator) \ 240 V(MapIteratorProtoNext) \ 241 V(SetProtoIterator) \ 242 V(SetIteratorProtoNext) \ 243 V(StringProtoIterator) \ 244 V(ArrayProtoIterator) \ 245 V(ArrayIteratorProtoNext) \ 246 V(TypeArrayProtoIterator) \ 247 V(IteratorProtoReturn) 248 249 // List of builtins which will try to be inlined in TypedNativeInlineLoweringPass 250 #define AOT_BUILTINS_INLINE_LIST(V) \ 251 V(MathAcos) \ 252 V(MathAcosh) \ 253 V(MathAsin) \ 254 V(MathAsinh) \ 255 V(MathAtan) \ 256 V(MathAtan2) \ 257 V(MathAtanh) \ 258 V(MathCos) \ 259 V(MathCosh) \ 260 V(MathSign) \ 261 V(MathSin) \ 262 V(MathSinh) \ 263 V(MathSqrt) \ 264 V(MathTan) \ 265 V(MathCbrt) \ 266 V(MathTanh) \ 267 V(MathLog) \ 268 V(MathLog2) \ 269 V(MathLog10) \ 270 V(MathLog1p) \ 271 V(MathExp) \ 272 V(MathExpm1) \ 273 V(MathClz32) \ 274 V(MathPow) \ 275 V(MathTrunc) \ 276 V(MathCeil) \ 277 V(MathFloor) \ 278 V(MathAbs) \ 279 V(MathRound) \ 280 V(MathFRound) \ 281 V(MathMin) \ 282 V(MathMax) \ 283 V(MathImul) \ 284 V(DateGetTime) \ 285 V(DateNow) \ 286 V(GlobalIsFinite) \ 287 V(GlobalIsNan) \ 288 V(BigIntConstructor) \ 289 V(ArrayBufferIsView) \ 290 V(BigIntAsIntN) \ 291 V(BigIntAsUintN) \ 292 V(DataViewGetFloat32) \ 293 V(DataViewGetFloat64) \ 294 V(DataViewGetInt8) \ 295 V(DataViewGetInt16) \ 296 V(DataViewGetInt32) \ 297 V(DataViewGetUint16) \ 298 V(DataViewGetUint32) \ 299 V(DataViewGetUint8) \ 300 V(DataViewSetInt8) \ 301 V(DataViewSetInt16) \ 302 V(DataViewSetUint8) \ 303 V(DataViewSetUint16) \ 304 V(DataViewSetUint32) \ 305 V(ObjectIs) \ 306 V(ObjectGetProto) \ 307 V(ObjectIsPrototypeOf) \ 308 V(ReflectGetPrototypeOf) \ 309 V(ReflectHas) \ 310 V(ReflectConstruct) \ 311 V(ReflectApply) \ 312 V(FunctionPrototypeHasInstance) \ 313 V(ArrayKeys) \ 314 V(ArrayEntries) \ 315 V(TYPED_BUILTINS_INLINE_FIRST = MathAcos) \ 316 V(TYPED_BUILTINS_INLINE_LAST = ArrayEntries) 317 318 class BuiltinsStubCSigns { 319 public: 320 enum ID { 321 #define DEF_STUB_ID(name) name, 322 #define DEF_STUB_ID_DYN(name, type, ...) type##name, 323 PADDING_BUILTINS_STUB_LIST(DEF_STUB_ID) 324 BUILTINS_STUB_LIST(DEF_STUB_ID, DEF_STUB_ID_DYN, DEF_STUB_ID) 325 NUM_OF_BUILTINS_STUBS, 326 BUILTINS_NOSTUB_LIST(DEF_STUB_ID) 327 AOT_BUILTINS_STUB_LIST(DEF_STUB_ID) 328 AOT_BUILTINS_INLINE_LIST(DEF_STUB_ID) 329 #undef DEF_STUB_ID_DYN 330 #undef DEF_STUB_ID 331 BUILTINS_CONSTRUCTOR_STUB_FIRST = BooleanConstructor, 332 TYPED_BUILTINS_FIRST = JsonStringify, 333 TYPED_BUILTINS_LAST = IteratorProtoReturn, 334 INVALID = 0xFFFF, 335 }; 336 static_assert(ID::NONE == 0); 337 338 static void Initialize(); 339 340 static void GetCSigns(std::vector<const CallSignature*>& callSigns); 341 Get(size_t index)342 static const CallSignature *Get(size_t index) 343 { 344 ASSERT(index < NUM_OF_BUILTINS_STUBS); 345 return &callSigns_[index]; 346 } 347 GetName(int index)348 static const std::string &GetName(int index) 349 { 350 ASSERT(index < NUM_OF_BUILTINS_STUBS); 351 return callSigns_[index].GetName(); 352 } 353 BuiltinsCSign()354 static const CallSignature* BuiltinsCSign() 355 { 356 return &builtinsCSign_; 357 } 358 BuiltinsWithArgvCSign()359 static const CallSignature* BuiltinsWithArgvCSign() 360 { 361 return &builtinsWithArgvCSign_; 362 } 363 IsFastBuiltin(ID builtinId)364 static bool IsFastBuiltin(ID builtinId) 365 { 366 return builtinId > NONE && builtinId < NUM_OF_BUILTINS_STUBS; 367 } 368 IsTypedBuiltin(ID builtinId)369 static bool IsTypedBuiltin(ID builtinId) 370 { 371 return (BuiltinsStubCSigns::ID::StringLocaleCompare == builtinId) || 372 (BuiltinsStubCSigns::ID::StringIteratorProtoNext == builtinId) || 373 (BuiltinsStubCSigns::ID::ArraySort == builtinId) || 374 ((BuiltinsStubCSigns::ID::TYPED_BUILTINS_FIRST <= builtinId) && 375 (builtinId <= BuiltinsStubCSigns::ID::TYPED_BUILTINS_LAST)); 376 } 377 IsTypedInlineBuiltin(ID builtinId)378 static bool IsTypedInlineBuiltin(ID builtinId) 379 { 380 if (TYPED_BUILTINS_INLINE_FIRST <= builtinId && builtinId <= TYPED_BUILTINS_INLINE_LAST) { 381 return true; 382 } 383 if (BuiltinsStubCSigns::ID::DataViewSetInt32 <= builtinId && 384 builtinId <= BuiltinsStubCSigns::ID::DataViewSetFloat64) { 385 return true; 386 } 387 // NOTE(schernykh): try to remove this switch and move StringFromCharCode to TYPED_BUILTINS_INLINE list 388 switch (builtinId) { 389 case BuiltinsStubCSigns::ID::ArraySort: 390 case BuiltinsStubCSigns::ID::StringFromCharCode: 391 case BuiltinsStubCSigns::ID::StringSubstring: 392 case BuiltinsStubCSigns::ID::StringSubStr: 393 case BuiltinsStubCSigns::ID::StringSlice: 394 case BuiltinsStubCSigns::ID::MapGet: 395 case BuiltinsStubCSigns::ID::MapHas: 396 case BuiltinsStubCSigns::ID::MapKeys: 397 case BuiltinsStubCSigns::ID::MapValues: 398 case BuiltinsStubCSigns::ID::MapEntries: 399 case BuiltinsStubCSigns::ID::SetHas: 400 case BuiltinsStubCSigns::ID::TypedArrayEntries: 401 case BuiltinsStubCSigns::ID::TypedArrayKeys: 402 case BuiltinsStubCSigns::ID::TypedArrayValues: 403 case BuiltinsStubCSigns::ID::MapDelete: 404 case BuiltinsStubCSigns::ID::SetDelete: 405 case BuiltinsStubCSigns::ID::SetValues: 406 case BuiltinsStubCSigns::ID::SetEntries: 407 case BuiltinsStubCSigns::ID::MapClear: 408 case BuiltinsStubCSigns::ID::SetClear: 409 case BuiltinsStubCSigns::ID::SetAdd: 410 case BuiltinsStubCSigns::ID::NumberParseFloat: 411 case BuiltinsStubCSigns::ID::NumberParseInt: 412 case BuiltinsStubCSigns::ID::NumberIsFinite: 413 case BuiltinsStubCSigns::ID::NumberIsNaN: 414 case BuiltinsStubCSigns::ID::NumberIsInteger: 415 case BuiltinsStubCSigns::ID::NumberIsSafeInteger: 416 case BuiltinsStubCSigns::ID::ObjectIs: 417 case BuiltinsStubCSigns::ID::ObjectGetPrototypeOf: 418 case BuiltinsStubCSigns::ID::ObjectGetProto: 419 case BuiltinsStubCSigns::ID::ObjectCreate: 420 case BuiltinsStubCSigns::ID::ObjectIsPrototypeOf: 421 case BuiltinsStubCSigns::ID::ObjectHasOwnProperty: 422 case BuiltinsStubCSigns::ID::ReflectGetPrototypeOf: 423 case BuiltinsStubCSigns::ID::ReflectGet: 424 case BuiltinsStubCSigns::ID::ReflectHas: 425 case BuiltinsStubCSigns::ID::ReflectConstruct: 426 case BuiltinsStubCSigns::ID::ReflectApply: 427 case BuiltinsStubCSigns::ID::FunctionPrototypeApply: 428 case BuiltinsStubCSigns::ID::FunctionPrototypeBind: 429 case BuiltinsStubCSigns::ID::FunctionPrototypeCall: 430 case BuiltinsStubCSigns::ID::FunctionPrototypeHasInstance: 431 case BuiltinsStubCSigns::ID::ArrayIndexOf: 432 case BuiltinsStubCSigns::ID::ArrayIncludes: 433 case BuiltinsStubCSigns::ID::ArrayValues: 434 case BuiltinsStubCSigns::ID::ArrayForEach: 435 case BuiltinsStubCSigns::ID::ArrayFind: 436 case BuiltinsStubCSigns::ID::ArrayFindIndex: 437 case BuiltinsStubCSigns::ID::ArrayFilter: 438 case BuiltinsStubCSigns::ID::ArrayMap: 439 case BuiltinsStubCSigns::ID::ArraySome: 440 case BuiltinsStubCSigns::ID::ArrayEvery: 441 case BuiltinsStubCSigns::ID::ArrayPop: 442 case BuiltinsStubCSigns::ID::ArraySlice: 443 return true; 444 default: 445 return false; 446 } 447 return false; 448 } 449 IsTypedBuiltinNumber(ID builtinId)450 static bool IsTypedBuiltinNumber(ID builtinId) 451 { 452 return BuiltinsStubCSigns::ID::NumberConstructor == builtinId; 453 } 454 IsTypedBuiltinCallThis0(ID builtinId)455 static bool IsTypedBuiltinCallThis0(ID builtinId) 456 { 457 switch (builtinId) { 458 case BuiltinsStubCSigns::ID::MapIteratorProtoNext: 459 case BuiltinsStubCSigns::ID::SetIteratorProtoNext: 460 case BuiltinsStubCSigns::ID::StringIteratorProtoNext: 461 case BuiltinsStubCSigns::ID::ArrayIteratorProtoNext: 462 case BuiltinsStubCSigns::ID::IteratorProtoReturn: 463 case BuiltinsStubCSigns::ID::ArraySort: 464 return true; 465 default: 466 return false; 467 } 468 } 469 IsTypedBuiltinCallThis1(ID builtinId)470 static bool IsTypedBuiltinCallThis1(ID builtinId) 471 { 472 switch (builtinId) { 473 case BuiltinsStubCSigns::ID::JsonStringify: 474 case BuiltinsStubCSigns::ID::StringLocaleCompare: 475 return true; 476 default: 477 return false; 478 } 479 } 480 IsTypedBuiltinCallThis3(ID builtinId)481 static bool IsTypedBuiltinCallThis3(ID builtinId) 482 { 483 switch (builtinId) { 484 case BuiltinsStubCSigns::ID::StringLocaleCompare: 485 return true; 486 default: 487 return false; 488 } 489 } 490 GetConstantIndex(ID builtinId)491 static ConstantIndex GetConstantIndex(ID builtinId) 492 { 493 switch (builtinId) { 494 case BuiltinsStubCSigns::ID::MathAcos: 495 return ConstantIndex::MATH_ACOS_INDEX; 496 case BuiltinsStubCSigns::ID::MathAcosh: 497 return ConstantIndex::MATH_ACOSH_INDEX; 498 case BuiltinsStubCSigns::ID::MathAsin: 499 return ConstantIndex::MATH_ASIN_INDEX; 500 case BuiltinsStubCSigns::ID::MathAsinh: 501 return ConstantIndex::MATH_ASINH_INDEX; 502 case BuiltinsStubCSigns::ID::MathAtan: 503 return ConstantIndex::MATH_ATAN_INDEX; 504 case BuiltinsStubCSigns::ID::MathAtan2: 505 return ConstantIndex::MATH_ATAN2_INDEX; 506 case BuiltinsStubCSigns::ID::MathAtanh: 507 return ConstantIndex::MATH_ATANH_INDEX; 508 case BuiltinsStubCSigns::ID::MathCos: 509 return ConstantIndex::MATH_COS_INDEX; 510 case BuiltinsStubCSigns::ID::MathCosh: 511 return ConstantIndex::MATH_COSH_INDEX; 512 case BuiltinsStubCSigns::ID::MathSign: 513 return ConstantIndex::MATH_SIGN_INDEX; 514 case BuiltinsStubCSigns::ID::MathSin: 515 return ConstantIndex::MATH_SIN_INDEX; 516 case BuiltinsStubCSigns::ID::MathSinh: 517 return ConstantIndex::MATH_SINH_INDEX; 518 case BuiltinsStubCSigns::ID::MathTan: 519 return ConstantIndex::MATH_TAN_INDEX; 520 case BuiltinsStubCSigns::ID::MathTanh: 521 return ConstantIndex::MATH_TANH_INDEX; 522 case BuiltinsStubCSigns::ID::MathAbs: 523 return ConstantIndex::MATH_ABS_INDEX; 524 case BuiltinsStubCSigns::ID::MathLog: 525 return ConstantIndex::MATH_LOG_INDEX; 526 case BuiltinsStubCSigns::ID::MathLog2: 527 return ConstantIndex::MATH_LOG2_INDEX; 528 case BuiltinsStubCSigns::ID::MathLog10: 529 return ConstantIndex::MATH_LOG10_INDEX; 530 case BuiltinsStubCSigns::ID::MathLog1p: 531 return ConstantIndex::MATH_LOG1P_INDEX; 532 case BuiltinsStubCSigns::ID::MathExp: 533 return ConstantIndex::MATH_EXP_INDEX; 534 case BuiltinsStubCSigns::ID::MathExpm1: 535 return ConstantIndex::MATH_EXPM1_INDEX; 536 case BuiltinsStubCSigns::ID::MathClz32: 537 return ConstantIndex::MATH_CLZ32_INDEX; 538 case BuiltinsStubCSigns::ID::MathPow: 539 return ConstantIndex::MATH_POW_INDEX; 540 case BuiltinsStubCSigns::ID::MathCbrt: 541 return ConstantIndex::MATH_CBRT_INDEX; 542 case BuiltinsStubCSigns::ID::MathTrunc: 543 return ConstantIndex::MATH_TRUNC_INDEX; 544 case BuiltinsStubCSigns::ID::MathCeil: 545 return ConstantIndex::MATH_CEIL_INDEX; 546 case BuiltinsStubCSigns::ID::MathFloor: 547 return ConstantIndex::MATH_FLOOR_INDEX; 548 case BuiltinsStubCSigns::ID::MathMin: 549 return ConstantIndex::MATH_MIN_INDEX; 550 case BuiltinsStubCSigns::ID::MathMax: 551 return ConstantIndex::MATH_MAX_INDEX; 552 case BuiltinsStubCSigns::ID::MathSqrt: 553 return ConstantIndex::MATH_SQRT_INDEX; 554 case BuiltinsStubCSigns::ID::MathRound: 555 return ConstantIndex::MATH_ROUND_INDEX; 556 case BuiltinsStubCSigns::ID::MathFRound: 557 return ConstantIndex::MATH_FROUND_INDEX; 558 case BuiltinsStubCSigns::ID::MathImul: 559 return ConstantIndex::MATH_IMUL_INDEX; 560 case BuiltinsStubCSigns::ID::MapGet: 561 return ConstantIndex::MAP_GET_INDEX; 562 case BuiltinsStubCSigns::ID::MapHas: 563 return ConstantIndex::MAP_HAS_INDEX; 564 case BuiltinsStubCSigns::ID::MapKeys: 565 return ConstantIndex::MAP_KEYS_INDEX; 566 case BuiltinsStubCSigns::ID::MapValues: 567 return ConstantIndex::MAP_VALUES_INDEX; 568 case BuiltinsStubCSigns::ID::MapEntries: 569 return ConstantIndex::MAP_ENTRIES_INDEX; 570 case BuiltinsStubCSigns::ID::SetHas: 571 return ConstantIndex::SET_HAS_INDEX; 572 case BuiltinsStubCSigns::ID::MapDelete: 573 return ConstantIndex::MAP_DELETE_INDEX; 574 case BuiltinsStubCSigns::ID::SetDelete: 575 return ConstantIndex::SET_DELETE_INDEX; 576 case BuiltinsStubCSigns::ID::SetValues: 577 return ConstantIndex::SET_VALUES_INDEX; 578 case BuiltinsStubCSigns::ID::SetEntries: 579 return ConstantIndex::SET_ENTRIES_INDEX; 580 case BuiltinsStubCSigns::ID::MapClear: 581 return ConstantIndex::MAP_CLEAR_INDEX; 582 case BuiltinsStubCSigns::ID::SetClear: 583 return ConstantIndex::SET_CLEAR_INDEX; 584 case BuiltinsStubCSigns::ID::SetAdd: 585 return ConstantIndex::SET_ADD_INDEX; 586 case BuiltinsStubCSigns::ID::StringLocaleCompare: 587 return ConstantIndex::LOCALE_COMPARE_FUNCTION_INDEX; 588 case BuiltinsStubCSigns::ID::StringSubstring: 589 return ConstantIndex::STRING_SUB_STRING_INDEX; 590 case BuiltinsStubCSigns::ID::StringSubStr: 591 return ConstantIndex::STRING_SUB_STR_INDEX; 592 case BuiltinsStubCSigns::ID::StringSlice: 593 return ConstantIndex::STRING_SLICE_INDEX; 594 case BuiltinsStubCSigns::ID::ArraySort: 595 return ConstantIndex::ARRAY_SORT_FUNCTION_INDEX; 596 case BuiltinsStubCSigns::ID::JsonStringify: 597 return ConstantIndex::JSON_STRINGIFY_FUNCTION_INDEX; 598 case BuiltinsStubCSigns::ID::MapIteratorProtoNext: 599 return ConstantIndex::MAP_ITERATOR_PROTO_NEXT_INDEX; 600 case BuiltinsStubCSigns::ID::SetIteratorProtoNext: 601 return ConstantIndex::SET_ITERATOR_PROTO_NEXT_INDEX; 602 case BuiltinsStubCSigns::ID::StringIteratorProtoNext: 603 return ConstantIndex::STRING_ITERATOR_PROTO_NEXT_INDEX; 604 case BuiltinsStubCSigns::ID::ArrayIteratorProtoNext: 605 return ConstantIndex::ARRAY_ITERATOR_PROTO_NEXT_INDEX; 606 case BuiltinsStubCSigns::ID::IteratorProtoReturn: 607 return ConstantIndex::ITERATOR_PROTO_RETURN_INDEX; 608 case BuiltinsStubCSigns::ID::StringFromCharCode: 609 return ConstantIndex::STRING_FROM_CHAR_CODE_INDEX; 610 case BuiltinsStubCSigns::ID::DateGetTime: 611 return ConstantIndex::DATE_GET_TIME_INDEX; 612 case BuiltinsStubCSigns::ID::DateNow: 613 return ConstantIndex::DATE_NOW_INDEX; 614 case BuiltinsStubCSigns::ID::TypedArrayEntries: 615 return ConstantIndex::TYPED_ARRAY_ENTRIES_INDEX; 616 case BuiltinsStubCSigns::ID::TypedArrayKeys: 617 return ConstantIndex::TYPED_ARRAY_KEYS_INDEX; 618 case BuiltinsStubCSigns::ID::TypedArrayValues: 619 return ConstantIndex::TYPED_ARRAY_VALUES_INDEX; 620 case BuiltinsStubCSigns::ID::GlobalIsFinite: 621 return ConstantIndex::GLOBAL_IS_FINITE_INDEX; 622 case BuiltinsStubCSigns::ID::GlobalIsNan: 623 return ConstantIndex::GLOBAL_IS_NAN_INDEX; 624 case BuiltinsStubCSigns::ID::ArrayBufferIsView: 625 return ConstantIndex::ARRAY_BUFFER_IS_VIEW_INDEX; 626 case BuiltinsStubCSigns::ID::DataViewGetFloat32: 627 return ConstantIndex::DATA_VIEW_GET_FLOAT32_INDEX; 628 case BuiltinsStubCSigns::ID::DataViewGetFloat64: 629 return ConstantIndex::DATA_VIEW_GET_FLOAT64_INDEX; 630 case BuiltinsStubCSigns::ID::DataViewGetInt8: 631 return ConstantIndex::DATA_VIEW_GET_INT8_INDEX; 632 case BuiltinsStubCSigns::ID::DataViewGetInt16: 633 return ConstantIndex::DATA_VIEW_GET_INT16_INDEX; 634 case BuiltinsStubCSigns::ID::DataViewGetInt32: 635 return ConstantIndex::DATA_VIEW_GET_INT32_INDEX; 636 case BuiltinsStubCSigns::ID::DataViewGetUint16: 637 return ConstantIndex::DATA_VIEW_GET_UINT16_INDEX; 638 case BuiltinsStubCSigns::ID::DataViewGetUint32: 639 return ConstantIndex::DATA_VIEW_GET_UINT32_INDEX; 640 case BuiltinsStubCSigns::ID::DataViewGetUint8: 641 return ConstantIndex::DATA_VIEW_GET_UINT8_INDEX; 642 case BuiltinsStubCSigns::ID::DataViewSetFloat32: 643 return ConstantIndex::DATA_VIEW_SET_FLOAT32_INDEX; 644 case BuiltinsStubCSigns::ID::DataViewSetFloat64: 645 return ConstantIndex::DATA_VIEW_SET_FLOAT64_INDEX; 646 case BuiltinsStubCSigns::ID::DataViewSetInt8: 647 return ConstantIndex::DATA_VIEW_SET_INT8_INDEX; 648 case BuiltinsStubCSigns::ID::DataViewSetInt16: 649 return ConstantIndex::DATA_VIEW_SET_INT16_INDEX; 650 case BuiltinsStubCSigns::ID::DataViewSetInt32: 651 return ConstantIndex::DATA_VIEW_SET_INT32_INDEX; 652 case BuiltinsStubCSigns::ID::DataViewSetUint8: 653 return ConstantIndex::DATA_VIEW_SET_UINT8_INDEX; 654 case BuiltinsStubCSigns::ID::DataViewSetUint16: 655 return ConstantIndex::DATA_VIEW_SET_UINT16_INDEX; 656 case BuiltinsStubCSigns::ID::DataViewSetUint32: 657 return ConstantIndex::DATA_VIEW_SET_UINT32_INDEX; 658 case BuiltinsStubCSigns::ID::BigIntAsIntN: 659 return ConstantIndex::BIGINT_AS_INTN_INDEX; 660 case BuiltinsStubCSigns::ID::BigIntAsUintN: 661 return ConstantIndex::BIGINT_AS_UINTN_INDEX; 662 case BuiltinsStubCSigns::ID::NumberIsFinite: 663 return ConstantIndex::NUMBER_IS_FINITE_INDEX; 664 case BuiltinsStubCSigns::ID::NumberIsInteger: 665 return ConstantIndex::NUMBER_IS_INTEGER_INDEX; 666 case BuiltinsStubCSigns::ID::NumberIsNaN: 667 return ConstantIndex::NUMBER_IS_NAN_INDEX; 668 case BuiltinsStubCSigns::ID::NumberIsSafeInteger: 669 return ConstantIndex::NUMBER_IS_SAFEINTEGER_INDEX; 670 case BuiltinsStubCSigns::ID::NumberParseFloat: 671 return ConstantIndex::NUMBER_PARSE_FLOAT_INDEX; 672 case BuiltinsStubCSigns::ID::NumberParseInt: 673 return ConstantIndex::NUMBER_PARSE_INT_INDEX; 674 case BuiltinsStubCSigns::ID::ObjectIs: 675 return ConstantIndex::OBJECT_IS_INDEX; 676 case BuiltinsStubCSigns::ID::ObjectGetPrototypeOf: 677 return ConstantIndex::OBJECT_GET_PROTOTYPE_OF_INDEX; 678 case BuiltinsStubCSigns::ID::ObjectGetProto: 679 return ConstantIndex::OBJECT_GET_PROTO_INDEX; 680 case BuiltinsStubCSigns::ID::ObjectCreate: 681 return ConstantIndex::OBJECT_CREATE_INDEX; 682 case BuiltinsStubCSigns::ID::ObjectIsPrototypeOf: 683 return ConstantIndex::OBJECT_IS_PROTOTYPE_OF_INDEX; 684 case BuiltinsStubCSigns::ID::ObjectHasOwnProperty: 685 return ConstantIndex::OBJECT_HAS_OWN_PROPERTY_INDEX; 686 case BuiltinsStubCSigns::ID::ReflectGetPrototypeOf: 687 return ConstantIndex::REFLECT_GET_PROTOTYPE_OF_INDEX; 688 case BuiltinsStubCSigns::ID::ReflectGet: 689 return ConstantIndex::REFLECT_GET_INDEX; 690 case BuiltinsStubCSigns::ID::ReflectHas: 691 return ConstantIndex::REFLECT_HAS_INDEX; 692 case BuiltinsStubCSigns::ID::ReflectConstruct: 693 return ConstantIndex::REFLECT_CONSTRUCT_INDEX; 694 case BuiltinsStubCSigns::ID::ReflectApply: 695 return ConstantIndex::REFLECT_APPLY_INDEX; 696 case BuiltinsStubCSigns::ID::FunctionPrototypeApply: 697 return ConstantIndex::FUNCTION_PROTOTYPE_APPLY_INDEX; 698 case BuiltinsStubCSigns::ID::FunctionPrototypeBind: 699 return ConstantIndex::FUNCTION_PROTOTYPE_BIND_INDEX; 700 case BuiltinsStubCSigns::ID::FunctionPrototypeCall: 701 return ConstantIndex::FUNCTION_PROTOTYPE_CALL_INDEX; 702 case BuiltinsStubCSigns::ID::FunctionPrototypeHasInstance: 703 return ConstantIndex::FUNCTION_PROTOTYPE_HAS_INSTANCE_INDEX; 704 case BuiltinsStubCSigns::ID::ArrayIndexOf: 705 return ConstantIndex::ARRAY_INDEXOF_INDEX; 706 case BuiltinsStubCSigns::ID::ArrayIncludes: 707 return ConstantIndex::ARRAY_INCLUDES_INDEX; 708 case BuiltinsStubCSigns::ID::ArrayValues: 709 return ConstantIndex::ARRAY_VALUES_INDEX; 710 case BuiltinsStubCSigns::ID::ArrayEntries: 711 return ConstantIndex::ARRAY_ENTRIES_INDEX; 712 case BuiltinsStubCSigns::ID::ArrayKeys: 713 return ConstantIndex::ARRAY_KEYS_INDEX; 714 case BuiltinsStubCSigns::ID::ArrayForEach: 715 return ConstantIndex::ARRAY_FOREACH_INDEX; 716 case BuiltinsStubCSigns::ID::ArrayFind: 717 return ConstantIndex::ARRAY_FIND_INDEX; 718 case BuiltinsStubCSigns::ID::ArrayFindIndex: 719 return ConstantIndex::ARRAY_FINDINDEX_INDEX; 720 case BuiltinsStubCSigns::ID::ArrayFilter: 721 return ConstantIndex::ARRAY_FILTER_INDEX; 722 case BuiltinsStubCSigns::ID::ArrayMap: 723 return ConstantIndex::ARRAY_MAP_INDEX; 724 case BuiltinsStubCSigns::ID::ArraySome: 725 return ConstantIndex::ARRAY_SOME_INDEX; 726 case BuiltinsStubCSigns::ID::ArrayEvery: 727 return ConstantIndex::ARRAY_EVERY_INDEX; 728 case BuiltinsStubCSigns::ID::ArrayPop: 729 return ConstantIndex::ARRAY_POP_INDEX; 730 case BuiltinsStubCSigns::ID::ArraySlice: 731 return ConstantIndex::ARRAY_SLICE_INDEX; 732 default: 733 LOG_COMPILER(INFO) << "GetConstantIndex Invalid Id:" << builtinId; 734 return ConstantIndex::INVALID; 735 } 736 } 737 CheckBuiltinsIdInvalid(ID builtinId)738 static bool CheckBuiltinsIdInvalid(ID builtinId) 739 { 740 auto result = kungfu::BuiltinsStubCSigns::GetConstantIndex(builtinId); 741 return result == ConstantIndex::INVALID; 742 } 743 744 static size_t GetGlobalEnvIndex(ID builtinId); 745 GetBuiltinName(ID id)746 static std::string GetBuiltinName(ID id) 747 { 748 static const std::map<BuiltinsStubCSigns::ID, const std::string> builtinId2Str = { 749 {MathAcos, "Math.acos"}, 750 {MathAcosh, "Math.acosh"}, 751 {MathAsin, "Math.asin"}, 752 {MathAsinh, "Math.asinh"}, 753 {MathAtan, "Math.atan"}, 754 {MathAtan2, "Math.atan2"}, 755 {MathAtanh, "Math.atanh"}, 756 {MathCos, "Math.cos"}, 757 {MathCosh, "Math.cosh"}, 758 {MathSign, "Math.sign"}, 759 {MathSin, "Math.sin"}, 760 {MathSinh, "Math.sinh"}, 761 {MathTan, "Math.tan"}, 762 {MathTanh, "Math.tanh"}, 763 {MathLog, "Math.log"}, 764 {MathLog2, "Math.log2"}, 765 {MathLog10, "Math.log10"}, 766 {MathLog1p, "Math.log1p"}, 767 {MathExp, "Math.exp"}, 768 {MathExpm1, "Math.expm1"}, 769 {MathClz32, "Math.clz32"}, 770 {MathSqrt, "Math.sqrt"}, 771 {MathCbrt, "Math.cbrt"}, 772 {MathAbs, "Math.abs"}, 773 {MathPow, "Math.pow"}, 774 {MathTrunc, "Math.trunc"}, 775 {MathRound, "Math.round"}, 776 {MathFRound, "Math.fround"}, 777 {MathCeil, "Math.ceil"}, 778 {MathFloor, "Math.floor"}, 779 {MathImul, "Math.imul"}, 780 {MathMax, "Math.max"}, 781 {MathMin, "Math.min"}, 782 {DateGetTime, "Date.prototype.getTime"}, 783 {DateNow, "Date.now"}, 784 {TypedArrayEntries, "TypedArray.entries"}, 785 {TypedArrayKeys, "TypedArray.keys"}, 786 {TypedArrayValues, "TypedArray.values"}, 787 {GlobalIsFinite, "isFinite"}, 788 {GlobalIsNan, "isNan"}, 789 {BigIntAsIntN, "BigInt.asIntN"}, 790 {BigIntAsUintN, "BigInt.asUintN"}, 791 {MapGet, "Map.get"}, 792 {MapHas, "Map.has"}, 793 {MapKeys, "Map.keys"}, 794 {MapValues, "Map.values"}, 795 {MapEntries, "Map.entries"}, 796 {SetValues, "Set.values"}, 797 {SetEntries, "Set.entries"}, 798 {SetHas, "Set.has"}, 799 {MapDelete, "Map.delete"}, 800 {SetDelete, "Set.delete"}, 801 {MapClear, "Map.clear"}, 802 {SetClear, "Set.clear"}, 803 {SetAdd, "Set.add"}, 804 {BigIntConstructor, "BigInt"}, 805 {NumberParseFloat, "Number.parseFloat"}, 806 {NumberIsInteger, "Number.isInteger"}, 807 {NumberIsSafeInteger, "Number.isSafeInteger"}, 808 {NumberParseInt, "Number.parseInt"}, 809 {StringSubstring, "String.prototype.substring"}, 810 {StringSubStr, "String.prototype.substr"}, 811 {StringSlice, "String.prototype.slice"}, 812 {ObjectIs, "Object.is"}, 813 {ObjectGetPrototypeOf, "Object.getPrototypeOf"}, 814 {ObjectGetProto, "Object.prototype.getProto"}, 815 {ObjectCreate, "Object.create"}, 816 {ObjectIsPrototypeOf, "Object.prototype.isPrototypeOf"}, 817 {ObjectHasOwnProperty, "Object.prototype.hasOwnProperty"}, 818 {ReflectGetPrototypeOf, "Reflect.getPrototypeOf"}, 819 {ReflectGet, "Reflect.get"}, 820 {ReflectHas, "Reflect.has"}, 821 {ReflectConstruct, "Reflect.construct"}, 822 {ReflectApply, "Reflect.apply"}, 823 {FunctionPrototypeApply, "Function.prototype.apply"}, 824 {FunctionPrototypeBind, "Function.prototype.bind"}, 825 {FunctionPrototypeCall, "Function.prototype.call"}, 826 {FunctionPrototypeHasInstance, "Function.prototype.hasInstance"}, 827 {ArrayIncludes, "Array.prototype.includes"}, 828 {ArrayIndexOf, "Array.prototype.indexOf"}, 829 {ArrayEntries, "Array.prototype.entries"}, 830 {ArrayValues, "Array.prototype.values"}, 831 {ArrayKeys, "Array.prototype.keys"}, 832 {ArrayFind, "Array.prototype.find"}, 833 {ArrayFindIndex, "Array.prototype.findIndex"}, 834 {ArrayForEach, "Array.prototype.foreach"}, 835 {ArrayFilter, "Array.prototype.filter"}, 836 {ArraySome, "Array.prototype.some"}, 837 {ArrayMap, "Array.prototype.map"}, 838 {ArrayEvery, "Array.prototype.every"}, 839 {ArrayPop, "Array.prototype.pop"}, 840 {ArraySlice, "Array.prototype.slice"}, 841 {DataViewGetInt8, "DataView.prototype.GetInt8"}, 842 {DataViewGetUint8, "DataView.prototype.GetUint8"}, 843 {DataViewGetInt16, "DataView.prototype.GetInt16"}, 844 {DataViewGetUint16, "DataView.prototype.GetUint16"}, 845 {DataViewGetInt32, "DataView.prototype.GetInt32"}, 846 {DataViewGetUint32, "DataView.prototype.GetUint32"}, 847 {DataViewGetFloat32, "DataView.prototype.GetFloat32"}, 848 {DataViewGetFloat64, "DataView.prototype.GetFloat64"}, 849 {DataViewSetInt8, "DataView.prototype.SetInt8"}, 850 {DataViewSetUint8, "DataView.prototype.SetUint8"}, 851 {DataViewSetInt16, "DataView.prototype.SetInt16"}, 852 {DataViewSetUint16, "DataView.prototype.SetUint16"}, 853 {DataViewSetInt32, "DataView.prototype.SetInt32"}, 854 {DataViewSetUint32, "DataView.prototype.SetUint32"}, 855 {DataViewSetFloat32, "DataView.prototype.SetFloat32"}, 856 {DataViewSetFloat64, "DataView.prototype.SetFloat64"}, 857 }; 858 if (builtinId2Str.count(id) > 0) { 859 return builtinId2Str.at(id); 860 } 861 return ""; 862 } 863 GetBuiltinId(std::string idStr)864 static ID GetBuiltinId(std::string idStr) 865 { 866 static const std::map<const std::string, BuiltinsStubCSigns::ID> str2BuiltinId = { 867 {"acos", MathAcos}, 868 {"acosh", MathAcosh}, 869 {"asin", MathAsin}, 870 {"asinh", MathAsinh}, 871 {"atan", MathAtan}, 872 {"atan2", MathAtan2}, 873 {"atanh", MathAtanh}, 874 {"cos", MathCos}, 875 {"cosh", MathCosh}, 876 {"sign", MathSign}, 877 {"sin", MathSin}, 878 {"sinh", MathSinh}, 879 {"tan", MathTan}, 880 {"tanh", MathTanh}, 881 {"log", MathLog}, 882 {"log2", MathLog2}, 883 {"log10", MathLog10}, 884 {"log1p", MathLog1p}, 885 {"exp", MathExp}, 886 {"expm1", MathExpm1}, 887 {"clz32", MathClz32}, 888 {"sqrt", MathSqrt}, 889 {"cbrt", MathCbrt}, 890 {"abs", MathAbs}, 891 {"pow", MathPow}, 892 {"trunc", MathTrunc}, 893 {"round", MathRound}, 894 {"fround", MathFRound}, 895 {"ceil", MathCeil}, 896 {"floor", MathFloor}, 897 {"imul", MathImul}, 898 {"max", MathMax}, 899 {"min", MathMin}, 900 {"localeCompare", StringLocaleCompare}, 901 {"next", StringIteratorProtoNext}, 902 {"sort", ArraySort}, 903 {"stringify", JsonStringify}, 904 {"getTime", DateGetTime}, 905 {"now", DateNow}, 906 {"isFinite", GlobalIsFinite}, 907 {"isNan", GlobalIsNan}, 908 {"asIntN", BigIntAsIntN}, 909 {"asUintN", BigIntAsUintN}, 910 {"mapDelete", MapDelete}, 911 {"setDelete", SetDelete}, 912 {"BigInt", BigIntConstructor}, 913 {"substring", StringSubstring}, 914 {"substr", StringSubStr}, 915 {"slice", StringSlice}, 916 {"is", ObjectIs}, 917 {"getPrototypeOf", ObjectGetPrototypeOf}, 918 {"create", ObjectCreate}, 919 {"isPrototypeOf", ObjectIsPrototypeOf}, 920 {"hasOwnProperty", ObjectHasOwnProperty}, 921 {"reflectGetPrototypeOf", ReflectGetPrototypeOf}, 922 {"get", ReflectGet}, 923 {"has", ReflectHas}, 924 {"construct", ReflectConstruct}, 925 {"ReflectApply", ReflectApply}, 926 {"apply", FunctionPrototypeApply}, 927 {"bind", FunctionPrototypeBind}, 928 {"call", FunctionPrototypeCall}, 929 {"hasInstance", FunctionPrototypeHasInstance}, 930 {"includes", ArrayIncludes}, 931 {"indexOf", ArrayIndexOf}, 932 {"entries", ArrayEntries}, 933 {"values", ArrayValues}, 934 {"keys", ArrayKeys}, 935 {"find", ArrayFind}, 936 {"findIndex", ArrayFindIndex}, 937 {"foreach", ArrayForEach}, 938 {"filter", ArrayFilter}, 939 {"some", ArraySome}, 940 {"map", ArrayMap}, 941 {"every", ArrayEvery}, 942 {"pop", ArrayPop}, 943 {"slice", ArraySlice}, 944 {"getUint8", DataViewGetUint8}, 945 {"getInt8", DataViewGetInt8}, 946 {"getUint16", DataViewGetUint16}, 947 {"getInt16", DataViewGetInt16}, 948 {"getUint32", DataViewGetUint32}, 949 {"getInt32", DataViewGetInt32}, 950 {"getFloat32", DataViewGetFloat32}, 951 {"getFloat64", DataViewGetFloat64}, 952 {"setUint8", DataViewSetUint8}, 953 {"setInt8", DataViewSetInt8}, 954 {"setUint16", DataViewSetUint16}, 955 {"setInt16", DataViewSetInt16}, 956 {"setUint32", DataViewSetUint32}, 957 {"setInt32", DataViewSetInt32}, 958 {"setFloat32", DataViewSetFloat32}, 959 {"setFloat64", DataViewSetFloat64}, 960 }; 961 if (str2BuiltinId.count(idStr) > 0) { 962 return str2BuiltinId.at(idStr); 963 } 964 return NONE; 965 } 966 967 private: 968 static CallSignature callSigns_[NUM_OF_BUILTINS_STUBS]; 969 static CallSignature builtinsCSign_; 970 static CallSignature builtinsWithArgvCSign_; 971 }; 972 973 enum class BuiltinsArgs : size_t { 974 GLUE = 0, 975 NATIVECODE, 976 FUNC, 977 NEWTARGET, 978 THISVALUE, 979 NUMARGS, 980 ARG0_OR_ARGV, 981 ARG1, 982 ARG2, 983 NUM_OF_INPUTS, 984 }; 985 986 #define BUILTINS_STUB_ID(name) kungfu::BuiltinsStubCSigns::name 987 // to distinguish with the positive method offset of js function 988 #define PGO_BUILTINS_STUB_ID(name) ((-1) * kungfu::BuiltinsStubCSigns::name) 989 #define IS_TYPED_BUILTINS_ID(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltin(id) 990 #define IS_TYPED_INLINE_BUILTINS_ID(id) kungfu::BuiltinsStubCSigns::IsTypedInlineBuiltin(id) 991 #define IS_TYPED_BUILTINS_NUMBER_ID(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinNumber(id) 992 #define IS_TYPED_BUILTINS_ID_CALL_THIS0(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis0(id) 993 #define IS_TYPED_BUILTINS_ID_CALL_THIS1(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis1(id) 994 #define IS_TYPED_BUILTINS_ID_CALL_THIS3(id) kungfu::BuiltinsStubCSigns::IsTypedBuiltinCallThis3(id) 995 #define GET_TYPED_CONSTANT_INDEX(id) kungfu::BuiltinsStubCSigns::GetConstantIndex(id) 996 #define IS_INVALID_ID(id) kungfu::BuiltinsStubCSigns::CheckBuiltinsIdInvalid(id) 997 #define GET_TYPED_GLOBAL_ENV_INDEX(id) kungfu::BuiltinsStubCSigns::GetGlobalEnvIndex(id) 998 } // namespace panda::ecmascript::kungfu 999 #endif // ECMASCRIPT_COMPILER_BUILTINS_CALL_SIGNATURE_H 1000