diff --git a/src/parsing/parser.cc b/src/parsing/parser.cc index 2cf97bc14b5..0ae1fb619a7 100644 --- a/src/parsing/parser.cc +++ b/src/parsing/parser.cc @@ -2939,9 +2939,6 @@ Block* Parser::BuildParameterInitializationBlock( // TODO(adamk): Should this be kNoSourcePosition, since // it's just copying from a temp var to the real param var? descriptor.initialization_pos = parameter.pattern->position(); - // The initializer position which will end up in, - // Variable::initializer_position(), used for hole check elimination. - int initializer_position = parameter.pattern->position(); Expression* initial_value = factory()->NewVariableProxy(parameters.scope->parameter(i)); if (parameter.initializer != nullptr) { @@ -2957,7 +2954,6 @@ Block* Parser::BuildParameterInitializationBlock( initial_value = factory()->NewConditional( condition, parameter.initializer, initial_value, kNoSourcePosition); descriptor.initialization_pos = parameter.initializer->position(); - initializer_position = parameter.initializer_end_position; } Scope* param_scope = scope(); @@ -2980,7 +2976,7 @@ Block* Parser::BuildParameterInitializationBlock( BlockState block_state(&scope_state_, param_scope); DeclarationParsingResult::Declaration decl( - parameter.pattern, initializer_position, initial_value); + parameter.pattern, parameter.initializer_end_position, initial_value); PatternRewriter::DeclareAndInitializeVariables( this, param_block, &descriptor, &decl, nullptr, CHECK_OK); diff --git a/test/mjsunit/regress/regress-5454.js b/test/mjsunit/regress/regress-5454.js new file mode 100644 index 00000000000..ca6a9433b24 --- /dev/null +++ b/test/mjsunit/regress/regress-5454.js @@ -0,0 +1,11 @@ +// Copyright 2016 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +assertThrows(function(...[b = !b]) { }, ReferenceError); +assertThrows(() => (function([b = !b]) { })([]), ReferenceError); +assertThrows(() => (function({b = !b}) { })({}), ReferenceError); + +assertThrows((...[b = !b]) => { }, ReferenceError); +assertThrows(() => (([b = !b]) => { })([]), ReferenceError); +assertThrows(() => (({b = !b}) => { })({}), ReferenceError);