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 1932213002: Version 5.1.281.23 (cherry-pick) (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@5.1
Patch Set: Created 4 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
« 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-rewriter.h" 9 #include "src/ast/ast-expression-rewriter.h"
10 #include "src/ast/ast-expression-visitor.h" 10 #include "src/ast/ast-expression-visitor.h"
(...skipping 746 matching lines...) Expand 10 before | Expand all | Expand 10 after
757 } 757 }
758 758
759 759
760 ClassLiteral* ParserTraits::ParseClassLiteral( 760 ClassLiteral* ParserTraits::ParseClassLiteral(
761 const AstRawString* name, Scanner::Location class_name_location, 761 const AstRawString* name, Scanner::Location class_name_location,
762 bool name_is_strict_reserved, int pos, bool* ok) { 762 bool name_is_strict_reserved, int pos, bool* ok) {
763 return parser_->ParseClassLiteral(name, class_name_location, 763 return parser_->ParseClassLiteral(name, class_name_location,
764 name_is_strict_reserved, pos, ok); 764 name_is_strict_reserved, pos, ok);
765 } 765 }
766 766
767 void ParserTraits::MarkTailPosition(Expression* expression) {
768 expression->MarkTail();
769 }
767 770
768 Parser::Parser(ParseInfo* info) 771 Parser::Parser(ParseInfo* info)
769 : ParserBase<ParserTraits>(info->zone(), &scanner_, info->stack_limit(), 772 : ParserBase<ParserTraits>(info->zone(), &scanner_, info->stack_limit(),
770 info->extension(), info->ast_value_factory(), 773 info->extension(), info->ast_value_factory(),
771 NULL, this), 774 NULL, this),
772 scanner_(info->unicode_cache()), 775 scanner_(info->unicode_cache()),
773 reusable_preparser_(NULL), 776 reusable_preparser_(NULL),
774 original_scope_(NULL), 777 original_scope_(NULL),
775 target_stack_(NULL), 778 target_stack_(NULL),
776 compile_options_(info->compile_options()), 779 compile_options_(info->compile_options()),
(...skipping 2810 matching lines...) Expand 10 before | Expand all | Expand 10 after
3587 3590
3588 Expect(Token::RPAREN, CHECK_OK); 3591 Expect(Token::RPAREN, CHECK_OK);
3589 3592
3590 Scope* body_scope = NewScope(scope_, BLOCK_SCOPE); 3593 Scope* body_scope = NewScope(scope_, BLOCK_SCOPE);
3591 body_scope->set_start_position(scanner()->location().beg_pos); 3594 body_scope->set_start_position(scanner()->location().beg_pos);
3592 3595
3593 Block* body_block = 3596 Block* body_block =
3594 factory()->NewBlock(NULL, 3, false, RelocInfo::kNoPosition); 3597 factory()->NewBlock(NULL, 3, false, RelocInfo::kNoPosition);
3595 3598
3596 { 3599 {
3600 DontCollectExpressionsInTailPositionScope no_tail_calls(
3601 function_state_);
3597 BlockState block_state(&scope_, body_scope); 3602 BlockState block_state(&scope_, body_scope);
3598 3603
3599 Statement* body = ParseScopedStatement(NULL, true, CHECK_OK); 3604 Statement* body = ParseScopedStatement(NULL, true, CHECK_OK);
3600 3605
3601 auto each_initialization_block = 3606 auto each_initialization_block =
3602 factory()->NewBlock(nullptr, 1, true, RelocInfo::kNoPosition); 3607 factory()->NewBlock(nullptr, 1, true, RelocInfo::kNoPosition);
3603 { 3608 {
3604 auto descriptor = parsing_result.descriptor; 3609 auto descriptor = parsing_result.descriptor;
3605 descriptor.declaration_pos = RelocInfo::kNoPosition; 3610 descriptor.declaration_pos = RelocInfo::kNoPosition;
3606 descriptor.initialization_pos = RelocInfo::kNoPosition; 3611 descriptor.initialization_pos = RelocInfo::kNoPosition;
(...skipping 1036 matching lines...) Expand 10 before | Expand all | Expand 10 after
4643 factory()->NewThisFunction(pos), 4648 factory()->NewThisFunction(pos),
4644 RelocInfo::kNoPosition), 4649 RelocInfo::kNoPosition),
4645 RelocInfo::kNoPosition)); 4650 RelocInfo::kNoPosition));
4646 } 4651 }
4647 4652
4648 // ES6 14.6.1 Static Semantics: IsInTailPosition 4653 // ES6 14.6.1 Static Semantics: IsInTailPosition
4649 // Mark collected return expressions that are in tail call position. 4654 // Mark collected return expressions that are in tail call position.
4650 const List<Expression*>& expressions_in_tail_position = 4655 const List<Expression*>& expressions_in_tail_position =
4651 function_state_->expressions_in_tail_position(); 4656 function_state_->expressions_in_tail_position();
4652 for (int i = 0; i < expressions_in_tail_position.length(); ++i) { 4657 for (int i = 0; i < expressions_in_tail_position.length(); ++i) {
4653 expressions_in_tail_position[i]->MarkTail(); 4658 MarkTailPosition(expressions_in_tail_position[i]);
4654 } 4659 }
4655 return result; 4660 return result;
4656 } 4661 }
4657 4662
4658 4663
4659 PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser( 4664 PreParser::PreParseResult Parser::ParseLazyFunctionBodyWithPreParser(
4660 SingletonLogger* logger, Scanner::BookmarkScope* bookmark) { 4665 SingletonLogger* logger, Scanner::BookmarkScope* bookmark) {
4661 // This function may be called on a background thread too; record only the 4666 // This function may be called on a background thread too; record only the
4662 // main thread preparse times. 4667 // main thread preparse times.
4663 if (pre_parse_timer_ != NULL) { 4668 if (pre_parse_timer_ != NULL) {
(...skipping 2205 matching lines...) Expand 10 before | Expand all | Expand 10 after
6869 try_block, target); 6874 try_block, target);
6870 final_loop = target; 6875 final_loop = target;
6871 } 6876 }
6872 6877
6873 return final_loop; 6878 return final_loop;
6874 } 6879 }
6875 6880
6876 6881
6877 } // namespace internal 6882 } // namespace internal
6878 } // namespace v8 6883 } // 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