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

Side by Side Diff: src/preparser.h

Issue 1102523003: Implement a 'trial parse' step, that will abort pre-parsing excessively (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Improve comments + naming. (Marja's feedback.) Created 5 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/parser.cc ('k') | src/preparser.cc » ('j') | src/preparser.cc » ('J')
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_PREPARSER_H 5 #ifndef V8_PREPARSER_H
6 #define V8_PREPARSER_H 6 #define V8_PREPARSER_H
7 7
8 #include "src/v8.h" 8 #include "src/v8.h"
9 9
10 #include "src/bailout-reason.h" 10 #include "src/bailout-reason.h"
(...skipping 1803 matching lines...) Expand 10 before | Expand all | Expand 10 after
1814 } 1814 }
1815 1815
1816 // Parses a single function literal, from the opening parentheses before 1816 // Parses a single function literal, from the opening parentheses before
1817 // parameters to the closing brace after the body. 1817 // parameters to the closing brace after the body.
1818 // Returns a FunctionEntry describing the body of the function in enough 1818 // Returns a FunctionEntry describing the body of the function in enough
1819 // detail that it can be lazily compiled. 1819 // detail that it can be lazily compiled.
1820 // The scanner is expected to have matched the "function" or "function*" 1820 // The scanner is expected to have matched the "function" or "function*"
1821 // keyword and parameters, and have consumed the initial '{'. 1821 // keyword and parameters, and have consumed the initial '{'.
1822 // At return, unless an error occurred, the scanner is positioned before the 1822 // At return, unless an error occurred, the scanner is positioned before the
1823 // the final '}'. 1823 // the final '}'.
1824 PreParseResult PreParseLazyFunction(LanguageMode language_mode, 1824 PreParseResult PreParseLazyFunction(
1825 FunctionKind kind, ParserRecorder* log); 1825 LanguageMode language_mode, FunctionKind kind, ParserRecorder* log,
1826 Scanner::BookmarkScope* bookmark = nullptr);
1826 1827
1827 private: 1828 private:
1828 friend class PreParserTraits; 1829 friend class PreParserTraits;
1829 1830
1830 // These types form an algebra over syntactic categories that is just 1831 // These types form an algebra over syntactic categories that is just
1831 // rich enough to let us recognize and propagate the constructs that 1832 // rich enough to let us recognize and propagate the constructs that
1832 // are either being counted in the preparser data, or is important 1833 // are either being counted in the preparser data, or is important
1833 // to throw the correct syntax error exceptions. 1834 // to throw the correct syntax error exceptions.
1834 1835
1835 // All ParseXXX functions take as the last argument an *ok parameter 1836 // All ParseXXX functions take as the last argument an *ok parameter
1836 // which is set to false if parsing failed; it is unchanged otherwise. 1837 // which is set to false if parsing failed; it is unchanged otherwise.
1837 // By making the 'exception handling' explicit, we are forced to check 1838 // By making the 'exception handling' explicit, we are forced to check
1838 // for failure at the call sites. 1839 // for failure at the call sites.
1839 Statement ParseStatementListItem(bool* ok); 1840 Statement ParseStatementListItem(bool* ok);
1840 void ParseStatementList(int end_token, bool* ok); 1841 void ParseStatementList(int end_token, bool* ok,
1842 Scanner::BookmarkScope* bookmark = nullptr);
1841 Statement ParseStatement(bool* ok); 1843 Statement ParseStatement(bool* ok);
1842 Statement ParseSubStatement(bool* ok); 1844 Statement ParseSubStatement(bool* ok);
1843 Statement ParseFunctionDeclaration(bool* ok); 1845 Statement ParseFunctionDeclaration(bool* ok);
1844 Statement ParseClassDeclaration(bool* ok); 1846 Statement ParseClassDeclaration(bool* ok);
1845 Statement ParseBlock(bool* ok); 1847 Statement ParseBlock(bool* ok);
1846 Statement ParseVariableStatement(VariableDeclarationContext var_context, 1848 Statement ParseVariableStatement(VariableDeclarationContext var_context,
1847 bool* ok); 1849 bool* ok);
1848 Statement ParseVariableDeclarations(VariableDeclarationContext var_context, 1850 Statement ParseVariableDeclarations(VariableDeclarationContext var_context,
1849 int* num_decl, 1851 int* num_decl,
1850 Scanner::Location* first_initializer_loc, 1852 Scanner::Location* first_initializer_loc,
(...skipping 21 matching lines...) Expand all
1872 V8_INLINE PreParserStatementList 1874 V8_INLINE PreParserStatementList
1873 ParseEagerFunctionBody(PreParserIdentifier function_name, int pos, 1875 ParseEagerFunctionBody(PreParserIdentifier function_name, int pos,
1874 Variable* fvar, Token::Value fvar_init_op, 1876 Variable* fvar, Token::Value fvar_init_op,
1875 FunctionKind kind, bool* ok); 1877 FunctionKind kind, bool* ok);
1876 1878
1877 Expression ParseFunctionLiteral( 1879 Expression ParseFunctionLiteral(
1878 Identifier name, Scanner::Location function_name_location, 1880 Identifier name, Scanner::Location function_name_location,
1879 bool name_is_strict_reserved, FunctionKind kind, int function_token_pos, 1881 bool name_is_strict_reserved, FunctionKind kind, int function_token_pos,
1880 FunctionLiteral::FunctionType function_type, 1882 FunctionLiteral::FunctionType function_type,
1881 FunctionLiteral::ArityRestriction arity_restriction, bool* ok); 1883 FunctionLiteral::ArityRestriction arity_restriction, bool* ok);
1882 void ParseLazyFunctionLiteralBody(bool* ok); 1884 void ParseLazyFunctionLiteralBody(bool* ok,
1885 Scanner::BookmarkScope* bookmark = nullptr);
1883 1886
1884 PreParserExpression ParseClassLiteral(PreParserIdentifier name, 1887 PreParserExpression ParseClassLiteral(PreParserIdentifier name,
1885 Scanner::Location class_name_location, 1888 Scanner::Location class_name_location,
1886 bool name_is_strict_reserved, int pos, 1889 bool name_is_strict_reserved, int pos,
1887 bool* ok); 1890 bool* ok);
1888 }; 1891 };
1889 1892
1890 1893
1891 void PreParserTraits::MaterializeTemplateCallsiteLiterals() { 1894 void PreParserTraits::MaterializeTemplateCallsiteLiterals() {
1892 pre_parser_->function_state_->NextMaterializedLiteralIndex(); 1895 pre_parser_->function_state_->NextMaterializedLiteralIndex();
(...skipping 1947 matching lines...) Expand 10 before | Expand all | Expand 10 after
3840 *ok = false; 3843 *ok = false;
3841 return; 3844 return;
3842 } 3845 }
3843 has_seen_constructor_ = true; 3846 has_seen_constructor_ = true;
3844 return; 3847 return;
3845 } 3848 }
3846 } 3849 }
3847 } } // v8::internal 3850 } } // v8::internal
3848 3851
3849 #endif // V8_PREPARSER_H 3852 #endif // V8_PREPARSER_H
OLDNEW
« no previous file with comments | « src/parser.cc ('k') | src/preparser.cc » ('j') | src/preparser.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698