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

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

Issue 2368083002: [parser] Refactor of ParseClass* and ParseNativeDeclaration (Closed)
Patch Set: More changes to address reviewers' comments Created 4 years, 2 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 | « no previous file | src/parsing/parser.cc » ('j') | src/parsing/parser.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_PARSING_PARSER_H_ 5 #ifndef V8_PARSING_PARSER_H_
6 #define V8_PARSING_PARSER_H_ 6 #define V8_PARSING_PARSER_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/parsing/parser-base.h" 10 #include "src/parsing/parser-base.h"
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 145
146 typedef v8::internal::Variable Variable; 146 typedef v8::internal::Variable Variable;
147 147
148 // Return types for traversing functions. 148 // Return types for traversing functions.
149 typedef const AstRawString* Identifier; 149 typedef const AstRawString* Identifier;
150 typedef v8::internal::Expression* Expression; 150 typedef v8::internal::Expression* Expression;
151 typedef v8::internal::FunctionLiteral* FunctionLiteral; 151 typedef v8::internal::FunctionLiteral* FunctionLiteral;
152 typedef ObjectLiteral::Property* ObjectLiteralProperty; 152 typedef ObjectLiteral::Property* ObjectLiteralProperty;
153 typedef ClassLiteral::Property* ClassLiteralProperty; 153 typedef ClassLiteral::Property* ClassLiteralProperty;
154 typedef ZoneList<v8::internal::Expression*>* ExpressionList; 154 typedef ZoneList<v8::internal::Expression*>* ExpressionList;
155 typedef ZoneList<ObjectLiteral::Property*>* PropertyList; 155 typedef ZoneList<ObjectLiteral::Property*>* ObjectPropertyList;
156 typedef ZoneList<ClassLiteral::Property*>* ClassPropertyList;
156 typedef ParserFormalParameters FormalParameters; 157 typedef ParserFormalParameters FormalParameters;
157 typedef v8::internal::Statement* Statement; 158 typedef v8::internal::Statement* Statement;
158 typedef ZoneList<v8::internal::Statement*>* StatementList; 159 typedef ZoneList<v8::internal::Statement*>* StatementList;
159 typedef v8::internal::Block* Block; 160 typedef v8::internal::Block* Block;
160 typedef v8::internal::BreakableStatement* BreakableStatement; 161 typedef v8::internal::BreakableStatement* BreakableStatement;
161 typedef v8::internal::IterationStatement* IterationStatement; 162 typedef v8::internal::IterationStatement* IterationStatement;
162 163
163 // For constructing objects returned by the traversing functions. 164 // For constructing objects returned by the traversing functions.
164 typedef AstNodeFactory Factory; 165 typedef AstNodeFactory Factory;
165 166
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
267 Scanner::Location location) 268 Scanner::Location location)
268 : import_name(import_name), 269 : import_name(import_name),
269 local_name(local_name), 270 local_name(local_name),
270 location(location) {} 271 location(location) {}
271 }; 272 };
272 ZoneList<const NamedImport*>* ParseNamedImports(int pos, bool* ok); 273 ZoneList<const NamedImport*>* ParseNamedImports(int pos, bool* ok);
273 Statement* ParseFunctionDeclaration(bool* ok); 274 Statement* ParseFunctionDeclaration(bool* ok);
274 Statement* ParseAsyncFunctionDeclaration(ZoneList<const AstRawString*>* names, 275 Statement* ParseAsyncFunctionDeclaration(ZoneList<const AstRawString*>* names,
275 bool default_export, bool* ok); 276 bool default_export, bool* ok);
276 Expression* ParseAsyncFunctionExpression(bool* ok); 277 Expression* ParseAsyncFunctionExpression(bool* ok);
277 Statement* ParseClassDeclaration(ZoneList<const AstRawString*>* names,
278 bool default_export, bool* ok);
279 Statement* ParseNativeDeclaration(bool* ok);
280 Block* BuildInitializationBlock(DeclarationParsingResult* parsing_result, 278 Block* BuildInitializationBlock(DeclarationParsingResult* parsing_result,
281 ZoneList<const AstRawString*>* names, 279 ZoneList<const AstRawString*>* names,
282 bool* ok); 280 bool* ok);
283 void DeclareAndInitializeVariables( 281 void DeclareAndInitializeVariables(
284 Block* block, const DeclarationDescriptor* declaration_descriptor, 282 Block* block, const DeclarationDescriptor* declaration_descriptor,
285 const DeclarationParsingResult::Declaration* declaration, 283 const DeclarationParsingResult::Declaration* declaration,
286 ZoneList<const AstRawString*>* names, bool* ok); 284 ZoneList<const AstRawString*>* names, bool* ok);
287 ZoneList<const AstRawString*>* DeclareLabel( 285 ZoneList<const AstRawString*>* DeclareLabel(
288 ZoneList<const AstRawString*>* labels, VariableProxy* expr, bool* ok); 286 ZoneList<const AstRawString*>* labels, VariableProxy* expr, bool* ok);
289 bool ContainsLabel(ZoneList<const AstRawString*>* labels, 287 bool ContainsLabel(ZoneList<const AstRawString*>* labels,
290 const AstRawString* label); 288 const AstRawString* label);
291 Expression* RewriteReturn(Expression* return_value, int pos); 289 Expression* RewriteReturn(Expression* return_value, int pos);
292 Statement* RewriteSwitchStatement(Expression* tag, 290 Statement* RewriteSwitchStatement(Expression* tag,
293 SwitchStatement* switch_statement, 291 SwitchStatement* switch_statement,
294 ZoneList<CaseClause*>* cases, Scope* scope); 292 ZoneList<CaseClause*>* cases, Scope* scope);
295 void RewriteCatchPattern(CatchInfo* catch_info, bool* ok); 293 void RewriteCatchPattern(CatchInfo* catch_info, bool* ok);
296 void ValidateCatchBlock(const CatchInfo& catch_info, bool* ok); 294 void ValidateCatchBlock(const CatchInfo& catch_info, bool* ok);
297 Statement* RewriteTryStatement(Block* try_block, Block* catch_block, 295 Statement* RewriteTryStatement(Block* try_block, Block* catch_block,
298 Block* finally_block, 296 Block* finally_block,
299 const CatchInfo& catch_info, int pos); 297 const CatchInfo& catch_info, int pos);
300 298
301 Statement* DeclareFunction(const AstRawString* variable_name, 299 Statement* DeclareFunction(const AstRawString* variable_name,
302 FunctionLiteral* function, int pos, 300 FunctionLiteral* function, int pos,
303 bool is_generator, bool is_async, 301 bool is_generator, bool is_async,
304 ZoneList<const AstRawString*>* names, bool* ok); 302 ZoneList<const AstRawString*>* names, bool* ok);
303 V8_INLINE Statement* DeclareClass(const AstRawString* variable_name,
304 Expression* value,
305 ZoneList<const AstRawString*>* names,
306 int class_token_pos, bool* ok);
307 V8_INLINE void DeclareClassVariable(const AstRawString* name,
308 Scope* block_scope, ClassInfo* class_info,
309 int class_token_pos, bool* ok);
310 V8_INLINE void DeclareClassProperty(const AstRawString* class_name,
311 ClassLiteralProperty* property,
312 ClassInfo* class_info, bool* ok);
313 V8_INLINE Expression* RewriteClassLiteral(const AstRawString* name,
314 ClassInfo* class_info, int pos,
315 bool* ok);
316 V8_INLINE Statement* DeclareNative(const AstRawString* name, int pos,
317 bool* ok);
305 318
306 Expression* ParseYieldStarExpression(bool* ok); 319 Expression* ParseYieldStarExpression(bool* ok);
307 320
308 class PatternRewriter final : public AstVisitor<PatternRewriter> { 321 class PatternRewriter final : public AstVisitor<PatternRewriter> {
309 public: 322 public:
310 static void DeclareAndInitializeVariables( 323 static void DeclareAndInitializeVariables(
311 Parser* parser, Block* block, 324 Parser* parser, Block* block,
312 const DeclarationDescriptor* declaration_descriptor, 325 const DeclarationDescriptor* declaration_descriptor,
313 const DeclarationParsingResult::Declaration* declaration, 326 const DeclarationParsingResult::Declaration* declaration,
314 ZoneList<const AstRawString*>* names, bool* ok); 327 ZoneList<const AstRawString*>* names, bool* ok);
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
421 const AstRawString* name, Scanner::Location function_name_location, 434 const AstRawString* name, Scanner::Location function_name_location,
422 FunctionNameValidity function_name_validity, FunctionKind kind, 435 FunctionNameValidity function_name_validity, FunctionKind kind,
423 int function_token_position, FunctionLiteral::FunctionType type, 436 int function_token_position, FunctionLiteral::FunctionType type,
424 LanguageMode language_mode, bool* ok); 437 LanguageMode language_mode, bool* ok);
425 438
426 Expression* InstallHomeObject(Expression* function_literal, 439 Expression* InstallHomeObject(Expression* function_literal,
427 Expression* home_object); 440 Expression* home_object);
428 FunctionLiteral* SynthesizeClassFieldInitializer(int count); 441 FunctionLiteral* SynthesizeClassFieldInitializer(int count);
429 FunctionLiteral* InsertClassFieldInitializer(FunctionLiteral* constructor); 442 FunctionLiteral* InsertClassFieldInitializer(FunctionLiteral* constructor);
430 443
431 Expression* ParseClassLiteral(const AstRawString* name,
432 Scanner::Location class_name_location,
433 bool name_is_strict_reserved, int pos,
434 bool* ok);
435
436 // Get odd-ball literals. 444 // Get odd-ball literals.
437 Literal* GetLiteralUndefined(int position); 445 Literal* GetLiteralUndefined(int position);
438 446
439 // Check if the scope has conflicting var/let declarations from different 447 // Check if the scope has conflicting var/let declarations from different
440 // scopes. This covers for example 448 // scopes. This covers for example
441 // 449 //
442 // function f() { { { var x; } let x; } } 450 // function f() { { { var x; } let x; } }
443 // function g() { { var x; let x; } } 451 // function g() { { var x; let x; } }
444 // 452 //
445 // The var declarations are hoisted to the function scope, but originate from 453 // The var declarations are hoisted to the function scope, but originate from
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
747 755
748 V8_INLINE void PushEnclosingName(const AstRawString* name) { 756 V8_INLINE void PushEnclosingName(const AstRawString* name) {
749 DCHECK_NOT_NULL(fni_); 757 DCHECK_NOT_NULL(fni_);
750 fni_->PushEnclosingName(name); 758 fni_->PushEnclosingName(name);
751 } 759 }
752 760
753 V8_INLINE void InferFunctionName(FunctionLiteral* func_to_infer) { 761 V8_INLINE void InferFunctionName(FunctionLiteral* func_to_infer) {
754 fni_->AddFunction(func_to_infer); 762 fni_->AddFunction(func_to_infer);
755 } 763 }
756 764
765 V8_INLINE void Infer() {
766 DCHECK_NOT_NULL(fni_);
767 fni_->Infer();
768 }
769
757 // If we assign a function literal to a property we pretenure the 770 // If we assign a function literal to a property we pretenure the
758 // literal so it can be added as a constant function property. 771 // literal so it can be added as a constant function property.
759 V8_INLINE static void CheckAssigningFunctionLiteralToProperty( 772 V8_INLINE static void CheckAssigningFunctionLiteralToProperty(
760 Expression* left, Expression* right) { 773 Expression* left, Expression* right) {
761 DCHECK(left != NULL); 774 DCHECK(left != NULL);
762 if (left->IsProperty() && right->IsFunctionLiteral()) { 775 if (left->IsProperty() && right->IsFunctionLiteral()) {
763 right->AsFunctionLiteral()->set_pretenure(); 776 right->AsFunctionLiteral()->set_pretenure();
764 } 777 }
765 } 778 }
766 779
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
940 953
941 V8_INLINE Expression* ExpressionFromString(int pos) { 954 V8_INLINE Expression* ExpressionFromString(int pos) {
942 const AstRawString* symbol = GetSymbol(); 955 const AstRawString* symbol = GetSymbol();
943 fni_->PushLiteralName(symbol); 956 fni_->PushLiteralName(symbol);
944 return factory()->NewStringLiteral(symbol, pos); 957 return factory()->NewStringLiteral(symbol, pos);
945 } 958 }
946 959
947 V8_INLINE ZoneList<Expression*>* NewExpressionList(int size) const { 960 V8_INLINE ZoneList<Expression*>* NewExpressionList(int size) const {
948 return new (zone()) ZoneList<Expression*>(size, zone()); 961 return new (zone()) ZoneList<Expression*>(size, zone());
949 } 962 }
950 V8_INLINE ZoneList<ObjectLiteral::Property*>* NewPropertyList( 963 V8_INLINE ZoneList<ObjectLiteral::Property*>* NewObjectPropertyList(
951 int size) const { 964 int size) const {
952 return new (zone()) ZoneList<ObjectLiteral::Property*>(size, zone()); 965 return new (zone()) ZoneList<ObjectLiteral::Property*>(size, zone());
953 } 966 }
954 V8_INLINE ZoneList<ClassLiteral::Property*>* NewClassPropertyList( 967 V8_INLINE ZoneList<ClassLiteral::Property*>* NewClassPropertyList(
955 int size) const { 968 int size) const {
956 return new (zone()) ZoneList<ClassLiteral::Property*>(size, zone()); 969 return new (zone()) ZoneList<ClassLiteral::Property*>(size, zone());
957 } 970 }
958 V8_INLINE ZoneList<Statement*>* NewStatementList(int size) const { 971 V8_INLINE ZoneList<Statement*>* NewStatementList(int size) const {
959 return new (zone()) ZoneList<Statement*>(size, zone()); 972 return new (zone()) ZoneList<Statement*>(size, zone());
960 } 973 }
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1083 int total_preparse_skipped_; 1096 int total_preparse_skipped_;
1084 HistogramTimer* pre_parse_timer_; 1097 HistogramTimer* pre_parse_timer_;
1085 1098
1086 bool parsing_on_main_thread_; 1099 bool parsing_on_main_thread_;
1087 }; 1100 };
1088 1101
1089 } // namespace internal 1102 } // namespace internal
1090 } // namespace v8 1103 } // namespace v8
1091 1104
1092 #endif // V8_PARSING_PARSER_H_ 1105 #endif // V8_PARSING_PARSER_H_
OLDNEW
« no previous file with comments | « no previous file | src/parsing/parser.cc » ('j') | src/parsing/parser.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698