Index: src/compiler/ast-graph-builder.cc |
diff --git a/src/compiler/ast-graph-builder.cc b/src/compiler/ast-graph-builder.cc |
index 43d402094539cfae9c31dd3f2f3395888a17db86..cf7bbc99a52a8e830c5b3b5d78fd6e8635649402 100644 |
--- a/src/compiler/ast-graph-builder.cc |
+++ b/src/compiler/ast-graph-builder.cc |
@@ -2420,37 +2420,17 @@ void AstGraphBuilder::VisitCall(Call* expr) { |
// Create node to ask for help resolving potential eval call. This will |
// provide a fully resolved callee and the corresponding receiver. |
Node* function = GetFunctionClosure(); |
- // TODO(wingo): ResolvePossibleDirectEval doesn't really need a receiver, |
- // now that eval scopes don't have "this" declarations. Remove this hack |
- // once ResolvePossibleDirectEval changes. |
- Node* receiver; |
- { |
- Variable* variable = info()->scope()->LookupThis(); |
- if (variable->IsStackAllocated()) { |
- receiver = environment()->Lookup(variable); |
- } else { |
- DCHECK(variable->IsContextSlot()); |
- int depth = current_scope()->ContextChainLength(variable->scope()); |
- bool immutable = variable->maybe_assigned() == kNotAssigned; |
- const Operator* op = |
- javascript()->LoadContext(depth, variable->index(), immutable); |
- receiver = NewNode(op, current_context()); |
- } |
- } |
Node* language = jsgraph()->Constant(language_mode()); |
Node* position = jsgraph()->Constant(current_scope()->start_position()); |
const Operator* op = |
- javascript()->CallRuntime(Runtime::kResolvePossiblyDirectEval, 6); |
- Node* pair = |
- NewNode(op, callee, source, function, receiver, language, position); |
- PrepareFrameState(pair, expr->EvalOrLookupId(), |
+ javascript()->CallRuntime(Runtime::kResolvePossiblyDirectEval, 5); |
+ Node* new_callee = |
+ NewNode(op, callee, source, function, language, position); |
+ PrepareFrameState(new_callee, expr->EvalOrLookupId(), |
OutputFrameStateCombine::PokeAt(arg_count + 1)); |
- Node* new_callee = NewNode(common()->Projection(0), pair); |
- Node* new_receiver = NewNode(common()->Projection(1), pair); |
- // Patch callee and receiver on the environment. |
+ // Patch callee on the environment. |
environment()->Poke(arg_count + 1, new_callee); |
- environment()->Poke(arg_count + 0, new_receiver); |
} |
// Create node to perform the function call. |
@@ -2873,7 +2853,9 @@ void AstGraphBuilder::VisitDelete(UnaryOperation* expr) { |
// Delete of an unqualified identifier is only allowed in classic mode but |
// deleting "this" is allowed in all language modes. |
Variable* variable = expr->expression()->AsVariableProxy()->var(); |
- DCHECK(is_sloppy(language_mode()) || variable->is_this()); |
+ // Delete of an unqualified identifier is disallowed in strict mode but |
+ // "delete this" is allowed. |
+ DCHECK(is_sloppy(language_mode()) || variable->HasThisName(isolate())); |
value = BuildVariableDelete(variable, expr->id(), |
ast_context()->GetStateCombine()); |
} else if (expr->expression()->IsProperty()) { |
@@ -3321,9 +3303,10 @@ Node* AstGraphBuilder::BuildVariableDelete(Variable* variable, |
} |
case Variable::PARAMETER: |
case Variable::LOCAL: |
- case Variable::CONTEXT: |
+ case Variable::CONTEXT: { |
// Local var, const, or let variable or context variable. |
- return jsgraph()->BooleanConstant(variable->is_this()); |
+ return jsgraph()->BooleanConstant(variable->HasThisName(isolate())); |
+ } |
case Variable::LOOKUP: { |
// Dynamic lookup of context variable (anywhere in the chain). |
Node* name = jsgraph()->Constant(variable->name()); |