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

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

Issue 2472063002: Preparse lazy function parameters (Closed)
Patch Set: IsArrowFunction Created 4 years, 1 month 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/preparse-data-format.h ('k') | src/parsing/preparser.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_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 869 matching lines...) Expand 10 before | Expand all | Expand 10 after
880 } 880 }
881 881
882 // Parses a single function literal, from the opening parentheses before 882 // Parses a single function literal, from the opening parentheses before
883 // parameters to the closing brace after the body. 883 // parameters to the closing brace after the body.
884 // Returns a FunctionEntry describing the body of the function in enough 884 // Returns a FunctionEntry describing the body of the function in enough
885 // detail that it can be lazily compiled. 885 // detail that it can be lazily compiled.
886 // The scanner is expected to have matched the "function" or "function*" 886 // The scanner is expected to have matched the "function" or "function*"
887 // keyword and parameters, and have consumed the initial '{'. 887 // keyword and parameters, and have consumed the initial '{'.
888 // At return, unless an error occurred, the scanner is positioned before the 888 // At return, unless an error occurred, the scanner is positioned before the
889 // the final '}'. 889 // the final '}'.
890 PreParseResult PreParseFunction(DeclarationScope* function_scope, 890 PreParseResult PreParseFunction(FunctionKind kind,
891 DeclarationScope* function_scope,
891 bool parsing_module, SingletonLogger* log, 892 bool parsing_module, SingletonLogger* log,
892 bool track_unresolved_variables, 893 bool track_unresolved_variables,
893 bool may_abort, int* use_counts); 894 bool may_abort, int* use_counts);
894 895
895 private: 896 private:
896 // These types form an algebra over syntactic categories that is just 897 // These types form an algebra over syntactic categories that is just
897 // rich enough to let us recognize and propagate the constructs that 898 // rich enough to let us recognize and propagate the constructs that
898 // are either being counted in the preparser data, or is important 899 // are either being counted in the preparser data, or is important
899 // to throw the correct syntax error exceptions. 900 // to throw the correct syntax error exceptions.
900 901
901 // All ParseXXX functions take as the last argument an *ok parameter 902 // All ParseXXX functions take as the last argument an *ok parameter
902 // which is set to false if parsing failed; it is unchanged otherwise. 903 // which is set to false if parsing failed; it is unchanged otherwise.
903 // By making the 'exception handling' explicit, we are forced to check 904 // By making the 'exception handling' explicit, we are forced to check
904 // for failure at the call sites. 905 // for failure at the call sites.
905 906
906 V8_INLINE PreParserStatementList ParseEagerFunctionBody( 907 V8_INLINE PreParserStatementList ParseEagerFunctionBody(
907 PreParserIdentifier function_name, int pos, 908 PreParserIdentifier function_name, int pos,
908 const PreParserFormalParameters& parameters, FunctionKind kind, 909 const PreParserFormalParameters& parameters, FunctionKind kind,
909 FunctionLiteral::FunctionType function_type, bool* ok); 910 FunctionLiteral::FunctionType function_type, bool* ok);
910 911
911 bool AllowsLazyParsingWithoutUnresolvedVariables() const { return false; } 912 bool AllowsLazyParsingWithoutUnresolvedVariables() const { return false; }
912 913
913 V8_INLINE LazyParsingResult SkipLazyFunctionBody( 914 V8_INLINE LazyParsingResult SkipFunction(
915 FunctionKind kind, DeclarationScope* function_scope, int* num_parameters,
916 int* function_length, bool* has_duplicate_parameters,
914 int* materialized_literal_count, int* expected_property_count, 917 int* materialized_literal_count, int* expected_property_count,
915 bool track_unresolved_variables, bool may_abort, bool* ok) { 918 bool is_inner_function, bool may_abort, bool* ok) {
916 UNREACHABLE(); 919 UNREACHABLE();
917 return kLazyParsingComplete; 920 return kLazyParsingComplete;
918 } 921 }
919 Expression ParseFunctionLiteral( 922 Expression ParseFunctionLiteral(
920 Identifier name, Scanner::Location function_name_location, 923 Identifier name, Scanner::Location function_name_location,
921 FunctionNameValidity function_name_validity, FunctionKind kind, 924 FunctionNameValidity function_name_validity, FunctionKind kind,
922 int function_token_pos, FunctionLiteral::FunctionType function_type, 925 int function_token_pos, FunctionLiteral::FunctionType function_type,
923 LanguageMode language_mode, bool* ok); 926 LanguageMode language_mode, bool* ok);
924 LazyParsingResult ParseStatementListAndLogFunction(bool may_abort, bool* ok); 927 LazyParsingResult ParseStatementListAndLogFunction(
928 int position_before_formals, PreParserFormalParameters* formals,
929 bool has_duplicate_parameters, bool maybe_abort, bool* ok);
925 930
926 struct TemplateLiteralState {}; 931 struct TemplateLiteralState {};
927 932
928 V8_INLINE TemplateLiteralState OpenTemplateLiteral(int pos) { 933 V8_INLINE TemplateLiteralState OpenTemplateLiteral(int pos) {
929 return TemplateLiteralState(); 934 return TemplateLiteralState();
930 } 935 }
931 V8_INLINE void AddTemplateExpression(TemplateLiteralState* state, 936 V8_INLINE void AddTemplateExpression(TemplateLiteralState* state,
932 PreParserExpression expression) {} 937 PreParserExpression expression) {}
933 V8_INLINE void AddTemplateSpan(TemplateLiteralState* state, bool tail) {} 938 V8_INLINE void AddTemplateSpan(TemplateLiteralState* state, bool tail) {}
934 V8_INLINE PreParserExpression CloseTemplateLiteral( 939 V8_INLINE PreParserExpression CloseTemplateLiteral(
(...skipping 605 matching lines...) Expand 10 before | Expand all | Expand 10 after
1540 function_state_->NextMaterializedLiteralIndex(); 1545 function_state_->NextMaterializedLiteralIndex();
1541 function_state_->NextMaterializedLiteralIndex(); 1546 function_state_->NextMaterializedLiteralIndex();
1542 } 1547 }
1543 return EmptyExpression(); 1548 return EmptyExpression();
1544 } 1549 }
1545 1550
1546 } // namespace internal 1551 } // namespace internal
1547 } // namespace v8 1552 } // namespace v8
1548 1553
1549 #endif // V8_PARSING_PREPARSER_H 1554 #endif // V8_PARSING_PREPARSER_H
OLDNEW
« no previous file with comments | « src/parsing/preparse-data-format.h ('k') | src/parsing/preparser.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698