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_AST_AST_H_ | 5 #ifndef V8_AST_AST_H_ |
6 #define V8_AST_AST_H_ | 6 #define V8_AST_AST_H_ |
7 | 7 |
8 #include "src/ast/ast-value-factory.h" | 8 #include "src/ast/ast-value-factory.h" |
9 #include "src/ast/modules.h" | 9 #include "src/ast/modules.h" |
10 #include "src/ast/variables.h" | 10 #include "src/ast/variables.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 // allocation and constant-time deallocation of the entire syntax | 32 // allocation and constant-time deallocation of the entire syntax |
33 // tree. | 33 // tree. |
34 | 34 |
35 | 35 |
36 // ---------------------------------------------------------------------------- | 36 // ---------------------------------------------------------------------------- |
37 // Nodes of the abstract syntax tree. Only concrete classes are | 37 // Nodes of the abstract syntax tree. Only concrete classes are |
38 // enumerated here. | 38 // enumerated here. |
39 | 39 |
40 #define DECLARATION_NODE_LIST(V) \ | 40 #define DECLARATION_NODE_LIST(V) \ |
41 V(VariableDeclaration) \ | 41 V(VariableDeclaration) \ |
42 V(FunctionDeclaration) \ | 42 V(FunctionDeclaration) |
43 V(ImportDeclaration) | |
44 | 43 |
45 #define STATEMENT_NODE_LIST(V) \ | 44 #define STATEMENT_NODE_LIST(V) \ |
46 V(Block) \ | 45 V(Block) \ |
47 V(ExpressionStatement) \ | 46 V(ExpressionStatement) \ |
48 V(EmptyStatement) \ | 47 V(EmptyStatement) \ |
49 V(SloppyBlockFunctionStatement) \ | 48 V(SloppyBlockFunctionStatement) \ |
50 V(IfStatement) \ | 49 V(IfStatement) \ |
51 V(ContinueStatement) \ | 50 V(ContinueStatement) \ |
52 V(BreakStatement) \ | 51 V(BreakStatement) \ |
53 V(ReturnStatement) \ | 52 V(ReturnStatement) \ |
(...skipping 503 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
557 fun_(fun) { | 556 fun_(fun) { |
558 DCHECK(mode == VAR || mode == LET || mode == CONST); | 557 DCHECK(mode == VAR || mode == LET || mode == CONST); |
559 DCHECK(fun != NULL); | 558 DCHECK(fun != NULL); |
560 } | 559 } |
561 | 560 |
562 private: | 561 private: |
563 FunctionLiteral* fun_; | 562 FunctionLiteral* fun_; |
564 }; | 563 }; |
565 | 564 |
566 | 565 |
567 class ImportDeclaration final : public Declaration { | |
568 public: | |
569 DECLARE_NODE_TYPE(ImportDeclaration) | |
570 | |
571 const AstRawString* import_name() const { return import_name_; } | |
572 const AstRawString* module_specifier() const { return module_specifier_; } | |
573 void set_module_specifier(const AstRawString* module_specifier) { | |
574 DCHECK(module_specifier_ == NULL); | |
575 module_specifier_ = module_specifier; | |
576 } | |
577 InitializationFlag initialization() const override { | |
578 return kNeedsInitialization; | |
579 } | |
580 | |
581 protected: | |
582 ImportDeclaration(Zone* zone, VariableProxy* proxy, | |
583 const AstRawString* import_name, | |
584 const AstRawString* module_specifier, Scope* scope, int pos) | |
585 : Declaration(zone, proxy, CONST, scope, pos), | |
586 import_name_(import_name), | |
587 module_specifier_(module_specifier) {} | |
588 | |
589 private: | |
590 const AstRawString* import_name_; | |
591 const AstRawString* module_specifier_; | |
592 }; | |
593 | |
594 | |
595 class Module : public AstNode { | |
596 public: | |
597 ModuleDescriptor* descriptor() const { return descriptor_; } | |
598 Block* body() const { return body_; } | |
599 | |
600 protected: | |
601 Module(Zone* zone, int pos) | |
602 : AstNode(pos), descriptor_(ModuleDescriptor::New(zone)), body_(NULL) {} | |
603 Module(Zone* zone, ModuleDescriptor* descriptor, int pos, Block* body = NULL) | |
604 : AstNode(pos), descriptor_(descriptor), body_(body) {} | |
605 | |
606 private: | |
607 ModuleDescriptor* descriptor_; | |
608 Block* body_; | |
609 }; | |
610 | |
611 | |
612 class IterationStatement : public BreakableStatement { | 566 class IterationStatement : public BreakableStatement { |
613 public: | 567 public: |
614 // Type testing & conversion. | 568 // Type testing & conversion. |
615 IterationStatement* AsIterationStatement() final { return this; } | 569 IterationStatement* AsIterationStatement() final { return this; } |
616 | 570 |
617 Statement* body() const { return body_; } | 571 Statement* body() const { return body_; } |
618 void set_body(Statement* s) { body_ = s; } | 572 void set_body(Statement* s) { body_ = s; } |
619 | 573 |
620 int yield_count() const { return yield_count_; } | 574 int yield_count() const { return yield_count_; } |
621 int first_yield_id() const { return first_yield_id_; } | 575 int first_yield_id() const { return first_yield_id_; } |
(...skipping 2476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3098 | 3052 |
3099 FunctionDeclaration* NewFunctionDeclaration(VariableProxy* proxy, | 3053 FunctionDeclaration* NewFunctionDeclaration(VariableProxy* proxy, |
3100 VariableMode mode, | 3054 VariableMode mode, |
3101 FunctionLiteral* fun, | 3055 FunctionLiteral* fun, |
3102 Scope* scope, | 3056 Scope* scope, |
3103 int pos) { | 3057 int pos) { |
3104 return new (parser_zone_) | 3058 return new (parser_zone_) |
3105 FunctionDeclaration(parser_zone_, proxy, mode, fun, scope, pos); | 3059 FunctionDeclaration(parser_zone_, proxy, mode, fun, scope, pos); |
3106 } | 3060 } |
3107 | 3061 |
3108 ImportDeclaration* NewImportDeclaration(VariableProxy* proxy, | |
3109 const AstRawString* import_name, | |
3110 const AstRawString* module_specifier, | |
3111 Scope* scope, int pos) { | |
3112 return new (parser_zone_) ImportDeclaration( | |
3113 parser_zone_, proxy, import_name, module_specifier, scope, pos); | |
3114 } | |
3115 | |
3116 Block* NewBlock(ZoneList<const AstRawString*>* labels, int capacity, | 3062 Block* NewBlock(ZoneList<const AstRawString*>* labels, int capacity, |
3117 bool ignore_completion_value, int pos) { | 3063 bool ignore_completion_value, int pos) { |
3118 return new (local_zone_) | 3064 return new (local_zone_) |
3119 Block(local_zone_, labels, capacity, ignore_completion_value, pos); | 3065 Block(local_zone_, labels, capacity, ignore_completion_value, pos); |
3120 } | 3066 } |
3121 | 3067 |
3122 #define STATEMENT_WITH_LABELS(NodeType) \ | 3068 #define STATEMENT_WITH_LABELS(NodeType) \ |
3123 NodeType* New##NodeType(ZoneList<const AstRawString*>* labels, int pos) { \ | 3069 NodeType* New##NodeType(ZoneList<const AstRawString*>* labels, int pos) { \ |
3124 return new (local_zone_) NodeType(local_zone_, labels, pos); \ | 3070 return new (local_zone_) NodeType(local_zone_, labels, pos); \ |
3125 } | 3071 } |
(...skipping 441 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3567 : NULL; \ | 3513 : NULL; \ |
3568 } | 3514 } |
3569 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) | 3515 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) |
3570 #undef DECLARE_NODE_FUNCTIONS | 3516 #undef DECLARE_NODE_FUNCTIONS |
3571 | 3517 |
3572 | 3518 |
3573 } // namespace internal | 3519 } // namespace internal |
3574 } // namespace v8 | 3520 } // namespace v8 |
3575 | 3521 |
3576 #endif // V8_AST_AST_H_ | 3522 #endif // V8_AST_AST_H_ |
OLD | NEW |