| Index: src/arm/code-stubs-arm.cc
|
| diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc
|
| index ad04cb5454adff449c9d3236ce65ae0aa80330a7..56a93274abe130fe453cd2ac1ec57f30f8184d13 100644
|
| --- a/src/arm/code-stubs-arm.cc
|
| +++ b/src/arm/code-stubs-arm.cc
|
| @@ -2663,6 +2663,7 @@ void CallIC_ArrayStub::Generate(MacroAssembler* masm) {
|
| __ b(ne, &miss);
|
|
|
| __ mov(r2, r4);
|
| + __ mov(r3, r1);
|
| ArrayConstructorStub stub(masm->isolate(), arg_count());
|
| __ TailCallStub(&stub);
|
|
|
| @@ -4573,6 +4574,7 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) {
|
| // -- r0 : argc (only if argument_count() == ANY)
|
| // -- r1 : constructor
|
| // -- r2 : AllocationSite or undefined
|
| + // -- r3 : original constructor
|
| // -- sp[0] : return address
|
| // -- sp[4] : last argument
|
| // -----------------------------------
|
| @@ -4593,6 +4595,10 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) {
|
| __ AssertUndefinedOrAllocationSite(r2, r4);
|
| }
|
|
|
| + Label subclassing;
|
| + __ cmp(r3, r1);
|
| + __ b(ne, &subclassing);
|
| +
|
| Label no_info;
|
| // Get the elements kind and case on that.
|
| __ CompareRoot(r2, Heap::kUndefinedValueRootIndex);
|
| @@ -4606,6 +4612,9 @@ void ArrayConstructorStub::Generate(MacroAssembler* masm) {
|
|
|
| __ bind(&no_info);
|
| GenerateDispatchToArrayStub(masm, DISABLE_ALLOCATION_SITES);
|
| +
|
| + __ bind(&subclassing);
|
| + __ TailCallRuntime(Runtime::kThrowArrayNotSubclassableError, 0, 1);
|
| }
|
|
|
|
|
|
|