Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index 497dde54e7566eac583dcbee7c0019266367c297..8ddce2da53e25800fd481667694995174048a4c5 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -647,4 +647,45 @@ bool ProfileEntryHookStub::SetFunctionEntryHook(FunctionEntryHook entry_hook) { |
} |
+static void InstallDescriptor(Isolate* isolate, HydrogenCodeStub* stub) { |
+ int major_key = stub->MajorKey(); |
+ CodeStubInterfaceDescriptor* descriptor = |
+ isolate->code_stub_interface_descriptor(major_key); |
+ if (!descriptor->initialized()) { |
+ stub->InitializeInterfaceDescriptor(isolate, descriptor); |
+ } |
+} |
+ |
+ |
+void ArrayConstructorStubBase::InstallDescriptors(Isolate* isolate) { |
+ ArrayNoArgumentConstructorStub stub1(GetInitialFastElementsKind()); |
+ InstallDescriptor(isolate, &stub1); |
+ ArraySingleArgumentConstructorStub stub2(GetInitialFastElementsKind()); |
+ InstallDescriptor(isolate, &stub2); |
+ ArrayNArgumentsConstructorStub stub3(GetInitialFastElementsKind()); |
+ InstallDescriptor(isolate, &stub3); |
+} |
+ |
+ |
+ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate) |
+ : argument_count_(ANY) { |
+ ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); |
+} |
+ |
+ |
+ArrayConstructorStub::ArrayConstructorStub(Isolate* isolate, |
+ int argument_count) { |
+ if (argument_count == 0) { |
+ argument_count_ = NONE; |
+ } else if (argument_count == 1) { |
+ argument_count_ = ONE; |
+ } else if (argument_count >= 2) { |
+ argument_count_ = MORE_THAN_ONE; |
+ } else { |
+ UNREACHABLE(); |
+ } |
+ ArrayConstructorStubBase::GenerateStubsAheadOfTime(isolate); |
+} |
+ |
+ |
} } // namespace v8::internal |