Chromium Code Reviews| Index: src/code-stubs.cc |
| diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
| index 2c87107ede4b3d538909e10ac19fdbc768cdce15..ec8a09f877d3350c3c38089dce2c7d9dab014e1a 100644 |
| --- a/src/code-stubs.cc |
| +++ b/src/code-stubs.cc |
| @@ -2449,6 +2449,8 @@ void GetPropertyStub::GenerateAssembly( |
| // static |
| compiler::Node* FastNewClosureStub::Generate(CodeStubAssembler* assembler, |
| compiler::Node* shared_info, |
| + compiler::Node* feedback_vector, |
| + compiler::Node* slot, |
| compiler::Node* context) { |
| typedef compiler::Node Node; |
| typedef compiler::CodeAssembler::Label Label; |
| @@ -2563,14 +2565,15 @@ compiler::Node* FastNewClosureStub::Generate(CodeStubAssembler* assembler, |
| // Initialize the rest of the function. |
| Node* empty_fixed_array = |
| assembler->HeapConstant(factory->empty_fixed_array()); |
| - Node* empty_literals_array = |
| - assembler->HeapConstant(factory->empty_literals_array()); |
| assembler->StoreObjectFieldNoWriteBarrier(result, JSObject::kPropertiesOffset, |
| empty_fixed_array); |
| assembler->StoreObjectFieldNoWriteBarrier(result, JSObject::kElementsOffset, |
| empty_fixed_array); |
| + // TODO(mvstanton): Do I need a write barrier here? |
|
Benedikt Meurer
2016/12/10 17:20:36
A write barrier for a load?
mvstanton
2016/12/21 13:09:13
Ach, sorry the todo is for the store of the litera
|
| + Node* literals_array = assembler->LoadFixedArrayElement( |
| + feedback_vector, slot, 0, CodeStubAssembler::SMI_PARAMETERS); |
| assembler->StoreObjectFieldNoWriteBarrier(result, JSFunction::kLiteralsOffset, |
| - empty_literals_array); |
| + literals_array); |
| assembler->StoreObjectFieldNoWriteBarrier( |
| result, JSFunction::kPrototypeOrInitialMapOffset, |
| assembler->TheHoleConstant()); |
| @@ -2596,8 +2599,14 @@ compiler::Node* FastNewClosureStub::Generate(CodeStubAssembler* assembler, |
| void FastNewClosureStub::GenerateAssembly( |
| compiler::CodeAssemblerState* state) const { |
| CodeStubAssembler assembler(state); |
| - assembler.Return( |
| - Generate(&assembler, assembler.Parameter(0), assembler.Parameter(1))); |
| + if (FLAG_strong_rooted_literals) { |
| + assembler.Return(Generate(&assembler, assembler.Parameter(0), |
| + assembler.Parameter(1), assembler.Parameter(2), |
| + assembler.Parameter(3))); |
| + } else { |
| + assembler.Return(Generate(&assembler, assembler.Parameter(0), NULL, NULL, |
| + assembler.Parameter(1))); |
| + } |
| } |
| // static |