| Index: src/parsing/parser.cc
|
| diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc
|
| index 8164c7d3b2cda7e9dd5af74dac0883f0ff95541e..50d875feb687347ca72b2f163f3ae84750105911 100644
|
| --- a/src/parsing/parser.cc
|
| +++ b/src/parsing/parser.cc
|
| @@ -4554,7 +4554,6 @@
|
| DCHECK(scope_->is_function_scope());
|
| Block* init_block =
|
| factory()->NewBlock(NULL, 1, true, RelocInfo::kNoPosition);
|
| - ZoneList<Scope*>* param_scopes = new (zone()) ZoneList<Scope*>(0, zone());
|
| for (int i = 0; i < parameters.params.length(); ++i) {
|
| auto parameter = parameters.params[i];
|
| if (parameter.is_rest && parameter.pattern->IsVariableProxy()) break;
|
| @@ -4596,13 +4595,12 @@
|
|
|
| Scope* param_scope = scope_;
|
| Block* param_block = init_block;
|
| - if (!parameter.is_simple()) {
|
| + if (!parameter.is_simple() && scope_->calls_sloppy_eval()) {
|
| param_scope = NewScope(scope_, BLOCK_SCOPE);
|
| param_scope->set_is_declaration_scope();
|
| param_scope->set_start_position(descriptor.initialization_pos);
|
| param_scope->set_end_position(parameter.initializer_end_position);
|
| - param_scopes->Add(param_scope, zone());
|
| - scope_->PropagateUsageFlagsToScope(param_scope);
|
| + param_scope->RecordEvalCall();
|
| param_block = factory()->NewBlock(NULL, 8, true, RelocInfo::kNoPosition);
|
| param_block->set_scope(param_scope);
|
| descriptor.hoist_scope = scope_;
|
| @@ -4616,16 +4614,13 @@
|
| &decl, nullptr, CHECK_OK);
|
| }
|
|
|
| - if (!parameter.is_simple()) {
|
| + if (!parameter.is_simple() && scope_->calls_sloppy_eval()) {
|
| param_scope = param_scope->FinalizeBlockScope();
|
| if (param_scope != nullptr) {
|
| CheckConflictingVarDeclarations(param_scope, CHECK_OK);
|
| }
|
| init_block->statements()->Add(param_block, zone());
|
| }
|
| - }
|
| - for (Scope* param_scope : *param_scopes) {
|
| - scope_->PropagateUsageFlagsToScope(param_scope);
|
| }
|
| return init_block;
|
| }
|
|
|