| 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());
|
|
|