| OLD | NEW |
| 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 Loading... |
| 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*>* ObjectPropertyList; | 155 typedef ZoneList<ObjectLiteral::Property*>* PropertyList; |
| 156 typedef ZoneList<ClassLiteral::Property*>* ClassPropertyList; | |
| 157 typedef ParserFormalParameters FormalParameters; | 156 typedef ParserFormalParameters FormalParameters; |
| 158 typedef v8::internal::Statement* Statement; | 157 typedef v8::internal::Statement* Statement; |
| 159 typedef ZoneList<v8::internal::Statement*>* StatementList; | 158 typedef ZoneList<v8::internal::Statement*>* StatementList; |
| 160 typedef v8::internal::Block* Block; | 159 typedef v8::internal::Block* Block; |
| 161 typedef v8::internal::BreakableStatement* BreakableStatement; | 160 typedef v8::internal::BreakableStatement* BreakableStatement; |
| 162 typedef v8::internal::IterationStatement* IterationStatement; | 161 typedef v8::internal::IterationStatement* IterationStatement; |
| 163 | 162 |
| 164 // For constructing objects returned by the traversing functions. | 163 // For constructing objects returned by the traversing functions. |
| 165 typedef AstNodeFactory Factory; | 164 typedef AstNodeFactory Factory; |
| 166 | 165 |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 263 const AstRawString* local_name; | 262 const AstRawString* local_name; |
| 264 const Scanner::Location location; | 263 const Scanner::Location location; |
| 265 NamedImport(const AstRawString* import_name, const AstRawString* local_name, | 264 NamedImport(const AstRawString* import_name, const AstRawString* local_name, |
| 266 Scanner::Location location) | 265 Scanner::Location location) |
| 267 : import_name(import_name), | 266 : import_name(import_name), |
| 268 local_name(local_name), | 267 local_name(local_name), |
| 269 location(location) {} | 268 location(location) {} |
| 270 }; | 269 }; |
| 271 ZoneList<const NamedImport*>* ParseNamedImports(int pos, bool* ok); | 270 ZoneList<const NamedImport*>* ParseNamedImports(int pos, bool* ok); |
| 272 Statement* ParseFunctionDeclaration(bool* ok); | 271 Statement* ParseFunctionDeclaration(bool* ok); |
| 272 Statement* ParseClassDeclaration(ZoneList<const AstRawString*>* names, |
| 273 bool default_export, bool* ok); |
| 274 Statement* ParseNativeDeclaration(bool* ok); |
| 273 Block* BuildInitializationBlock(DeclarationParsingResult* parsing_result, | 275 Block* BuildInitializationBlock(DeclarationParsingResult* parsing_result, |
| 274 ZoneList<const AstRawString*>* names, | 276 ZoneList<const AstRawString*>* names, |
| 275 bool* ok); | 277 bool* ok); |
| 276 void DeclareAndInitializeVariables( | 278 void DeclareAndInitializeVariables( |
| 277 Block* block, const DeclarationDescriptor* declaration_descriptor, | 279 Block* block, const DeclarationDescriptor* declaration_descriptor, |
| 278 const DeclarationParsingResult::Declaration* declaration, | 280 const DeclarationParsingResult::Declaration* declaration, |
| 279 ZoneList<const AstRawString*>* names, bool* ok); | 281 ZoneList<const AstRawString*>* names, bool* ok); |
| 280 ZoneList<const AstRawString*>* DeclareLabel( | 282 ZoneList<const AstRawString*>* DeclareLabel( |
| 281 ZoneList<const AstRawString*>* labels, VariableProxy* expr, bool* ok); | 283 ZoneList<const AstRawString*>* labels, VariableProxy* expr, bool* ok); |
| 282 bool ContainsLabel(ZoneList<const AstRawString*>* labels, | 284 bool ContainsLabel(ZoneList<const AstRawString*>* labels, |
| 283 const AstRawString* label); | 285 const AstRawString* label); |
| 284 Expression* RewriteReturn(Expression* return_value, int pos); | 286 Expression* RewriteReturn(Expression* return_value, int pos); |
| 285 Statement* RewriteSwitchStatement(Expression* tag, | 287 Statement* RewriteSwitchStatement(Expression* tag, |
| 286 SwitchStatement* switch_statement, | 288 SwitchStatement* switch_statement, |
| 287 ZoneList<CaseClause*>* cases, Scope* scope); | 289 ZoneList<CaseClause*>* cases, Scope* scope); |
| 288 void RewriteCatchPattern(CatchInfo* catch_info, bool* ok); | 290 void RewriteCatchPattern(CatchInfo* catch_info, bool* ok); |
| 289 void ValidateCatchBlock(const CatchInfo& catch_info, bool* ok); | 291 void ValidateCatchBlock(const CatchInfo& catch_info, bool* ok); |
| 290 Statement* RewriteTryStatement(Block* try_block, Block* catch_block, | 292 Statement* RewriteTryStatement(Block* try_block, Block* catch_block, |
| 291 Block* finally_block, | 293 Block* finally_block, |
| 292 const CatchInfo& catch_info, int pos); | 294 const CatchInfo& catch_info, int pos); |
| 293 | 295 |
| 294 Statement* DeclareFunction(const AstRawString* variable_name, | 296 Statement* DeclareFunction(const AstRawString* variable_name, |
| 295 FunctionLiteral* function, int pos, | 297 FunctionLiteral* function, int pos, |
| 296 bool is_generator, bool is_async, | 298 bool is_generator, bool is_async, |
| 297 ZoneList<const AstRawString*>* names, bool* ok); | 299 ZoneList<const AstRawString*>* names, bool* ok); |
| 298 V8_INLINE Statement* DeclareClass(const AstRawString* variable_name, | |
| 299 Expression* value, | |
| 300 ZoneList<const AstRawString*>* names, | |
| 301 int class_token_pos, int end_pos, bool* ok); | |
| 302 V8_INLINE void DeclareClassVariable(const AstRawString* name, | |
| 303 Scope* block_scope, ClassInfo* class_info, | |
| 304 int class_token_pos, bool* ok); | |
| 305 V8_INLINE void DeclareClassProperty(const AstRawString* class_name, | |
| 306 ClassLiteralProperty* property, | |
| 307 ClassInfo* class_info, bool* ok); | |
| 308 V8_INLINE Expression* RewriteClassLiteral(const AstRawString* name, | |
| 309 ClassInfo* class_info, int pos, | |
| 310 bool* ok); | |
| 311 V8_INLINE Statement* DeclareNative(const AstRawString* name, int pos, | |
| 312 bool* ok); | |
| 313 | 300 |
| 314 Expression* ParseYieldStarExpression(bool* ok); | 301 Expression* ParseYieldStarExpression(bool* ok); |
| 315 | 302 |
| 316 class PatternRewriter final : public AstVisitor<PatternRewriter> { | 303 class PatternRewriter final : public AstVisitor<PatternRewriter> { |
| 317 public: | 304 public: |
| 318 static void DeclareAndInitializeVariables( | 305 static void DeclareAndInitializeVariables( |
| 319 Parser* parser, Block* block, | 306 Parser* parser, Block* block, |
| 320 const DeclarationDescriptor* declaration_descriptor, | 307 const DeclarationDescriptor* declaration_descriptor, |
| 321 const DeclarationParsingResult::Declaration* declaration, | 308 const DeclarationParsingResult::Declaration* declaration, |
| 322 ZoneList<const AstRawString*>* names, bool* ok); | 309 ZoneList<const AstRawString*>* names, bool* ok); |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 425 const AstRawString* name, Scanner::Location function_name_location, | 412 const AstRawString* name, Scanner::Location function_name_location, |
| 426 FunctionNameValidity function_name_validity, FunctionKind kind, | 413 FunctionNameValidity function_name_validity, FunctionKind kind, |
| 427 int function_token_position, FunctionLiteral::FunctionType type, | 414 int function_token_position, FunctionLiteral::FunctionType type, |
| 428 LanguageMode language_mode, bool* ok); | 415 LanguageMode language_mode, bool* ok); |
| 429 | 416 |
| 430 Expression* InstallHomeObject(Expression* function_literal, | 417 Expression* InstallHomeObject(Expression* function_literal, |
| 431 Expression* home_object); | 418 Expression* home_object); |
| 432 FunctionLiteral* SynthesizeClassFieldInitializer(int count); | 419 FunctionLiteral* SynthesizeClassFieldInitializer(int count); |
| 433 FunctionLiteral* InsertClassFieldInitializer(FunctionLiteral* constructor); | 420 FunctionLiteral* InsertClassFieldInitializer(FunctionLiteral* constructor); |
| 434 | 421 |
| 422 Expression* ParseClassLiteral(const AstRawString* name, |
| 423 Scanner::Location class_name_location, |
| 424 bool name_is_strict_reserved, int pos, |
| 425 bool* ok); |
| 426 |
| 435 // Get odd-ball literals. | 427 // Get odd-ball literals. |
| 436 Literal* GetLiteralUndefined(int position); | 428 Literal* GetLiteralUndefined(int position); |
| 437 | 429 |
| 438 // Check if the scope has conflicting var/let declarations from different | 430 // Check if the scope has conflicting var/let declarations from different |
| 439 // scopes. This covers for example | 431 // scopes. This covers for example |
| 440 // | 432 // |
| 441 // function f() { { { var x; } let x; } } | 433 // function f() { { { var x; } let x; } } |
| 442 // function g() { { var x; let x; } } | 434 // function g() { { var x; let x; } } |
| 443 // | 435 // |
| 444 // The var declarations are hoisted to the function scope, but originate from | 436 // The var declarations are hoisted to the function scope, but originate from |
| (...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 740 } else { | 732 } else { |
| 741 fni_->PushLiteralName(ast_value_factory()->anonymous_function_string()); | 733 fni_->PushLiteralName(ast_value_factory()->anonymous_function_string()); |
| 742 } | 734 } |
| 743 } | 735 } |
| 744 | 736 |
| 745 V8_INLINE void PushEnclosingName(const AstRawString* name) { | 737 V8_INLINE void PushEnclosingName(const AstRawString* name) { |
| 746 DCHECK_NOT_NULL(fni_); | 738 DCHECK_NOT_NULL(fni_); |
| 747 fni_->PushEnclosingName(name); | 739 fni_->PushEnclosingName(name); |
| 748 } | 740 } |
| 749 | 741 |
| 750 V8_INLINE void AddFunctionForNameInference(FunctionLiteral* func_to_infer) { | 742 V8_INLINE void InferFunctionName(FunctionLiteral* func_to_infer) { |
| 751 DCHECK_NOT_NULL(fni_); | |
| 752 fni_->AddFunction(func_to_infer); | 743 fni_->AddFunction(func_to_infer); |
| 753 } | 744 } |
| 754 | 745 |
| 755 V8_INLINE void InferFunctionName() { | |
| 756 DCHECK_NOT_NULL(fni_); | |
| 757 fni_->Infer(); | |
| 758 } | |
| 759 | |
| 760 // If we assign a function literal to a property we pretenure the | 746 // If we assign a function literal to a property we pretenure the |
| 761 // literal so it can be added as a constant function property. | 747 // literal so it can be added as a constant function property. |
| 762 V8_INLINE static void CheckAssigningFunctionLiteralToProperty( | 748 V8_INLINE static void CheckAssigningFunctionLiteralToProperty( |
| 763 Expression* left, Expression* right) { | 749 Expression* left, Expression* right) { |
| 764 DCHECK(left != NULL); | 750 DCHECK(left != NULL); |
| 765 if (left->IsProperty() && right->IsFunctionLiteral()) { | 751 if (left->IsProperty() && right->IsFunctionLiteral()) { |
| 766 right->AsFunctionLiteral()->set_pretenure(); | 752 right->AsFunctionLiteral()->set_pretenure(); |
| 767 } | 753 } |
| 768 } | 754 } |
| 769 | 755 |
| (...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 943 | 929 |
| 944 V8_INLINE Expression* ExpressionFromString(int pos) { | 930 V8_INLINE Expression* ExpressionFromString(int pos) { |
| 945 const AstRawString* symbol = GetSymbol(); | 931 const AstRawString* symbol = GetSymbol(); |
| 946 fni_->PushLiteralName(symbol); | 932 fni_->PushLiteralName(symbol); |
| 947 return factory()->NewStringLiteral(symbol, pos); | 933 return factory()->NewStringLiteral(symbol, pos); |
| 948 } | 934 } |
| 949 | 935 |
| 950 V8_INLINE ZoneList<Expression*>* NewExpressionList(int size) const { | 936 V8_INLINE ZoneList<Expression*>* NewExpressionList(int size) const { |
| 951 return new (zone()) ZoneList<Expression*>(size, zone()); | 937 return new (zone()) ZoneList<Expression*>(size, zone()); |
| 952 } | 938 } |
| 953 V8_INLINE ZoneList<ObjectLiteral::Property*>* NewObjectPropertyList( | 939 V8_INLINE ZoneList<ObjectLiteral::Property*>* NewPropertyList( |
| 954 int size) const { | 940 int size) const { |
| 955 return new (zone()) ZoneList<ObjectLiteral::Property*>(size, zone()); | 941 return new (zone()) ZoneList<ObjectLiteral::Property*>(size, zone()); |
| 956 } | 942 } |
| 957 V8_INLINE ZoneList<ClassLiteral::Property*>* NewClassPropertyList( | 943 V8_INLINE ZoneList<ClassLiteral::Property*>* NewClassPropertyList( |
| 958 int size) const { | 944 int size) const { |
| 959 return new (zone()) ZoneList<ClassLiteral::Property*>(size, zone()); | 945 return new (zone()) ZoneList<ClassLiteral::Property*>(size, zone()); |
| 960 } | 946 } |
| 961 V8_INLINE ZoneList<Statement*>* NewStatementList(int size) const { | 947 V8_INLINE ZoneList<Statement*>* NewStatementList(int size) const { |
| 962 return new (zone()) ZoneList<Statement*>(size, zone()); | 948 return new (zone()) ZoneList<Statement*>(size, zone()); |
| 963 } | 949 } |
| (...skipping 126 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1090 int total_preparse_skipped_; | 1076 int total_preparse_skipped_; |
| 1091 HistogramTimer* pre_parse_timer_; | 1077 HistogramTimer* pre_parse_timer_; |
| 1092 | 1078 |
| 1093 bool parsing_on_main_thread_; | 1079 bool parsing_on_main_thread_; |
| 1094 }; | 1080 }; |
| 1095 | 1081 |
| 1096 } // namespace internal | 1082 } // namespace internal |
| 1097 } // namespace v8 | 1083 } // namespace v8 |
| 1098 | 1084 |
| 1099 #endif // V8_PARSING_PARSER_H_ | 1085 #endif // V8_PARSING_PARSER_H_ |
| OLD | NEW |