Upgrade V8 to version 4.9.385.28
https://chromium.googlesource.com/v8/v8/+/4.9.385.28
FPIIM-449
Change-Id: I4b2e74289d4bf3667f2f3dc8aa2e541f63e26eb4
diff --git a/src/builtins.h b/src/builtins.h
index 13a4b80..a707a94 100644
--- a/src/builtins.h
+++ b/src/builtins.h
@@ -5,15 +5,24 @@
#ifndef V8_BUILTINS_H_
#define V8_BUILTINS_H_
+#include "src/base/flags.h"
+#include "src/handles.h"
+
namespace v8 {
namespace internal {
// Specifies extra arguments required by a C++ builtin.
-enum BuiltinExtraArguments {
- NO_EXTRA_ARGUMENTS = 0,
- NEEDS_CALLED_FUNCTION = 1
+enum class BuiltinExtraArguments : uint8_t {
+ kNone = 0u,
+ kTarget = 1u << 0,
+ kNewTarget = 1u << 1,
+ kTargetAndNewTarget = kTarget | kNewTarget
};
+inline bool operator&(BuiltinExtraArguments lhs, BuiltinExtraArguments rhs) {
+ return static_cast<uint8_t>(lhs) & static_cast<uint8_t>(rhs);
+}
+
#define CODE_AGE_LIST_WITH_ARG(V, A) \
V(Quadragenarian, A) \
@@ -28,6 +37,7 @@
CODE_AGE_LIST_WITH_ARG(CODE_AGE_LIST_IGNORE_ARG, V)
#define CODE_AGE_LIST_COMPLETE(V) \
+ V(ToBeExecutedOnce) \
V(NotExecuted) \
V(ExecutedOnce) \
V(NoAge) \
@@ -41,32 +51,128 @@
// Define list of builtins implemented in C++.
-#define BUILTIN_LIST_C(V) \
- V(Illegal, NO_EXTRA_ARGUMENTS) \
- \
- V(EmptyFunction, NO_EXTRA_ARGUMENTS) \
- \
- V(ArrayPush, NO_EXTRA_ARGUMENTS) \
- V(ArrayPop, NO_EXTRA_ARGUMENTS) \
- V(ArrayShift, NO_EXTRA_ARGUMENTS) \
- V(ArrayUnshift, NO_EXTRA_ARGUMENTS) \
- V(ArraySlice, NO_EXTRA_ARGUMENTS) \
- V(ArraySplice, NO_EXTRA_ARGUMENTS) \
- V(ArrayConcat, NO_EXTRA_ARGUMENTS) \
- \
- V(HandleApiCall, NEEDS_CALLED_FUNCTION) \
- V(HandleApiCallConstruct, NEEDS_CALLED_FUNCTION) \
- V(HandleApiCallAsFunction, NO_EXTRA_ARGUMENTS) \
- V(HandleApiCallAsConstructor, NO_EXTRA_ARGUMENTS) \
- \
- V(StrictModePoisonPill, NO_EXTRA_ARGUMENTS) \
- V(GeneratorPoisonPill, NO_EXTRA_ARGUMENTS)
+#define BUILTIN_LIST_C(V) \
+ V(Illegal, kNone) \
+ \
+ V(EmptyFunction, kNone) \
+ \
+ V(ArrayConcat, kNone) \
+ V(ArrayIsArray, kNone) \
+ V(ArrayPop, kNone) \
+ V(ArrayPush, kNone) \
+ V(ArrayShift, kNone) \
+ V(ArraySlice, kNone) \
+ V(ArraySplice, kNone) \
+ V(ArrayUnshift, kNone) \
+ \
+ V(ArrayBufferConstructor, kTarget) \
+ V(ArrayBufferConstructor_ConstructStub, kTargetAndNewTarget) \
+ V(ArrayBufferIsView, kNone) \
+ \
+ V(DateConstructor, kNone) \
+ V(DateConstructor_ConstructStub, kTargetAndNewTarget) \
+ V(DateNow, kNone) \
+ V(DateParse, kNone) \
+ V(DateUTC, kNone) \
+ V(DatePrototypeSetDate, kNone) \
+ V(DatePrototypeSetFullYear, kNone) \
+ V(DatePrototypeSetHours, kNone) \
+ V(DatePrototypeSetMilliseconds, kNone) \
+ V(DatePrototypeSetMinutes, kNone) \
+ V(DatePrototypeSetMonth, kNone) \
+ V(DatePrototypeSetSeconds, kNone) \
+ V(DatePrototypeSetTime, kNone) \
+ V(DatePrototypeSetUTCDate, kNone) \
+ V(DatePrototypeSetUTCFullYear, kNone) \
+ V(DatePrototypeSetUTCHours, kNone) \
+ V(DatePrototypeSetUTCMilliseconds, kNone) \
+ V(DatePrototypeSetUTCMinutes, kNone) \
+ V(DatePrototypeSetUTCMonth, kNone) \
+ V(DatePrototypeSetUTCSeconds, kNone) \
+ V(DatePrototypeToDateString, kNone) \
+ V(DatePrototypeToISOString, kNone) \
+ V(DatePrototypeToPrimitive, kNone) \
+ V(DatePrototypeToUTCString, kNone) \
+ V(DatePrototypeToString, kNone) \
+ V(DatePrototypeToTimeString, kNone) \
+ V(DatePrototypeValueOf, kNone) \
+ V(DatePrototypeGetYear, kNone) \
+ V(DatePrototypeSetYear, kNone) \
+ \
+ V(FunctionConstructor, kTargetAndNewTarget) \
+ V(FunctionPrototypeBind, kNone) \
+ V(FunctionPrototypeToString, kNone) \
+ \
+ V(GeneratorFunctionConstructor, kTargetAndNewTarget) \
+ \
+ V(GlobalEval, kTarget) \
+ \
+ V(ObjectAssign, kNone) \
+ V(ObjectCreate, kNone) \
+ V(ObjectFreeze, kNone) \
+ V(ObjectIsExtensible, kNone) \
+ V(ObjectIsFrozen, kNone) \
+ V(ObjectIsSealed, kNone) \
+ V(ObjectKeys, kNone) \
+ V(ObjectPreventExtensions, kNone) \
+ V(ObjectSeal, kNone) \
+ V(ObjectProtoToString, kNone) \
+ \
+ V(ProxyConstructor, kNone) \
+ V(ProxyConstructor_ConstructStub, kTarget) \
+ \
+ V(ReflectDefineProperty, kNone) \
+ V(ReflectDeleteProperty, kNone) \
+ V(ReflectGet, kNone) \
+ V(ReflectGetOwnPropertyDescriptor, kNone) \
+ V(ReflectGetPrototypeOf, kNone) \
+ V(ReflectHas, kNone) \
+ V(ReflectIsExtensible, kNone) \
+ V(ReflectOwnKeys, kNone) \
+ V(ReflectPreventExtensions, kNone) \
+ V(ReflectSet, kNone) \
+ V(ReflectSetPrototypeOf, kNone) \
+ \
+ V(SymbolConstructor, kNone) \
+ V(SymbolConstructor_ConstructStub, kTarget) \
+ \
+ V(HandleApiCall, kTarget) \
+ V(HandleApiCallConstruct, kTarget) \
+ V(HandleApiCallAsFunction, kNone) \
+ V(HandleApiCallAsConstructor, kNone) \
+ \
+ V(RestrictedFunctionPropertiesThrower, kNone) \
+ V(RestrictedStrictArgumentsPropertiesThrower, kNone)
// Define list of builtins implemented in assembly.
#define BUILTIN_LIST_A(V) \
V(ArgumentsAdaptorTrampoline, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
+ V(ConstructedNonConstructable, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
+ V(CallFunction_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, \
+ kNoExtraICState) \
+ V(CallFunction_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \
+ kNoExtraICState) \
+ V(CallFunction_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(CallBoundFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(Call_ReceiverIsNullOrUndefined, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(Call_ReceiverIsNotNullOrUndefined, BUILTIN, UNINITIALIZED, \
+ kNoExtraICState) \
+ V(Call_ReceiverIsAny, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
+ V(ConstructFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(ConstructBoundFunction, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(ConstructProxy, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(Construct, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
+ V(Apply, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
+ V(HandleFastApiCall, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
V(InOptimizationQueue, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(JSConstructStubGeneric, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(JSBuiltinsConstructStub, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(JSConstructStubApi, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(JSEntryTrampoline, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(JSConstructEntryTrampoline, BUILTIN, UNINITIALIZED, kNoExtraICState) \
@@ -79,122 +185,101 @@
V(NotifyStubFailure, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(NotifyStubFailureSaveDoubles, BUILTIN, UNINITIALIZED, kNoExtraICState) \
\
+ V(InterpreterEntryTrampoline, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(InterpreterExitTrampoline, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(InterpreterPushArgsAndCall, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(InterpreterPushArgsAndConstruct, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(InterpreterNotifyDeoptimized, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(InterpreterNotifySoftDeoptimized, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(InterpreterNotifyLazyDeoptimized, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
V(LoadIC_Miss, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(KeyedLoadIC_Miss, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(StoreIC_Miss, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(KeyedStoreIC_Miss, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(LoadIC_Getter_ForDeopt, LOAD_IC, MONOMORPHIC, kNoExtraICState) \
- V(KeyedLoadIC_Initialize, KEYED_LOAD_IC, UNINITIALIZED, kNoExtraICState) \
- V(KeyedLoadIC_PreMonomorphic, KEYED_LOAD_IC, PREMONOMORPHIC, \
- kNoExtraICState) \
- V(KeyedLoadIC_Generic, KEYED_LOAD_IC, GENERIC, kNoExtraICState) \
+ V(KeyedLoadIC_Megamorphic, KEYED_LOAD_IC, MEGAMORPHIC, kNoExtraICState) \
\
- V(StoreIC_Setter_ForDeopt, STORE_IC, MONOMORPHIC, StoreIC::kStrictModeState) \
+ V(KeyedLoadIC_Megamorphic_Strong, KEYED_LOAD_IC, MEGAMORPHIC, \
+ LoadICState::kStrongModeState) \
+ \
+ V(StoreIC_Setter_ForDeopt, STORE_IC, MONOMORPHIC, \
+ StoreICState::kStrictModeState) \
\
V(KeyedStoreIC_Initialize, KEYED_STORE_IC, UNINITIALIZED, kNoExtraICState) \
V(KeyedStoreIC_PreMonomorphic, KEYED_STORE_IC, PREMONOMORPHIC, \
kNoExtraICState) \
V(KeyedStoreIC_Megamorphic, KEYED_STORE_IC, MEGAMORPHIC, kNoExtraICState) \
- V(KeyedStoreIC_Generic, KEYED_STORE_IC, GENERIC, kNoExtraICState) \
\
V(KeyedStoreIC_Initialize_Strict, KEYED_STORE_IC, UNINITIALIZED, \
- StoreIC::kStrictModeState) \
+ StoreICState::kStrictModeState) \
V(KeyedStoreIC_PreMonomorphic_Strict, KEYED_STORE_IC, PREMONOMORPHIC, \
- StoreIC::kStrictModeState) \
+ StoreICState::kStrictModeState) \
V(KeyedStoreIC_Megamorphic_Strict, KEYED_STORE_IC, MEGAMORPHIC, \
- StoreIC::kStrictModeState) \
- V(KeyedStoreIC_Generic_Strict, KEYED_STORE_IC, GENERIC, \
- StoreIC::kStrictModeState) \
- V(KeyedStoreIC_SloppyArguments, KEYED_STORE_IC, MONOMORPHIC, \
- kNoExtraICState) \
+ StoreICState::kStrictModeState) \
\
- /* Uses KeyedLoadIC_Initialize; must be after in list. */ \
- V(FunctionCall, BUILTIN, UNINITIALIZED, kNoExtraICState) \
- V(FunctionApply, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetDate, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetDay, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetFullYear, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetHours, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetMilliseconds, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetMinutes, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetMonth, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetSeconds, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetTime, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetTimezoneOffset, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetUTCDate, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetUTCDay, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetUTCFullYear, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetUTCHours, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetUTCMilliseconds, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetUTCMinutes, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetUTCMonth, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(DatePrototypeGetUTCSeconds, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
+ V(FunctionPrototypeApply, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(FunctionPrototypeCall, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
+ V(ReflectApply, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(ReflectConstruct, BUILTIN, UNINITIALIZED, kNoExtraICState) \
\
V(InternalArrayCode, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(ArrayCode, BUILTIN, UNINITIALIZED, kNoExtraICState) \
\
- V(StringConstructCode, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(NumberConstructor, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(NumberConstructor_ConstructStub, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ \
+ V(StringConstructor, BUILTIN, UNINITIALIZED, kNoExtraICState) \
+ V(StringConstructor_ConstructStub, BUILTIN, UNINITIALIZED, kNoExtraICState) \
\
V(OnStackReplacement, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(InterruptCheck, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(OsrAfterStackCheck, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(StackCheck, BUILTIN, UNINITIALIZED, kNoExtraICState) \
\
+ V(MarkCodeAsToBeExecutedOnce, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(MarkCodeAsExecutedOnce, BUILTIN, UNINITIALIZED, kNoExtraICState) \
V(MarkCodeAsExecutedTwice, BUILTIN, UNINITIALIZED, kNoExtraICState) \
CODE_AGE_LIST_WITH_ARG(DECLARE_CODE_AGE_BUILTIN, V)
// Define list of builtin handlers implemented in assembly.
-#define BUILTIN_LIST_H(V) \
- V(LoadIC_Slow, LOAD_IC) \
- V(KeyedLoadIC_Slow, KEYED_LOAD_IC) \
- V(StoreIC_Slow, STORE_IC) \
- V(KeyedStoreIC_Slow, KEYED_STORE_IC) \
- V(LoadIC_Normal, LOAD_IC) \
- V(StoreIC_Normal, STORE_IC)
+#define BUILTIN_LIST_H(V) \
+ V(LoadIC_Slow, LOAD_IC) \
+ V(LoadIC_Slow_Strong, LOAD_IC) \
+ V(KeyedLoadIC_Slow, KEYED_LOAD_IC) \
+ V(KeyedLoadIC_Slow_Strong, KEYED_LOAD_IC) \
+ V(StoreIC_Slow, STORE_IC) \
+ V(KeyedStoreIC_Slow, KEYED_STORE_IC) \
+ V(LoadIC_Normal, LOAD_IC) \
+ V(LoadIC_Normal_Strong, LOAD_IC) \
+ V(StoreIC_Normal, STORE_IC)
// Define list of builtins used by the debugger implemented in assembly.
-#define BUILTIN_LIST_DEBUG_A(V) \
- V(Return_DebugBreak, BUILTIN, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(CallFunctionStub_DebugBreak, BUILTIN, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(CallConstructStub_DebugBreak, BUILTIN, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(CallConstructStub_Recording_DebugBreak, BUILTIN, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(CallICStub_DebugBreak, CALL_IC, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(LoadIC_DebugBreak, LOAD_IC, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(KeyedLoadIC_DebugBreak, KEYED_LOAD_IC, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(StoreIC_DebugBreak, STORE_IC, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(KeyedStoreIC_DebugBreak, KEYED_STORE_IC, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(CompareNilIC_DebugBreak, COMPARE_NIL_IC, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(Slot_DebugBreak, BUILTIN, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(PlainReturn_LiveEdit, BUILTIN, DEBUG_STUB, \
- DEBUG_BREAK) \
- V(FrameDropper_LiveEdit, BUILTIN, DEBUG_STUB, \
- DEBUG_BREAK)
+#define BUILTIN_LIST_DEBUG_A(V) \
+ V(Return_DebugBreak, BUILTIN, DEBUG_STUB, kNoExtraICState) \
+ V(Slot_DebugBreak, BUILTIN, DEBUG_STUB, kNoExtraICState) \
+ V(FrameDropper_LiveEdit, BUILTIN, DEBUG_STUB, kNoExtraICState)
-// Define list of builtins implemented in JavaScript.
-#define BUILTINS_LIST_JS(V) \
- V(EQUALS, 1) \
- V(STRICT_EQUALS, 1) \
- V(COMPARE, 2) \
- V(ADD, 1) \
- V(SUB, 1) \
- V(MUL, 1) \
- V(DIV, 1) \
- V(MOD, 1) \
- V(BIT_OR, 1) \
- V(BIT_AND, 1) \
- V(BIT_XOR, 1) \
- V(SHL, 1) \
- V(SAR, 1) \
- V(SHR, 1) \
- V(DELETE, 2) \
- V(IN, 1) \
- V(INSTANCE_OF, 1) \
- V(FILTER_KEY, 1) \
- V(CALL_NON_FUNCTION, 0) \
- V(CALL_NON_FUNCTION_AS_CONSTRUCTOR, 0) \
- V(CALL_FUNCTION_PROXY, 1) \
- V(CALL_FUNCTION_PROXY_AS_CONSTRUCTOR, 1) \
- V(TO_OBJECT, 0) \
- V(TO_NUMBER, 0) \
- V(TO_STRING, 0) \
- V(STRING_ADD_LEFT, 1) \
- V(STRING_ADD_RIGHT, 1) \
- V(APPLY_PREPARE, 1) \
- V(STACK_OVERFLOW, 1)
class BuiltinFunctionTable;
class ObjectVisitor;
@@ -235,13 +320,6 @@
cfunction_count
};
- enum JavaScript {
-#define DEF_ENUM(name, ignore) name,
- BUILTINS_LIST_JS(DEF_ENUM)
-#undef DEF_ENUM
- id_count
- };
-
#define DECLARE_BUILTIN_ACCESSOR_C(name, ignore) Handle<Code> name();
#define DECLARE_BUILTIN_ACCESSOR_A(name, kind, state, extra) \
Handle<Code> name();
@@ -253,6 +331,10 @@
#undef DECLARE_BUILTIN_ACCESSOR_C
#undef DECLARE_BUILTIN_ACCESSOR_A
+ // Convenience wrappers.
+ Handle<Code> CallFunction(ConvertReceiverMode = ConvertReceiverMode::kAny);
+ Handle<Code> Call(ConvertReceiverMode = ConvertReceiverMode::kAny);
+
Code* builtin(Name name) {
// Code::cast cannot be used here since we access builtins
// during the marking phase of mark sweep. See IC::Clear.
@@ -267,18 +349,18 @@
return c_functions_[id];
}
- static const char* GetName(JavaScript id) { return javascript_names_[id]; }
const char* name(int index) {
DCHECK(index >= 0);
DCHECK(index < builtin_count);
return names_[index];
}
- static int GetArgumentsCount(JavaScript id) { return javascript_argc_[id]; }
- Handle<Code> GetCode(JavaScript id, bool* resolved);
- static int NumberOfJavaScriptBuiltins() { return id_count; }
bool is_initialized() const { return initialized_; }
+ MUST_USE_RESULT static MaybeHandle<Object> InvokeApiFunction(
+ Handle<JSFunction> function, Handle<Object> receiver, int argc,
+ Handle<Object> args[]);
+
private:
Builtins();
@@ -290,17 +372,17 @@
// function f, we use an Object* array here.
Object* builtins_[builtin_count];
const char* names_[builtin_count];
- static const char* const javascript_names_[id_count];
- static int const javascript_argc_[id_count];
static void Generate_Adaptor(MacroAssembler* masm,
CFunctionId id,
BuiltinExtraArguments extra_args);
+ static void Generate_ConstructedNonConstructable(MacroAssembler* masm);
static void Generate_CompileLazy(MacroAssembler* masm);
static void Generate_InOptimizationQueue(MacroAssembler* masm);
static void Generate_CompileOptimized(MacroAssembler* masm);
static void Generate_CompileOptimizedConcurrent(MacroAssembler* masm);
static void Generate_JSConstructStubGeneric(MacroAssembler* masm);
+ static void Generate_JSBuiltinsConstructStub(MacroAssembler* masm);
static void Generate_JSConstructStubApi(MacroAssembler* masm);
static void Generate_JSEntryTrampoline(MacroAssembler* masm);
static void Generate_JSConstructEntryTrampoline(MacroAssembler* masm);
@@ -311,18 +393,115 @@
static void Generate_NotifyStubFailureSaveDoubles(MacroAssembler* masm);
static void Generate_ArgumentsAdaptorTrampoline(MacroAssembler* masm);
- static void Generate_FunctionCall(MacroAssembler* masm);
- static void Generate_FunctionApply(MacroAssembler* masm);
+ static void Generate_Apply(MacroAssembler* masm);
+
+ // ES6 section 9.2.1 [[Call]] ( thisArgument, argumentsList)
+ static void Generate_CallFunction(MacroAssembler* masm,
+ ConvertReceiverMode mode);
+ static void Generate_CallFunction_ReceiverIsNullOrUndefined(
+ MacroAssembler* masm) {
+ Generate_CallFunction(masm, ConvertReceiverMode::kNullOrUndefined);
+ }
+ static void Generate_CallFunction_ReceiverIsNotNullOrUndefined(
+ MacroAssembler* masm) {
+ Generate_CallFunction(masm, ConvertReceiverMode::kNotNullOrUndefined);
+ }
+ static void Generate_CallFunction_ReceiverIsAny(MacroAssembler* masm) {
+ Generate_CallFunction(masm, ConvertReceiverMode::kAny);
+ }
+ // ES6 section 9.4.1.1 [[Call]] ( thisArgument, argumentsList)
+ static void Generate_CallBoundFunction(MacroAssembler* masm);
+ // ES6 section 7.3.12 Call(F, V, [argumentsList])
+ static void Generate_Call(MacroAssembler* masm, ConvertReceiverMode mode);
+ static void Generate_Call_ReceiverIsNullOrUndefined(MacroAssembler* masm) {
+ Generate_Call(masm, ConvertReceiverMode::kNullOrUndefined);
+ }
+ static void Generate_Call_ReceiverIsNotNullOrUndefined(MacroAssembler* masm) {
+ Generate_Call(masm, ConvertReceiverMode::kNotNullOrUndefined);
+ }
+ static void Generate_Call_ReceiverIsAny(MacroAssembler* masm) {
+ Generate_Call(masm, ConvertReceiverMode::kAny);
+ }
+
+ // ES6 section 9.2.2 [[Construct]] ( argumentsList, newTarget)
+ static void Generate_ConstructFunction(MacroAssembler* masm);
+ // ES6 section 9.4.1.2 [[Construct]] (argumentsList, newTarget)
+ static void Generate_ConstructBoundFunction(MacroAssembler* masm);
+ // ES6 section 9.5.14 [[Construct]] ( argumentsList, newTarget)
+ static void Generate_ConstructProxy(MacroAssembler* masm);
+ // ES6 section 7.3.13 Construct (F, [argumentsList], [newTarget])
+ static void Generate_Construct(MacroAssembler* masm);
+
+ static void Generate_HandleFastApiCall(MacroAssembler* masm);
+
+ static void Generate_DatePrototype_GetField(MacroAssembler* masm,
+ int field_index);
+ // ES6 section 20.3.4.2 Date.prototype.getDate ( )
+ static void Generate_DatePrototypeGetDate(MacroAssembler* masm);
+ // ES6 section 20.3.4.3 Date.prototype.getDay ( )
+ static void Generate_DatePrototypeGetDay(MacroAssembler* masm);
+ // ES6 section 20.3.4.4 Date.prototype.getFullYear ( )
+ static void Generate_DatePrototypeGetFullYear(MacroAssembler* masm);
+ // ES6 section 20.3.4.5 Date.prototype.getHours ( )
+ static void Generate_DatePrototypeGetHours(MacroAssembler* masm);
+ // ES6 section 20.3.4.6 Date.prototype.getMilliseconds ( )
+ static void Generate_DatePrototypeGetMilliseconds(MacroAssembler* masm);
+ // ES6 section 20.3.4.7 Date.prototype.getMinutes ( )
+ static void Generate_DatePrototypeGetMinutes(MacroAssembler* masm);
+ // ES6 section 20.3.4.8 Date.prototype.getMonth ( )
+ static void Generate_DatePrototypeGetMonth(MacroAssembler* masm);
+ // ES6 section 20.3.4.9 Date.prototype.getSeconds ( )
+ static void Generate_DatePrototypeGetSeconds(MacroAssembler* masm);
+ // ES6 section 20.3.4.10 Date.prototype.getTime ( )
+ static void Generate_DatePrototypeGetTime(MacroAssembler* masm);
+ // ES6 section 20.3.4.11 Date.prototype.getTimezoneOffset ( )
+ static void Generate_DatePrototypeGetTimezoneOffset(MacroAssembler* masm);
+ // ES6 section 20.3.4.12 Date.prototype.getUTCDate ( )
+ static void Generate_DatePrototypeGetUTCDate(MacroAssembler* masm);
+ // ES6 section 20.3.4.13 Date.prototype.getUTCDay ( )
+ static void Generate_DatePrototypeGetUTCDay(MacroAssembler* masm);
+ // ES6 section 20.3.4.14 Date.prototype.getUTCFullYear ( )
+ static void Generate_DatePrototypeGetUTCFullYear(MacroAssembler* masm);
+ // ES6 section 20.3.4.15 Date.prototype.getUTCHours ( )
+ static void Generate_DatePrototypeGetUTCHours(MacroAssembler* masm);
+ // ES6 section 20.3.4.16 Date.prototype.getUTCMilliseconds ( )
+ static void Generate_DatePrototypeGetUTCMilliseconds(MacroAssembler* masm);
+ // ES6 section 20.3.4.17 Date.prototype.getUTCMinutes ( )
+ static void Generate_DatePrototypeGetUTCMinutes(MacroAssembler* masm);
+ // ES6 section 20.3.4.18 Date.prototype.getUTCMonth ( )
+ static void Generate_DatePrototypeGetUTCMonth(MacroAssembler* masm);
+ // ES6 section 20.3.4.19 Date.prototype.getUTCSeconds ( )
+ static void Generate_DatePrototypeGetUTCSeconds(MacroAssembler* masm);
+
+ static void Generate_FunctionPrototypeApply(MacroAssembler* masm);
+ static void Generate_FunctionPrototypeCall(MacroAssembler* masm);
+
+ static void Generate_ReflectApply(MacroAssembler* masm);
+ static void Generate_ReflectConstruct(MacroAssembler* masm);
static void Generate_InternalArrayCode(MacroAssembler* masm);
static void Generate_ArrayCode(MacroAssembler* masm);
- static void Generate_StringConstructCode(MacroAssembler* masm);
+ // ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Call]] case.
+ static void Generate_NumberConstructor(MacroAssembler* masm);
+ // ES6 section 20.1.1.1 Number ( [ value ] ) for the [[Construct]] case.
+ static void Generate_NumberConstructor_ConstructStub(MacroAssembler* masm);
+
+ static void Generate_StringConstructor(MacroAssembler* masm);
+ static void Generate_StringConstructor_ConstructStub(MacroAssembler* masm);
static void Generate_OnStackReplacement(MacroAssembler* masm);
static void Generate_OsrAfterStackCheck(MacroAssembler* masm);
static void Generate_InterruptCheck(MacroAssembler* masm);
static void Generate_StackCheck(MacroAssembler* masm);
+ static void Generate_InterpreterEntryTrampoline(MacroAssembler* masm);
+ static void Generate_InterpreterExitTrampoline(MacroAssembler* masm);
+ static void Generate_InterpreterPushArgsAndCall(MacroAssembler* masm);
+ static void Generate_InterpreterPushArgsAndConstruct(MacroAssembler* masm);
+ static void Generate_InterpreterNotifyDeoptimized(MacroAssembler* masm);
+ static void Generate_InterpreterNotifySoftDeoptimized(MacroAssembler* masm);
+ static void Generate_InterpreterNotifyLazyDeoptimized(MacroAssembler* masm);
+
#define DECLARE_CODE_AGE_BUILTIN_GENERATOR(C) \
static void Generate_Make##C##CodeYoungAgainEvenMarking( \
MacroAssembler* masm); \
@@ -331,6 +510,7 @@
CODE_AGE_LIST(DECLARE_CODE_AGE_BUILTIN_GENERATOR)
#undef DECLARE_CODE_AGE_BUILTIN_GENERATOR
+ static void Generate_MarkCodeAsToBeExecutedOnce(MacroAssembler* masm);
static void Generate_MarkCodeAsExecutedOnce(MacroAssembler* masm);
static void Generate_MarkCodeAsExecutedTwice(MacroAssembler* masm);
@@ -344,6 +524,7 @@
DISALLOW_COPY_AND_ASSIGN(Builtins);
};
-} } // namespace v8::internal
+} // namespace internal
+} // namespace v8
#endif // V8_BUILTINS_H_