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

Side by Side Diff: src/parsing/preparser.h

Issue 2297733002: [parser] Refactor bookmark in SkipLazyFunctionBody (Closed)
Patch Set: Created 4 years, 3 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
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_PREPARSER_H 5 #ifndef V8_PARSING_PREPARSER_H
6 #define V8_PARSING_PREPARSER_H 6 #define V8_PARSING_PREPARSER_H
7 7
8 #include "src/ast/scopes.h" 8 #include "src/ast/scopes.h"
9 #include "src/parsing/parser-base.h" 9 #include "src/parsing/parser-base.h"
10 10
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after
285 return TypeField::decode(code_) == kBinaryOperationExpression; 285 return TypeField::decode(code_) == kBinaryOperationExpression;
286 } 286 }
287 287
288 // Dummy implementation for making expression->somefunc() work in both Parser 288 // Dummy implementation for making expression->somefunc() work in both Parser
289 // and PreParser. 289 // and PreParser.
290 PreParserExpression* operator->() { return this; } 290 PreParserExpression* operator->() { return this; }
291 291
292 // More dummy implementations of things PreParser doesn't need to track: 292 // More dummy implementations of things PreParser doesn't need to track:
293 void set_index(int index) {} // For YieldExpressions 293 void set_index(int index) {} // For YieldExpressions
294 void set_should_eager_compile() {} 294 void set_should_eager_compile() {}
295 void set_should_be_used_once_hint() {}
295 296
296 int position() const { return kNoSourcePosition; } 297 int position() const { return kNoSourcePosition; }
297 void set_function_token_position(int position) {} 298 void set_function_token_position(int position) {}
298 299
299 private: 300 private:
300 enum Type { 301 enum Type {
301 kExpression, 302 kExpression,
302 kIdentifierExpression, 303 kIdentifierExpression,
303 kStringLiteralExpression, 304 kStringLiteralExpression,
304 kBinaryOperationExpression, 305 kBinaryOperationExpression,
(...skipping 325 matching lines...) Expand 10 before | Expand all | Expand 10 after
630 friend class ParserBase<PreParser>; 631 friend class ParserBase<PreParser>;
631 friend class v8::internal::ExpressionClassifier<ParserTypes<PreParser>>; 632 friend class v8::internal::ExpressionClassifier<ParserTypes<PreParser>>;
632 633
633 public: 634 public:
634 typedef PreParserIdentifier Identifier; 635 typedef PreParserIdentifier Identifier;
635 typedef PreParserExpression Expression; 636 typedef PreParserExpression Expression;
636 typedef PreParserStatement Statement; 637 typedef PreParserStatement Statement;
637 638
638 enum PreParseResult { 639 enum PreParseResult {
639 kPreParseStackOverflow, 640 kPreParseStackOverflow,
641 kPreParseAbort,
640 kPreParseSuccess 642 kPreParseSuccess
641 }; 643 };
642 644
643 PreParser(Zone* zone, Scanner* scanner, AstValueFactory* ast_value_factory, 645 PreParser(Zone* zone, Scanner* scanner, AstValueFactory* ast_value_factory,
644 ParserRecorder* log, uintptr_t stack_limit) 646 ParserRecorder* log, uintptr_t stack_limit)
645 : ParserBase<PreParser>(zone, scanner, stack_limit, NULL, 647 : ParserBase<PreParser>(zone, scanner, stack_limit, NULL,
646 ast_value_factory, log), 648 ast_value_factory, log),
647 use_counts_(nullptr) {} 649 use_counts_(nullptr) {}
648 650
649 // Pre-parse the program from the character stream; returns true on 651 // Pre-parse the program from the character stream; returns true on
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
686 // Returns a FunctionEntry describing the body of the function in enough 688 // Returns a FunctionEntry describing the body of the function in enough
687 // detail that it can be lazily compiled. 689 // detail that it can be lazily compiled.
688 // The scanner is expected to have matched the "function" or "function*" 690 // The scanner is expected to have matched the "function" or "function*"
689 // keyword and parameters, and have consumed the initial '{'. 691 // keyword and parameters, and have consumed the initial '{'.
690 // At return, unless an error occurred, the scanner is positioned before the 692 // At return, unless an error occurred, the scanner is positioned before the
691 // the final '}'. 693 // the final '}'.
692 PreParseResult PreParseLazyFunction(LanguageMode language_mode, 694 PreParseResult PreParseLazyFunction(LanguageMode language_mode,
693 FunctionKind kind, 695 FunctionKind kind,
694 bool has_simple_parameters, 696 bool has_simple_parameters,
695 bool parsing_module, ParserRecorder* log, 697 bool parsing_module, ParserRecorder* log,
696 Scanner::BookmarkScope* bookmark, 698 bool may_abort, int* use_counts);
697 int* use_counts);
698 699
699 // A dummy function, just useful as an argument to CHECK_OK_CUSTOM. 700 // A dummy function, just useful as an argument to CHECK_OK_CUSTOM.
700 static void Void() {} 701 static void Void() {}
701 702
702 private: 703 private:
703 static const int kLazyParseTrialLimit = 200; 704 static const int kLazyParseTrialLimit = 200;
704 705
705 // These types form an algebra over syntactic categories that is just 706 // These types form an algebra over syntactic categories that is just
706 // rich enough to let us recognize and propagate the constructs that 707 // rich enough to let us recognize and propagate the constructs that
707 // are either being counted in the preparser data, or is important 708 // are either being counted in the preparser data, or is important
708 // to throw the correct syntax error exceptions. 709 // to throw the correct syntax error exceptions.
709 710
710 // All ParseXXX functions take as the last argument an *ok parameter 711 // All ParseXXX functions take as the last argument an *ok parameter
711 // which is set to false if parsing failed; it is unchanged otherwise. 712 // which is set to false if parsing failed; it is unchanged otherwise.
712 // By making the 'exception handling' explicit, we are forced to check 713 // By making the 'exception handling' explicit, we are forced to check
713 // for failure at the call sites. 714 // for failure at the call sites.
714 Statement ParseStatementListItem(bool* ok); 715 Statement ParseStatementListItem(bool* ok);
715 void ParseStatementList(int end_token, bool* ok, 716 V8_INLINE bool ParseStatementList(int end_token, bool* ok) {
716 Scanner::BookmarkScope* bookmark = nullptr); 717 return ParseStatementList(end_token, false, ok);
vogelheim 2016/08/30 16:28:42 If may_abort is set to false, ParseStatementList w
nickie 2016/08/31 13:23:36 Done.
718 }
719 bool ParseStatementList(int end_token, bool may_abort, bool* ok);
717 Statement ParseStatement(AllowLabelledFunctionStatement allow_function, 720 Statement ParseStatement(AllowLabelledFunctionStatement allow_function,
718 bool* ok); 721 bool* ok);
719 Statement ParseSubStatement(AllowLabelledFunctionStatement allow_function, 722 Statement ParseSubStatement(AllowLabelledFunctionStatement allow_function,
720 bool* ok); 723 bool* ok);
721 Statement ParseScopedStatement(bool legacy, bool* ok); 724 Statement ParseScopedStatement(bool legacy, bool* ok);
722 Statement ParseHoistableDeclaration(bool* ok); 725 Statement ParseHoistableDeclaration(bool* ok);
723 Statement ParseHoistableDeclaration(int pos, ParseFunctionFlags flags, 726 Statement ParseHoistableDeclaration(int pos, ParseFunctionFlags flags,
724 bool* ok); 727 bool* ok);
725 Statement ParseFunctionDeclaration(bool* ok); 728 Statement ParseFunctionDeclaration(bool* ok);
726 Statement ParseAsyncFunctionDeclaration(bool* ok); 729 Statement ParseAsyncFunctionDeclaration(bool* ok);
(...skipping 25 matching lines...) Expand all
752 Expression ParseConditionalExpression(bool accept_IN, bool* ok); 755 Expression ParseConditionalExpression(bool accept_IN, bool* ok);
753 Expression ParseObjectLiteral(bool* ok); 756 Expression ParseObjectLiteral(bool* ok);
754 Expression ParseV8Intrinsic(bool* ok); 757 Expression ParseV8Intrinsic(bool* ok);
755 Expression ParseDoExpression(bool* ok); 758 Expression ParseDoExpression(bool* ok);
756 759
757 V8_INLINE PreParserStatementList ParseEagerFunctionBody( 760 V8_INLINE PreParserStatementList ParseEagerFunctionBody(
758 PreParserIdentifier function_name, int pos, 761 PreParserIdentifier function_name, int pos,
759 const PreParserFormalParameters& parameters, FunctionKind kind, 762 const PreParserFormalParameters& parameters, FunctionKind kind,
760 FunctionLiteral::FunctionType function_type, bool* ok); 763 FunctionLiteral::FunctionType function_type, bool* ok);
761 764
762 V8_INLINE void SkipLazyFunctionBody( 765 V8_INLINE bool SkipLazyFunctionBody(int* materialized_literal_count,
763 int* materialized_literal_count, int* expected_property_count, bool* ok, 766 int* expected_property_count,
764 Scanner::BookmarkScope* bookmark = nullptr) { 767 bool may_abort, bool* ok) {
765 UNREACHABLE(); 768 UNREACHABLE();
766 } 769 }
767 Expression ParseFunctionLiteral( 770 Expression ParseFunctionLiteral(
768 Identifier name, Scanner::Location function_name_location, 771 Identifier name, Scanner::Location function_name_location,
769 FunctionNameValidity function_name_validity, FunctionKind kind, 772 FunctionNameValidity function_name_validity, FunctionKind kind,
770 int function_token_pos, FunctionLiteral::FunctionType function_type, 773 int function_token_pos, FunctionLiteral::FunctionType function_type,
771 LanguageMode language_mode, bool* ok); 774 LanguageMode language_mode, bool* ok);
772 void ParseLazyFunctionLiteralBody(bool* ok, 775 bool ParseLazyFunctionLiteralBody(bool may_abort, bool* ok);
773 Scanner::BookmarkScope* bookmark = nullptr);
774 776
775 PreParserExpression ParseClassLiteral(PreParserIdentifier name, 777 PreParserExpression ParseClassLiteral(PreParserIdentifier name,
776 Scanner::Location class_name_location, 778 Scanner::Location class_name_location,
777 bool name_is_strict_reserved, int pos, 779 bool name_is_strict_reserved, int pos,
778 bool* ok); 780 bool* ok);
779 781
780 struct TemplateLiteralState {}; 782 struct TemplateLiteralState {};
781 783
782 V8_INLINE TemplateLiteralState OpenTemplateLiteral(int pos) { 784 V8_INLINE TemplateLiteralState OpenTemplateLiteral(int pos) {
783 return TemplateLiteralState(); 785 return TemplateLiteralState();
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
993 V8_INLINE static PreParserExpression EmptyObjectLiteralProperty() { 995 V8_INLINE static PreParserExpression EmptyObjectLiteralProperty() {
994 return PreParserExpression::Default(); 996 return PreParserExpression::Default();
995 } 997 }
996 V8_INLINE static PreParserExpression EmptyFunctionLiteral() { 998 V8_INLINE static PreParserExpression EmptyFunctionLiteral() {
997 return PreParserExpression::Default(); 999 return PreParserExpression::Default();
998 } 1000 }
999 1001
1000 V8_INLINE static PreParserExpressionList NullExpressionList() { 1002 V8_INLINE static PreParserExpressionList NullExpressionList() {
1001 return PreParserExpressionList(); 1003 return PreParserExpressionList();
1002 } 1004 }
1005 V8_INLINE static PreParserStatementList NullStatementList() {
1006 return PreParserStatementList();
1007 }
1003 V8_INLINE PreParserIdentifier EmptyIdentifierString() const { 1008 V8_INLINE PreParserIdentifier EmptyIdentifierString() const {
1004 return PreParserIdentifier::Default(); 1009 return PreParserIdentifier::Default();
1005 } 1010 }
1006 1011
1007 // Odd-ball literal creators. 1012 // Odd-ball literal creators.
1008 V8_INLINE PreParserExpression GetLiteralTheHole(int position) { 1013 V8_INLINE PreParserExpression GetLiteralTheHole(int position) {
1009 return PreParserExpression::Default(); 1014 return PreParserExpression::Default();
1010 } 1015 }
1011 1016
1012 // Producing data during the recursive descent. 1017 // Producing data during the recursive descent.
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after
1178 function_state_->NextMaterializedLiteralIndex(); 1183 function_state_->NextMaterializedLiteralIndex();
1179 function_state_->NextMaterializedLiteralIndex(); 1184 function_state_->NextMaterializedLiteralIndex();
1180 } 1185 }
1181 return EmptyExpression(); 1186 return EmptyExpression();
1182 } 1187 }
1183 1188
1184 } // namespace internal 1189 } // namespace internal
1185 } // namespace v8 1190 } // namespace v8
1186 1191
1187 #endif // V8_PARSING_PREPARSER_H 1192 #endif // V8_PARSING_PREPARSER_H
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698