| 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*>* 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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  Loading... | 
| 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_ | 
| OLD | NEW | 
|---|