| Index: src/interface-descriptors.h
|
| diff --git a/src/interface-descriptors.h b/src/interface-descriptors.h
|
| index 8b210c84cfd8b3c96de7a70012494e418903aeda..e97a600fbe24635620719e2be6e6b29824069ec7 100644
|
| --- a/src/interface-descriptors.h
|
| +++ b/src/interface-descriptors.h
|
| @@ -18,13 +18,6 @@ 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) \
|
| @@ -53,6 +46,7 @@ class PlatformInterfaceDescriptor;
|
| V(CallTrampoline) \
|
| V(ConstructStub) \
|
| V(ConstructTrampoline) \
|
| + V(RegExpExec) \
|
| V(RegExpConstructResult) \
|
| V(CopyFastSmiOrObjectElements) \
|
| V(TransitionElementsKind) \
|
| @@ -77,6 +71,7 @@ class PlatformInterfaceDescriptor;
|
| V(CountOp) \
|
| V(StringAdd) \
|
| V(StringCompare) \
|
| + V(SubString) \
|
| V(Keyed) \
|
| V(Named) \
|
| V(HasProperty) \
|
| @@ -264,11 +259,18 @@ class CallInterfaceDescriptor {
|
| \
|
| public:
|
|
|
| -#define DECLARE_DESCRIPTOR_WITH_BASE_AND_FUNCTION_TYPE_ARG(name, base, arg) \
|
| - DECLARE_DESCRIPTOR_WITH_BASE(name, base) \
|
| - protected: \
|
| - int extra_args() const override { return 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(...) \
|
| @@ -289,74 +291,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:
|
| - virtual int extra_args() const { return 0; }
|
| - OnStackArgsDescriptorBase(Isolate* isolate, CallDescriptors::Key key)
|
| - : CallInterfaceDescriptor(isolate, key) {}
|
| - void InitializePlatformSpecific(CallInterfaceDescriptorData* data) override;
|
| - void InitializePlatformIndependent(
|
| - CallInterfaceDescriptorData* data) override;
|
| -};
|
| -
|
| -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:
|
| @@ -598,6 +532,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:
|
| @@ -717,6 +657,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:
|
|
|