Index: src/compiler/ast-graph-builder.cc |
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc |
index c33cc60ce573afa4b9270c3f83a8588e3f085421..d502099f5aa23cb9b0835c73afc86314d1a4a93c 100644 |
--- a/src/compiler/ast-graph-builder.cc |
+++ b/src/compiler/ast-graph-builder.cc |
@@ -379,7 +379,6 @@ AstGraphBuilder::AstGraphBuilder(Zone* local_zone, CompilationInfo* info, |
globals_(0, local_zone), |
execution_control_(nullptr), |
execution_context_(nullptr), |
- function_context_(nullptr), |
input_buffer_size_(0), |
input_buffer_(nullptr), |
exit_control_(nullptr), |
@@ -399,10 +398,7 @@ Node* AstGraphBuilder::GetFunctionClosure() { |
} |
-Node* AstGraphBuilder::GetFunctionContext() { |
- DCHECK(function_context_ != nullptr); |
- return function_context_; |
-} |
+Node* AstGraphBuilder::GetFunctionContext() { return function_context_.get(); } |
Node* AstGraphBuilder::NewOuterContextParam() { |
@@ -420,7 +416,7 @@ Node* AstGraphBuilder::NewCurrentContextOsrValue() { |
} |
-bool AstGraphBuilder::CreateGraph() { |
+bool AstGraphBuilder::CreateGraph(bool constant_context) { |
Scope* scope = info()->scope(); |
DCHECK(graph() != NULL); |
@@ -442,8 +438,12 @@ bool AstGraphBuilder::CreateGraph() { |
} |
// Initialize the incoming context. |
- function_context_ = NewOuterContextParam(); |
- ContextScope incoming(this, scope, function_context_); |
+ if (constant_context) { |
Michael Starzinger
2015/02/18 17:37:32
nit: Can we move this logic into GetFunctionContex
titzer
2015/02/19 09:53:04
As discussed in person, I've moved this into Creat
|
+ function_context_.set(jsgraph()->HeapConstant(info()->context())); |
+ } else { |
+ function_context_.set(NewOuterContextParam()); |
+ } |
+ ContextScope incoming(this, scope, function_context_.get()); |
// Build receiver check for sloppy mode if necessary. |
// TODO(mstarzinger/verwaest): Should this be moved back into the CallIC? |
@@ -456,7 +456,8 @@ bool AstGraphBuilder::CreateGraph() { |
if (heap_slots > 0) { |
// Push a new inner context scope for the function. |
Node* closure = GetFunctionClosure(); |
- Node* inner_context = BuildLocalFunctionContext(function_context_, closure); |
+ Node* inner_context = |
+ BuildLocalFunctionContext(function_context_.get(), closure); |
ContextScope top_context(this, scope, inner_context); |
ok = CreateGraphBody(); |
} else { |
@@ -3041,6 +3042,7 @@ void AstGraphBuilder::Environment::Merge(Environment* other) { |
graph()->NewNode(common()->Merge(1), arraysize(inputs), inputs, true); |
effect_dependency_ = other->effect_dependency_; |
values_ = other->values_; |
+ contexts_ = other->contexts_; |
return; |
} |