| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 the V8 project authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef V8_BUILTINS_BUILTINS_H_ | 5 #ifndef V8_BUILTINS_BUILTINS_H_ |
| 6 #define V8_BUILTINS_BUILTINS_H_ | 6 #define V8_BUILTINS_BUILTINS_H_ |
| 7 | 7 |
| 8 #include "src/base/flags.h" | 8 #include "src/base/flags.h" |
| 9 #include "src/builtins/builtins-definitions.h" |
| 9 #include "src/globals.h" | 10 #include "src/globals.h" |
| 10 | 11 |
| 11 namespace v8 { | 12 namespace v8 { |
| 12 namespace internal { | 13 namespace internal { |
| 13 | 14 |
| 14 class Callable; | 15 class Callable; |
| 15 template <typename T> | 16 template <typename T> |
| 16 class Handle; | 17 class Handle; |
| 17 class Isolate; | 18 class Isolate; |
| 18 | 19 |
| 19 #define CODE_AGE_LIST_WITH_ARG(V, A) \ | |
| 20 V(Quadragenarian, A) \ | |
| 21 V(Quinquagenarian, A) \ | |
| 22 V(Sexagenarian, A) \ | |
| 23 V(Septuagenarian, A) \ | |
| 24 V(Octogenarian, A) | |
| 25 | |
| 26 #define CODE_AGE_LIST_IGNORE_ARG(X, V) V(X) | |
| 27 | |
| 28 #define CODE_AGE_LIST(V) CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V) | |
| 29 | |
| 30 #define CODE_AGE_LIST_COMPLETE(V) \ | |
| 31 V(ToBeExecutedOnce) \ | |
| 32 V(NotExecuted) \ | |
| 33 V(ExecutedOnce) \ | |
| 34 V(NoAge) \ | |
| 35 CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V) | |
| 36 | |
| 37 #define DECLARE_CODE_AGE_BUILTIN(C, V) V(Make##C##CodeYoungAgain) | |
| 38 | |
| 39 // CPP: Builtin in C++. Entered via BUILTIN_EXIT frame. | |
| 40 // Args: name | |
| 41 // API: Builtin in C++ for API callbacks. Entered via EXIT frame. | |
| 42 // Args: name | |
| 43 // TFJ: Builtin in Turbofan, with JS linkage (callable as Javascript function). | |
| 44 // Args: name, arguments count, explicit argument names... | |
| 45 // TFS: Builtin in Turbofan, with CodeStub linkage. | |
| 46 // Args: name, interface descriptor, return_size | |
| 47 // TFH: Handlers in Turbofan, with CodeStub linkage. | |
| 48 // Args: name, code kind, extra IC state, interface descriptor | |
| 49 // ASM: Builtin in platform-dependent assembly. | |
| 50 // Args: name | |
| 51 // DBG: Builtin in platform-dependent assembly, used by the debugger. | |
| 52 // Args: name | |
| 53 | |
| 54 #define BUILTIN_LIST_BASE(CPP, API, TFJ, TFS, TFH, ASM, DBG) \ | |
| 55 ASM(Abort) \ | |
| 56 /* Code aging */ \ | |
| 57 CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, ASM) \ | |
| 58 \ | |
| 59 /* Declared first for dependency reasons */ \ | |
| 60 ASM(CompileLazy) \ | |
| 61 TFS(ToObject, TypeConversion, 1) \ | |
| 62 TFS(FastNewObject, FastNewObject, 1) \ | |
| 63 TFS(HasProperty, HasProperty, 1) \ | |
| 64 \ | |
| 65 /* Calls */ \ | |
| 66 ASM(ArgumentsAdaptorTrampoline) \ | |
| 67 /* ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList) */ \ | |
| 68 ASM(CallFunction_ReceiverIsNullOrUndefined) \ | |
| 69 ASM(CallFunction_ReceiverIsNotNullOrUndefined) \ | |
| 70 ASM(CallFunction_ReceiverIsAny) \ | |
| 71 ASM(TailCallFunction_ReceiverIsNullOrUndefined) \ | |
| 72 ASM(TailCallFunction_ReceiverIsNotNullOrUndefined) \ | |
| 73 ASM(TailCallFunction_ReceiverIsAny) \ | |
| 74 /* ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList) */ \ | |
| 75 ASM(CallBoundFunction) \ | |
| 76 ASM(TailCallBoundFunction) \ | |
| 77 /* ES6 section 7.3.12 Call(F, V, [argumentsList]) */ \ | |
| 78 ASM(Call_ReceiverIsNullOrUndefined) \ | |
| 79 ASM(Call_ReceiverIsNotNullOrUndefined) \ | |
| 80 ASM(Call_ReceiverIsAny) \ | |
| 81 ASM(TailCall_ReceiverIsNullOrUndefined) \ | |
| 82 ASM(TailCall_ReceiverIsNotNullOrUndefined) \ | |
| 83 ASM(TailCall_ReceiverIsAny) \ | |
| 84 ASM(CallWithSpread) \ | |
| 85 ASM(CallForwardVarargs) \ | |
| 86 ASM(CallFunctionForwardVarargs) \ | |
| 87 \ | |
| 88 /* Construct */ \ | |
| 89 /* ES6 section 9.2.2 [[Construct]] ( argumentsList, newTarget) */ \ | |
| 90 ASM(ConstructFunction) \ | |
| 91 /* ES6 section 9.4.1.2 [[Construct]] (argumentsList, newTarget) */ \ | |
| 92 ASM(ConstructBoundFunction) \ | |
| 93 ASM(ConstructedNonConstructable) \ | |
| 94 /* ES6 section 9.5.14 [[Construct]] ( argumentsList, newTarget) */ \ | |
| 95 ASM(ConstructProxy) \ | |
| 96 /* ES6 section 7.3.13 Construct (F, [argumentsList], [newTarget]) */ \ | |
| 97 ASM(Construct) \ | |
| 98 ASM(ConstructWithSpread) \ | |
| 99 ASM(JSConstructStubApi) \ | |
| 100 ASM(JSConstructStubGeneric) \ | |
| 101 ASM(JSBuiltinsConstructStub) \ | |
| 102 ASM(JSBuiltinsConstructStubForDerived) \ | |
| 103 TFS(FastNewClosure, FastNewClosure, 1) \ | |
| 104 TFS(FastNewFunctionContextEval, FastNewFunctionContext, 1) \ | |
| 105 TFS(FastNewFunctionContextFunction, FastNewFunctionContext, 1) \ | |
| 106 TFS(FastNewStrictArguments, FastNewArguments, 1) \ | |
| 107 TFS(FastNewSloppyArguments, FastNewArguments, 1) \ | |
| 108 TFS(FastNewRestParameter, FastNewArguments, 1) \ | |
| 109 TFS(FastCloneRegExp, FastCloneRegExp, 1) \ | |
| 110 TFS(FastCloneShallowArrayTrack, FastCloneShallowArray, 1) \ | |
| 111 TFS(FastCloneShallowArrayDontTrack, FastCloneShallowArray, 1) \ | |
| 112 TFS(FastCloneShallowObject0, FastCloneShallowObject, 1) \ | |
| 113 TFS(FastCloneShallowObject1, FastCloneShallowObject, 1) \ | |
| 114 TFS(FastCloneShallowObject2, FastCloneShallowObject, 1) \ | |
| 115 TFS(FastCloneShallowObject3, FastCloneShallowObject, 1) \ | |
| 116 TFS(FastCloneShallowObject4, FastCloneShallowObject, 1) \ | |
| 117 TFS(FastCloneShallowObject5, FastCloneShallowObject, 1) \ | |
| 118 TFS(FastCloneShallowObject6, FastCloneShallowObject, 1) \ | |
| 119 \ | |
| 120 /* Apply and entries */ \ | |
| 121 ASM(Apply) \ | |
| 122 ASM(JSEntryTrampoline) \ | |
| 123 ASM(JSConstructEntryTrampoline) \ | |
| 124 ASM(ResumeGeneratorTrampoline) \ | |
| 125 \ | |
| 126 /* Stack and interrupt check */ \ | |
| 127 ASM(InterruptCheck) \ | |
| 128 ASM(StackCheck) \ | |
| 129 \ | |
| 130 /* String helpers */ \ | |
| 131 TFS(StringCharAt, StringCharAt, 1) \ | |
| 132 TFS(StringCharCodeAt, StringCharCodeAt, 1) \ | |
| 133 TFS(StringEqual, Compare, 1) \ | |
| 134 TFS(StringGreaterThan, Compare, 1) \ | |
| 135 TFS(StringGreaterThanOrEqual, Compare, 1) \ | |
| 136 TFS(StringIndexOf, StringIndexOf, 1) \ | |
| 137 TFS(StringLessThan, Compare, 1) \ | |
| 138 TFS(StringLessThanOrEqual, Compare, 1) \ | |
| 139 \ | |
| 140 /* Interpreter */ \ | |
| 141 ASM(InterpreterEntryTrampoline) \ | |
| 142 ASM(InterpreterPushArgsAndCall) \ | |
| 143 ASM(InterpreterPushArgsAndCallFunction) \ | |
| 144 ASM(InterpreterPushArgsAndCallWithFinalSpread) \ | |
| 145 ASM(InterpreterPushArgsAndTailCall) \ | |
| 146 ASM(InterpreterPushArgsAndTailCallFunction) \ | |
| 147 ASM(InterpreterPushArgsAndConstruct) \ | |
| 148 ASM(InterpreterPushArgsAndConstructFunction) \ | |
| 149 ASM(InterpreterPushArgsAndConstructArray) \ | |
| 150 ASM(InterpreterPushArgsAndConstructWithFinalSpread) \ | |
| 151 ASM(InterpreterEnterBytecodeAdvance) \ | |
| 152 ASM(InterpreterEnterBytecodeDispatch) \ | |
| 153 ASM(InterpreterOnStackReplacement) \ | |
| 154 \ | |
| 155 /* Code life-cycle */ \ | |
| 156 ASM(CompileOptimized) \ | |
| 157 ASM(CompileOptimizedConcurrent) \ | |
| 158 ASM(InOptimizationQueue) \ | |
| 159 ASM(InstantiateAsmJs) \ | |
| 160 ASM(MarkCodeAsToBeExecutedOnce) \ | |
| 161 ASM(MarkCodeAsExecutedOnce) \ | |
| 162 ASM(MarkCodeAsExecutedTwice) \ | |
| 163 ASM(NotifyDeoptimized) \ | |
| 164 ASM(NotifySoftDeoptimized) \ | |
| 165 ASM(NotifyLazyDeoptimized) \ | |
| 166 ASM(NotifyStubFailure) \ | |
| 167 ASM(NotifyStubFailureSaveDoubles) \ | |
| 168 ASM(OnStackReplacement) \ | |
| 169 \ | |
| 170 /* API callback handling */ \ | |
| 171 API(HandleApiCall) \ | |
| 172 API(HandleApiCallAsFunction) \ | |
| 173 API(HandleApiCallAsConstructor) \ | |
| 174 \ | |
| 175 /* Adapters for Turbofan into runtime */ \ | |
| 176 ASM(AllocateInNewSpace) \ | |
| 177 ASM(AllocateInOldSpace) \ | |
| 178 \ | |
| 179 /* TurboFan support builtins */ \ | |
| 180 TFS(CopyFastSmiOrObjectElements, CopyFastSmiOrObjectElements, 1) \ | |
| 181 TFS(GrowFastDoubleElements, GrowArrayElements, 1) \ | |
| 182 TFS(GrowFastSmiOrObjectElements, GrowArrayElements, 1) \ | |
| 183 TFS(NewUnmappedArgumentsElements, NewArgumentsElements, 1) \ | |
| 184 \ | |
| 185 /* Debugger */ \ | |
| 186 DBG(FrameDropperTrampoline) \ | |
| 187 DBG(HandleDebuggerStatement) \ | |
| 188 DBG(Return_DebugBreak) \ | |
| 189 DBG(Slot_DebugBreak) \ | |
| 190 \ | |
| 191 /* Type conversions */ \ | |
| 192 TFS(ToBoolean, TypeConversion, 1) \ | |
| 193 TFS(OrdinaryToPrimitive_Number, TypeConversion, 1) \ | |
| 194 TFS(OrdinaryToPrimitive_String, TypeConversion, 1) \ | |
| 195 TFS(NonPrimitiveToPrimitive_Default, TypeConversion, 1) \ | |
| 196 TFS(NonPrimitiveToPrimitive_Number, TypeConversion, 1) \ | |
| 197 TFS(NonPrimitiveToPrimitive_String, TypeConversion, 1) \ | |
| 198 TFS(StringToNumber, TypeConversion, 1) \ | |
| 199 TFS(ToName, TypeConversion, 1) \ | |
| 200 TFS(NonNumberToNumber, TypeConversion, 1) \ | |
| 201 TFS(ToNumber, TypeConversion, 1) \ | |
| 202 TFS(ToString, TypeConversion, 1) \ | |
| 203 TFS(ToInteger, TypeConversion, 1) \ | |
| 204 TFS(ToLength, TypeConversion, 1) \ | |
| 205 TFS(ClassOf, Typeof, 1) \ | |
| 206 TFS(Typeof, Typeof, 1) \ | |
| 207 TFS(GetSuperConstructor, Typeof, 1) \ | |
| 208 \ | |
| 209 /* Handlers */ \ | |
| 210 TFH(LoadICProtoArray, BUILTIN, kNoExtraICState, LoadICProtoArray) \ | |
| 211 TFH(LoadICProtoArrayThrowIfNonexistent, BUILTIN, kNoExtraICState, \ | |
| 212 LoadICProtoArray) \ | |
| 213 TFH(KeyedLoadIC_Megamorphic, BUILTIN, kNoExtraICState, LoadWithVector) \ | |
| 214 TFH(KeyedLoadIC_Miss, BUILTIN, kNoExtraICState, LoadWithVector) \ | |
| 215 TFH(KeyedLoadIC_Slow, HANDLER, Code::LOAD_IC, LoadWithVector) \ | |
| 216 TFH(KeyedLoadIC_IndexedString, HANDLER, Code::LOAD_IC, LoadWithVector) \ | |
| 217 TFH(KeyedStoreIC_Megamorphic, BUILTIN, kNoExtraICState, StoreWithVector) \ | |
| 218 TFH(KeyedStoreIC_Megamorphic_Strict, BUILTIN, kNoExtraICState, \ | |
| 219 StoreWithVector) \ | |
| 220 TFH(KeyedStoreIC_Miss, BUILTIN, kNoExtraICState, StoreWithVector) \ | |
| 221 TFH(KeyedStoreIC_Slow, HANDLER, Code::STORE_IC, StoreWithVector) \ | |
| 222 TFH(LoadGlobalIC_Miss, BUILTIN, kNoExtraICState, LoadGlobalWithVector) \ | |
| 223 TFH(LoadGlobalIC_Slow, HANDLER, Code::LOAD_GLOBAL_IC, LoadGlobalWithVector) \ | |
| 224 TFH(LoadField, BUILTIN, kNoExtraICState, LoadField) \ | |
| 225 TFH(LoadIC_FunctionPrototype, HANDLER, Code::LOAD_IC, LoadWithVector) \ | |
| 226 ASM(LoadIC_Getter_ForDeopt) \ | |
| 227 TFH(LoadIC_Miss, BUILTIN, kNoExtraICState, LoadWithVector) \ | |
| 228 TFH(LoadIC_Slow, HANDLER, Code::LOAD_IC, LoadWithVector) \ | |
| 229 TFH(LoadIC_Uninitialized, BUILTIN, kNoExtraICState, LoadWithVector) \ | |
| 230 TFH(StoreIC_Miss, BUILTIN, kNoExtraICState, StoreWithVector) \ | |
| 231 ASM(StoreIC_Setter_ForDeopt) \ | |
| 232 TFH(StoreIC_Uninitialized, BUILTIN, kNoExtraICState, StoreWithVector) \ | |
| 233 TFH(StoreICStrict_Uninitialized, BUILTIN, kNoExtraICState, StoreWithVector) \ | |
| 234 \ | |
| 235 /* Built-in functions for Javascript */ \ | |
| 236 /* Special internal builtins */ \ | |
| 237 CPP(EmptyFunction) \ | |
| 238 CPP(Illegal) \ | |
| 239 CPP(RestrictedFunctionPropertiesThrower) \ | |
| 240 CPP(RestrictedStrictArgumentsPropertiesThrower) \ | |
| 241 CPP(UnsupportedThrower) \ | |
| 242 TFJ(ReturnReceiver, 0) \ | |
| 243 \ | |
| 244 /* Array */ \ | |
| 245 ASM(ArrayCode) \ | |
| 246 ASM(InternalArrayCode) \ | |
| 247 CPP(ArrayConcat) \ | |
| 248 /* ES6 #sec-array.isarray */ \ | |
| 249 TFJ(ArrayIsArray, 1, kArg) \ | |
| 250 /* ES7 #sec-array.prototype.includes */ \ | |
| 251 TFJ(ArrayIncludes, 2, kSearchElement, kFromIndex) \ | |
| 252 /* ES6 #sec-array.prototype.indexof */ \ | |
| 253 TFJ(ArrayIndexOf, 2, kSearchElement, kFromIndex) \ | |
| 254 /* ES6 #sec-array.prototype.pop */ \ | |
| 255 CPP(ArrayPop) \ | |
| 256 /* ES6 #sec-array.prototype.push */ \ | |
| 257 CPP(ArrayPush) \ | |
| 258 TFJ(FastArrayPush, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \ | |
| 259 /* ES6 #sec-array.prototype.shift */ \ | |
| 260 CPP(ArrayShift) \ | |
| 261 /* ES6 #sec-array.prototype.slice */ \ | |
| 262 CPP(ArraySlice) \ | |
| 263 /* ES6 #sec-array.prototype.splice */ \ | |
| 264 CPP(ArraySplice) \ | |
| 265 /* ES6 #sec-array.prototype.unshift */ \ | |
| 266 CPP(ArrayUnshift) \ | |
| 267 /* ES6 #sec-array.prototype.foreach */ \ | |
| 268 TFJ(ArrayForEachLoopContinuation, 7, kCallbackFn, kThisArg, kArray, kObject, \ | |
| 269 kInitialK, kLength, kTo) \ | |
| 270 TFJ(ArrayForEach, 2, kCallbackFn, kThisArg) \ | |
| 271 /* ES6 #sec-array.prototype.every */ \ | |
| 272 TFJ(ArrayEveryLoopContinuation, 7, kCallbackFn, kThisArg, kArray, kObject, \ | |
| 273 kInitialK, kLength, kTo) \ | |
| 274 TFJ(ArrayEvery, 2, kCallbackFn, kThisArg) \ | |
| 275 /* ES6 #sec-array.prototype.some */ \ | |
| 276 TFJ(ArraySomeLoopContinuation, 7, kCallbackFn, kThisArg, kArray, kObject, \ | |
| 277 kInitialK, kLength, kTo) \ | |
| 278 TFJ(ArraySome, 2, kCallbackFn, kThisArg) \ | |
| 279 /* ES6 #sec-array.prototype.filter */ \ | |
| 280 TFJ(ArrayFilterLoopContinuation, 7, kCallbackFn, kThisArg, kArray, kObject, \ | |
| 281 kInitialK, kLength, kTo) \ | |
| 282 TFJ(ArrayFilter, 2, kCallbackFn, kThisArg) \ | |
| 283 /* ES6 #sec-array.prototype.foreach */ \ | |
| 284 TFJ(ArrayMapLoopContinuation, 7, kCallbackFn, kThisArg, kArray, kObject, \ | |
| 285 kInitialK, kLength, kTo) \ | |
| 286 TFJ(ArrayMap, 2, kCallbackFn, kThisArg) \ | |
| 287 /* ES6 #sec-array.prototype.reduce */ \ | |
| 288 TFJ(ArrayReduceLoopContinuation, 7, kCallbackFn, kThisArg, kAccumulator, \ | |
| 289 kObject, kInitialK, kLength, kTo) \ | |
| 290 TFJ(ArrayReduce, 2, kCallbackFn, kInitialValue) \ | |
| 291 /* ES6 #sec-array.prototype.reduceRight */ \ | |
| 292 TFJ(ArrayReduceRightLoopContinuation, 7, kCallbackFn, kThisArg, \ | |
| 293 kAccumulator, kObject, kInitialK, kLength, kTo) \ | |
| 294 TFJ(ArrayReduceRight, 2, kCallbackFn, kInitialValue) \ | |
| 295 /* ES6 #sec-array.prototype.entries */ \ | |
| 296 TFJ(ArrayPrototypeEntries, 0) \ | |
| 297 /* ES6 #sec-array.prototype.keys */ \ | |
| 298 TFJ(ArrayPrototypeKeys, 0) \ | |
| 299 /* ES6 #sec-array.prototype.values */ \ | |
| 300 TFJ(ArrayPrototypeValues, 0) \ | |
| 301 /* ES6 #sec-%arrayiteratorprototype%.next */ \ | |
| 302 TFJ(ArrayIteratorPrototypeNext, 0) \ | |
| 303 \ | |
| 304 /* ArrayBuffer */ \ | |
| 305 CPP(ArrayBufferConstructor) \ | |
| 306 CPP(ArrayBufferConstructor_ConstructStub) \ | |
| 307 CPP(ArrayBufferPrototypeGetByteLength) \ | |
| 308 CPP(ArrayBufferIsView) \ | |
| 309 CPP(ArrayBufferPrototypeSlice) \ | |
| 310 \ | |
| 311 /* AsyncFunction */ \ | |
| 312 TFJ(AsyncFunctionAwaitCaught, 3, kGenerator, kAwaited, kOuterPromise) \ | |
| 313 TFJ(AsyncFunctionAwaitUncaught, 3, kGenerator, kAwaited, kOuterPromise) \ | |
| 314 TFJ(AsyncFunctionAwaitRejectClosure, 1, kSentError) \ | |
| 315 TFJ(AsyncFunctionAwaitResolveClosure, 1, kSentValue) \ | |
| 316 TFJ(AsyncFunctionPromiseCreate, 0) \ | |
| 317 TFJ(AsyncFunctionPromiseRelease, 1, kPromise) \ | |
| 318 \ | |
| 319 /* Boolean */ \ | |
| 320 CPP(BooleanConstructor) \ | |
| 321 CPP(BooleanConstructor_ConstructStub) \ | |
| 322 /* ES6 #sec-boolean.prototype.tostring */ \ | |
| 323 TFJ(BooleanPrototypeToString, 0) \ | |
| 324 /* ES6 #sec-boolean.prototype.valueof */ \ | |
| 325 TFJ(BooleanPrototypeValueOf, 0) \ | |
| 326 \ | |
| 327 /* CallSite */ \ | |
| 328 CPP(CallSitePrototypeGetColumnNumber) \ | |
| 329 CPP(CallSitePrototypeGetEvalOrigin) \ | |
| 330 CPP(CallSitePrototypeGetFileName) \ | |
| 331 CPP(CallSitePrototypeGetFunction) \ | |
| 332 CPP(CallSitePrototypeGetFunctionName) \ | |
| 333 CPP(CallSitePrototypeGetLineNumber) \ | |
| 334 CPP(CallSitePrototypeGetMethodName) \ | |
| 335 CPP(CallSitePrototypeGetPosition) \ | |
| 336 CPP(CallSitePrototypeGetScriptNameOrSourceURL) \ | |
| 337 CPP(CallSitePrototypeGetThis) \ | |
| 338 CPP(CallSitePrototypeGetTypeName) \ | |
| 339 CPP(CallSitePrototypeIsConstructor) \ | |
| 340 CPP(CallSitePrototypeIsEval) \ | |
| 341 CPP(CallSitePrototypeIsNative) \ | |
| 342 CPP(CallSitePrototypeIsToplevel) \ | |
| 343 CPP(CallSitePrototypeToString) \ | |
| 344 \ | |
| 345 /* DataView */ \ | |
| 346 CPP(DataViewConstructor) \ | |
| 347 CPP(DataViewConstructor_ConstructStub) \ | |
| 348 CPP(DataViewPrototypeGetBuffer) \ | |
| 349 CPP(DataViewPrototypeGetByteLength) \ | |
| 350 CPP(DataViewPrototypeGetByteOffset) \ | |
| 351 CPP(DataViewPrototypeGetInt8) \ | |
| 352 CPP(DataViewPrototypeSetInt8) \ | |
| 353 CPP(DataViewPrototypeGetUint8) \ | |
| 354 CPP(DataViewPrototypeSetUint8) \ | |
| 355 CPP(DataViewPrototypeGetInt16) \ | |
| 356 CPP(DataViewPrototypeSetInt16) \ | |
| 357 CPP(DataViewPrototypeGetUint16) \ | |
| 358 CPP(DataViewPrototypeSetUint16) \ | |
| 359 CPP(DataViewPrototypeGetInt32) \ | |
| 360 CPP(DataViewPrototypeSetInt32) \ | |
| 361 CPP(DataViewPrototypeGetUint32) \ | |
| 362 CPP(DataViewPrototypeSetUint32) \ | |
| 363 CPP(DataViewPrototypeGetFloat32) \ | |
| 364 CPP(DataViewPrototypeSetFloat32) \ | |
| 365 CPP(DataViewPrototypeGetFloat64) \ | |
| 366 CPP(DataViewPrototypeSetFloat64) \ | |
| 367 \ | |
| 368 /* Date */ \ | |
| 369 CPP(DateConstructor) \ | |
| 370 CPP(DateConstructor_ConstructStub) \ | |
| 371 /* ES6 #sec-date.prototype.getdate */ \ | |
| 372 TFJ(DatePrototypeGetDate, 0) \ | |
| 373 /* ES6 #sec-date.prototype.getday */ \ | |
| 374 TFJ(DatePrototypeGetDay, 0) \ | |
| 375 /* ES6 #sec-date.prototype.getfullyear */ \ | |
| 376 TFJ(DatePrototypeGetFullYear, 0) \ | |
| 377 /* ES6 #sec-date.prototype.gethours */ \ | |
| 378 TFJ(DatePrototypeGetHours, 0) \ | |
| 379 /* ES6 #sec-date.prototype.getmilliseconds */ \ | |
| 380 TFJ(DatePrototypeGetMilliseconds, 0) \ | |
| 381 /* ES6 #sec-date.prototype.getminutes */ \ | |
| 382 TFJ(DatePrototypeGetMinutes, 0) \ | |
| 383 /* ES6 #sec-date.prototype.getmonth */ \ | |
| 384 TFJ(DatePrototypeGetMonth, 0) \ | |
| 385 /* ES6 #sec-date.prototype.getseconds */ \ | |
| 386 TFJ(DatePrototypeGetSeconds, 0) \ | |
| 387 /* ES6 #sec-date.prototype.gettime */ \ | |
| 388 TFJ(DatePrototypeGetTime, 0) \ | |
| 389 /* ES6 #sec-date.prototype.gettimezoneoffset */ \ | |
| 390 TFJ(DatePrototypeGetTimezoneOffset, 0) \ | |
| 391 /* ES6 #sec-date.prototype.getutcdate */ \ | |
| 392 TFJ(DatePrototypeGetUTCDate, 0) \ | |
| 393 /* ES6 #sec-date.prototype.getutcday */ \ | |
| 394 TFJ(DatePrototypeGetUTCDay, 0) \ | |
| 395 /* ES6 #sec-date.prototype.getutcfullyear */ \ | |
| 396 TFJ(DatePrototypeGetUTCFullYear, 0) \ | |
| 397 /* ES6 #sec-date.prototype.getutchours */ \ | |
| 398 TFJ(DatePrototypeGetUTCHours, 0) \ | |
| 399 /* ES6 #sec-date.prototype.getutcmilliseconds */ \ | |
| 400 TFJ(DatePrototypeGetUTCMilliseconds, 0) \ | |
| 401 /* ES6 #sec-date.prototype.getutcminutes */ \ | |
| 402 TFJ(DatePrototypeGetUTCMinutes, 0) \ | |
| 403 /* ES6 #sec-date.prototype.getutcmonth */ \ | |
| 404 TFJ(DatePrototypeGetUTCMonth, 0) \ | |
| 405 /* ES6 #sec-date.prototype.getutcseconds */ \ | |
| 406 TFJ(DatePrototypeGetUTCSeconds, 0) \ | |
| 407 /* ES6 #sec-date.prototype.valueof */ \ | |
| 408 TFJ(DatePrototypeValueOf, 0) \ | |
| 409 /* ES6 #sec-date.prototype-@@toprimitive */ \ | |
| 410 TFJ(DatePrototypeToPrimitive, 1, kHint) \ | |
| 411 CPP(DatePrototypeGetYear) \ | |
| 412 CPP(DatePrototypeSetYear) \ | |
| 413 CPP(DateNow) \ | |
| 414 CPP(DateParse) \ | |
| 415 CPP(DatePrototypeSetDate) \ | |
| 416 CPP(DatePrototypeSetFullYear) \ | |
| 417 CPP(DatePrototypeSetHours) \ | |
| 418 CPP(DatePrototypeSetMilliseconds) \ | |
| 419 CPP(DatePrototypeSetMinutes) \ | |
| 420 CPP(DatePrototypeSetMonth) \ | |
| 421 CPP(DatePrototypeSetSeconds) \ | |
| 422 CPP(DatePrototypeSetTime) \ | |
| 423 CPP(DatePrototypeSetUTCDate) \ | |
| 424 CPP(DatePrototypeSetUTCFullYear) \ | |
| 425 CPP(DatePrototypeSetUTCHours) \ | |
| 426 CPP(DatePrototypeSetUTCMilliseconds) \ | |
| 427 CPP(DatePrototypeSetUTCMinutes) \ | |
| 428 CPP(DatePrototypeSetUTCMonth) \ | |
| 429 CPP(DatePrototypeSetUTCSeconds) \ | |
| 430 CPP(DatePrototypeToDateString) \ | |
| 431 CPP(DatePrototypeToISOString) \ | |
| 432 CPP(DatePrototypeToUTCString) \ | |
| 433 CPP(DatePrototypeToString) \ | |
| 434 CPP(DatePrototypeToTimeString) \ | |
| 435 CPP(DatePrototypeToJson) \ | |
| 436 CPP(DateUTC) \ | |
| 437 \ | |
| 438 /* Error */ \ | |
| 439 CPP(ErrorConstructor) \ | |
| 440 CPP(ErrorCaptureStackTrace) \ | |
| 441 CPP(ErrorPrototypeToString) \ | |
| 442 CPP(MakeError) \ | |
| 443 CPP(MakeRangeError) \ | |
| 444 CPP(MakeSyntaxError) \ | |
| 445 CPP(MakeTypeError) \ | |
| 446 CPP(MakeURIError) \ | |
| 447 \ | |
| 448 /* Function */ \ | |
| 449 CPP(FunctionConstructor) \ | |
| 450 ASM(FunctionPrototypeApply) \ | |
| 451 CPP(FunctionPrototypeBind) \ | |
| 452 /* ES6 #sec-function.prototype.bind */ \ | |
| 453 TFJ(FastFunctionPrototypeBind, \ | |
| 454 SharedFunctionInfo::kDontAdaptArgumentsSentinel) \ | |
| 455 ASM(FunctionPrototypeCall) \ | |
| 456 /* ES6 #sec-function.prototype-@@hasinstance */ \ | |
| 457 TFJ(FunctionPrototypeHasInstance, 1, kV) \ | |
| 458 /* ES6 #sec-function.prototype.tostring */ \ | |
| 459 CPP(FunctionPrototypeToString) \ | |
| 460 \ | |
| 461 /* Belongs to Objects but is a dependency of GeneratorPrototypeResume */ \ | |
| 462 TFS(CreateIterResultObject, CreateIterResultObject, 1) \ | |
| 463 \ | |
| 464 /* Generator and Async */ \ | |
| 465 CPP(GeneratorFunctionConstructor) \ | |
| 466 /* ES6 #sec-generator.prototype.next */ \ | |
| 467 TFJ(GeneratorPrototypeNext, 1, kValue) \ | |
| 468 /* ES6 #sec-generator.prototype.return */ \ | |
| 469 TFJ(GeneratorPrototypeReturn, 1, kValue) \ | |
| 470 /* ES6 #sec-generator.prototype.throw */ \ | |
| 471 TFJ(GeneratorPrototypeThrow, 1, kException) \ | |
| 472 CPP(AsyncFunctionConstructor) \ | |
| 473 \ | |
| 474 /* Global object */ \ | |
| 475 CPP(GlobalDecodeURI) \ | |
| 476 CPP(GlobalDecodeURIComponent) \ | |
| 477 CPP(GlobalEncodeURI) \ | |
| 478 CPP(GlobalEncodeURIComponent) \ | |
| 479 CPP(GlobalEscape) \ | |
| 480 CPP(GlobalUnescape) \ | |
| 481 CPP(GlobalEval) \ | |
| 482 /* ES6 #sec-isfinite-number */ \ | |
| 483 TFJ(GlobalIsFinite, 1, kNumber) \ | |
| 484 /* ES6 #sec-isnan-number */ \ | |
| 485 TFJ(GlobalIsNaN, 1, kNumber) \ | |
| 486 \ | |
| 487 /* JSON */ \ | |
| 488 CPP(JsonParse) \ | |
| 489 CPP(JsonStringify) \ | |
| 490 \ | |
| 491 /* ICs */ \ | |
| 492 TFH(LoadIC, LOAD_IC, kNoExtraICState, LoadWithVector) \ | |
| 493 TFH(LoadIC_Noninlined, BUILTIN, kNoExtraICState, LoadWithVector) \ | |
| 494 TFH(LoadICTrampoline, LOAD_IC, kNoExtraICState, Load) \ | |
| 495 TFH(KeyedLoadIC, KEYED_LOAD_IC, kNoExtraICState, LoadWithVector) \ | |
| 496 TFH(KeyedLoadICTrampoline, KEYED_LOAD_IC, kNoExtraICState, Load) \ | |
| 497 TFH(StoreIC, STORE_IC, kNoExtraICState, StoreWithVector) \ | |
| 498 TFH(StoreICTrampoline, STORE_IC, kNoExtraICState, Store) \ | |
| 499 TFH(StoreICStrict, STORE_IC, kNoExtraICState, StoreWithVector) \ | |
| 500 TFH(StoreICStrictTrampoline, STORE_IC, kNoExtraICState, Store) \ | |
| 501 TFH(KeyedStoreIC, KEYED_STORE_IC, kNoExtraICState, StoreWithVector) \ | |
| 502 TFH(KeyedStoreICTrampoline, KEYED_STORE_IC, kNoExtraICState, Store) \ | |
| 503 TFH(KeyedStoreICStrict, KEYED_STORE_IC, kNoExtraICState, StoreWithVector) \ | |
| 504 TFH(KeyedStoreICStrictTrampoline, KEYED_STORE_IC, kNoExtraICState, Store) \ | |
| 505 TFH(LoadGlobalIC, LOAD_GLOBAL_IC, kNoExtraICState, LoadGlobalWithVector) \ | |
| 506 TFH(LoadGlobalICInsideTypeof, LOAD_GLOBAL_IC, kNoExtraICState, \ | |
| 507 LoadGlobalWithVector) \ | |
| 508 TFH(LoadGlobalICTrampoline, LOAD_GLOBAL_IC, kNoExtraICState, LoadGlobal) \ | |
| 509 TFH(LoadGlobalICInsideTypeofTrampoline, LOAD_GLOBAL_IC, kNoExtraICState, \ | |
| 510 LoadGlobal) \ | |
| 511 \ | |
| 512 /* Math */ \ | |
| 513 /* ES6 #sec-math.abs */ \ | |
| 514 TFJ(MathAbs, 1, kX) \ | |
| 515 /* ES6 #sec-math.acos */ \ | |
| 516 TFJ(MathAcos, 1, kX) \ | |
| 517 /* ES6 #sec-math.acosh */ \ | |
| 518 TFJ(MathAcosh, 1, kX) \ | |
| 519 /* ES6 #sec-math.asin */ \ | |
| 520 TFJ(MathAsin, 1, kX) \ | |
| 521 /* ES6 #sec-math.asinh */ \ | |
| 522 TFJ(MathAsinh, 1, kX) \ | |
| 523 /* ES6 #sec-math.atan */ \ | |
| 524 TFJ(MathAtan, 1, kX) \ | |
| 525 /* ES6 #sec-math.atanh */ \ | |
| 526 TFJ(MathAtanh, 1, kX) \ | |
| 527 /* ES6 #sec-math.atan2 */ \ | |
| 528 TFJ(MathAtan2, 2, kY, kX) \ | |
| 529 /* ES6 #sec-math.cbrt */ \ | |
| 530 TFJ(MathCbrt, 1, kX) \ | |
| 531 /* ES6 #sec-math.ceil */ \ | |
| 532 TFJ(MathCeil, 1, kX) \ | |
| 533 /* ES6 #sec-math.clz32 */ \ | |
| 534 TFJ(MathClz32, 1, kX) \ | |
| 535 /* ES6 #sec-math.cos */ \ | |
| 536 TFJ(MathCos, 1, kX) \ | |
| 537 /* ES6 #sec-math.cosh */ \ | |
| 538 TFJ(MathCosh, 1, kX) \ | |
| 539 /* ES6 #sec-math.exp */ \ | |
| 540 TFJ(MathExp, 1, kX) \ | |
| 541 /* ES6 #sec-math.expm1 */ \ | |
| 542 TFJ(MathExpm1, 1, kX) \ | |
| 543 /* ES6 #sec-math.floor */ \ | |
| 544 TFJ(MathFloor, 1, kX) \ | |
| 545 /* ES6 #sec-math.fround */ \ | |
| 546 TFJ(MathFround, 1, kX) \ | |
| 547 /* ES6 #sec-math.hypot */ \ | |
| 548 CPP(MathHypot) \ | |
| 549 /* ES6 #sec-math.imul */ \ | |
| 550 TFJ(MathImul, 2, kX, kY) \ | |
| 551 /* ES6 #sec-math.log */ \ | |
| 552 TFJ(MathLog, 1, kX) \ | |
| 553 /* ES6 #sec-math.log1p */ \ | |
| 554 TFJ(MathLog1p, 1, kX) \ | |
| 555 /* ES6 #sec-math.log10 */ \ | |
| 556 TFJ(MathLog10, 1, kX) \ | |
| 557 /* ES6 #sec-math.log2 */ \ | |
| 558 TFJ(MathLog2, 1, kX) \ | |
| 559 /* ES6 #sec-math.max */ \ | |
| 560 TFJ(MathMax, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \ | |
| 561 /* ES6 #sec-math.min */ \ | |
| 562 TFJ(MathMin, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \ | |
| 563 /* ES6 #sec-math.pow */ \ | |
| 564 TFJ(MathPow, 2, kBase, kExponent) \ | |
| 565 /* ES6 #sec-math.random */ \ | |
| 566 TFJ(MathRandom, 0) \ | |
| 567 /* ES6 #sec-math.round */ \ | |
| 568 TFJ(MathRound, 1, kX) \ | |
| 569 /* ES6 #sec-math.sign */ \ | |
| 570 TFJ(MathSign, 1, kX) \ | |
| 571 /* ES6 #sec-math.sin */ \ | |
| 572 TFJ(MathSin, 1, kX) \ | |
| 573 /* ES6 #sec-math.sinh */ \ | |
| 574 TFJ(MathSinh, 1, kX) \ | |
| 575 /* ES6 #sec-math.sqrt */ \ | |
| 576 TFJ(MathTan, 1, kX) \ | |
| 577 /* ES6 #sec-math.tan */ \ | |
| 578 TFJ(MathTanh, 1, kX) \ | |
| 579 /* ES6 #sec-math.tanh */ \ | |
| 580 TFJ(MathSqrt, 1, kX) \ | |
| 581 /* ES6 #sec-math.trunc */ \ | |
| 582 TFJ(MathTrunc, 1, kX) \ | |
| 583 \ | |
| 584 /* Number */ \ | |
| 585 /* ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Call]] case */ \ | |
| 586 ASM(NumberConstructor) \ | |
| 587 /* ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Construct]] case */ \ | |
| 588 ASM(NumberConstructor_ConstructStub) \ | |
| 589 /* ES6 #sec-number.isfinite */ \ | |
| 590 TFJ(NumberIsFinite, 1, kNumber) \ | |
| 591 /* ES6 #sec-number.isinteger */ \ | |
| 592 TFJ(NumberIsInteger, 1, kNumber) \ | |
| 593 /* ES6 #sec-number.isnan */ \ | |
| 594 TFJ(NumberIsNaN, 1, kNumber) \ | |
| 595 /* ES6 #sec-number.issafeinteger */ \ | |
| 596 TFJ(NumberIsSafeInteger, 1, kNumber) \ | |
| 597 /* ES6 #sec-number.parsefloat */ \ | |
| 598 TFJ(NumberParseFloat, 1, kString) \ | |
| 599 /* ES6 #sec-number.parseint */ \ | |
| 600 TFJ(NumberParseInt, 2, kString, kRadix) \ | |
| 601 CPP(NumberPrototypeToExponential) \ | |
| 602 CPP(NumberPrototypeToFixed) \ | |
| 603 CPP(NumberPrototypeToLocaleString) \ | |
| 604 CPP(NumberPrototypeToPrecision) \ | |
| 605 CPP(NumberPrototypeToString) \ | |
| 606 /* ES6 #sec-number.prototype.valueof */ \ | |
| 607 TFJ(NumberPrototypeValueOf, 0) \ | |
| 608 TFS(Add, BinaryOp, 1) \ | |
| 609 TFS(Subtract, BinaryOp, 1) \ | |
| 610 TFS(Multiply, BinaryOp, 1) \ | |
| 611 TFS(Divide, BinaryOp, 1) \ | |
| 612 TFS(Modulus, BinaryOp, 1) \ | |
| 613 TFS(BitwiseAnd, BinaryOp, 1) \ | |
| 614 TFS(BitwiseOr, BinaryOp, 1) \ | |
| 615 TFS(BitwiseXor, BinaryOp, 1) \ | |
| 616 TFS(ShiftLeft, BinaryOp, 1) \ | |
| 617 TFS(ShiftRight, BinaryOp, 1) \ | |
| 618 TFS(ShiftRightLogical, BinaryOp, 1) \ | |
| 619 TFS(LessThan, Compare, 1) \ | |
| 620 TFS(LessThanOrEqual, Compare, 1) \ | |
| 621 TFS(GreaterThan, Compare, 1) \ | |
| 622 TFS(GreaterThanOrEqual, Compare, 1) \ | |
| 623 TFS(Equal, Compare, 1) \ | |
| 624 TFS(StrictEqual, Compare, 1) \ | |
| 625 TFS(AddWithFeedback, BinaryOpWithVector, 1) \ | |
| 626 TFS(SubtractWithFeedback, BinaryOpWithVector, 1) \ | |
| 627 \ | |
| 628 /* Object */ \ | |
| 629 CPP(ObjectAssign) \ | |
| 630 /* ES #sec-object.create */ \ | |
| 631 TFJ(ObjectCreate, 2, kPrototype, kProperties) \ | |
| 632 CPP(ObjectDefineGetter) \ | |
| 633 CPP(ObjectDefineProperties) \ | |
| 634 CPP(ObjectDefineProperty) \ | |
| 635 CPP(ObjectDefineSetter) \ | |
| 636 CPP(ObjectEntries) \ | |
| 637 CPP(ObjectFreeze) \ | |
| 638 CPP(ObjectGetOwnPropertyDescriptor) \ | |
| 639 CPP(ObjectGetOwnPropertyDescriptors) \ | |
| 640 CPP(ObjectGetOwnPropertyNames) \ | |
| 641 CPP(ObjectGetOwnPropertySymbols) \ | |
| 642 CPP(ObjectGetPrototypeOf) \ | |
| 643 CPP(ObjectSetPrototypeOf) \ | |
| 644 /* ES6 #sec-object.prototype.hasownproperty */ \ | |
| 645 TFJ(ObjectHasOwnProperty, 1, kKey) \ | |
| 646 CPP(ObjectIs) \ | |
| 647 CPP(ObjectIsExtensible) \ | |
| 648 CPP(ObjectIsFrozen) \ | |
| 649 CPP(ObjectIsSealed) \ | |
| 650 CPP(ObjectKeys) \ | |
| 651 CPP(ObjectLookupGetter) \ | |
| 652 CPP(ObjectLookupSetter) \ | |
| 653 CPP(ObjectPreventExtensions) \ | |
| 654 /* ES6 #sec-object.prototype.tostring */ \ | |
| 655 TFJ(ObjectProtoToString, 0) \ | |
| 656 /* ES6 #sec-object.prototype.valueof */ \ | |
| 657 TFJ(ObjectPrototypeValueOf, 0) \ | |
| 658 CPP(ObjectPrototypePropertyIsEnumerable) \ | |
| 659 CPP(ObjectPrototypeGetProto) \ | |
| 660 CPP(ObjectPrototypeSetProto) \ | |
| 661 CPP(ObjectSeal) \ | |
| 662 CPP(ObjectValues) \ | |
| 663 \ | |
| 664 /* instanceof */ \ | |
| 665 TFS(OrdinaryHasInstance, Compare, 1) \ | |
| 666 TFS(InstanceOf, Compare, 1) \ | |
| 667 \ | |
| 668 /* for-in */ \ | |
| 669 TFS(ForInFilter, ForInFilter, 1) \ | |
| 670 TFS(ForInNext, ForInNext, 1) \ | |
| 671 TFS(ForInPrepare, ForInPrepare, 3) \ | |
| 672 \ | |
| 673 /* Promise */ \ | |
| 674 /* ES6 #sec-getcapabilitiesexecutor-functions */ \ | |
| 675 TFJ(PromiseGetCapabilitiesExecutor, 2, kResolve, kReject) \ | |
| 676 /* ES6 #sec-newpromisecapability */ \ | |
| 677 TFJ(NewPromiseCapability, 2, kConstructor, kDebugEvent) \ | |
| 678 /* ES6 #sec-promise-executor */ \ | |
| 679 TFJ(PromiseConstructor, 1, kExecutor) \ | |
| 680 TFJ(PromiseInternalConstructor, 1, kParent) \ | |
| 681 TFJ(IsPromise, 1, kObject) \ | |
| 682 /* ES #sec-promise-resolve-functions */ \ | |
| 683 TFJ(PromiseResolveClosure, 1, kValue) \ | |
| 684 /* ES #sec-promise-reject-functions */ \ | |
| 685 TFJ(PromiseRejectClosure, 1, kValue) \ | |
| 686 /* ES #sec-promise.prototype.then */ \ | |
| 687 TFJ(PromiseThen, 2, kOnFullfilled, kOnRejected) \ | |
| 688 /* ES #sec-promise.prototype.catch */ \ | |
| 689 TFJ(PromiseCatch, 1, kOnRejected) \ | |
| 690 /* ES #sec-fulfillpromise */ \ | |
| 691 TFJ(ResolvePromise, 2, kPromise, kValue) \ | |
| 692 TFS(PromiseHandleReject, PromiseHandleReject, 1) \ | |
| 693 TFJ(PromiseHandle, 5, kValue, kHandler, kDeferredPromise, \ | |
| 694 kDeferredOnResolve, kDeferredOnReject) \ | |
| 695 /* ES #sec-promise.resolve */ \ | |
| 696 TFJ(PromiseResolve, 1, kValue) \ | |
| 697 /* ES #sec-promise.reject */ \ | |
| 698 TFJ(PromiseReject, 1, kReason) \ | |
| 699 TFJ(InternalPromiseReject, 3, kPromise, kReason, kDebugEvent) \ | |
| 700 TFJ(PromiseFinally, 1, kOnFinally) \ | |
| 701 TFJ(PromiseThenFinally, 1, kValue) \ | |
| 702 TFJ(PromiseCatchFinally, 1, kReason) \ | |
| 703 TFJ(PromiseValueThunkFinally, 0) \ | |
| 704 TFJ(PromiseThrowerFinally, 0) \ | |
| 705 \ | |
| 706 /* Proxy */ \ | |
| 707 CPP(ProxyConstructor) \ | |
| 708 CPP(ProxyConstructor_ConstructStub) \ | |
| 709 \ | |
| 710 /* Reflect */ \ | |
| 711 ASM(ReflectApply) \ | |
| 712 ASM(ReflectConstruct) \ | |
| 713 CPP(ReflectDefineProperty) \ | |
| 714 CPP(ReflectDeleteProperty) \ | |
| 715 CPP(ReflectGet) \ | |
| 716 CPP(ReflectGetOwnPropertyDescriptor) \ | |
| 717 CPP(ReflectGetPrototypeOf) \ | |
| 718 CPP(ReflectHas) \ | |
| 719 CPP(ReflectIsExtensible) \ | |
| 720 CPP(ReflectOwnKeys) \ | |
| 721 CPP(ReflectPreventExtensions) \ | |
| 722 CPP(ReflectSet) \ | |
| 723 CPP(ReflectSetPrototypeOf) \ | |
| 724 \ | |
| 725 /* RegExp */ \ | |
| 726 TFS(RegExpPrototypeExecSlow, RegExpPrototypeExecSlow, 1) \ | |
| 727 CPP(RegExpCapture1Getter) \ | |
| 728 CPP(RegExpCapture2Getter) \ | |
| 729 CPP(RegExpCapture3Getter) \ | |
| 730 CPP(RegExpCapture4Getter) \ | |
| 731 CPP(RegExpCapture5Getter) \ | |
| 732 CPP(RegExpCapture6Getter) \ | |
| 733 CPP(RegExpCapture7Getter) \ | |
| 734 CPP(RegExpCapture8Getter) \ | |
| 735 CPP(RegExpCapture9Getter) \ | |
| 736 /* ES #sec-regexp-pattern-flags */ \ | |
| 737 TFJ(RegExpConstructor, 2, kPattern, kFlags) \ | |
| 738 TFJ(RegExpInternalMatch, 2, kRegExp, kString) \ | |
| 739 CPP(RegExpInputGetter) \ | |
| 740 CPP(RegExpInputSetter) \ | |
| 741 CPP(RegExpLastMatchGetter) \ | |
| 742 CPP(RegExpLastParenGetter) \ | |
| 743 CPP(RegExpLeftContextGetter) \ | |
| 744 /* ES #sec-regexp.prototype.compile */ \ | |
| 745 TFJ(RegExpPrototypeCompile, 2, kPattern, kFlags) \ | |
| 746 /* ES #sec-regexp.prototype.exec */ \ | |
| 747 TFJ(RegExpPrototypeExec, 1, kString) \ | |
| 748 /* ES #sec-get-regexp.prototype.flags */ \ | |
| 749 TFJ(RegExpPrototypeFlagsGetter, 0) \ | |
| 750 /* ES #sec-get-regexp.prototype.global */ \ | |
| 751 TFJ(RegExpPrototypeGlobalGetter, 0) \ | |
| 752 /* ES #sec-get-regexp.prototype.ignorecase */ \ | |
| 753 TFJ(RegExpPrototypeIgnoreCaseGetter, 0) \ | |
| 754 /* ES #sec-regexp.prototype-@@match */ \ | |
| 755 TFJ(RegExpPrototypeMatch, 1, kString) \ | |
| 756 /* ES #sec-get-regexp.prototype.multiline */ \ | |
| 757 TFJ(RegExpPrototypeMultilineGetter, 0) \ | |
| 758 /* ES #sec-regexp.prototype-@@search */ \ | |
| 759 TFJ(RegExpPrototypeSearch, 1, kString) \ | |
| 760 /* ES #sec-get-regexp.prototype.source */ \ | |
| 761 TFJ(RegExpPrototypeSourceGetter, 0) \ | |
| 762 /* ES #sec-get-regexp.prototype.sticky */ \ | |
| 763 TFJ(RegExpPrototypeStickyGetter, 0) \ | |
| 764 /* ES #sec-regexp.prototype.test */ \ | |
| 765 TFJ(RegExpPrototypeTest, 1, kString) \ | |
| 766 CPP(RegExpPrototypeToString) \ | |
| 767 /* ES #sec-get-regexp.prototype.unicode */ \ | |
| 768 TFJ(RegExpPrototypeUnicodeGetter, 0) \ | |
| 769 CPP(RegExpRightContextGetter) \ | |
| 770 \ | |
| 771 TFS(RegExpReplace, RegExpReplace, 1) \ | |
| 772 /* ES #sec-regexp.prototype-@@replace */ \ | |
| 773 TFJ(RegExpPrototypeReplace, 2, kString, kReplaceValue) \ | |
| 774 \ | |
| 775 TFS(RegExpSplit, RegExpSplit, 1) \ | |
| 776 /* ES #sec-regexp.prototype-@@split */ \ | |
| 777 TFJ(RegExpPrototypeSplit, 2, kString, kLimit) \ | |
| 778 \ | |
| 779 /* SharedArrayBuffer */ \ | |
| 780 CPP(SharedArrayBufferPrototypeGetByteLength) \ | |
| 781 CPP(SharedArrayBufferPrototypeSlice) \ | |
| 782 TFJ(AtomicsLoad, 2, kArray, kIndex) \ | |
| 783 TFJ(AtomicsStore, 3, kArray, kIndex, kValue) \ | |
| 784 TFJ(AtomicsExchange, 3, kArray, kIndex, kValue) \ | |
| 785 TFJ(AtomicsCompareExchange, 4, kArray, kIndex, kOldValue, kNewValue) \ | |
| 786 CPP(AtomicsAdd) \ | |
| 787 CPP(AtomicsSub) \ | |
| 788 CPP(AtomicsAnd) \ | |
| 789 CPP(AtomicsOr) \ | |
| 790 CPP(AtomicsXor) \ | |
| 791 CPP(AtomicsIsLockFree) \ | |
| 792 CPP(AtomicsWait) \ | |
| 793 CPP(AtomicsWake) \ | |
| 794 \ | |
| 795 /* String */ \ | |
| 796 ASM(StringConstructor) \ | |
| 797 ASM(StringConstructor_ConstructStub) \ | |
| 798 CPP(StringFromCodePoint) \ | |
| 799 /* ES6 #sec-string.fromcharcode */ \ | |
| 800 TFJ(StringFromCharCode, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \ | |
| 801 /* ES6 #sec-string.prototype.charat */ \ | |
| 802 TFJ(StringPrototypeCharAt, 1, kPosition) \ | |
| 803 /* ES6 #sec-string.prototype.charcodeat */ \ | |
| 804 TFJ(StringPrototypeCharCodeAt, 1, kPosition) \ | |
| 805 /* ES6 #sec-string.prototype.concat */ \ | |
| 806 TFJ(StringPrototypeConcat, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \ | |
| 807 /* ES6 #sec-string.prototype.endswith */ \ | |
| 808 CPP(StringPrototypeEndsWith) \ | |
| 809 /* ES6 #sec-string.prototype.includes */ \ | |
| 810 CPP(StringPrototypeIncludes) \ | |
| 811 /* ES6 #sec-string.prototype.indexof */ \ | |
| 812 TFJ(StringPrototypeIndexOf, SharedFunctionInfo::kDontAdaptArgumentsSentinel) \ | |
| 813 /* ES6 #sec-string.prototype.lastindexof */ \ | |
| 814 CPP(StringPrototypeLastIndexOf) \ | |
| 815 /* ES6 #sec-string.prototype.localecompare */ \ | |
| 816 CPP(StringPrototypeLocaleCompare) \ | |
| 817 /* ES6 #sec-string.prototype.normalize */ \ | |
| 818 CPP(StringPrototypeNormalize) \ | |
| 819 /* ES6 #sec-string.prototype.replace */ \ | |
| 820 TFJ(StringPrototypeReplace, 2, kSearch, kReplace) \ | |
| 821 /* ES6 #sec-string.prototype.split */ \ | |
| 822 TFJ(StringPrototypeSplit, 2, kSeparator, kLimit) \ | |
| 823 /* ES6 #sec-string.prototype.substr */ \ | |
| 824 TFJ(StringPrototypeSubstr, 2, kStart, kLength) \ | |
| 825 /* ES6 #sec-string.prototype.substring */ \ | |
| 826 TFJ(StringPrototypeSubstring, 2, kStart, kEnd) \ | |
| 827 /* ES6 #sec-string.prototype.startswith */ \ | |
| 828 CPP(StringPrototypeStartsWith) \ | |
| 829 /* ES6 #sec-string.prototype.tostring */ \ | |
| 830 TFJ(StringPrototypeToString, 0) \ | |
| 831 /* ES #sec-string.prototype.tolocalelowercase */ \ | |
| 832 CPP(StringPrototypeToLocaleLowerCase) \ | |
| 833 /* ES #sec-string.prototype.tolocaleuppercase */ \ | |
| 834 CPP(StringPrototypeToLocaleUpperCase) \ | |
| 835 /* (obsolete) Unibrow version */ \ | |
| 836 CPP(StringPrototypeToLowerCase) \ | |
| 837 /* (obsolete) Unibrow version */ \ | |
| 838 CPP(StringPrototypeToUpperCase) \ | |
| 839 CPP(StringPrototypeTrim) \ | |
| 840 CPP(StringPrototypeTrimLeft) \ | |
| 841 CPP(StringPrototypeTrimRight) \ | |
| 842 /* ES6 #sec-string.prototype.valueof */ \ | |
| 843 TFJ(StringPrototypeValueOf, 0) \ | |
| 844 /* ES6 #sec-string.prototype-@@iterator */ \ | |
| 845 TFJ(StringPrototypeIterator, 0) \ | |
| 846 \ | |
| 847 /* StringIterator */ \ | |
| 848 /* ES6 #sec-%stringiteratorprototype%.next */ \ | |
| 849 TFJ(StringIteratorPrototypeNext, 0) \ | |
| 850 \ | |
| 851 /* Symbol */ \ | |
| 852 CPP(SymbolConstructor) \ | |
| 853 CPP(SymbolConstructor_ConstructStub) \ | |
| 854 /* ES6 #sec-symbol.for */ \ | |
| 855 CPP(SymbolFor) \ | |
| 856 /* ES6 #sec-symbol.keyfor */ \ | |
| 857 CPP(SymbolKeyFor) \ | |
| 858 /* ES6 #sec-symbol.prototype-@@toprimitive */ \ | |
| 859 TFJ(SymbolPrototypeToPrimitive, 1, kHint) \ | |
| 860 /* ES6 #sec-symbol.prototype.tostring */ \ | |
| 861 TFJ(SymbolPrototypeToString, 0) \ | |
| 862 /* ES6 #sec-symbol.prototype.valueof */ \ | |
| 863 TFJ(SymbolPrototypeValueOf, 0) \ | |
| 864 \ | |
| 865 /* TypedArray */ \ | |
| 866 /* ES6 #sec-typedarray-buffer-byteoffset-length */ \ | |
| 867 TFJ(TypedArrayConstructByArrayBuffer, 5, kHolder, kBuffer, kByteOffset, \ | |
| 868 kLength, kElementSize) \ | |
| 869 TFJ(TypedArrayConstructByArrayLike, 4, kHolder, kArrayLike, kLength, \ | |
| 870 kElementSize) \ | |
| 871 /* ES6 #sec-typedarray-length */ \ | |
| 872 TFJ(TypedArrayConstructByLength, 3, kHolder, kLength, kElementSize) \ | |
| 873 TFJ(TypedArrayInitialize, 6, kHolder, kLength, kBuffer, kByteOffset, \ | |
| 874 kByteLength, kInitialize) \ | |
| 875 CPP(TypedArrayPrototypeBuffer) \ | |
| 876 /* ES6 #sec-get-%typedarray%.prototype.bytelength */ \ | |
| 877 TFJ(TypedArrayPrototypeByteLength, 0) \ | |
| 878 /* ES6 #sec-get-%typedarray%.prototype.byteoffset */ \ | |
| 879 TFJ(TypedArrayPrototypeByteOffset, 0) \ | |
| 880 /* ES6 #sec-get-%typedarray%.prototype.length */ \ | |
| 881 TFJ(TypedArrayPrototypeLength, 0) \ | |
| 882 /* ES6 #sec-%typedarray%.prototype.entries */ \ | |
| 883 TFJ(TypedArrayPrototypeEntries, 0) \ | |
| 884 /* ES6 #sec-%typedarray%.prototype.keys */ \ | |
| 885 TFJ(TypedArrayPrototypeKeys, 0) \ | |
| 886 /* ES6 #sec-%typedarray%.prototype.values */ \ | |
| 887 TFJ(TypedArrayPrototypeValues, 0) \ | |
| 888 /* ES6 #sec-%typedarray%.prototype.copywithin */ \ | |
| 889 CPP(TypedArrayPrototypeCopyWithin) \ | |
| 890 /* ES6 #sec-%typedarray%.prototype.fill */ \ | |
| 891 CPP(TypedArrayPrototypeFill) \ | |
| 892 /* ES7 #sec-%typedarray%.prototype.includes */ \ | |
| 893 CPP(TypedArrayPrototypeIncludes) \ | |
| 894 /* ES6 #sec-%typedarray%.prototype.indexof */ \ | |
| 895 CPP(TypedArrayPrototypeIndexOf) \ | |
| 896 /* ES6 #sec-%typedarray%.prototype.lastindexof */ \ | |
| 897 CPP(TypedArrayPrototypeLastIndexOf) \ | |
| 898 /* ES6 #sec-%typedarray%.prototype.reverse */ \ | |
| 899 CPP(TypedArrayPrototypeReverse) \ | |
| 900 \ | |
| 901 /* Wasm */ \ | |
| 902 ASM(WasmCompileLazy) \ | |
| 903 TFS(WasmStackGuard, WasmRuntimeCall, 1) \ | |
| 904 TFS(ThrowWasmTrapUnreachable, WasmRuntimeCall, 1) \ | |
| 905 TFS(ThrowWasmTrapMemOutOfBounds, WasmRuntimeCall, 1) \ | |
| 906 TFS(ThrowWasmTrapDivByZero, WasmRuntimeCall, 1) \ | |
| 907 TFS(ThrowWasmTrapDivUnrepresentable, WasmRuntimeCall, 1) \ | |
| 908 TFS(ThrowWasmTrapRemByZero, WasmRuntimeCall, 1) \ | |
| 909 TFS(ThrowWasmTrapFloatUnrepresentable, WasmRuntimeCall, 1) \ | |
| 910 TFS(ThrowWasmTrapFuncInvalid, WasmRuntimeCall, 1) \ | |
| 911 TFS(ThrowWasmTrapFuncSigMismatch, WasmRuntimeCall, 1) \ | |
| 912 \ | |
| 913 /* Async-from-Sync Iterator */ \ | |
| 914 \ | |
| 915 /* %AsyncFromSyncIteratorPrototype% */ \ | |
| 916 /* See tc39.github.io/proposal-async-iteration/ */ \ | |
| 917 /* #sec-%asyncfromsynciteratorprototype%-object) */ \ | |
| 918 TFJ(AsyncFromSyncIteratorPrototypeNext, 1, kValue) \ | |
| 919 /* #sec-%asyncfromsynciteratorprototype%.throw */ \ | |
| 920 TFJ(AsyncFromSyncIteratorPrototypeThrow, 1, kReason) \ | |
| 921 /* #sec-%asyncfromsynciteratorprototype%.return */ \ | |
| 922 TFJ(AsyncFromSyncIteratorPrototypeReturn, 1, kValue) \ | |
| 923 /* #sec-async-iterator-value-unwrap-functions */ \ | |
| 924 TFJ(AsyncIteratorValueUnwrap, 1, kValue) | |
| 925 | |
| 926 #ifdef V8_I18N_SUPPORT | |
| 927 #define BUILTIN_LIST(CPP, API, TFJ, TFS, TFH, ASM, DBG) \ | |
| 928 BUILTIN_LIST_BASE(CPP, API, TFJ, TFS, TFH, ASM, DBG) \ | |
| 929 \ | |
| 930 /* ES #sec-string.prototype.tolowercase */ \ | |
| 931 CPP(StringPrototypeToLowerCaseI18N) \ | |
| 932 /* ES #sec-string.prototype.touppercase */ \ | |
| 933 CPP(StringPrototypeToUpperCaseI18N) | |
| 934 #else | |
| 935 #define BUILTIN_LIST(CPP, API, TFJ, TFS, TFH, ASM, DBG) \ | |
| 936 BUILTIN_LIST_BASE(CPP, API, TFJ, TFS, TFH, ASM, DBG) | |
| 937 #endif // V8_I18N_SUPPORT | |
| 938 | |
| 939 #define BUILTIN_PROMISE_REJECTION_PREDICTION_LIST(V) \ | |
| 940 V(AsyncFromSyncIteratorPrototypeNext) \ | |
| 941 V(AsyncFromSyncIteratorPrototypeReturn) \ | |
| 942 V(AsyncFromSyncIteratorPrototypeThrow) \ | |
| 943 V(AsyncFunctionAwaitCaught) \ | |
| 944 V(AsyncFunctionAwaitUncaught) \ | |
| 945 V(PromiseConstructor) \ | |
| 946 V(PromiseHandle) \ | |
| 947 V(PromiseResolve) \ | |
| 948 V(PromiseResolveClosure) \ | |
| 949 V(ResolvePromise) | |
| 950 | |
| 951 #define BUILTIN_EXCEPTION_CAUGHT_PREDICTION_LIST(V) V(PromiseHandleReject) | |
| 952 | |
| 953 #define IGNORE_BUILTIN(...) | |
| 954 | |
| 955 #define BUILTIN_LIST_ALL(V) BUILTIN_LIST(V, V, V, V, V, V, V) | |
| 956 | |
| 957 #define BUILTIN_LIST_C(V) \ | |
| 958 BUILTIN_LIST(V, V, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \ | |
| 959 IGNORE_BUILTIN, IGNORE_BUILTIN) | |
| 960 | |
| 961 #define BUILTIN_LIST_A(V) \ | |
| 962 BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \ | |
| 963 IGNORE_BUILTIN, V, V) | |
| 964 | |
| 965 #define BUILTIN_LIST_DBG(V) \ | |
| 966 BUILTIN_LIST(IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, IGNORE_BUILTIN, \ | |
| 967 IGNORE_BUILTIN, IGNORE_BUILTIN, V) | |
| 968 | |
| 969 #define BUILTINS_WITH_UNTAGGED_PARAMS(V) V(WasmCompileLazy) | |
| 970 | |
| 971 // Forward declarations. | 20 // Forward declarations. |
| 972 class ObjectVisitor; | 21 class ObjectVisitor; |
| 973 enum class InterpreterPushArgsMode : unsigned; | 22 enum class InterpreterPushArgsMode : unsigned; |
| 974 namespace compiler { | 23 namespace compiler { |
| 975 class CodeAssemblerState; | 24 class CodeAssemblerState; |
| 976 } | 25 } |
| 977 | 26 |
| 978 class Builtins { | 27 class Builtins { |
| 979 public: | 28 public: |
| 980 ~Builtins(); | 29 ~Builtins(); |
| (...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1097 | 146 |
| 1098 friend class Isolate; | 147 friend class Isolate; |
| 1099 | 148 |
| 1100 DISALLOW_COPY_AND_ASSIGN(Builtins); | 149 DISALLOW_COPY_AND_ASSIGN(Builtins); |
| 1101 }; | 150 }; |
| 1102 | 151 |
| 1103 } // namespace internal | 152 } // namespace internal |
| 1104 } // namespace v8 | 153 } // namespace v8 |
| 1105 | 154 |
| 1106 #endif // V8_BUILTINS_BUILTINS_H_ | 155 #endif // V8_BUILTINS_BUILTINS_H_ |
| OLD | NEW |