Index: src/code-stubs.cc |
diff --git a/src/code-stubs.cc b/src/code-stubs.cc |
index d63453676f4cbbb81b69a3b1176bc4ab7eff64c2..68e12a20be9a5790c26530f240e6d7f3d18a4348 100644 |
--- a/src/code-stubs.cc |
+++ b/src/code-stubs.cc |
@@ -2629,10 +2629,13 @@ void FastNewClosureStub::GenerateAssembly(CodeStubAssembler* assembler) const { |
Generate(assembler, assembler->Parameter(0), assembler->Parameter(1))); |
} |
-// static |
-compiler::Node* FastNewFunctionContextStub::Generate( |
- CodeStubAssembler* assembler, compiler::Node* function, |
- compiler::Node* slots, compiler::Node* context) { |
+namespace { |
+ |
+compiler::Node* GenerateFastNewFunctionContextStub(CodeStubAssembler* assembler, |
+ compiler::Node* function, |
+ compiler::Node* slots, |
+ compiler::Node* context, |
+ Handle<Map> map) { |
typedef compiler::Node Node; |
Node* min_context_slots = |
@@ -2646,9 +2649,8 @@ compiler::Node* FastNewFunctionContextStub::Generate( |
Node* function_context = assembler->Allocate(size); |
Isolate* isolate = assembler->isolate(); |
- assembler->StoreMapNoWriteBarrier( |
- function_context, |
- assembler->HeapConstant(isolate->factory()->function_context_map())); |
+ assembler->StoreMapNoWriteBarrier(function_context, |
+ assembler->HeapConstant(map)); |
assembler->StoreObjectFieldNoWriteBarrier(function_context, |
Context::kLengthOffset, |
assembler->SmiFromWord32(length)); |
@@ -2682,6 +2684,17 @@ compiler::Node* FastNewFunctionContextStub::Generate( |
return function_context; |
} |
+} // namespace |
+ |
+// static |
+compiler::Node* FastNewFunctionContextStub::Generate( |
+ CodeStubAssembler* assembler, compiler::Node* function, |
+ compiler::Node* slots, compiler::Node* context) { |
+ Handle<Map> map = assembler->isolate()->factory()->function_context_map(); |
+ return GenerateFastNewFunctionContextStub(assembler, function, slots, context, |
+ map); |
+} |
+ |
void FastNewFunctionContextStub::GenerateAssembly( |
CodeStubAssembler* assembler) const { |
typedef compiler::Node Node; |
@@ -2693,6 +2706,26 @@ void FastNewFunctionContextStub::GenerateAssembly( |
} |
// static |
+compiler::Node* FastNewEvalContextStub::Generate(CodeStubAssembler* assembler, |
+ compiler::Node* function, |
+ compiler::Node* slots, |
+ compiler::Node* context) { |
+ Handle<Map> map = assembler->isolate()->factory()->eval_context_map(); |
+ return GenerateFastNewFunctionContextStub(assembler, function, slots, context, |
+ map); |
+} |
+ |
+void FastNewEvalContextStub::GenerateAssembly( |
+ CodeStubAssembler* assembler) const { |
+ typedef compiler::Node Node; |
+ Node* function = assembler->Parameter(Descriptor::kFunction); |
+ Node* slots = assembler->Parameter(FastNewFunctionContextDescriptor::kSlots); |
+ Node* context = assembler->Parameter(Descriptor::kContext); |
+ |
+ assembler->Return(Generate(assembler, function, slots, context)); |
+} |
+ |
+// static |
compiler::Node* FastCloneRegExpStub::Generate(CodeStubAssembler* assembler, |
compiler::Node* closure, |
compiler::Node* literal_index, |