From fa63cfaf6d18a123562d28070a60e5019eb68b01 Mon Sep 17 00:00:00 2001 From: "mstarzinger@chromium.org" Date: Fri, 21 Feb 2014 11:19:32 +0000 Subject: [PATCH] Initialize interface descriptor for ToNumberStub. R=svenpanne@chromium.org BUG= Review URL: https://codereview.chromium.org/170303003 git-svn-id: http://v8.googlecode.com/svn/branches/bleeding_edge@19526 ce2b1a6d-e550-0410-aec6-3dcde31c8c00 --- src/code-stubs.cc | 8 ++++++++ src/code-stubs.h | 13 +++++++++++-- src/isolate.cc | 15 ++++++--------- 3 files changed, 25 insertions(+), 11 deletions(-) diff --git a/src/code-stubs.cc b/src/code-stubs.cc index be14cf6e87..fe7d77eaa2 100644 --- a/src/code-stubs.cc +++ b/src/code-stubs.cc @@ -747,6 +747,14 @@ void FastNewContextStub::InstallDescriptors(Isolate* isolate) { } +// static +void FastCloneShallowArrayStub::InstallDescriptors(Isolate* isolate) { + FastCloneShallowArrayStub stub(FastCloneShallowArrayStub::CLONE_ELEMENTS, + DONT_TRACK_ALLOCATION_SITE, 0); + InstallDescriptor(isolate, &stub); +} + + // static void BinaryOpICStub::InstallDescriptors(Isolate* isolate) { BinaryOpICStub stub(Token::ADD, NO_OVERWRITE); diff --git a/src/code-stubs.h b/src/code-stubs.h index 07e34be578..79043d5e0f 100644 --- a/src/code-stubs.h +++ b/src/code-stubs.h @@ -486,6 +486,13 @@ class ToNumberStub: public HydrogenCodeStub { Isolate* isolate, CodeStubInterfaceDescriptor* descriptor); + static void InstallDescriptors(Isolate* isolate) { + ToNumberStub stub; + stub.InitializeInterfaceDescriptor( + isolate, + isolate->code_stub_interface_descriptor(CodeStub::ToNumber)); + } + private: Major MajorKey() { return ToNumber; } int NotMissMinorKey() { return 0; } @@ -624,6 +631,8 @@ class FastCloneShallowArrayStub : public HydrogenCodeStub { Isolate* isolate, CodeStubInterfaceDescriptor* descriptor); + static void InstallDescriptors(Isolate* isolate); + private: Mode mode_; AllocationSiteMode allocation_site_mode_; @@ -1375,7 +1384,7 @@ class CompareNilICStub : public HydrogenCodeStub { Isolate* isolate, CodeStubInterfaceDescriptor* descriptor); - static void InitializeForIsolate(Isolate* isolate) { + static void InstallDescriptors(Isolate* isolate) { CompareNilICStub compare_stub(kNullValue, UNINITIALIZED); compare_stub.InitializeInterfaceDescriptor( isolate, @@ -2332,7 +2341,7 @@ class ToBooleanStub: public HydrogenCodeStub { virtual bool SometimesSetsUpAFrame() { return false; } - static void InitializeForIsolate(Isolate* isolate) { + static void InstallDescriptors(Isolate* isolate) { ToBooleanStub stub; stub.InitializeInterfaceDescriptor( isolate, diff --git a/src/isolate.cc b/src/isolate.cc index ca324603f7..d81e50e223 100644 --- a/src/isolate.cc +++ b/src/isolate.cc @@ -2106,17 +2106,14 @@ bool Isolate::Init(Deserializer* des) { CodeStub::GenerateFPStubs(this); StoreBufferOverflowStub::GenerateFixedRegStubsAheadOfTime(this); StubFailureTrampolineStub::GenerateAheadOfTime(this); - // TODO(mstarzinger): The following is an ugly hack to make sure the - // interface descriptor is initialized even when stubs have been - // deserialized out of the snapshot without the graph builder. - FastCloneShallowArrayStub stub(FastCloneShallowArrayStub::CLONE_ELEMENTS, - DONT_TRACK_ALLOCATION_SITE, 0); - stub.InitializeInterfaceDescriptor( - this, code_stub_interface_descriptor(CodeStub::FastCloneShallowArray)); + // Ensure interface descriptors are initialized even when stubs have been + // deserialized out of the snapshot without using the graph builder. + FastCloneShallowArrayStub::InstallDescriptors(this); BinaryOpICStub::InstallDescriptors(this); BinaryOpWithAllocationSiteStub::InstallDescriptors(this); - CompareNilICStub::InitializeForIsolate(this); - ToBooleanStub::InitializeForIsolate(this); + CompareNilICStub::InstallDescriptors(this); + ToBooleanStub::InstallDescriptors(this); + ToNumberStub::InstallDescriptors(this); ArrayConstructorStubBase::InstallDescriptors(this); InternalArrayConstructorStubBase::InstallDescriptors(this); FastNewClosureStub::InstallDescriptors(this);