Index: src/compiler/ast-graph-builder.cc |
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc |
index 4de9a6434d1e6f5adaa983ca663c9fd4c098ef19..1ab19771464e3a8f3f870ead25a332f1b1baa6b5 100644 |
--- a/src/compiler/ast-graph-builder.cc |
+++ b/src/compiler/ast-graph-builder.cc |
@@ -2356,7 +2356,7 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
callee_value = NewNode(common()->Projection(0), pair); |
receiver_value = NewNode(common()->Projection(1), pair); |
- PrepareFrameState(pair, expr->EvalOrLookupId(), |
+ PrepareFrameState(pair, expr->LookupId(), |
OutputFrameStateCombine::Push(2)); |
break; |
} |
@@ -2424,6 +2424,18 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
break; |
case Call::POSSIBLY_EVAL_CALL: |
possibly_eval = true; |
+ if (callee->AsVariableProxy()->var()->IsLookupSlot()) { |
+ Variable* variable = callee->AsVariableProxy()->var(); |
+ Node* name = jsgraph()->Constant(variable->name()); |
+ const Operator* op = |
+ javascript()->CallRuntime(Runtime::kLoadLookupSlot, 2); |
+ Node* pair = NewNode(op, current_context(), name); |
+ callee_value = NewNode(common()->Projection(0), pair); |
+ receiver_value = NewNode(common()->Projection(1), pair); |
+ PrepareFrameState(pair, expr->LookupId(), |
+ OutputFrameStateCombine::Push(2)); |
+ break; |
+ } |
// Fall through. |
case Call::OTHER_CALL: |
VisitForValue(callee); |
@@ -2459,7 +2471,7 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
javascript()->CallRuntime(Runtime::kResolvePossiblyDirectEval, 5); |
Node* new_callee = |
NewNode(op, callee, source, function, language, position); |
- PrepareFrameState(new_callee, expr->EvalOrLookupId(), |
+ PrepareFrameState(new_callee, expr->EvalId(), |
OutputFrameStateCombine::PokeAt(arg_count + 1)); |
// Patch callee on the environment. |