| 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-types.h" | 8 #include "src/ast/ast-types.h" |
| 9 #include "src/ast/ast-value-factory.h" | 9 #include "src/ast/ast-value-factory.h" |
| 10 #include "src/ast/modules.h" | 10 #include "src/ast/modules.h" |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 FeedbackVectorSpec* get_spec() { return &spec_; } | 175 FeedbackVectorSpec* get_spec() { return &spec_; } |
| 176 | 176 |
| 177 private: | 177 private: |
| 178 Flags flags_; | 178 Flags flags_; |
| 179 int node_count_; | 179 int node_count_; |
| 180 FeedbackVectorSpec spec_; | 180 FeedbackVectorSpec spec_; |
| 181 }; | 181 }; |
| 182 | 182 |
| 183 DEFINE_OPERATORS_FOR_FLAGS(AstProperties::Flags) | 183 DEFINE_OPERATORS_FOR_FLAGS(AstProperties::Flags) |
| 184 | 184 |
| 185 struct SourceRange { |
| 186 SourceRange() : start(kNoSourcePosition), end(kNoSourcePosition) {} |
| 187 bool IsEmpty() const { return start == kNoSourcePosition; } |
| 188 int32_t start, end; |
| 189 }; |
| 185 | 190 |
| 186 class AstNode: public ZoneObject { | 191 class AstNode: public ZoneObject { |
| 187 public: | 192 public: |
| 188 #define DECLARE_TYPE_ENUM(type) k##type, | 193 #define DECLARE_TYPE_ENUM(type) k##type, |
| 189 enum NodeType : uint8_t { AST_NODE_LIST(DECLARE_TYPE_ENUM) }; | 194 enum NodeType : uint8_t { AST_NODE_LIST(DECLARE_TYPE_ENUM) }; |
| 190 #undef DECLARE_TYPE_ENUM | 195 #undef DECLARE_TYPE_ENUM |
| 191 | 196 |
| 192 void* operator new(size_t size, Zone* zone) { return zone->New(size); } | 197 void* operator new(size_t size, Zone* zone) { return zone->New(size); } |
| 193 | 198 |
| 194 NodeType node_type() const { return NodeTypeField::decode(bit_field_); } | 199 NodeType node_type() const { return NodeTypeField::decode(bit_field_); } |
| (...skipping 799 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 994 // given if-statement has a then- or an else-part containing code. | 999 // given if-statement has a then- or an else-part containing code. |
| 995 class IfStatement final : public Statement { | 1000 class IfStatement final : public Statement { |
| 996 public: | 1001 public: |
| 997 bool HasThenStatement() const { return !then_statement()->IsEmpty(); } | 1002 bool HasThenStatement() const { return !then_statement()->IsEmpty(); } |
| 998 bool HasElseStatement() const { return !else_statement()->IsEmpty(); } | 1003 bool HasElseStatement() const { return !else_statement()->IsEmpty(); } |
| 999 | 1004 |
| 1000 Expression* condition() const { return condition_; } | 1005 Expression* condition() const { return condition_; } |
| 1001 Statement* then_statement() const { return then_statement_; } | 1006 Statement* then_statement() const { return then_statement_; } |
| 1002 Statement* else_statement() const { return else_statement_; } | 1007 Statement* else_statement() const { return else_statement_; } |
| 1003 | 1008 |
| 1009 SourceRange then_range() const { return then_range_; } |
| 1010 SourceRange else_range() const { return else_range_; } |
| 1011 |
| 1004 void set_condition(Expression* e) { condition_ = e; } | 1012 void set_condition(Expression* e) { condition_ = e; } |
| 1005 void set_then_statement(Statement* s) { then_statement_ = s; } | 1013 void set_then_statement(Statement* s) { then_statement_ = s; } |
| 1006 void set_else_statement(Statement* s) { else_statement_ = s; } | 1014 void set_else_statement(Statement* s) { else_statement_ = s; } |
| 1007 | 1015 |
| 1008 bool IsJump() const { | 1016 bool IsJump() const { |
| 1009 return HasThenStatement() && then_statement()->IsJump() | 1017 return HasThenStatement() && then_statement()->IsJump() |
| 1010 && HasElseStatement() && else_statement()->IsJump(); | 1018 && HasElseStatement() && else_statement()->IsJump(); |
| 1011 } | 1019 } |
| 1012 | 1020 |
| 1013 void set_base_id(int id) { base_id_ = id; } | 1021 void set_base_id(int id) { base_id_ = id; } |
| 1014 static int num_ids() { return parent_num_ids() + 3; } | 1022 static int num_ids() { return parent_num_ids() + 3; } |
| 1015 BailoutId IfId() const { return BailoutId(local_id(0)); } | 1023 BailoutId IfId() const { return BailoutId(local_id(0)); } |
| 1016 BailoutId ThenId() const { return BailoutId(local_id(1)); } | 1024 BailoutId ThenId() const { return BailoutId(local_id(1)); } |
| 1017 BailoutId ElseId() const { return BailoutId(local_id(2)); } | 1025 BailoutId ElseId() const { return BailoutId(local_id(2)); } |
| 1018 | 1026 |
| 1019 private: | 1027 private: |
| 1020 friend class AstNodeFactory; | 1028 friend class AstNodeFactory; |
| 1021 | 1029 |
| 1022 IfStatement(Expression* condition, Statement* then_statement, | 1030 IfStatement(Expression* condition, Statement* then_statement, |
| 1023 Statement* else_statement, int pos) | 1031 Statement* else_statement, int pos, SourceRange then_range, |
| 1032 SourceRange else_range) |
| 1024 : Statement(pos, kIfStatement), | 1033 : Statement(pos, kIfStatement), |
| 1025 base_id_(BailoutId::None().ToInt()), | 1034 base_id_(BailoutId::None().ToInt()), |
| 1026 condition_(condition), | 1035 condition_(condition), |
| 1027 then_statement_(then_statement), | 1036 then_statement_(then_statement), |
| 1028 else_statement_(else_statement) {} | 1037 else_statement_(else_statement), |
| 1038 then_range_(then_range), |
| 1039 else_range_(else_range) {} |
| 1029 | 1040 |
| 1030 static int parent_num_ids() { return 0; } | 1041 static int parent_num_ids() { return 0; } |
| 1031 int base_id() const { | 1042 int base_id() const { |
| 1032 DCHECK(!BailoutId(base_id_).IsNone()); | 1043 DCHECK(!BailoutId(base_id_).IsNone()); |
| 1033 return base_id_; | 1044 return base_id_; |
| 1034 } | 1045 } |
| 1035 int local_id(int n) const { return base_id() + parent_num_ids() + n; } | 1046 int local_id(int n) const { return base_id() + parent_num_ids() + n; } |
| 1036 | 1047 |
| 1037 int base_id_; | 1048 int base_id_; |
| 1038 Expression* condition_; | 1049 Expression* condition_; |
| 1039 Statement* then_statement_; | 1050 Statement* then_statement_; |
| 1040 Statement* else_statement_; | 1051 Statement* else_statement_; |
| 1052 SourceRange then_range_; |
| 1053 SourceRange else_range_; |
| 1041 }; | 1054 }; |
| 1042 | 1055 |
| 1043 | 1056 |
| 1044 class TryStatement : public Statement { | 1057 class TryStatement : public Statement { |
| 1045 public: | 1058 public: |
| 1046 Block* try_block() const { return try_block_; } | 1059 Block* try_block() const { return try_block_; } |
| 1047 void set_try_block(Block* b) { try_block_ = b; } | 1060 void set_try_block(Block* b) { try_block_ = b; } |
| 1048 | 1061 |
| 1049 // Prediction of whether exceptions thrown into the handler for this try block | 1062 // Prediction of whether exceptions thrown into the handler for this try block |
| 1050 // will be caught. | 1063 // will be caught. |
| (...skipping 2258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3309 ReturnStatement(expression, ReturnStatement::kAsyncReturn, pos); | 3322 ReturnStatement(expression, ReturnStatement::kAsyncReturn, pos); |
| 3310 } | 3323 } |
| 3311 | 3324 |
| 3312 WithStatement* NewWithStatement(Scope* scope, | 3325 WithStatement* NewWithStatement(Scope* scope, |
| 3313 Expression* expression, | 3326 Expression* expression, |
| 3314 Statement* statement, | 3327 Statement* statement, |
| 3315 int pos) { | 3328 int pos) { |
| 3316 return new (zone_) WithStatement(scope, expression, statement, pos); | 3329 return new (zone_) WithStatement(scope, expression, statement, pos); |
| 3317 } | 3330 } |
| 3318 | 3331 |
| 3319 IfStatement* NewIfStatement(Expression* condition, | 3332 IfStatement* NewIfStatement(Expression* condition, Statement* then_statement, |
| 3320 Statement* then_statement, | 3333 Statement* else_statement, int pos, |
| 3321 Statement* else_statement, | 3334 SourceRange then_range = {}, |
| 3322 int pos) { | 3335 SourceRange else_range = {}) { |
| 3323 return new (zone_) | 3336 return new (zone_) IfStatement(condition, then_statement, else_statement, |
| 3324 IfStatement(condition, then_statement, else_statement, pos); | 3337 pos, then_range, else_range); |
| 3325 } | 3338 } |
| 3326 | 3339 |
| 3327 TryCatchStatement* NewTryCatchStatement(Block* try_block, Scope* scope, | 3340 TryCatchStatement* NewTryCatchStatement(Block* try_block, Scope* scope, |
| 3328 Block* catch_block, int pos) { | 3341 Block* catch_block, int pos) { |
| 3329 return new (zone_) TryCatchStatement(try_block, scope, catch_block, | 3342 return new (zone_) TryCatchStatement(try_block, scope, catch_block, |
| 3330 HandlerTable::CAUGHT, pos); | 3343 HandlerTable::CAUGHT, pos); |
| 3331 } | 3344 } |
| 3332 | 3345 |
| 3333 TryCatchStatement* NewTryCatchStatementForReThrow(Block* try_block, | 3346 TryCatchStatement* NewTryCatchStatementForReThrow(Block* try_block, |
| 3334 Scope* scope, | 3347 Scope* scope, |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3711 : NULL; \ | 3724 : NULL; \ |
| 3712 } | 3725 } |
| 3713 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) | 3726 AST_NODE_LIST(DECLARE_NODE_FUNCTIONS) |
| 3714 #undef DECLARE_NODE_FUNCTIONS | 3727 #undef DECLARE_NODE_FUNCTIONS |
| 3715 | 3728 |
| 3716 | 3729 |
| 3717 } // namespace internal | 3730 } // namespace internal |
| 3718 } // namespace v8 | 3731 } // namespace v8 |
| 3719 | 3732 |
| 3720 #endif // V8_AST_AST_H_ | 3733 #endif // V8_AST_AST_H_ |
| OLD | NEW |