| OLD | NEW |
| 1 // Copyright 2011 the V8 project authors. All rights reserved. | 1 // Copyright 2011 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 #include <cmath> | 5 #include <cmath> |
| 6 | 6 |
| 7 #include "src/allocation.h" | 7 #include "src/allocation.h" |
| 8 #include "src/base/logging.h" | 8 #include "src/base/logging.h" |
| 9 #include "src/conversions-inl.h" | 9 #include "src/conversions-inl.h" |
| 10 #include "src/conversions.h" | 10 #include "src/conversions.h" |
| (...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 193 token != Token::RBRACE) { | 193 token != Token::RBRACE) { |
| 194 statement = ParseStatementListItem(CHECK_OK); | 194 statement = ParseStatementListItem(CHECK_OK); |
| 195 token = peek(); | 195 token = peek(); |
| 196 } | 196 } |
| 197 } | 197 } |
| 198 } | 198 } |
| 199 Expect(Token::RBRACE, ok); | 199 Expect(Token::RBRACE, ok); |
| 200 return Statement::Default(); | 200 return Statement::Default(); |
| 201 } | 201 } |
| 202 | 202 |
| 203 PreParser::Statement PreParser::ParseDoWhileStatement( | |
| 204 ZoneList<const AstRawString*>* labels, bool* ok) { | |
| 205 // DoStatement :: | |
| 206 // 'do' Statement 'while' '(' Expression ')' ';' | |
| 207 | |
| 208 Expect(Token::DO, CHECK_OK); | |
| 209 ParseScopedStatement(nullptr, true, CHECK_OK); | |
| 210 Expect(Token::WHILE, CHECK_OK); | |
| 211 Expect(Token::LPAREN, CHECK_OK); | |
| 212 ParseExpression(true, CHECK_OK); | |
| 213 Expect(Token::RPAREN, ok); | |
| 214 if (peek() == Token::SEMICOLON) Consume(Token::SEMICOLON); | |
| 215 return Statement::Default(); | |
| 216 } | |
| 217 | |
| 218 PreParser::Statement PreParser::ParseWhileStatement( | |
| 219 ZoneList<const AstRawString*>* labels, bool* ok) { | |
| 220 // WhileStatement :: | |
| 221 // 'while' '(' Expression ')' Statement | |
| 222 | |
| 223 Expect(Token::WHILE, CHECK_OK); | |
| 224 Expect(Token::LPAREN, CHECK_OK); | |
| 225 ParseExpression(true, CHECK_OK); | |
| 226 Expect(Token::RPAREN, CHECK_OK); | |
| 227 ParseScopedStatement(nullptr, true, ok); | |
| 228 return Statement::Default(); | |
| 229 } | |
| 230 | |
| 231 PreParser::Statement PreParser::ParseForStatement( | 203 PreParser::Statement PreParser::ParseForStatement( |
| 232 ZoneList<const AstRawString*>* labels, bool* ok) { | 204 ZoneList<const AstRawString*>* labels, bool* ok) { |
| 233 // ForStatement :: | 205 // ForStatement :: |
| 234 // 'for' '(' Expression? ';' Expression? ';' Expression? ')' Statement | 206 // 'for' '(' Expression? ';' Expression? ';' Expression? ')' Statement |
| 235 | 207 |
| 236 // Create an in-between scope for let-bound iteration variables. | 208 // Create an in-between scope for let-bound iteration variables. |
| 237 bool has_lexical = false; | 209 bool has_lexical = false; |
| 238 | 210 |
| 239 BlockState block_state(&scope_state_); | 211 BlockState block_state(&scope_state_); |
| 240 Expect(Token::FOR, CHECK_OK); | 212 Expect(Token::FOR, CHECK_OK); |
| (...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 355 ParseExpression(true, CHECK_OK); | 327 ParseExpression(true, CHECK_OK); |
| 356 } | 328 } |
| 357 Expect(Token::RPAREN, CHECK_OK); | 329 Expect(Token::RPAREN, CHECK_OK); |
| 358 | 330 |
| 359 ParseScopedStatement(nullptr, true, ok); | 331 ParseScopedStatement(nullptr, true, ok); |
| 360 } | 332 } |
| 361 return Statement::Default(); | 333 return Statement::Default(); |
| 362 } | 334 } |
| 363 | 335 |
| 364 | 336 |
| 365 PreParser::Statement PreParser::ParseThrowStatement(bool* ok) { | |
| 366 // ThrowStatement :: | |
| 367 // 'throw' [no line terminator] Expression ';' | |
| 368 | |
| 369 Expect(Token::THROW, CHECK_OK); | |
| 370 if (scanner()->HasAnyLineTerminatorBeforeNext()) { | |
| 371 ReportMessageAt(scanner()->location(), MessageTemplate::kNewlineAfterThrow); | |
| 372 *ok = false; | |
| 373 return Statement::Default(); | |
| 374 } | |
| 375 ParseExpression(true, CHECK_OK); | |
| 376 ExpectSemicolon(ok); | |
| 377 return Statement::Jump(); | |
| 378 } | |
| 379 | |
| 380 | |
| 381 PreParser::Statement PreParser::ParseTryStatement(bool* ok) { | 337 PreParser::Statement PreParser::ParseTryStatement(bool* ok) { |
| 382 // TryStatement :: | 338 // TryStatement :: |
| 383 // 'try' Block Catch | 339 // 'try' Block Catch |
| 384 // 'try' Block Finally | 340 // 'try' Block Finally |
| 385 // 'try' Block Catch Finally | 341 // 'try' Block Catch Finally |
| 386 // | 342 // |
| 387 // Catch :: | 343 // Catch :: |
| 388 // 'catch' '(' Identifier ')' Block | 344 // 'catch' '(' Identifier ')' Block |
| 389 // | 345 // |
| 390 // Finally :: | 346 // Finally :: |
| (...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 602 &has_seen_constructor, CHECK_OK); | 558 &has_seen_constructor, CHECK_OK); |
| 603 ValidateExpression(CHECK_OK); | 559 ValidateExpression(CHECK_OK); |
| 604 impl()->AccumulateFormalParameterContainmentErrors(); | 560 impl()->AccumulateFormalParameterContainmentErrors(); |
| 605 } | 561 } |
| 606 | 562 |
| 607 Expect(Token::RBRACE, CHECK_OK); | 563 Expect(Token::RBRACE, CHECK_OK); |
| 608 | 564 |
| 609 return Expression::Default(); | 565 return Expression::Default(); |
| 610 } | 566 } |
| 611 | 567 |
| 612 PreParserExpression PreParser::ParseDoExpression(bool* ok) { | |
| 613 // AssignmentExpression :: | |
| 614 // do '{' StatementList '}' | |
| 615 Expect(Token::DO, CHECK_OK); | |
| 616 Expect(Token::LBRACE, CHECK_OK); | |
| 617 while (peek() != Token::RBRACE) { | |
| 618 ParseStatementListItem(CHECK_OK); | |
| 619 } | |
| 620 Expect(Token::RBRACE, CHECK_OK); | |
| 621 return PreParserExpression::Default(); | |
| 622 } | |
| 623 | |
| 624 void PreParser::ParseAsyncArrowSingleExpressionBody(PreParserStatementList body, | 568 void PreParser::ParseAsyncArrowSingleExpressionBody(PreParserStatementList body, |
| 625 bool accept_IN, int pos, | 569 bool accept_IN, int pos, |
| 626 bool* ok) { | 570 bool* ok) { |
| 627 scope()->ForceContextAllocation(); | 571 scope()->ForceContextAllocation(); |
| 628 | 572 |
| 629 PreParserExpression return_value = | 573 PreParserExpression return_value = |
| 630 ParseAssignmentExpression(accept_IN, CHECK_OK_VOID); | 574 ParseAssignmentExpression(accept_IN, CHECK_OK_VOID); |
| 631 | 575 |
| 632 body->Add(PreParserStatement::ExpressionStatement(return_value), zone()); | 576 body->Add(PreParserStatement::ExpressionStatement(return_value), zone()); |
| 633 } | 577 } |
| 634 | 578 |
| 635 #undef CHECK_OK | 579 #undef CHECK_OK |
| 636 #undef CHECK_OK_CUSTOM | 580 #undef CHECK_OK_CUSTOM |
| 637 | 581 |
| 638 | 582 |
| 639 } // namespace internal | 583 } // namespace internal |
| 640 } // namespace v8 | 584 } // namespace v8 |
| OLD | NEW |