Index: src/compiler/js-generic-lowering.cc |
diff --git a/src/compiler/js-generic-lowering.cc b/src/compiler/js-generic-lowering.cc |
index 06b9b3d0f7b57db1a6be2e6ce397ed2b82d4aa00..dbda563aa5512f03e6831ac50cc93f4d99874af1 100644 |
--- a/src/compiler/js-generic-lowering.cc |
+++ b/src/compiler/js-generic-lowering.cc |
@@ -16,28 +16,13 @@ namespace internal { |
namespace compiler { |
-// TODO(mstarzinger): This is a temporary workaround for non-hydrogen stubs for |
-// which we don't have an interface descriptor yet. Use ReplaceWithStubCall |
-// once these stub have been made into a HydrogenCodeStub. |
-template <typename T> |
-static CodeStubInterfaceDescriptor* GetInterfaceDescriptor(Isolate* isolate, |
- T* stub) { |
- CodeStub::Major key = static_cast<CodeStub*>(stub)->MajorKey(); |
- CodeStubInterfaceDescriptor* d = isolate->code_stub_interface_descriptor(key); |
- stub->InitializeInterfaceDescriptor(d); |
- return d; |
-} |
- |
- |
// TODO(mstarzinger): This is a temporary shim to be able to call an IC stub |
// which doesn't have an interface descriptor yet. It mimics a hydrogen code |
// stub for the underlying IC stub code. |
class LoadICStubShim : public HydrogenCodeStub { |
public: |
LoadICStubShim(Isolate* isolate, ContextualMode contextual_mode) |
- : HydrogenCodeStub(isolate), contextual_mode_(contextual_mode) { |
- i::compiler::GetInterfaceDescriptor(isolate, this); |
- } |
+ : HydrogenCodeStub(isolate), contextual_mode_(contextual_mode) {} |
virtual Handle<Code> GenerateCode() OVERRIDE { |
ExtraICState extra_state = LoadIC::ComputeExtraICState(contextual_mode_); |
@@ -63,9 +48,7 @@ class LoadICStubShim : public HydrogenCodeStub { |
// stub for the underlying IC stub code. |
class KeyedLoadICStubShim : public HydrogenCodeStub { |
public: |
- explicit KeyedLoadICStubShim(Isolate* isolate) : HydrogenCodeStub(isolate) { |
- i::compiler::GetInterfaceDescriptor(isolate, this); |
- } |
+ explicit KeyedLoadICStubShim(Isolate* isolate) : HydrogenCodeStub(isolate) {} |
virtual Handle<Code> GenerateCode() OVERRIDE { |
return isolate()->builtins()->KeyedLoadIC_Initialize(); |
@@ -89,9 +72,7 @@ class KeyedLoadICStubShim : public HydrogenCodeStub { |
class StoreICStubShim : public HydrogenCodeStub { |
public: |
StoreICStubShim(Isolate* isolate, StrictMode strict_mode) |
- : HydrogenCodeStub(isolate), strict_mode_(strict_mode) { |
- i::compiler::GetInterfaceDescriptor(isolate, this); |
- } |
+ : HydrogenCodeStub(isolate), strict_mode_(strict_mode) {} |
virtual Handle<Code> GenerateCode() OVERRIDE { |
return StoreIC::initialize_stub(isolate(), strict_mode_); |
@@ -117,9 +98,7 @@ class StoreICStubShim : public HydrogenCodeStub { |
class KeyedStoreICStubShim : public HydrogenCodeStub { |
public: |
KeyedStoreICStubShim(Isolate* isolate, StrictMode strict_mode) |
- : HydrogenCodeStub(isolate), strict_mode_(strict_mode) { |
- i::compiler::GetInterfaceDescriptor(isolate, this); |
- } |
+ : HydrogenCodeStub(isolate), strict_mode_(strict_mode) {} |
virtual Handle<Code> GenerateCode() OVERRIDE { |
return strict_mode_ == SLOPPY |
@@ -290,10 +269,11 @@ static CallDescriptor::Flags FlagsForNode(Node* node) { |
void JSGenericLowering::ReplaceWithCompareIC(Node* node, Token::Value token, |
bool pure) { |
BinaryOpICStub stub(isolate(), Token::ADD); // TODO(mstarzinger): Hack. |
- CodeStubInterfaceDescriptor* d = stub.GetInterfaceDescriptor(); |
+ CodeStubInterfaceDescriptor d; |
+ stub.InitializeInterfaceDescriptor(&d); |
bool has_frame_state = OperatorProperties::HasFrameStateInput(node->op()); |
CallDescriptor* desc_compare = linkage()->GetStubCallDescriptor( |
- d, 0, CallDescriptor::kPatchableCallSiteWithNop | FlagsForNode(node)); |
+ &d, 0, CallDescriptor::kPatchableCallSiteWithNop | FlagsForNode(node)); |
Handle<Code> ic = CompareIC::GetUninitialized(isolate(), token); |
NodeVector inputs(zone()); |
inputs.reserve(node->InputCount() + 1); |
@@ -340,9 +320,10 @@ void JSGenericLowering::ReplaceWithCompareIC(Node* node, Token::Value token, |
void JSGenericLowering::ReplaceWithStubCall(Node* node, HydrogenCodeStub* stub, |
CallDescriptor::Flags flags) { |
- CodeStubInterfaceDescriptor* d = stub->GetInterfaceDescriptor(); |
+ CodeStubInterfaceDescriptor d; |
+ stub->InitializeInterfaceDescriptor(&d); |
CallDescriptor* desc = |
- linkage()->GetStubCallDescriptor(d, 0, flags | FlagsForNode(node)); |
+ linkage()->GetStubCallDescriptor(&d, 0, flags | FlagsForNode(node)); |
Node* stub_code = CodeConstant(stub->GetCode()); |
PatchInsertInput(node, 0, stub_code); |
PatchOperator(node, common()->Call(desc)); |
@@ -353,8 +334,9 @@ void JSGenericLowering::ReplaceWithBuiltinCall(Node* node, |
Builtins::JavaScript id, |
int nargs) { |
CallFunctionStub stub(isolate(), nargs - 1, NO_CALL_FUNCTION_FLAGS); |
- CodeStubInterfaceDescriptor* d = GetInterfaceDescriptor(isolate(), &stub); |
- CallDescriptor* desc = linkage()->GetStubCallDescriptor(d, nargs); |
+ CodeStubInterfaceDescriptor d; |
+ stub.InitializeInterfaceDescriptor(&d); |
+ CallDescriptor* desc = linkage()->GetStubCallDescriptor(&d, nargs); |
// TODO(mstarzinger): Accessing the builtins object this way prevents sharing |
// of code across native contexts. Fix this by loading from given context. |
Handle<JSFunction> function( |
@@ -478,8 +460,9 @@ Node* JSGenericLowering::LowerJSInstanceOf(Node* node) { |
InstanceofStub::kReturnTrueFalseObject | |
InstanceofStub::kArgsInRegisters); |
InstanceofStub stub(isolate(), flags); |
- CodeStubInterfaceDescriptor* d = GetInterfaceDescriptor(isolate(), &stub); |
- CallDescriptor* desc = linkage()->GetStubCallDescriptor(d, 0); |
+ CodeStubInterfaceDescriptor d; |
+ stub.InitializeInterfaceDescriptor(&d); |
+ CallDescriptor* desc = linkage()->GetStubCallDescriptor(&d, 0); |
Node* stub_code = CodeConstant(stub.GetCode()); |
PatchInsertInput(node, 0, stub_code); |
PatchOperator(node, common()->Call(desc)); |
@@ -527,9 +510,10 @@ Node* JSGenericLowering::LowerJSStoreContext(Node* node) { |
Node* JSGenericLowering::LowerJSCallConstruct(Node* node) { |
int arity = OpParameter<int>(node); |
CallConstructStub stub(isolate(), NO_CALL_CONSTRUCTOR_FLAGS); |
- CodeStubInterfaceDescriptor* d = GetInterfaceDescriptor(isolate(), &stub); |
+ CodeStubInterfaceDescriptor d; |
+ stub.InitializeInterfaceDescriptor(&d); |
CallDescriptor* desc = |
- linkage()->GetStubCallDescriptor(d, arity, FlagsForNode(node)); |
+ linkage()->GetStubCallDescriptor(&d, arity, FlagsForNode(node)); |
Node* stub_code = CodeConstant(stub.GetCode()); |
Node* construct = NodeProperties::GetValueInput(node, 0); |
PatchInsertInput(node, 0, stub_code); |
@@ -544,9 +528,10 @@ Node* JSGenericLowering::LowerJSCallConstruct(Node* node) { |
Node* JSGenericLowering::LowerJSCallFunction(Node* node) { |
CallParameters p = OpParameter<CallParameters>(node); |
CallFunctionStub stub(isolate(), p.arity - 2, p.flags); |
- CodeStubInterfaceDescriptor* d = GetInterfaceDescriptor(isolate(), &stub); |
+ CodeStubInterfaceDescriptor d; |
+ stub.InitializeInterfaceDescriptor(&d); |
CallDescriptor* desc = |
- linkage()->GetStubCallDescriptor(d, p.arity - 1, FlagsForNode(node)); |
+ linkage()->GetStubCallDescriptor(&d, p.arity - 1, FlagsForNode(node)); |
Node* stub_code = CodeConstant(stub.GetCode()); |
PatchInsertInput(node, 0, stub_code); |
PatchOperator(node, common()->Call(desc)); |