summaryrefslogtreecommitdiff
path: root/deps/v8/src/interface-descriptors.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/v8/src/interface-descriptors.h')
-rw-r--r--deps/v8/src/interface-descriptors.h480
1 files changed, 186 insertions, 294 deletions
diff --git a/deps/v8/src/interface-descriptors.h b/deps/v8/src/interface-descriptors.h
index af59bdb121..09dc377338 100644
--- a/deps/v8/src/interface-descriptors.h
+++ b/deps/v8/src/interface-descriptors.h
@@ -15,137 +15,130 @@ namespace internal {
class PlatformInterfaceDescriptor;
-#define INTERFACE_DESCRIPTOR_LIST(V) \
- V(Void) \
- V(ContextOnly) \
- V(OnStackWith1Args) \
- V(OnStackWith2Args) \
- V(OnStackWith3Args) \
- V(OnStackWith4Args) \
- V(OnStackWith5Args) \
- V(OnStackWith6Args) \
- V(OnStackWith7Args) \
- V(Load) \
- V(LoadWithVector) \
- V(LoadGlobal) \
- V(LoadGlobalWithVector) \
- V(Store) \
- V(StoreWithVector) \
- V(StoreTransition) \
- V(VectorStoreTransition) \
- V(VarArgFunction) \
- V(FastNewClosure) \
- V(FastNewFunctionContext) \
- V(FastNewObject) \
- V(FastNewRestParameter) \
- V(FastNewSloppyArguments) \
- V(FastNewStrictArguments) \
- V(TypeConversion) \
- V(Typeof) \
- V(FastCloneRegExp) \
- V(FastCloneShallowArray) \
- V(FastCloneShallowObject) \
- V(CreateAllocationSite) \
- V(CreateWeakCell) \
- V(CallFunction) \
- V(CallFunctionWithFeedback) \
- V(CallFunctionWithFeedbackAndVector) \
- V(CallConstruct) \
- V(CallTrampoline) \
- V(ConstructStub) \
- V(ConstructTrampoline) \
- V(RegExpConstructResult) \
- V(CopyFastSmiOrObjectElements) \
- V(TransitionElementsKind) \
- V(AllocateHeapNumber) \
- V(AllocateFloat32x4) \
- V(AllocateInt32x4) \
- V(AllocateUint32x4) \
- V(AllocateBool32x4) \
- V(AllocateInt16x8) \
- V(AllocateUint16x8) \
- V(AllocateBool16x8) \
- V(AllocateInt8x16) \
- V(AllocateUint8x16) \
- V(AllocateBool8x16) \
- V(ArrayNoArgumentConstructor) \
- V(ArraySingleArgumentConstructor) \
- V(ArrayNArgumentsConstructor) \
- V(Compare) \
- V(BinaryOp) \
- V(BinaryOpWithAllocationSite) \
- V(BinaryOpWithVector) \
- V(CountOp) \
- V(StringAdd) \
- V(StringCompare) \
- V(Keyed) \
- V(Named) \
- V(HasProperty) \
- V(ForInFilter) \
- V(GetProperty) \
- V(CallHandler) \
- V(ArgumentAdaptor) \
- V(ApiCallbackWith0Args) \
- V(ApiCallbackWith1Args) \
- V(ApiCallbackWith2Args) \
- V(ApiCallbackWith3Args) \
- V(ApiCallbackWith4Args) \
- V(ApiCallbackWith5Args) \
- V(ApiCallbackWith6Args) \
- V(ApiCallbackWith7Args) \
- V(ApiGetter) \
- V(StoreGlobalViaContext) \
- V(MathPowTagged) \
- V(MathPowInteger) \
- V(GrowArrayElements) \
- V(InterpreterDispatch) \
- V(InterpreterPushArgsAndCall) \
- V(InterpreterPushArgsAndConstruct) \
- V(InterpreterCEntry) \
+#define INTERFACE_DESCRIPTOR_LIST(V) \
+ V(Void) \
+ V(ContextOnly) \
+ V(Load) \
+ V(LoadWithVector) \
+ V(LoadGlobal) \
+ V(LoadGlobalWithVector) \
+ V(Store) \
+ V(StoreWithVector) \
+ V(StoreNamedTransition) \
+ V(StoreTransition) \
+ V(VarArgFunction) \
+ V(FastNewClosure) \
+ V(FastNewFunctionContext) \
+ V(FastNewObject) \
+ V(FastNewRestParameter) \
+ V(FastNewSloppyArguments) \
+ V(FastNewStrictArguments) \
+ V(TypeConversion) \
+ V(Typeof) \
+ V(FastCloneRegExp) \
+ V(FastCloneShallowArray) \
+ V(FastCloneShallowObject) \
+ V(CreateAllocationSite) \
+ V(CreateWeakCell) \
+ V(CallFunction) \
+ V(CallFunctionWithFeedback) \
+ V(CallFunctionWithFeedbackAndVector) \
+ V(CallConstruct) \
+ V(CallTrampoline) \
+ V(ConstructStub) \
+ V(ConstructTrampoline) \
+ V(RegExpExec) \
+ V(RegExpConstructResult) \
+ V(CopyFastSmiOrObjectElements) \
+ V(TransitionElementsKind) \
+ V(AllocateHeapNumber) \
+ V(AllocateFloat32x4) \
+ V(AllocateInt32x4) \
+ V(AllocateUint32x4) \
+ V(AllocateBool32x4) \
+ V(AllocateInt16x8) \
+ V(AllocateUint16x8) \
+ V(AllocateBool16x8) \
+ V(AllocateInt8x16) \
+ V(AllocateUint8x16) \
+ V(AllocateBool8x16) \
+ V(ArrayNoArgumentConstructor) \
+ V(ArraySingleArgumentConstructor) \
+ V(ArrayNArgumentsConstructor) \
+ V(Compare) \
+ V(BinaryOp) \
+ V(BinaryOpWithAllocationSite) \
+ V(BinaryOpWithVector) \
+ V(CountOp) \
+ V(StringAdd) \
+ V(StringCompare) \
+ V(SubString) \
+ V(Keyed) \
+ V(Named) \
+ V(HasProperty) \
+ V(ForInFilter) \
+ V(GetProperty) \
+ V(CallHandler) \
+ V(ArgumentAdaptor) \
+ V(ApiCallback) \
+ V(ApiGetter) \
+ V(StoreGlobalViaContext) \
+ V(MathPowTagged) \
+ V(MathPowInteger) \
+ V(GrowArrayElements) \
+ V(InterpreterDispatch) \
+ V(InterpreterPushArgsAndCall) \
+ V(InterpreterPushArgsAndConstruct) \
+ V(InterpreterPushArgsAndConstructArray) \
+ V(InterpreterCEntry) \
V(ResumeGenerator)
class CallInterfaceDescriptorData {
public:
- CallInterfaceDescriptorData()
- : register_param_count_(-1), function_type_(nullptr) {}
+ CallInterfaceDescriptorData() : register_param_count_(-1), param_count_(-1) {}
// A copy of the passed in registers and param_representations is made
// and owned by the CallInterfaceDescriptorData.
- void InitializePlatformIndependent(FunctionType* function_type) {
- function_type_ = function_type;
- }
-
- // TODO(mvstanton): Instead of taking parallel arrays register and
- // param_representations, how about a struct that puts the representation
- // and register side by side (eg, RegRep(r1, Representation::Tagged()).
- // The same should go for the CodeStubDescriptor class.
void InitializePlatformSpecific(
int register_parameter_count, const Register* registers,
PlatformInterfaceDescriptor* platform_descriptor = NULL);
- bool IsInitialized() const { return register_param_count_ >= 0; }
+ // if machine_types is null, then an array of size
+ // (register_parameter_count + extra_parameter_count) will be created
+ // with MachineType::AnyTagged() for each member.
+ //
+ // if machine_types is not null, then it should be of the size
+ // register_parameter_count. Those members of the parameter array
+ // will be initialized from {machine_types}, and the rest initialized
+ // to MachineType::AnyTagged().
+ void InitializePlatformIndependent(int parameter_count,
+ int extra_parameter_count,
+ const MachineType* machine_types);
+
+ bool IsInitialized() const {
+ return register_param_count_ >= 0 && param_count_ >= 0;
+ }
- int param_count() const { return function_type_->Arity(); }
+ int param_count() const { return param_count_; }
int register_param_count() const { return register_param_count_; }
Register register_param(int index) const { return register_params_[index]; }
Register* register_params() const { return register_params_.get(); }
- Type* param_type(int index) const { return function_type_->Parameter(index); }
+ MachineType param_type(int index) const { return machine_types_[index]; }
PlatformInterfaceDescriptor* platform_specific_descriptor() const {
return platform_specific_descriptor_;
}
private:
int register_param_count_;
+ int param_count_;
// The Register params are allocated dynamically by the
// InterfaceDescriptor, and freed on destruction. This is because static
// arrays of Registers cause creation of runtime static initializers
// which we don't want.
std::unique_ptr<Register[]> register_params_;
-
- // Specifies types for parameters and return
- FunctionType* function_type_;
+ std::unique_ptr<MachineType[]> machine_types_;
PlatformInterfaceDescriptor* platform_specific_descriptor_;
@@ -186,7 +179,7 @@ class CallInterfaceDescriptor {
return data()->register_param(index);
}
- Type* GetParameterType(int index) const {
+ MachineType GetParameterType(int index) const {
DCHECK(index < data()->param_count());
return data()->param_type(index);
}
@@ -200,21 +193,18 @@ class CallInterfaceDescriptor {
const char* DebugName(Isolate* isolate) const;
- static FunctionType* BuildDefaultFunctionType(Isolate* isolate,
- int parameter_count);
-
protected:
const CallInterfaceDescriptorData* data() const { return data_; }
- virtual FunctionType* BuildCallInterfaceDescriptorFunctionType(
- Isolate* isolate, int register_param_count) {
- return BuildDefaultFunctionType(isolate, register_param_count);
- }
-
virtual void InitializePlatformSpecific(CallInterfaceDescriptorData* data) {
UNREACHABLE();
}
+ virtual void InitializePlatformIndependent(
+ CallInterfaceDescriptorData* data) {
+ data->InitializePlatformIndependent(data->register_param_count(), 0, NULL);
+ }
+
void Initialize(Isolate* isolate, CallDescriptors::Key key) {
if (!data()->IsInitialized()) {
// We should only initialize descriptors on the isolate's main thread.
@@ -222,9 +212,7 @@ class CallInterfaceDescriptor {
CallInterfaceDescriptorData* d = isolate->call_descriptor_data(key);
DCHECK(d == data()); // d should be a modifiable pointer to data().
InitializePlatformSpecific(d);
- FunctionType* function_type = BuildCallInterfaceDescriptorFunctionType(
- isolate, d->register_param_count());
- d->InitializePlatformIndependent(function_type);
+ InitializePlatformIndependent(d);
}
}
@@ -264,23 +252,26 @@ class CallInterfaceDescriptor {
\
public:
-#define DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(name, base) \
- DECLARE_DESCRIPTOR(name, base) \
- protected: \
- FunctionType* BuildCallInterfaceDescriptorFunctionType( \
- Isolate* isolate, int register_param_count) override; \
- \
+#define DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(name, base) \
+ DECLARE_DESCRIPTOR(name, base) \
+ protected: \
+ void InitializePlatformIndependent(CallInterfaceDescriptorData* data) \
+ override; \
+ \
public:
-#define DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(name, base, arg) \
- DECLARE_DESCRIPTOR_WITH_BASE(name, base) \
- protected: \
- FunctionType* BuildCallInterfaceDescriptorFunctionType( \
- Isolate* isolate, int register_param_count) override { \
- return BuildCallInterfaceDescriptorFunctionTypeWithArg( \
- isolate, register_param_count, arg); \
- } \
- \
+#define DECLARE_DESCRIPTOR_WITH_STACK_ARGS(name, base) \
+ DECLARE_DESCRIPTOR_WITH_BASE(name, base) \
+ protected: \
+ void InitializePlatformIndependent(CallInterfaceDescriptorData* data) \
+ override { \
+ data->InitializePlatformIndependent(0, kParameterCount, NULL); \
+ } \
+ void InitializePlatformSpecific(CallInterfaceDescriptorData* data) \
+ override { \
+ data->InitializePlatformSpecific(0, nullptr); \
+ } \
+ \
public:
#define DEFINE_PARAMETERS(...) \
@@ -301,73 +292,6 @@ class ContextOnlyDescriptor : public CallInterfaceDescriptor {
DECLARE_DESCRIPTOR(ContextOnlyDescriptor, CallInterfaceDescriptor)
};
-// The OnStackWith*ArgsDescriptors have a lot of boilerplate. The superclass
-// OnStackArgsDescriptorBase is not meant to be instantiated directly and has no
-// public constructors to ensure this is so.contains all the logic, and the
-//
-// Use OnStackArgsDescriptorBase::ForArgs(isolate, parameter_count) to
-// instantiate a descriptor with the number of args.
-class OnStackArgsDescriptorBase : public CallInterfaceDescriptor {
- public:
- static CallInterfaceDescriptor ForArgs(Isolate* isolate, int parameter_count);
-
- protected:
- OnStackArgsDescriptorBase(Isolate* isolate, CallDescriptors::Key key)
- : CallInterfaceDescriptor(isolate, key) {}
- void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override;
- FunctionType* BuildCallInterfaceDescriptorFunctionTypeWithArg(
- Isolate* isolate, int register_parameter_count, int parameter_count);
-};
-
-class OnStackWith1ArgsDescriptor : public OnStackArgsDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith1ArgsDescriptor,
- OnStackArgsDescriptorBase,
- 1)
-};
-
-class OnStackWith2ArgsDescriptor : public OnStackArgsDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith2ArgsDescriptor,
- OnStackArgsDescriptorBase,
- 2)
-};
-
-class OnStackWith3ArgsDescriptor : public OnStackArgsDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith3ArgsDescriptor,
- OnStackArgsDescriptorBase,
- 3)
-};
-
-class OnStackWith4ArgsDescriptor : public OnStackArgsDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith4ArgsDescriptor,
- OnStackArgsDescriptorBase,
- 4)
-};
-
-class OnStackWith5ArgsDescriptor : public OnStackArgsDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith5ArgsDescriptor,
- OnStackArgsDescriptorBase,
- 5)
-};
-
-class OnStackWith6ArgsDescriptor : public OnStackArgsDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith6ArgsDescriptor,
- OnStackArgsDescriptorBase,
- 6)
-};
-
-class OnStackWith7ArgsDescriptor : public OnStackArgsDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(OnStackWith7ArgsDescriptor,
- OnStackArgsDescriptorBase,
- 7)
-};
-
// LoadDescriptor is used by all stubs that implement Load/KeyedLoad ICs.
class LoadDescriptor : public CallInterfaceDescriptor {
public:
@@ -401,42 +325,47 @@ class StoreDescriptor : public CallInterfaceDescriptor {
static const Register NameRegister();
static const Register ValueRegister();
static const Register SlotRegister();
-};
+#if V8_TARGET_ARCH_IA32 || V8_TARGET_ARCH_X87
+ static const bool kPassLastArgsOnStack = true;
+#else
+ static const bool kPassLastArgsOnStack = false;
+#endif
+
+ // Pass value and slot through the stack.
+ static const int kStackArgumentsCount = kPassLastArgsOnStack ? 2 : 0;
+};
class StoreTransitionDescriptor : public StoreDescriptor {
public:
- DEFINE_PARAMETERS(kReceiver, kName, kValue, kMap)
+ DEFINE_PARAMETERS(kReceiver, kName, kMap, kValue, kSlot, kVector)
DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreTransitionDescriptor,
StoreDescriptor)
static const Register MapRegister();
-};
+ static const Register SlotRegister();
+ static const Register VectorRegister();
+ // Pass value, slot and vector through the stack.
+ static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0;
+};
-class VectorStoreTransitionDescriptor : public StoreDescriptor {
+class StoreNamedTransitionDescriptor : public StoreTransitionDescriptor {
public:
- DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(VectorStoreTransitionDescriptor,
- StoreDescriptor)
-
- // TODO(ishell): use DEFINE_PARAMETERS macro here
- // Extends StoreDescriptor with Map parameter.
- enum ParameterIndices {
- kReceiver = 0,
- kName = 1,
- kValue = 2,
+ DEFINE_PARAMETERS(kReceiver, kFieldOffset, kMap, kValue, kSlot, kVector,
+ kName)
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(StoreNamedTransitionDescriptor,
+ StoreTransitionDescriptor)
- kMap = 3,
-
- kSlot = 4, // not present on ia32.
- kVirtualSlotVector = 4,
-
- kVector = 5
- };
+ // Always pass name on the stack.
+ static const bool kPassLastArgsOnStack = true;
+ static const int kStackArgumentsCount =
+ StoreTransitionDescriptor::kStackArgumentsCount + 1;
- static const Register MapRegister();
- static const Register SlotRegister();
- static const Register VectorRegister();
+ static const Register NameRegister() { return no_reg; }
+ static const Register FieldOffsetRegister() {
+ return StoreTransitionDescriptor::NameRegister();
+ }
};
class StoreWithVectorDescriptor : public StoreDescriptor {
@@ -446,6 +375,9 @@ class StoreWithVectorDescriptor : public StoreDescriptor {
StoreDescriptor)
static const Register VectorRegister();
+
+ // Pass value, slot and vector through the stack.
+ static const int kStackArgumentsCount = kPassLastArgsOnStack ? 3 : 0;
};
class LoadWithVectorDescriptor : public LoadDescriptor {
@@ -632,6 +564,12 @@ class CallConstructDescriptor : public CallInterfaceDescriptor {
DECLARE_DESCRIPTOR(CallConstructDescriptor, CallInterfaceDescriptor)
};
+class RegExpExecDescriptor : public CallInterfaceDescriptor {
+ public:
+ DEFINE_PARAMETERS(kRegExpObject, kString, kPreviousIndex, kLastMatchInfo)
+ DECLARE_DESCRIPTOR_WITH_STACK_ARGS(RegExpExecDescriptor,
+ CallInterfaceDescriptor)
+};
class RegExpConstructResultDescriptor : public CallInterfaceDescriptor {
public:
@@ -751,6 +689,13 @@ class StringCompareDescriptor : public CallInterfaceDescriptor {
static const Register RightRegister();
};
+class SubStringDescriptor : public CallInterfaceDescriptor {
+ public:
+ DEFINE_PARAMETERS(kString, kFrom, kTo)
+ DECLARE_DESCRIPTOR_WITH_STACK_ARGS(SubStringDescriptor,
+ CallInterfaceDescriptor)
+};
+
// TODO(ishell): not used, remove.
class KeyedDescriptor : public CallInterfaceDescriptor {
public:
@@ -778,79 +723,13 @@ class ArgumentAdaptorDescriptor : public CallInterfaceDescriptor {
CallInterfaceDescriptor)
};
-// The ApiCallback*Descriptors have a lot of boilerplate. The superclass
-// ApiCallbackDescriptorBase contains all the logic, and the
-// ApiCallbackWith*ArgsDescriptor merely instantiate these with a
-// parameter for the number of args.
-//
-// The base class is not meant to be instantiated directly and has no
-// public constructors to ensure this is so.
-//
-// The simplest usage for all the ApiCallback*Descriptors is probably
-// ApiCallbackDescriptorBase::ForArgs(isolate, argc)
-//
-class ApiCallbackDescriptorBase : public CallInterfaceDescriptor {
+class ApiCallbackDescriptor : public CallInterfaceDescriptor {
public:
DEFINE_PARAMETERS(kFunction, kCallData, kHolder, kApiFunctionAddress)
- static CallInterfaceDescriptor ForArgs(Isolate* isolate, int argc);
-
- protected:
- ApiCallbackDescriptorBase(Isolate* isolate, CallDescriptors::Key key)
- : CallInterfaceDescriptor(isolate, key) {}
- void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override;
- FunctionType* BuildCallInterfaceDescriptorFunctionTypeWithArg(
- Isolate* isolate, int parameter_count, int argc);
-};
-
-class ApiCallbackWith0ArgsDescriptor : public ApiCallbackDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(
- ApiCallbackWith0ArgsDescriptor, ApiCallbackDescriptorBase, 0)
-};
-
-class ApiCallbackWith1ArgsDescriptor : public ApiCallbackDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(
- ApiCallbackWith1ArgsDescriptor, ApiCallbackDescriptorBase, 1)
-};
-
-class ApiCallbackWith2ArgsDescriptor : public ApiCallbackDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(
- ApiCallbackWith2ArgsDescriptor, ApiCallbackDescriptorBase, 2)
-};
-
-class ApiCallbackWith3ArgsDescriptor : public ApiCallbackDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(
- ApiCallbackWith3ArgsDescriptor, ApiCallbackDescriptorBase, 3)
-};
-
-class ApiCallbackWith4ArgsDescriptor : public ApiCallbackDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(
- ApiCallbackWith4ArgsDescriptor, ApiCallbackDescriptorBase, 4)
-};
-
-class ApiCallbackWith5ArgsDescriptor : public ApiCallbackDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(
- ApiCallbackWith5ArgsDescriptor, ApiCallbackDescriptorBase, 5)
-};
-
-class ApiCallbackWith6ArgsDescriptor : public ApiCallbackDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(
- ApiCallbackWith6ArgsDescriptor, ApiCallbackDescriptorBase, 6)
-};
-
-class ApiCallbackWith7ArgsDescriptor : public ApiCallbackDescriptorBase {
- public:
- DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(
- ApiCallbackWith7ArgsDescriptor, ApiCallbackDescriptorBase, 7)
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(ApiCallbackDescriptor,
+ CallInterfaceDescriptor)
};
-
class ApiGetterDescriptor : public CallInterfaceDescriptor {
public:
DEFINE_PARAMETERS(kReceiver, kHolder, kCallback)
@@ -904,22 +783,35 @@ class InterpreterDispatchDescriptor : public CallInterfaceDescriptor {
class InterpreterPushArgsAndCallDescriptor : public CallInterfaceDescriptor {
public:
- DECLARE_DESCRIPTOR(InterpreterPushArgsAndCallDescriptor,
- CallInterfaceDescriptor)
+ DEFINE_PARAMETERS(kNumberOfArguments, kFirstArgument, kFunction)
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(
+ InterpreterPushArgsAndCallDescriptor, CallInterfaceDescriptor)
};
class InterpreterPushArgsAndConstructDescriptor
: public CallInterfaceDescriptor {
public:
- DECLARE_DESCRIPTOR(InterpreterPushArgsAndConstructDescriptor,
- CallInterfaceDescriptor)
+ DEFINE_PARAMETERS(kNumberOfArguments, kNewTarget, kConstructor,
+ kFeedbackElement, kFirstArgument)
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(
+ InterpreterPushArgsAndConstructDescriptor, CallInterfaceDescriptor)
};
+class InterpreterPushArgsAndConstructArrayDescriptor
+ : public CallInterfaceDescriptor {
+ public:
+ DEFINE_PARAMETERS(kNumberOfArguments, kFunction, kFeedbackElement,
+ kFirstArgument)
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(
+ InterpreterPushArgsAndConstructArrayDescriptor, CallInterfaceDescriptor)
+};
class InterpreterCEntryDescriptor : public CallInterfaceDescriptor {
public:
- DECLARE_DESCRIPTOR(InterpreterCEntryDescriptor, CallInterfaceDescriptor)
+ DEFINE_PARAMETERS(kNumberOfArguments, kFirstArgument, kFunctionEntry)
+ DECLARE_DESCRIPTOR_WITH_CUSTOM_FUNCTION_TYPE(InterpreterCEntryDescriptor,
+ CallInterfaceDescriptor)
};
class ResumeGeneratorDescriptor final : public CallInterfaceDescriptor {