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

Side by Side Diff: src/parsing/parser-base.h

Issue 2655853010: [TypeFeedbackVector] Combine the literals array and the feedback vector. (Closed)
Patch Set: more comments. Created 3 years, 10 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.cc ('k') | src/parsing/pattern-rewriter.cc » ('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 #ifndef V8_PARSING_PARSER_BASE_H 5 #ifndef V8_PARSING_PARSER_BASE_H
6 #define V8_PARSING_PARSER_BASE_H 6 #define V8_PARSING_PARSER_BASE_H
7 7
8 #include "src/ast/ast.h" 8 #include "src/ast/ast.h"
9 #include "src/ast/scopes.h" 9 #include "src/ast/scopes.h"
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
(...skipping 1696 matching lines...) Expand 10 before | Expand all | Expand 10 after
1707 typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseRegExpLiteral( 1707 typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParseRegExpLiteral(
1708 bool* ok) { 1708 bool* ok) {
1709 int pos = peek_position(); 1709 int pos = peek_position();
1710 if (!scanner()->ScanRegExpPattern()) { 1710 if (!scanner()->ScanRegExpPattern()) {
1711 Next(); 1711 Next();
1712 ReportMessage(MessageTemplate::kUnterminatedRegExp); 1712 ReportMessage(MessageTemplate::kUnterminatedRegExp);
1713 *ok = false; 1713 *ok = false;
1714 return impl()->EmptyExpression(); 1714 return impl()->EmptyExpression();
1715 } 1715 }
1716 1716
1717 int literal_index = function_state_->NextMaterializedLiteralIndex(); 1717 function_state_->NextMaterializedLiteralIndex();
1718 1718
1719 IdentifierT js_pattern = impl()->GetNextSymbol(); 1719 IdentifierT js_pattern = impl()->GetNextSymbol();
1720 Maybe<RegExp::Flags> flags = scanner()->ScanRegExpFlags(); 1720 Maybe<RegExp::Flags> flags = scanner()->ScanRegExpFlags();
1721 if (flags.IsNothing()) { 1721 if (flags.IsNothing()) {
1722 Next(); 1722 Next();
1723 ReportMessage(MessageTemplate::kMalformedRegExpFlags); 1723 ReportMessage(MessageTemplate::kMalformedRegExpFlags);
1724 *ok = false; 1724 *ok = false;
1725 return impl()->EmptyExpression(); 1725 return impl()->EmptyExpression();
1726 } 1726 }
1727 int js_flags = flags.FromJust(); 1727 int js_flags = flags.FromJust();
1728 Next(); 1728 Next();
1729 return factory()->NewRegExpLiteral(js_pattern, js_flags, literal_index, pos); 1729 return factory()->NewRegExpLiteral(js_pattern, js_flags, pos);
1730 } 1730 }
1731 1731
1732 template <typename Impl> 1732 template <typename Impl>
1733 typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePrimaryExpression( 1733 typename ParserBase<Impl>::ExpressionT ParserBase<Impl>::ParsePrimaryExpression(
1734 bool* is_async, bool* ok) { 1734 bool* is_async, bool* ok) {
1735 // PrimaryExpression :: 1735 // PrimaryExpression ::
1736 // 'this' 1736 // 'this'
1737 // 'null' 1737 // 'null'
1738 // 'true' 1738 // 'true'
1739 // 'false' 1739 // 'false'
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
1997 CheckDestructuringElement(elem, beg_pos, scanner()->location().end_pos); 1997 CheckDestructuringElement(elem, beg_pos, scanner()->location().end_pos);
1998 } 1998 }
1999 values->Add(elem, zone_); 1999 values->Add(elem, zone_);
2000 if (peek() != Token::RBRACK) { 2000 if (peek() != Token::RBRACK) {
2001 Expect(Token::COMMA, CHECK_OK); 2001 Expect(Token::COMMA, CHECK_OK);
2002 } 2002 }
2003 } 2003 }
2004 Expect(Token::RBRACK, CHECK_OK); 2004 Expect(Token::RBRACK, CHECK_OK);
2005 2005
2006 // Update the scope information before the pre-parsing bailout. 2006 // Update the scope information before the pre-parsing bailout.
2007 int literal_index = function_state_->NextMaterializedLiteralIndex(); 2007 function_state_->NextMaterializedLiteralIndex();
2008 2008
2009 ExpressionT result = factory()->NewArrayLiteral(values, first_spread_index, 2009 ExpressionT result =
2010 literal_index, pos); 2010 factory()->NewArrayLiteral(values, first_spread_index, pos);
2011 if (first_spread_index >= 0) { 2011 if (first_spread_index >= 0) {
2012 result = factory()->NewRewritableExpression(result); 2012 result = factory()->NewRewritableExpression(result);
2013 impl()->QueueNonPatternForRewriting(result, ok); 2013 impl()->QueueNonPatternForRewriting(result, ok);
2014 if (!*ok) { 2014 if (!*ok) {
2015 // If the non-pattern rewriting mechanism is used in the future for 2015 // If the non-pattern rewriting mechanism is used in the future for
2016 // rewriting other things than spreads, this error message will have 2016 // rewriting other things than spreads, this error message will have
2017 // to change. Also, this error message will never appear while pre- 2017 // to change. Also, this error message will never appear while pre-
2018 // parsing (this is OK, as it is an implementation limitation). 2018 // parsing (this is OK, as it is an implementation limitation).
2019 ReportMessage(MessageTemplate::kTooManySpreads); 2019 ReportMessage(MessageTemplate::kTooManySpreads);
2020 return impl()->EmptyExpression(); 2020 return impl()->EmptyExpression();
(...skipping 577 matching lines...) Expand 10 before | Expand all | Expand 10 after
2598 if (peek() != Token::RBRACE) { 2598 if (peek() != Token::RBRACE) {
2599 // Need {} because of the CHECK_OK macro. 2599 // Need {} because of the CHECK_OK macro.
2600 Expect(Token::COMMA, CHECK_OK); 2600 Expect(Token::COMMA, CHECK_OK);
2601 } 2601 }
2602 2602
2603 if (fni_ != nullptr) fni_->Infer(); 2603 if (fni_ != nullptr) fni_->Infer();
2604 } 2604 }
2605 Expect(Token::RBRACE, CHECK_OK); 2605 Expect(Token::RBRACE, CHECK_OK);
2606 2606
2607 // Computation of literal_index must happen before pre parse bailout. 2607 // Computation of literal_index must happen before pre parse bailout.
2608 int literal_index = function_state_->NextMaterializedLiteralIndex(); 2608 function_state_->NextMaterializedLiteralIndex();
2609 2609
2610 // In pattern rewriter, we rewrite rest property to call out to a 2610 // In pattern rewriter, we rewrite rest property to call out to a
2611 // runtime function passing all the other properties as arguments to 2611 // runtime function passing all the other properties as arguments to
2612 // this runtime function. Here, we make sure that the number of 2612 // this runtime function. Here, we make sure that the number of
2613 // properties is less than number of arguments allowed for a runtime 2613 // properties is less than number of arguments allowed for a runtime
2614 // call. 2614 // call.
2615 if (has_rest_property && properties->length() > Code::kMaxArguments) { 2615 if (has_rest_property && properties->length() > Code::kMaxArguments) {
2616 this->classifier()->RecordPatternError(Scanner::Location(pos, position()), 2616 this->classifier()->RecordPatternError(Scanner::Location(pos, position()),
2617 MessageTemplate::kTooManyArguments); 2617 MessageTemplate::kTooManyArguments);
2618 } 2618 }
2619 2619
2620 return factory()->NewObjectLiteral(properties, literal_index, 2620 return factory()->NewObjectLiteral(
2621 number_of_boilerplate_properties, pos, 2621 properties, number_of_boilerplate_properties, pos, has_rest_property);
2622 has_rest_property);
2623 } 2622 }
2624 2623
2625 template <typename Impl> 2624 template <typename Impl>
2626 typename ParserBase<Impl>::ExpressionListT ParserBase<Impl>::ParseArguments( 2625 typename ParserBase<Impl>::ExpressionListT ParserBase<Impl>::ParseArguments(
2627 Scanner::Location* first_spread_arg_loc, bool maybe_arrow, bool* ok) { 2626 Scanner::Location* first_spread_arg_loc, bool maybe_arrow, bool* ok) {
2628 // Arguments :: 2627 // Arguments ::
2629 // '(' (AssignmentExpression)*[','] ')' 2628 // '(' (AssignmentExpression)*[','] ')'
2630 2629
2631 Scanner::Location spread_arg = Scanner::Location::invalid(); 2630 Scanner::Location spread_arg = Scanner::Location::invalid();
2632 ExpressionListT result = impl()->NewExpressionList(4); 2631 ExpressionListT result = impl()->NewExpressionList(4);
(...skipping 1520 matching lines...) Expand 10 before | Expand all | Expand 10 after
4153 can_preparse && impl()->AllowsLazyParsingWithoutUnresolvedVariables(); 4152 can_preparse && impl()->AllowsLazyParsingWithoutUnresolvedVariables();
4154 bool should_be_used_once_hint = false; 4153 bool should_be_used_once_hint = false;
4155 bool has_braces = true; 4154 bool has_braces = true;
4156 { 4155 {
4157 FunctionState function_state(&function_state_, &scope_state_, 4156 FunctionState function_state(&function_state_, &scope_state_,
4158 formal_parameters.scope); 4157 formal_parameters.scope);
4159 4158
4160 function_state.SkipMaterializedLiterals( 4159 function_state.SkipMaterializedLiterals(
4161 formal_parameters.materialized_literals_count); 4160 formal_parameters.materialized_literals_count);
4162 4161
4163 impl()->ReindexLiterals(formal_parameters);
4164
4165 Expect(Token::ARROW, CHECK_OK); 4162 Expect(Token::ARROW, CHECK_OK);
4166 4163
4167 if (peek() == Token::LBRACE) { 4164 if (peek() == Token::LBRACE) {
4168 // Multiple statement body 4165 // Multiple statement body
4169 DCHECK_EQ(scope(), formal_parameters.scope); 4166 DCHECK_EQ(scope(), formal_parameters.scope);
4170 if (is_lazy_top_level_function) { 4167 if (is_lazy_top_level_function) {
4171 // FIXME(marja): Arrow function parameters will be parsed even if the 4168 // FIXME(marja): Arrow function parameters will be parsed even if the
4172 // body is preparsed; move relevant parts of parameter handling to 4169 // body is preparsed; move relevant parts of parameter handling to
4173 // simulate consistent parameter handling. 4170 // simulate consistent parameter handling.
4174 Scanner::BookmarkScope bookmark(scanner()); 4171 Scanner::BookmarkScope bookmark(scanner());
(...skipping 1551 matching lines...) Expand 10 before | Expand all | Expand 10 after
5726 return; 5723 return;
5727 } 5724 }
5728 } 5725 }
5729 5726
5730 #undef CHECK_OK_VOID 5727 #undef CHECK_OK_VOID
5731 5728
5732 } // namespace internal 5729 } // namespace internal
5733 } // namespace v8 5730 } // namespace v8
5734 5731
5735 #endif // V8_PARSING_PARSER_BASE_H 5732 #endif // V8_PARSING_PARSER_BASE_H
OLDNEW
« no previous file with comments | « src/parsing/parser.cc ('k') | src/parsing/pattern-rewriter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698