| Index: src/code-stubs.h
|
| diff --git a/src/code-stubs.h b/src/code-stubs.h
|
| index 60c4fb9bd500082cbbb7a26dd0e5b36aee4c42a5..30429e9733c8476db07f75fe7cb231444b56b0a4 100644
|
| --- a/src/code-stubs.h
|
| +++ b/src/code-stubs.h
|
| @@ -82,6 +82,7 @@ namespace internal {
|
| V(TransitionElementsKind) \
|
| V(StoreArrayLiteralElement) \
|
| V(StubFailureTrampoline) \
|
| + V(ArrayConstructor) \
|
| V(ProfileEntryHook) \
|
| /* IC Handler stubs */ \
|
| V(LoadField)
|
| @@ -587,6 +588,22 @@ class InstanceofStub: public PlatformCodeStub {
|
| };
|
|
|
|
|
| +class ArrayConstructorStub: public PlatformCodeStub {
|
| + public:
|
| + enum ArgumentCountKey { ANY, NONE, ONE, MORE_THAN_ONE };
|
| + explicit ArrayConstructorStub(Isolate* isolate, int argument_count);
|
| + explicit ArrayConstructorStub(Isolate* isolate);
|
| +
|
| + void Generate(MacroAssembler* masm);
|
| +
|
| + private:
|
| + virtual CodeStub::Major MajorKey() { return ArrayConstructor; }
|
| + virtual int MinorKey() { return argument_count_; }
|
| +
|
| + ArgumentCountKey argument_count_;
|
| +};
|
| +
|
| +
|
| class MathPowStub: public PlatformCodeStub {
|
| public:
|
| enum ExponentType { INTEGER, DOUBLE, TAGGED, ON_STACK};
|
| @@ -1409,13 +1426,39 @@ class TransitionElementsKindStub : public HydrogenCodeStub {
|
| };
|
|
|
|
|
| -class ArrayNoArgumentConstructorStub : public HydrogenCodeStub {
|
| +class ArrayConstructorStubBase : public HydrogenCodeStub {
|
| public:
|
| - ArrayNoArgumentConstructorStub() {
|
| + explicit ArrayConstructorStubBase(ElementsKind kind) {
|
| + bit_field_ = ElementsKindBits::encode(kind);
|
| + }
|
| +
|
| + int MinorKey() { return bit_field_; }
|
| +
|
| + ElementsKind elements_kind() const {
|
| + return ElementsKindBits::decode(bit_field_);
|
| + }
|
| +
|
| + virtual bool IsPregenerated() { return true; }
|
| + static void GenerateStubsAheadOfTime(Isolate* isolate);
|
| + static void InstallDescriptors(Isolate* isolate);
|
| +
|
| + // Parameters accessed via CodeStubGraphBuilder::GetParameter()
|
| + static const int kPropertyCell = 0;
|
| + private:
|
| + class ElementsKindBits: public BitField<ElementsKind, 0, 8> {};
|
| + uint32_t bit_field_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ArrayConstructorStubBase);
|
| +};
|
| +
|
| +
|
| +class ArrayNoArgumentConstructorStub : public ArrayConstructorStubBase {
|
| + public:
|
| + explicit ArrayNoArgumentConstructorStub(ElementsKind kind) :
|
| + ArrayConstructorStubBase(kind) {
|
| }
|
|
|
| Major MajorKey() { return ArrayNoArgumentConstructor; }
|
| - int MinorKey() { return 0; }
|
|
|
| virtual Handle<Code> GenerateCode();
|
|
|
| @@ -1428,13 +1471,13 @@ class ArrayNoArgumentConstructorStub : public HydrogenCodeStub {
|
| };
|
|
|
|
|
| -class ArraySingleArgumentConstructorStub : public HydrogenCodeStub {
|
| +class ArraySingleArgumentConstructorStub : public ArrayConstructorStubBase {
|
| public:
|
| - ArraySingleArgumentConstructorStub() {
|
| + explicit ArraySingleArgumentConstructorStub(ElementsKind kind) :
|
| + ArrayConstructorStubBase(kind) {
|
| }
|
|
|
| Major MajorKey() { return ArraySingleArgumentConstructor; }
|
| - int MinorKey() { return 0; }
|
|
|
| virtual Handle<Code> GenerateCode();
|
|
|
| @@ -1447,13 +1490,13 @@ class ArraySingleArgumentConstructorStub : public HydrogenCodeStub {
|
| };
|
|
|
|
|
| -class ArrayNArgumentsConstructorStub : public HydrogenCodeStub {
|
| +class ArrayNArgumentsConstructorStub : public ArrayConstructorStubBase {
|
| public:
|
| - ArrayNArgumentsConstructorStub() {
|
| + explicit ArrayNArgumentsConstructorStub(ElementsKind kind) :
|
| + ArrayConstructorStubBase(kind) {
|
| }
|
|
|
| Major MajorKey() { return ArrayNArgumentsConstructor; }
|
| - int MinorKey() { return 0; }
|
|
|
| virtual Handle<Code> GenerateCode();
|
|
|
|
|