Index: src/compiler/js-create-lowering.cc |
diff --git a/src/compiler/js-create-lowering.cc b/src/compiler/js-create-lowering.cc |
index a1c267efcefa3ef5a8479f7c93d8d8f36d545b5b..ba07a586ce478b28092165c4238b7c23d9e330ef 100644 |
--- a/src/compiler/js-create-lowering.cc |
+++ b/src/compiler/js-create-lowering.cc |
@@ -815,6 +815,7 @@ Reduction JSCreateLowering::ReduceJSCreateFunctionContext(Node* node) { |
Reduction JSCreateLowering::ReduceJSCreateWithContext(Node* node) { |
DCHECK_EQ(IrOpcode::kJSCreateWithContext, node->opcode()); |
+ Handle<ScopeInfo> scope_info = OpParameter<Handle<ScopeInfo>>(node); |
Node* object = NodeProperties::GetValueInput(node, 0); |
Node* closure = NodeProperties::GetValueInput(node, 1); |
Node* effect = NodeProperties::GetEffectInput(node); |
@@ -823,12 +824,20 @@ Reduction JSCreateLowering::ReduceJSCreateWithContext(Node* node) { |
Node* native_context = effect = graph()->NewNode( |
javascript()->LoadContext(0, Context::NATIVE_CONTEXT_INDEX, true), |
context, context, effect); |
- AllocationBuilder a(jsgraph(), effect, control); |
+ |
+ AllocationBuilder aa(jsgraph(), effect, control); |
+ aa.Allocate(ContextExtension::kSize); |
+ aa.Store(AccessBuilder::ForMap(), factory()->context_extension_map()); |
+ aa.Store(AccessBuilder::ForContextExtensionScopeInfo(), scope_info); |
+ aa.Store(AccessBuilder::ForContextExtensionExtension(), object); |
+ Node* extension = aa.Finish(); |
+ |
+ AllocationBuilder a(jsgraph(), extension, control); |
STATIC_ASSERT(Context::MIN_CONTEXT_SLOTS == 4); // Ensure fully covered. |
a.AllocateArray(Context::MIN_CONTEXT_SLOTS, factory()->with_context_map()); |
a.Store(AccessBuilder::ForContextSlot(Context::CLOSURE_INDEX), closure); |
a.Store(AccessBuilder::ForContextSlot(Context::PREVIOUS_INDEX), context); |
- a.Store(AccessBuilder::ForContextSlot(Context::EXTENSION_INDEX), object); |
+ a.Store(AccessBuilder::ForContextSlot(Context::EXTENSION_INDEX), extension); |
a.Store(AccessBuilder::ForContextSlot(Context::NATIVE_CONTEXT_INDEX), |
native_context); |
RelaxControls(node); |