| Index: src/parser.cc
 | 
| diff --git a/src/parser.cc b/src/parser.cc
 | 
| index 354f1c33187a33196be7b7db2813f089baa507b3..0a18cd99542679a54596659dec54855de7992a66 100644
 | 
| --- a/src/parser.cc
 | 
| +++ b/src/parser.cc
 | 
| @@ -2381,16 +2381,6 @@ Block* Parser::ParseBlock(ZoneList<const AstRawString*>* labels, bool* ok) {
 | 
|  }
 | 
|  
 | 
|  
 | 
| -const AstRawString* Parser::DeclarationParsingResult::SingleName() const {
 | 
| -  if (declarations.length() != 1) return nullptr;
 | 
| -  const Declaration& declaration = declarations.at(0);
 | 
| -  if (declaration.pattern->IsVariableProxy()) {
 | 
| -    return declaration.pattern->AsVariableProxy()->raw_name();
 | 
| -  }
 | 
| -  return nullptr;
 | 
| -}
 | 
| -
 | 
| -
 | 
|  Block* Parser::DeclarationParsingResult::BuildInitializationBlock(
 | 
|      ZoneList<const AstRawString*>* names, bool* ok) {
 | 
|    Block* result = descriptor.parser->factory()->NewBlock(
 | 
| @@ -3678,9 +3668,12 @@ Statement* Parser::ParseForStatement(ZoneList<const AstRawString*>* labels,
 | 
|            *ok = false;
 | 
|            return nullptr;
 | 
|          }
 | 
| +        DeclarationParsingResult::Declaration& decl =
 | 
| +            parsing_result.declarations[0];
 | 
|          if (parsing_result.first_initializer_loc.IsValid() &&
 | 
|              (is_strict(language_mode()) || mode == ForEachStatement::ITERATE ||
 | 
| -             IsLexicalVariableMode(parsing_result.descriptor.mode))) {
 | 
| +             IsLexicalVariableMode(parsing_result.descriptor.mode) ||
 | 
| +             !decl.pattern->IsVariableProxy())) {
 | 
|            if (mode == ForEachStatement::ITERATE) {
 | 
|              ReportMessageAt(parsing_result.first_initializer_loc,
 | 
|                              MessageTemplate::kForOfLoopInitializer);
 | 
| @@ -3693,23 +3686,22 @@ Statement* Parser::ParseForStatement(ZoneList<const AstRawString*>* labels,
 | 
|            return nullptr;
 | 
|          }
 | 
|  
 | 
| -        DCHECK(parsing_result.declarations.length() == 1);
 | 
|          Block* init_block = nullptr;
 | 
|  
 | 
|          // special case for legacy for (var/const x =.... in)
 | 
|          if (!IsLexicalVariableMode(parsing_result.descriptor.mode) &&
 | 
| -            parsing_result.declarations[0].initializer != nullptr) {
 | 
| +            decl.pattern->IsVariableProxy() && decl.initializer != nullptr) {
 | 
| +          const AstRawString* name =
 | 
| +              decl.pattern->AsVariableProxy()->raw_name();
 | 
|            VariableProxy* single_var = scope_->NewUnresolved(
 | 
| -              factory(), parsing_result.SingleName(), Variable::NORMAL,
 | 
| -              each_beg_pos, each_end_pos);
 | 
| +              factory(), name, Variable::NORMAL, each_beg_pos, each_end_pos);
 | 
|            init_block = factory()->NewBlock(
 | 
|                nullptr, 2, true, parsing_result.descriptor.declaration_pos);
 | 
|            init_block->statements()->Add(
 | 
|                factory()->NewExpressionStatement(
 | 
| -                  factory()->NewAssignment(
 | 
| -                      Token::ASSIGN, single_var,
 | 
| -                      parsing_result.declarations[0].initializer,
 | 
| -                      RelocInfo::kNoPosition),
 | 
| +                  factory()->NewAssignment(Token::ASSIGN, single_var,
 | 
| +                                           decl.initializer,
 | 
| +                                           RelocInfo::kNoPosition),
 | 
|                    RelocInfo::kNoPosition),
 | 
|                zone());
 | 
|          }
 | 
| @@ -3752,9 +3744,6 @@ Statement* Parser::ParseForStatement(ZoneList<const AstRawString*>* labels,
 | 
|          auto each_initialization_block =
 | 
|              factory()->NewBlock(nullptr, 1, true, RelocInfo::kNoPosition);
 | 
|          {
 | 
| -          DCHECK(parsing_result.declarations.length() == 1);
 | 
| -          DeclarationParsingResult::Declaration decl =
 | 
| -              parsing_result.declarations[0];
 | 
|            auto descriptor = parsing_result.descriptor;
 | 
|            descriptor.declaration_pos = RelocInfo::kNoPosition;
 | 
|            descriptor.initialization_pos = RelocInfo::kNoPosition;
 | 
| 
 |