OLD | NEW |
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 #include "src/v8.h" | 5 #include "src/v8.h" |
6 | 6 |
7 #include "src/api.h" | 7 #include "src/api.h" |
8 #include "src/ast.h" | 8 #include "src/ast.h" |
9 #include "src/ast-literal-reindexer.h" | 9 #include "src/ast-literal-reindexer.h" |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 1373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1384 } | 1384 } |
1385 return ParseClassDeclaration(NULL, ok); | 1385 return ParseClassDeclaration(NULL, ok); |
1386 case Token::CONST: | 1386 case Token::CONST: |
1387 if (allow_const()) { | 1387 if (allow_const()) { |
1388 return ParseVariableStatement(kStatementListItem, NULL, ok); | 1388 return ParseVariableStatement(kStatementListItem, NULL, ok); |
1389 } | 1389 } |
1390 break; | 1390 break; |
1391 case Token::VAR: | 1391 case Token::VAR: |
1392 return ParseVariableStatement(kStatementListItem, NULL, ok); | 1392 return ParseVariableStatement(kStatementListItem, NULL, ok); |
1393 case Token::LET: | 1393 case Token::LET: |
1394 if (allow_let()) { | 1394 if (IsLetKeyword()) { |
1395 return ParseVariableStatement(kStatementListItem, NULL, ok); | 1395 return ParseVariableStatement(kStatementListItem, NULL, ok); |
1396 } | 1396 } |
1397 break; | 1397 break; |
1398 default: | 1398 default: |
1399 break; | 1399 break; |
1400 } | 1400 } |
1401 return ParseStatement(NULL, ok); | 1401 return ParseStatement(NULL, ok); |
1402 } | 1402 } |
1403 | 1403 |
1404 | 1404 |
(...skipping 1226 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2631 ? MessageTemplate::kStrongConstructorThis | 2631 ? MessageTemplate::kStrongConstructorThis |
2632 : MessageTemplate::kStrongConstructorSuper); | 2632 : MessageTemplate::kStrongConstructorSuper); |
2633 *ok = false; | 2633 *ok = false; |
2634 return nullptr; | 2634 return nullptr; |
2635 } | 2635 } |
2636 } | 2636 } |
2637 return factory()->NewExpressionStatement(expr, pos); | 2637 return factory()->NewExpressionStatement(expr, pos); |
2638 } | 2638 } |
2639 break; | 2639 break; |
2640 | 2640 |
2641 // TODO(arv): Handle `let [` | |
2642 // https://code.google.com/p/v8/issues/detail?id=3847 | |
2643 | |
2644 default: | 2641 default: |
2645 break; | 2642 break; |
2646 } | 2643 } |
2647 | 2644 |
2648 bool starts_with_idenfifier = peek_any_identifier(); | 2645 bool starts_with_idenfifier = peek_any_identifier(); |
2649 Expression* expr = ParseExpression(true, CHECK_OK); | 2646 Expression* expr = ParseExpression(true, CHECK_OK); |
2650 if (peek() == Token::COLON && starts_with_idenfifier && expr != NULL && | 2647 if (peek() == Token::COLON && starts_with_idenfifier && expr != NULL && |
2651 expr->AsVariableProxy() != NULL && | 2648 expr->AsVariableProxy() != NULL && |
2652 !expr->AsVariableProxy()->is_this()) { | 2649 !expr->AsVariableProxy()->is_this()) { |
2653 // Expression is a single identifier, and not, e.g., a parenthesized | 2650 // Expression is a single identifier, and not, e.g., a parenthesized |
(...skipping 854 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3508 Scope* saved_scope = scope_; | 3505 Scope* saved_scope = scope_; |
3509 Scope* for_scope = NewScope(scope_, BLOCK_SCOPE); | 3506 Scope* for_scope = NewScope(scope_, BLOCK_SCOPE); |
3510 scope_ = for_scope; | 3507 scope_ = for_scope; |
3511 Expect(Token::FOR, CHECK_OK); | 3508 Expect(Token::FOR, CHECK_OK); |
3512 Expect(Token::LPAREN, CHECK_OK); | 3509 Expect(Token::LPAREN, CHECK_OK); |
3513 for_scope->set_start_position(scanner()->location().beg_pos); | 3510 for_scope->set_start_position(scanner()->location().beg_pos); |
3514 bool is_let_identifier_expression = false; | 3511 bool is_let_identifier_expression = false; |
3515 DeclarationParsingResult parsing_result; | 3512 DeclarationParsingResult parsing_result; |
3516 if (peek() != Token::SEMICOLON) { | 3513 if (peek() != Token::SEMICOLON) { |
3517 if (peek() == Token::VAR || (peek() == Token::CONST && allow_const()) || | 3514 if (peek() == Token::VAR || (peek() == Token::CONST && allow_const()) || |
3518 (peek() == Token::LET && allow_let())) { | 3515 (peek() == Token::LET && IsLetKeyword())) { |
3519 ParseVariableDeclarations(kForStatement, &parsing_result, CHECK_OK); | 3516 ParseVariableDeclarations(kForStatement, &parsing_result, CHECK_OK); |
3520 is_const = parsing_result.descriptor.mode == CONST; | 3517 is_const = parsing_result.descriptor.mode == CONST; |
3521 | 3518 |
3522 int num_decl = parsing_result.declarations.length(); | 3519 int num_decl = parsing_result.declarations.length(); |
3523 bool accept_IN = num_decl >= 1; | 3520 bool accept_IN = num_decl >= 1; |
3524 bool accept_OF = true; | 3521 bool accept_OF = true; |
3525 ForEachStatement::VisitMode mode; | 3522 ForEachStatement::VisitMode mode; |
3526 int each_beg_pos = scanner()->location().beg_pos; | 3523 int each_beg_pos = scanner()->location().beg_pos; |
3527 int each_end_pos = scanner()->location().end_pos; | 3524 int each_end_pos = scanner()->location().end_pos; |
3528 | 3525 |
(...skipping 2486 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6015 Expression* Parser::SpreadCallNew(Expression* function, | 6012 Expression* Parser::SpreadCallNew(Expression* function, |
6016 ZoneList<v8::internal::Expression*>* args, | 6013 ZoneList<v8::internal::Expression*>* args, |
6017 int pos) { | 6014 int pos) { |
6018 args->InsertAt(0, function, zone()); | 6015 args->InsertAt(0, function, zone()); |
6019 | 6016 |
6020 return factory()->NewCallRuntime( | 6017 return factory()->NewCallRuntime( |
6021 ast_value_factory()->reflect_construct_string(), NULL, args, pos); | 6018 ast_value_factory()->reflect_construct_string(), NULL, args, pos); |
6022 } | 6019 } |
6023 } // namespace internal | 6020 } // namespace internal |
6024 } // namespace v8 | 6021 } // namespace v8 |
OLD | NEW |