OLD | NEW |
1 // Copyright 2008 the V8 project authors. All rights reserved. | 1 // Copyright 2008 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 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 | 177 |
178 // ------------------------------------------------------------------------- | 178 // ------------------------------------------------------------------------- |
179 // Break targets | 179 // Break targets |
180 // | 180 // |
181 // A break target is a jump target that can be used to break out of a | 181 // A break target is a jump target that can be used to break out of a |
182 // statement that keeps extra state on the stack (eg, for/in or | 182 // statement that keeps extra state on the stack (eg, for/in or |
183 // try/finally). They know the expected stack height at the target | 183 // try/finally). They know the expected stack height at the target |
184 // and will drop state from nested statements as part of merging. | 184 // and will drop state from nested statements as part of merging. |
185 // | 185 // |
186 // Break targets are used for return, break, and continue targets. | 186 // Break targets are used for return, break, and continue targets. |
| 187 // |
| 188 // The fast compiler needs a similar object, containing a Label and |
| 189 // the stack height. Since the parser already creates break targets |
| 190 // at all the appropriate sites, and creates the necessary links from |
| 191 // the AST to the break targets, we add an interface to break targets that |
| 192 // simply exposes the stack height and their underlying label, for use |
| 193 // in the fast compiler. |
| 194 |
187 | 195 |
188 class BreakTarget : public JumpTarget { | 196 class BreakTarget : public JumpTarget { |
189 public: | 197 public: |
190 // Construct a break target. | 198 // Construct a break target. |
191 BreakTarget() {} | 199 BreakTarget() {} |
192 | 200 |
193 virtual ~BreakTarget() {} | 201 virtual ~BreakTarget() {} |
194 | 202 |
195 // Set the direction of the break target. | 203 // Set the direction of the break target. |
196 virtual void set_direction(Directionality direction); | 204 virtual void set_direction(Directionality direction); |
(...skipping 18 matching lines...) Expand all Loading... |
215 | 223 |
216 // Bind a break target. If there is no current frame at the binding | 224 // Bind a break target. If there is no current frame at the binding |
217 // site, there must be at least one frame reaching via a forward | 225 // site, there must be at least one frame reaching via a forward |
218 // jump. | 226 // jump. |
219 virtual void Bind(); | 227 virtual void Bind(); |
220 virtual void Bind(Result* arg); | 228 virtual void Bind(Result* arg); |
221 | 229 |
222 // Setter for expected height. | 230 // Setter for expected height. |
223 void set_expected_height(int expected) { expected_height_ = expected; } | 231 void set_expected_height(int expected) { expected_height_ = expected; } |
224 | 232 |
| 233 // Added interface for the fast compiler: |
| 234 int expected_height() { return expected_height_; } |
| 235 // Label* entry_label() is already declared public in JumpTarget. |
225 private: | 236 private: |
226 // The expected height of the expression stack where the target will | 237 // The expected height of the expression stack where the target will |
227 // be bound, statically known at initialization time. | 238 // be bound, statically known at initialization time. |
228 int expected_height_; | 239 int expected_height_; |
229 | 240 |
230 DISALLOW_COPY_AND_ASSIGN(BreakTarget); | 241 DISALLOW_COPY_AND_ASSIGN(BreakTarget); |
231 }; | 242 }; |
232 | 243 |
233 | 244 |
234 // ------------------------------------------------------------------------- | 245 // ------------------------------------------------------------------------- |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 bool is_shadowing_; | 281 bool is_shadowing_; |
271 #endif | 282 #endif |
272 | 283 |
273 DISALLOW_COPY_AND_ASSIGN(ShadowTarget); | 284 DISALLOW_COPY_AND_ASSIGN(ShadowTarget); |
274 }; | 285 }; |
275 | 286 |
276 | 287 |
277 } } // namespace v8::internal | 288 } } // namespace v8::internal |
278 | 289 |
279 #endif // V8_JUMP_TARGET_H_ | 290 #endif // V8_JUMP_TARGET_H_ |
OLD | NEW |