Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(183)

Side by Side Diff: src/preparser.h

Issue 1151503002: [destructuring] Implement spread binding patterns. (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Comments addressed Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2012 the V8 project authors. All rights reserved. 1 // Copyright 2012 the V8 project authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #ifndef V8_PREPARSER_H 5 #ifndef V8_PREPARSER_H
6 #define V8_PREPARSER_H 6 #define V8_PREPARSER_H
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
(...skipping 2479 matching lines...) Expand 10 before | Expand all | Expand 10 after
2490 typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseArrayLiteral( 2490 typename ParserBase<Traits>::ExpressionT ParserBase<Traits>::ParseArrayLiteral(
2491 ExpressionClassifier* classifier, bool* ok) { 2491 ExpressionClassifier* classifier, bool* ok) {
2492 // ArrayLiteral :: 2492 // ArrayLiteral ::
2493 // '[' Expression? (',' Expression?)* ']' 2493 // '[' Expression? (',' Expression?)* ']'
2494 2494
2495 int pos = peek_position(); 2495 int pos = peek_position();
2496 typename Traits::Type::ExpressionList values = 2496 typename Traits::Type::ExpressionList values =
2497 this->NewExpressionList(4, zone_); 2497 this->NewExpressionList(4, zone_);
2498 Expect(Token::LBRACK, CHECK_OK); 2498 Expect(Token::LBRACK, CHECK_OK);
2499 while (peek() != Token::RBRACK) { 2499 while (peek() != Token::RBRACK) {
2500 bool seen_spread = false;
2500 ExpressionT elem = this->EmptyExpression(); 2501 ExpressionT elem = this->EmptyExpression();
2501 if (peek() == Token::COMMA) { 2502 if (peek() == Token::COMMA) {
2502 if (is_strong(language_mode())) { 2503 if (is_strong(language_mode())) {
2503 ReportMessageAt(scanner()->peek_location(), 2504 ReportMessageAt(scanner()->peek_location(),
2504 MessageTemplate::kStrongEllision); 2505 MessageTemplate::kStrongEllision);
2505 *ok = false; 2506 *ok = false;
2506 return this->EmptyExpression(); 2507 return this->EmptyExpression();
2507 } 2508 }
2508 elem = this->GetLiteralTheHole(peek_position(), factory()); 2509 elem = this->GetLiteralTheHole(peek_position(), factory());
2510 } else if (peek() == Token::ELLIPSIS) {
2511 ExpressionUnexpectedToken(classifier);
2512 int start_pos = peek_position();
2513 Consume(Token::ELLIPSIS);
2514 ExpressionT argument =
2515 this->ParseAssignmentExpression(true, classifier, CHECK_OK);
2516
2517 elem = factory()->NewSpread(argument, start_pos);
2518 seen_spread = true;
2509 } else { 2519 } else {
2510 elem = this->ParseAssignmentExpression(true, classifier, CHECK_OK); 2520 elem = this->ParseAssignmentExpression(true, classifier, CHECK_OK);
2511 } 2521 }
2512 values->Add(elem, zone_); 2522 values->Add(elem, zone_);
2513 if (peek() != Token::RBRACK) { 2523 if (peek() != Token::RBRACK) {
2524 if (seen_spread) {
2525 BindingPatternUnexpectedToken(classifier);
2526 }
2514 Expect(Token::COMMA, CHECK_OK); 2527 Expect(Token::COMMA, CHECK_OK);
2515 } 2528 }
2516 } 2529 }
2517 Expect(Token::RBRACK, CHECK_OK); 2530 Expect(Token::RBRACK, CHECK_OK);
2518 2531
2519 // Update the scope information before the pre-parsing bailout. 2532 // Update the scope information before the pre-parsing bailout.
2520 int literal_index = function_state_->NextMaterializedLiteralIndex(); 2533 int literal_index = function_state_->NextMaterializedLiteralIndex();
2521 2534
2522 return factory()->NewArrayLiteral(values, literal_index, 2535 return factory()->NewArrayLiteral(values, literal_index,
2523 is_strong(language_mode()), pos); 2536 is_strong(language_mode()), pos);
(...skipping 1483 matching lines...) Expand 10 before | Expand all | Expand 10 after
4007 *ok = false; 4020 *ok = false;
4008 return; 4021 return;
4009 } 4022 }
4010 has_seen_constructor_ = true; 4023 has_seen_constructor_ = true;
4011 return; 4024 return;
4012 } 4025 }
4013 } 4026 }
4014 } } // v8::internal 4027 } } // v8::internal
4015 4028
4016 #endif // V8_PREPARSER_H 4029 #endif // V8_PREPARSER_H
OLDNEW
« src/pattern-rewriter.cc ('K') | « src/pattern-rewriter.cc ('k') | src/runtime.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698