| Index: src/preparser.h
 | 
| diff --git a/src/preparser.h b/src/preparser.h
 | 
| index 116a8eac9b891721e208bea92d9f3b7e4ad30528..c14fb9b20cdc067c3f37b86938138aa648b73daa 100644
 | 
| --- a/src/preparser.h
 | 
| +++ b/src/preparser.h
 | 
| @@ -2497,6 +2497,7 @@ typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseArrayLiteral(
 | 
|        this->NewExpressionList(4, zone_);
 | 
|    Expect(Token::LBRACK, CHECK_OK);
 | 
|    while (peek() != Token::RBRACK) {
 | 
| +    bool seen_spread = false;
 | 
|      ExpressionT elem = this->EmptyExpression();
 | 
|      if (peek() == Token::COMMA) {
 | 
|        if (is_strong(language_mode())) {
 | 
| @@ -2506,11 +2507,23 @@ typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseArrayLiteral(
 | 
|          return this->EmptyExpression();
 | 
|        }
 | 
|        elem = this->GetLiteralTheHole(peek_position(), factory());
 | 
| +    } else if (peek() == Token::ELLIPSIS) {
 | 
| +      ExpressionUnexpectedToken(classifier);
 | 
| +      int start_pos = peek_position();
 | 
| +      Consume(Token::ELLIPSIS);
 | 
| +      ExpressionT argument =
 | 
| +          this->ParseAssignmentExpression(true, classifier, CHECK_OK);
 | 
| +
 | 
| +      elem = factory()->NewSpread(argument, start_pos);
 | 
| +      seen_spread = true;
 | 
|      } else {
 | 
|        elem = this->ParseAssignmentExpression(true, classifier, CHECK_OK);
 | 
|      }
 | 
|      values->Add(elem, zone_);
 | 
|      if (peek() != Token::RBRACK) {
 | 
| +      if (seen_spread) {
 | 
| +        BindingPatternUnexpectedToken(classifier);
 | 
| +      }
 | 
|        Expect(Token::COMMA, CHECK_OK);
 | 
|      }
 | 
|    }
 | 
| 
 |