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_H_ | 5 #ifndef V8_AST_H_ |
6 #define V8_AST_H_ | 6 #define V8_AST_H_ |
7 | 7 |
8 #include "src/assembler.h" | 8 #include "src/assembler.h" |
9 #include "src/ast-value-factory.h" | 9 #include "src/ast-value-factory.h" |
10 #include "src/bailout-reason.h" | 10 #include "src/bailout-reason.h" |
(...skipping 622 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
633 Block* body_; | 633 Block* body_; |
634 }; | 634 }; |
635 | 635 |
636 | 636 |
637 class IterationStatement : public BreakableStatement { | 637 class IterationStatement : public BreakableStatement { |
638 public: | 638 public: |
639 // Type testing & conversion. | 639 // Type testing & conversion. |
640 IterationStatement* AsIterationStatement() final { return this; } | 640 IterationStatement* AsIterationStatement() final { return this; } |
641 | 641 |
642 Statement* body() const { return body_; } | 642 Statement* body() const { return body_; } |
| 643 void set_body(Statement* s) { body_ = s; } |
643 | 644 |
644 static int num_ids() { return parent_num_ids() + 1; } | 645 static int num_ids() { return parent_num_ids() + 1; } |
645 BailoutId OsrEntryId() const { return BailoutId(local_id(0)); } | 646 BailoutId OsrEntryId() const { return BailoutId(local_id(0)); } |
646 virtual BailoutId ContinueId() const = 0; | 647 virtual BailoutId ContinueId() const = 0; |
647 virtual BailoutId StackCheckId() const = 0; | 648 virtual BailoutId StackCheckId() const = 0; |
648 | 649 |
649 // Code generation | 650 // Code generation |
650 Label* continue_target() { return &continue_target_; } | 651 Label* continue_target() { return &continue_target_; } |
651 | 652 |
652 protected: | 653 protected: |
(...skipping 328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
981 }; | 982 }; |
982 | 983 |
983 | 984 |
984 class WithStatement final : public Statement { | 985 class WithStatement final : public Statement { |
985 public: | 986 public: |
986 DECLARE_NODE_TYPE(WithStatement) | 987 DECLARE_NODE_TYPE(WithStatement) |
987 | 988 |
988 Scope* scope() { return scope_; } | 989 Scope* scope() { return scope_; } |
989 Expression* expression() const { return expression_; } | 990 Expression* expression() const { return expression_; } |
990 Statement* statement() const { return statement_; } | 991 Statement* statement() const { return statement_; } |
| 992 void set_statement(Statement* s) { statement_ = s; } |
991 | 993 |
992 void set_base_id(int id) { base_id_ = id; } | 994 void set_base_id(int id) { base_id_ = id; } |
993 static int num_ids() { return parent_num_ids() + 1; } | 995 static int num_ids() { return parent_num_ids() + 1; } |
994 BailoutId EntryId() const { return BailoutId(local_id(0)); } | 996 BailoutId EntryId() const { return BailoutId(local_id(0)); } |
995 | 997 |
996 protected: | 998 protected: |
997 WithStatement(Zone* zone, Scope* scope, Expression* expression, | 999 WithStatement(Zone* zone, Scope* scope, Expression* expression, |
998 Statement* statement, int pos) | 1000 Statement* statement, int pos) |
999 : Statement(zone, pos), | 1001 : Statement(zone, pos), |
1000 scope_(scope), | 1002 scope_(scope), |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1085 public: | 1087 public: |
1086 DECLARE_NODE_TYPE(IfStatement) | 1088 DECLARE_NODE_TYPE(IfStatement) |
1087 | 1089 |
1088 bool HasThenStatement() const { return !then_statement()->IsEmpty(); } | 1090 bool HasThenStatement() const { return !then_statement()->IsEmpty(); } |
1089 bool HasElseStatement() const { return !else_statement()->IsEmpty(); } | 1091 bool HasElseStatement() const { return !else_statement()->IsEmpty(); } |
1090 | 1092 |
1091 Expression* condition() const { return condition_; } | 1093 Expression* condition() const { return condition_; } |
1092 Statement* then_statement() const { return then_statement_; } | 1094 Statement* then_statement() const { return then_statement_; } |
1093 Statement* else_statement() const { return else_statement_; } | 1095 Statement* else_statement() const { return else_statement_; } |
1094 | 1096 |
| 1097 void set_then_statement(Statement* s) { then_statement_ = s; } |
| 1098 void set_else_statement(Statement* s) { else_statement_ = s; } |
| 1099 |
1095 bool IsJump() const override { | 1100 bool IsJump() const override { |
1096 return HasThenStatement() && then_statement()->IsJump() | 1101 return HasThenStatement() && then_statement()->IsJump() |
1097 && HasElseStatement() && else_statement()->IsJump(); | 1102 && HasElseStatement() && else_statement()->IsJump(); |
1098 } | 1103 } |
1099 | 1104 |
1100 void set_base_id(int id) { base_id_ = id; } | 1105 void set_base_id(int id) { base_id_ = id; } |
1101 static int num_ids() { return parent_num_ids() + 3; } | 1106 static int num_ids() { return parent_num_ids() + 3; } |
1102 BailoutId IfId() const { return BailoutId(local_id(0)); } | 1107 BailoutId IfId() const { return BailoutId(local_id(0)); } |
1103 BailoutId ThenId() const { return BailoutId(local_id(1)); } | 1108 BailoutId ThenId() const { return BailoutId(local_id(1)); } |
1104 BailoutId ElseId() const { return BailoutId(local_id(2)); } | 1109 BailoutId ElseId() const { return BailoutId(local_id(2)); } |
(...skipping 19 matching lines...) Expand all Loading... |
1124 Expression* condition_; | 1129 Expression* condition_; |
1125 Statement* then_statement_; | 1130 Statement* then_statement_; |
1126 Statement* else_statement_; | 1131 Statement* else_statement_; |
1127 int base_id_; | 1132 int base_id_; |
1128 }; | 1133 }; |
1129 | 1134 |
1130 | 1135 |
1131 class TryStatement : public Statement { | 1136 class TryStatement : public Statement { |
1132 public: | 1137 public: |
1133 Block* try_block() const { return try_block_; } | 1138 Block* try_block() const { return try_block_; } |
| 1139 void set_try_block(Block* b) { try_block_ = b; } |
1134 | 1140 |
1135 void set_base_id(int id) { base_id_ = id; } | 1141 void set_base_id(int id) { base_id_ = id; } |
1136 static int num_ids() { return parent_num_ids() + 1; } | 1142 static int num_ids() { return parent_num_ids() + 1; } |
1137 BailoutId HandlerId() const { return BailoutId(local_id(0)); } | 1143 BailoutId HandlerId() const { return BailoutId(local_id(0)); } |
1138 | 1144 |
1139 protected: | 1145 protected: |
1140 TryStatement(Zone* zone, Block* try_block, int pos) | 1146 TryStatement(Zone* zone, Block* try_block, int pos) |
1141 : Statement(zone, pos), | 1147 : Statement(zone, pos), |
1142 try_block_(try_block), | 1148 try_block_(try_block), |
1143 base_id_(BailoutId::None().ToInt()) {} | 1149 base_id_(BailoutId::None().ToInt()) {} |
(...skipping 12 matching lines...) Expand all Loading... |
1156 }; | 1162 }; |
1157 | 1163 |
1158 | 1164 |
1159 class TryCatchStatement final : public TryStatement { | 1165 class TryCatchStatement final : public TryStatement { |
1160 public: | 1166 public: |
1161 DECLARE_NODE_TYPE(TryCatchStatement) | 1167 DECLARE_NODE_TYPE(TryCatchStatement) |
1162 | 1168 |
1163 Scope* scope() { return scope_; } | 1169 Scope* scope() { return scope_; } |
1164 Variable* variable() { return variable_; } | 1170 Variable* variable() { return variable_; } |
1165 Block* catch_block() const { return catch_block_; } | 1171 Block* catch_block() const { return catch_block_; } |
| 1172 void set_catch_block(Block* b) { catch_block_ = b; } |
1166 | 1173 |
1167 protected: | 1174 protected: |
1168 TryCatchStatement(Zone* zone, Block* try_block, Scope* scope, | 1175 TryCatchStatement(Zone* zone, Block* try_block, Scope* scope, |
1169 Variable* variable, Block* catch_block, int pos) | 1176 Variable* variable, Block* catch_block, int pos) |
1170 : TryStatement(zone, try_block, pos), | 1177 : TryStatement(zone, try_block, pos), |
1171 scope_(scope), | 1178 scope_(scope), |
1172 variable_(variable), | 1179 variable_(variable), |
1173 catch_block_(catch_block) {} | 1180 catch_block_(catch_block) {} |
1174 | 1181 |
1175 private: | 1182 private: |
1176 Scope* scope_; | 1183 Scope* scope_; |
1177 Variable* variable_; | 1184 Variable* variable_; |
1178 Block* catch_block_; | 1185 Block* catch_block_; |
1179 }; | 1186 }; |
1180 | 1187 |
1181 | 1188 |
1182 class TryFinallyStatement final : public TryStatement { | 1189 class TryFinallyStatement final : public TryStatement { |
1183 public: | 1190 public: |
1184 DECLARE_NODE_TYPE(TryFinallyStatement) | 1191 DECLARE_NODE_TYPE(TryFinallyStatement) |
1185 | 1192 |
1186 Block* finally_block() const { return finally_block_; } | 1193 Block* finally_block() const { return finally_block_; } |
| 1194 void set_finally_block(Block* b) { finally_block_ = b; } |
1187 | 1195 |
1188 protected: | 1196 protected: |
1189 TryFinallyStatement(Zone* zone, Block* try_block, Block* finally_block, | 1197 TryFinallyStatement(Zone* zone, Block* try_block, Block* finally_block, |
1190 int pos) | 1198 int pos) |
1191 : TryStatement(zone, try_block, pos), finally_block_(finally_block) {} | 1199 : TryStatement(zone, try_block, pos), finally_block_(finally_block) {} |
1192 | 1200 |
1193 private: | 1201 private: |
1194 Block* finally_block_; | 1202 Block* finally_block_; |
1195 }; | 1203 }; |
1196 | 1204 |
(...skipping 2422 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3619 // the parser-level zone. | 3627 // the parser-level zone. |
3620 Zone* parser_zone_; | 3628 Zone* parser_zone_; |
3621 AstValueFactory* ast_value_factory_; | 3629 AstValueFactory* ast_value_factory_; |
3622 }; | 3630 }; |
3623 | 3631 |
3624 | 3632 |
3625 } // namespace internal | 3633 } // namespace internal |
3626 } // namespace v8 | 3634 } // namespace v8 |
3627 | 3635 |
3628 #endif // V8_AST_H_ | 3636 #endif // V8_AST_H_ |
OLD | NEW |