OLD | NEW |
1 // Copyright 2012 the V8 project authors. All rights reserved. | 1 // Copyright 2012 the V8 project authors. All rights reserved. |
2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
4 // met: | 4 // met: |
5 // | 5 // |
6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 V(Property) \ | 110 V(Property) \ |
111 V(Call) \ | 111 V(Call) \ |
112 V(CallNew) \ | 112 V(CallNew) \ |
113 V(CallRuntime) \ | 113 V(CallRuntime) \ |
114 V(UnaryOperation) \ | 114 V(UnaryOperation) \ |
115 V(CountOperation) \ | 115 V(CountOperation) \ |
116 V(BinaryOperation) \ | 116 V(BinaryOperation) \ |
117 V(CompareOperation) \ | 117 V(CompareOperation) \ |
118 V(ThisFunction) | 118 V(ThisFunction) |
119 | 119 |
| 120 #define AUXILIARY_NODE_LIST(V) \ |
| 121 V(CaseClause) |
| 122 |
120 #define AST_NODE_LIST(V) \ | 123 #define AST_NODE_LIST(V) \ |
121 DECLARATION_NODE_LIST(V) \ | 124 DECLARATION_NODE_LIST(V) \ |
122 MODULE_NODE_LIST(V) \ | 125 MODULE_NODE_LIST(V) \ |
123 STATEMENT_NODE_LIST(V) \ | 126 STATEMENT_NODE_LIST(V) \ |
124 EXPRESSION_NODE_LIST(V) | 127 EXPRESSION_NODE_LIST(V) \ |
| 128 AUXILIARY_NODE_LIST(V) |
125 | 129 |
126 // Forward declarations | 130 // Forward declarations |
127 class AstConstructionVisitor; | 131 class AstConstructionVisitor; |
128 template<class> class AstNodeFactory; | 132 template<class> class AstNodeFactory; |
129 class AstVisitor; | 133 class AstVisitor; |
130 class Declaration; | 134 class Declaration; |
131 class Module; | 135 class Module; |
132 class BreakableStatement; | 136 class BreakableStatement; |
133 class Expression; | 137 class Expression; |
134 class IterationStatement; | 138 class IterationStatement; |
(...skipping 961 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1096 expression_(expression), | 1100 expression_(expression), |
1097 statement_(statement) { } | 1101 statement_(statement) { } |
1098 | 1102 |
1099 private: | 1103 private: |
1100 Scope* scope_; | 1104 Scope* scope_; |
1101 Expression* expression_; | 1105 Expression* expression_; |
1102 Statement* statement_; | 1106 Statement* statement_; |
1103 }; | 1107 }; |
1104 | 1108 |
1105 | 1109 |
1106 class CaseClause V8_FINAL : public ZoneObject { | 1110 class CaseClause V8_FINAL : public AstNode { |
1107 public: | 1111 public: |
1108 CaseClause(Isolate* isolate, | 1112 DECLARE_NODE_TYPE(CaseClause) |
1109 Expression* label, | |
1110 ZoneList<Statement*>* statements, | |
1111 int pos); | |
1112 | 1113 |
1113 bool is_default() const { return label_ == NULL; } | 1114 bool is_default() const { return label_ == NULL; } |
1114 Expression* label() const { | 1115 Expression* label() const { |
1115 CHECK(!is_default()); | 1116 CHECK(!is_default()); |
1116 return label_; | 1117 return label_; |
1117 } | 1118 } |
1118 Label* body_target() { return &body_target_; } | 1119 Label* body_target() { return &body_target_; } |
1119 ZoneList<Statement*>* statements() const { return statements_; } | 1120 ZoneList<Statement*>* statements() const { return statements_; } |
1120 | 1121 |
1121 int position() const { return position_; } | |
1122 void set_position(int pos) { position_ = pos; } | |
1123 | |
1124 BailoutId EntryId() const { return entry_id_; } | 1122 BailoutId EntryId() const { return entry_id_; } |
1125 | 1123 |
1126 // Type feedback information. | 1124 // Type feedback information. |
1127 TypeFeedbackId CompareId() { return compare_id_; } | 1125 TypeFeedbackId CompareId() { return compare_id_; } |
1128 void RecordTypeFeedback(TypeFeedbackOracle* oracle); | 1126 void RecordTypeFeedback(TypeFeedbackOracle* oracle); |
1129 Handle<Type> compare_type() { return compare_type_; } | 1127 Handle<Type> compare_type() { return compare_type_; } |
1130 | 1128 |
1131 private: | 1129 private: |
| 1130 CaseClause(Isolate* isolate, |
| 1131 Expression* label, |
| 1132 ZoneList<Statement*>* statements, |
| 1133 int pos); |
| 1134 |
1132 Expression* label_; | 1135 Expression* label_; |
1133 Label body_target_; | 1136 Label body_target_; |
1134 ZoneList<Statement*>* statements_; | 1137 ZoneList<Statement*>* statements_; |
1135 int position_; | |
1136 Handle<Type> compare_type_; | 1138 Handle<Type> compare_type_; |
1137 | 1139 |
1138 const TypeFeedbackId compare_id_; | 1140 const TypeFeedbackId compare_id_; |
1139 const BailoutId entry_id_; | 1141 const BailoutId entry_id_; |
1140 }; | 1142 }; |
1141 | 1143 |
1142 | 1144 |
1143 class SwitchStatement V8_FINAL : public BreakableStatement { | 1145 class SwitchStatement V8_FINAL : public BreakableStatement { |
1144 public: | 1146 public: |
1145 DECLARE_NODE_TYPE(SwitchStatement) | 1147 DECLARE_NODE_TYPE(SwitchStatement) |
(...skipping 1890 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3036 | 3038 |
3037 DebuggerStatement* NewDebuggerStatement(int pos) { | 3039 DebuggerStatement* NewDebuggerStatement(int pos) { |
3038 DebuggerStatement* stmt = new(zone_) DebuggerStatement(pos); | 3040 DebuggerStatement* stmt = new(zone_) DebuggerStatement(pos); |
3039 VISIT_AND_RETURN(DebuggerStatement, stmt) | 3041 VISIT_AND_RETURN(DebuggerStatement, stmt) |
3040 } | 3042 } |
3041 | 3043 |
3042 EmptyStatement* NewEmptyStatement(int pos) { | 3044 EmptyStatement* NewEmptyStatement(int pos) { |
3043 return new(zone_) EmptyStatement(pos); | 3045 return new(zone_) EmptyStatement(pos); |
3044 } | 3046 } |
3045 | 3047 |
| 3048 CaseClause* NewCaseClause( |
| 3049 Expression* label, ZoneList<Statement*>* statements, int pos) { |
| 3050 CaseClause* clause = |
| 3051 new(zone_) CaseClause(isolate_, label, statements, pos); |
| 3052 VISIT_AND_RETURN(CaseClause, clause) |
| 3053 } |
| 3054 |
3046 Literal* NewLiteral(Handle<Object> handle, int pos) { | 3055 Literal* NewLiteral(Handle<Object> handle, int pos) { |
3047 Literal* lit = new(zone_) Literal(isolate_, handle, pos); | 3056 Literal* lit = new(zone_) Literal(isolate_, handle, pos); |
3048 VISIT_AND_RETURN(Literal, lit) | 3057 VISIT_AND_RETURN(Literal, lit) |
3049 } | 3058 } |
3050 | 3059 |
3051 Literal* NewNumberLiteral(double number, int pos) { | 3060 Literal* NewNumberLiteral(double number, int pos) { |
3052 return NewLiteral(isolate_->factory()->NewNumber(number, TENURED), pos); | 3061 return NewLiteral(isolate_->factory()->NewNumber(number, TENURED), pos); |
3053 } | 3062 } |
3054 | 3063 |
3055 ObjectLiteral* NewObjectLiteral( | 3064 ObjectLiteral* NewObjectLiteral( |
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3253 private: | 3262 private: |
3254 Isolate* isolate_; | 3263 Isolate* isolate_; |
3255 Zone* zone_; | 3264 Zone* zone_; |
3256 Visitor visitor_; | 3265 Visitor visitor_; |
3257 }; | 3266 }; |
3258 | 3267 |
3259 | 3268 |
3260 } } // namespace v8::internal | 3269 } } // namespace v8::internal |
3261 | 3270 |
3262 #endif // V8_AST_H_ | 3271 #endif // V8_AST_H_ |
OLD | NEW |