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

Side by Side Diff: src/parsing/parser.cc

Issue 1567603005: Set up rewriting triggers (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Add some more forgotten triggers Created 4 years, 11 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
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "src/parsing/parser.h" 5 #include "src/parsing/parser.h"
6 6
7 #include "src/api.h" 7 #include "src/api.h"
8 #include "src/ast/ast.h" 8 #include "src/ast/ast.h"
9 #include "src/ast/ast-expression-visitor.h" 9 #include "src/ast/ast-expression-visitor.h"
10 #include "src/ast/ast-literal-reindexer.h" 10 #include "src/ast/ast-literal-reindexer.h"
(...skipping 1558 matching lines...) Expand 10 before | Expand all | Expand 10 after
1569 1569
1570 case Token::CLASS: 1570 case Token::CLASS:
1571 // TODO(ES6): Support parsing anonymous class declarations here. 1571 // TODO(ES6): Support parsing anonymous class declarations here.
1572 result = ParseClassDeclaration(&names, CHECK_OK); 1572 result = ParseClassDeclaration(&names, CHECK_OK);
1573 break; 1573 break;
1574 1574
1575 default: { 1575 default: {
1576 int pos = peek_position(); 1576 int pos = peek_position();
1577 ExpressionClassifier classifier; 1577 ExpressionClassifier classifier;
1578 Expression* expr = ParseAssignmentExpression(true, &classifier, CHECK_OK); 1578 Expression* expr = ParseAssignmentExpression(true, &classifier, CHECK_OK);
1579 ValidateExpression(&classifier, CHECK_OK); 1579 expr = ParserTraits::RewriteNonPattern(expr, &classifier, CHECK_OK);
1580 1580
1581 ExpectSemicolon(CHECK_OK); 1581 ExpectSemicolon(CHECK_OK);
1582 result = factory()->NewExpressionStatement(expr, pos); 1582 result = factory()->NewExpressionStatement(expr, pos);
1583 break; 1583 break;
1584 } 1584 }
1585 } 1585 }
1586 1586
1587 const AstRawString* default_string = ast_value_factory()->default_string(); 1587 const AstRawString* default_string = ast_value_factory()->default_string();
1588 1588
1589 DCHECK_LE(names.length(), 1); 1589 DCHECK_LE(names.length(), 1);
(...skipping 798 matching lines...) Expand 10 before | Expand all | Expand 10 after
2388 } 2388 }
2389 2389
2390 Expression* value = NULL; 2390 Expression* value = NULL;
2391 // Harmony consts have non-optional initializers. 2391 // Harmony consts have non-optional initializers.
2392 int initializer_position = RelocInfo::kNoPosition; 2392 int initializer_position = RelocInfo::kNoPosition;
2393 if (Check(Token::ASSIGN)) { 2393 if (Check(Token::ASSIGN)) {
2394 ExpressionClassifier classifier; 2394 ExpressionClassifier classifier;
2395 value = ParseAssignmentExpression(var_context != kForStatement, 2395 value = ParseAssignmentExpression(var_context != kForStatement,
2396 &classifier, ok); 2396 &classifier, ok);
2397 if (!*ok) return; 2397 if (!*ok) return;
2398 ValidateExpression(&classifier, ok); 2398 value = ParserTraits::RewriteNonPattern(value, &classifier, ok);
2399 if (!*ok) return; 2399 if (!*ok) return;
2400 variable_loc.end_pos = scanner()->location().end_pos; 2400 variable_loc.end_pos = scanner()->location().end_pos;
2401 2401
2402 if (!parsing_result->first_initializer_loc.IsValid()) { 2402 if (!parsing_result->first_initializer_loc.IsValid()) {
2403 parsing_result->first_initializer_loc = variable_loc; 2403 parsing_result->first_initializer_loc = variable_loc;
2404 } 2404 }
2405 2405
2406 // Don't infer if it is "a = function(){...}();"-like expression. 2406 // Don't infer if it is "a = function(){...}();"-like expression.
2407 if (single_name) { 2407 if (single_name) {
2408 if (fni_ != NULL && value->AsCall() == NULL && 2408 if (fni_ != NULL && value->AsCall() == NULL &&
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
2499 if (is_strong(language_mode()) && 2499 if (is_strong(language_mode()) &&
2500 IsClassConstructor(function_state_->kind())) { 2500 IsClassConstructor(function_state_->kind())) {
2501 bool is_this = peek() == Token::THIS; 2501 bool is_this = peek() == Token::THIS;
2502 Expression* expr; 2502 Expression* expr;
2503 ExpressionClassifier classifier; 2503 ExpressionClassifier classifier;
2504 if (is_this) { 2504 if (is_this) {
2505 expr = ParseStrongInitializationExpression(&classifier, CHECK_OK); 2505 expr = ParseStrongInitializationExpression(&classifier, CHECK_OK);
2506 } else { 2506 } else {
2507 expr = ParseStrongSuperCallExpression(&classifier, CHECK_OK); 2507 expr = ParseStrongSuperCallExpression(&classifier, CHECK_OK);
2508 } 2508 }
2509 ValidateExpression(&classifier, CHECK_OK); 2509 expr = ParserTraits::RewriteNonPattern(expr, &classifier, CHECK_OK);
2510 switch (peek()) { 2510 switch (peek()) {
2511 case Token::SEMICOLON: 2511 case Token::SEMICOLON:
2512 Consume(Token::SEMICOLON); 2512 Consume(Token::SEMICOLON);
2513 break; 2513 break;
2514 case Token::RBRACE: 2514 case Token::RBRACE:
2515 case Token::EOS: 2515 case Token::EOS:
2516 break; 2516 break;
2517 default: 2517 default:
2518 if (!scanner()->HasAnyLineTerminatorBeforeNext()) { 2518 if (!scanner()->HasAnyLineTerminatorBeforeNext()) {
2519 ReportMessageAt(function_state_->this_location(), 2519 ReportMessageAt(function_state_->this_location(),
(...skipping 1200 matching lines...) Expand 10 before | Expand all | Expand 10 after
3720 3720
3721 bool is_for_each = CheckInOrOf(&mode, ok); 3721 bool is_for_each = CheckInOrOf(&mode, ok);
3722 if (!*ok) return nullptr; 3722 if (!*ok) return nullptr;
3723 bool is_destructuring = 3723 bool is_destructuring =
3724 is_for_each && allow_harmony_destructuring_assignment() && 3724 is_for_each && allow_harmony_destructuring_assignment() &&
3725 (expression->IsArrayLiteral() || expression->IsObjectLiteral()); 3725 (expression->IsArrayLiteral() || expression->IsObjectLiteral());
3726 3726
3727 if (is_destructuring) { 3727 if (is_destructuring) {
3728 ValidateAssignmentPattern(&classifier, CHECK_OK); 3728 ValidateAssignmentPattern(&classifier, CHECK_OK);
3729 } else { 3729 } else {
3730 ValidateExpression(&classifier, CHECK_OK); 3730 expression =
3731 ParserTraits::RewriteNonPattern(expression, &classifier, CHECK_OK);
3731 } 3732 }
3732 3733
3733 if (is_for_each) { 3734 if (is_for_each) {
3734 if (!is_destructuring) { 3735 if (!is_destructuring) {
3735 expression = this->CheckAndRewriteReferenceExpression( 3736 expression = this->CheckAndRewriteReferenceExpression(
3736 expression, lhs_beg_pos, lhs_end_pos, 3737 expression, lhs_beg_pos, lhs_end_pos,
3737 MessageTemplate::kInvalidLhsInFor, kSyntaxError, CHECK_OK); 3738 MessageTemplate::kInvalidLhsInFor, kSyntaxError, CHECK_OK);
3738 } 3739 }
3739 3740
3740 ForEachStatement* loop = 3741 ForEachStatement* loop =
(...skipping 1028 matching lines...) Expand 10 before | Expand all | Expand 10 after
4769 FuncNameInferrer::State fni_state(fni_); 4770 FuncNameInferrer::State fni_state(fni_);
4770 const bool in_class = true; 4771 const bool in_class = true;
4771 const bool is_static = false; 4772 const bool is_static = false;
4772 bool is_computed_name = false; // Classes do not care about computed 4773 bool is_computed_name = false; // Classes do not care about computed
4773 // property names here. 4774 // property names here.
4774 ExpressionClassifier classifier; 4775 ExpressionClassifier classifier;
4775 const AstRawString* name = nullptr; 4776 const AstRawString* name = nullptr;
4776 ObjectLiteral::Property* property = ParsePropertyDefinition( 4777 ObjectLiteral::Property* property = ParsePropertyDefinition(
4777 &checker, in_class, has_extends, is_static, &is_computed_name, 4778 &checker, in_class, has_extends, is_static, &is_computed_name,
4778 &has_seen_constructor, &classifier, &name, CHECK_OK); 4779 &has_seen_constructor, &classifier, &name, CHECK_OK);
4779 property = ParserTraits::RewriteObjectLiteralProperty(property, &classifier, 4780 property = ParserTraits::RewriteNonPatternObjectLiteralProperty(
4780 CHECK_OK); 4781 property, &classifier, CHECK_OK);
4781 4782
4782 if (has_seen_constructor && constructor == NULL) { 4783 if (has_seen_constructor && constructor == NULL) {
4783 constructor = GetPropertyValue(property)->AsFunctionLiteral(); 4784 constructor = GetPropertyValue(property)->AsFunctionLiteral();
4784 DCHECK_NOT_NULL(constructor); 4785 DCHECK_NOT_NULL(constructor);
4785 } else { 4786 } else {
4786 properties->Add(property, zone()); 4787 properties->Add(property, zone());
4787 } 4788 }
4788 4789
4789 if (fni_ != NULL) fni_->Infer(); 4790 if (fni_ != NULL) fni_->Infer();
4790 4791
(...skipping 30 matching lines...) Expand all
4821 4822
4822 int pos = peek_position(); 4823 int pos = peek_position();
4823 Expect(Token::MOD, CHECK_OK); 4824 Expect(Token::MOD, CHECK_OK);
4824 // Allow "eval" or "arguments" for backward compatibility. 4825 // Allow "eval" or "arguments" for backward compatibility.
4825 const AstRawString* name = ParseIdentifier(kAllowRestrictedIdentifiers, 4826 const AstRawString* name = ParseIdentifier(kAllowRestrictedIdentifiers,
4826 CHECK_OK); 4827 CHECK_OK);
4827 Scanner::Location spread_pos; 4828 Scanner::Location spread_pos;
4828 ExpressionClassifier classifier; 4829 ExpressionClassifier classifier;
4829 ZoneList<Expression*>* args = 4830 ZoneList<Expression*>* args =
4830 ParseArguments(&spread_pos, &classifier, CHECK_OK); 4831 ParseArguments(&spread_pos, &classifier, CHECK_OK);
4831 ValidateExpression(&classifier, CHECK_OK); 4832 args = RewriteNonPatternArguments(args, &classifier, CHECK_OK);
4832 4833
4833 DCHECK(!spread_pos.IsValid()); 4834 DCHECK(!spread_pos.IsValid());
4834 4835
4835 if (extension_ != NULL) { 4836 if (extension_ != NULL) {
4836 // The extension structures are only accessible while parsing the 4837 // The extension structures are only accessible while parsing the
4837 // very first time not when reparsing because of lazy compilation. 4838 // very first time not when reparsing because of lazy compilation.
4838 scope_->DeclarationScope()->ForceEagerCompilation(); 4839 scope_->DeclarationScope()->ForceEagerCompilation();
4839 } 4840 }
4840 4841
4841 const Runtime::Function* function = Runtime::FunctionForName(name->string()); 4842 const Runtime::Function* function = Runtime::FunctionForName(name->string());
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after
5391 parser_->RewriteDestructuringAssignments(); 5392 parser_->RewriteDestructuringAssignments();
5392 } 5393 }
5393 5394
5394 5395
5395 Expression* ParserTraits::RewriteNonPattern( 5396 Expression* ParserTraits::RewriteNonPattern(
5396 Expression* expr, const ExpressionClassifier* classifier, bool* ok) { 5397 Expression* expr, const ExpressionClassifier* classifier, bool* ok) {
5397 return parser_->RewriteNonPattern(expr, classifier, ok); 5398 return parser_->RewriteNonPattern(expr, classifier, ok);
5398 } 5399 }
5399 5400
5400 5401
5401 ObjectLiteralProperty* ParserTraits::RewriteObjectLiteralProperty( 5402 ZoneList<Expression*>* ParserTraits::RewriteNonPatternArguments(
5402 ObjectLiteralProperty* property, const ExpressionClassifier* classifier, 5403 ZoneList<Expression*>* args, const ExpressionClassifier* classifier,
5403 bool* ok) { 5404 bool* ok) {
5404 return parser_->RewriteObjectLiteralProperty(property, classifier, ok); 5405 return parser_->RewriteNonPatternArguments(args, classifier, ok);
5405 } 5406 }
5406 5407
5407 5408
5409 ObjectLiteralProperty* ParserTraits::RewriteNonPatternObjectLiteralProperty(
5410 ObjectLiteralProperty* property, const ExpressionClassifier* classifier,
5411 bool* ok) {
5412 return parser_->RewriteNonPatternObjectLiteralProperty(property, classifier,
5413 ok);
5414 }
5415
5416
5408 Expression* Parser::RewriteNonPattern(Expression* expr, 5417 Expression* Parser::RewriteNonPattern(Expression* expr,
5409 const ExpressionClassifier* classifier, 5418 const ExpressionClassifier* classifier,
5410 bool* ok) { 5419 bool* ok) {
5411 // For the time being, this does no rewriting at all. 5420 // For the time being, this does no rewriting at all.
5412 ValidateExpression(classifier, ok); 5421 ValidateExpression(classifier, ok);
5413 return expr; 5422 return expr;
5414 } 5423 }
5415 5424
5416 5425
5417 ObjectLiteralProperty* Parser::RewriteObjectLiteralProperty( 5426 ZoneList<Expression*>* Parser::RewriteNonPatternArguments(
5427 ZoneList<Expression*>* args, const ExpressionClassifier* classifier,
5428 bool* ok) {
5429 // For the time being, this does no rewriting at all.
5430 ValidateExpression(classifier, ok);
5431 return args;
5432 }
5433
5434
5435 ObjectLiteralProperty* Parser::RewriteNonPatternObjectLiteralProperty(
5418 ObjectLiteralProperty* property, const ExpressionClassifier* classifier, 5436 ObjectLiteralProperty* property, const ExpressionClassifier* classifier,
5419 bool* ok) { 5437 bool* ok) {
5420 if (property != nullptr) { 5438 if (property != nullptr) {
5421 Expression* key = RewriteNonPattern(property->key(), classifier, ok); 5439 Expression* key = RewriteNonPattern(property->key(), classifier, ok);
5422 property->set_key(key); 5440 property->set_key(key);
5423 Expression* value = RewriteNonPattern(property->value(), classifier, ok); 5441 Expression* value = RewriteNonPattern(property->value(), classifier, ok);
5424 property->set_value(value); 5442 property->set_value(value);
5425 } 5443 }
5426 return property; 5444 return property;
5427 } 5445 }
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
5487 auto class_literal = value->AsClassLiteral(); 5505 auto class_literal = value->AsClassLiteral();
5488 if (class_literal->raw_name() == nullptr) { 5506 if (class_literal->raw_name() == nullptr) {
5489 class_literal->set_raw_name(name); 5507 class_literal->set_raw_name(name);
5490 } 5508 }
5491 } 5509 }
5492 } 5510 }
5493 5511
5494 5512
5495 } // namespace internal 5513 } // namespace internal
5496 } // namespace v8 5514 } // namespace v8
OLDNEW
« no previous file with comments | « src/parsing/parser.h ('k') | src/parsing/parser-base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698