| Index: src/ia32/code-stubs-ia32.cc
|
| diff --git a/src/ia32/code-stubs-ia32.cc b/src/ia32/code-stubs-ia32.cc
|
| index f9bc28dd4bc03240b2f2b280600d442dcdb8c7f1..93cd7d9a3203c9afebfbf975f4a195b373e84a64 100644
|
| --- a/src/ia32/code-stubs-ia32.cc
|
| +++ b/src/ia32/code-stubs-ia32.cc
|
| @@ -4646,7 +4646,7 @@
|
|
|
| void ArrayConstructorStub::Generate(MacroAssembler* masm) {
|
| // ----------- S t a t e -------------
|
| - // -- eax : argc (only if argument_count() is ANY or MORE_THAN_ONE)
|
| + // -- eax : argc (only if argument_count() == ANY)
|
| // -- ebx : AllocationSite or undefined
|
| // -- edi : constructor
|
| // -- edx : Original constructor
|
| @@ -4680,6 +4680,9 @@
|
| __ cmp(ebx, isolate()->factory()->undefined_value());
|
| __ j(equal, &no_info);
|
|
|
| + __ cmp(edx, edi);
|
| + __ j(not_equal, &subclassing);
|
| +
|
| // Only look at the lower 16 bits of the transition info.
|
| __ mov(edx, FieldOperand(ebx, AllocationSite::kTransitionInfoOffset));
|
| __ SmiUntag(edx);
|
| @@ -4690,29 +4693,8 @@
|
| __ bind(&no_info);
|
| GenerateDispatchToArrayStub(masm, DISABLE_ALLOCATION_SITES);
|
|
|
| - // Subclassing.
|
| __ bind(&subclassing);
|
| - __ pop(ecx); // return address.
|
| - __ push(edi);
|
| - __ push(edx);
|
| -
|
| - // Adjust argc.
|
| - switch (argument_count()) {
|
| - case ANY:
|
| - case MORE_THAN_ONE:
|
| - __ add(eax, Immediate(2));
|
| - break;
|
| - case NONE:
|
| - __ mov(eax, Immediate(2));
|
| - break;
|
| - case ONE:
|
| - __ mov(eax, Immediate(3));
|
| - break;
|
| - }
|
| -
|
| - __ push(ecx);
|
| - __ JumpToExternalReference(
|
| - ExternalReference(Runtime::kArrayConstructorWithSubclassing, isolate()));
|
| + __ TailCallRuntime(Runtime::kThrowArrayNotSubclassableError, 0, 1);
|
| }
|
|
|
|
|
|
|