OLD | NEW |
1 // Copyright 2015 the V8 project authors. All rights reserved. | 1 // Copyright 2015 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_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ | 5 #ifndef V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ |
6 #define V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ | 6 #define V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ |
7 | 7 |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "src/ast.h" | 10 #include "src/ast.h" |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
178 BytecodeArrayBuilder& JumpIfFalse(BytecodeLabel* label); | 178 BytecodeArrayBuilder& JumpIfFalse(BytecodeLabel* label); |
179 // TODO(mythria) The following two functions should be merged into | 179 // TODO(mythria) The following two functions should be merged into |
180 // JumpIfTrue/False. These bytecodes should be automatically chosen rather | 180 // JumpIfTrue/False. These bytecodes should be automatically chosen rather |
181 // than explicitly using them. | 181 // than explicitly using them. |
182 BytecodeArrayBuilder& JumpIfToBooleanTrue(BytecodeLabel* label); | 182 BytecodeArrayBuilder& JumpIfToBooleanTrue(BytecodeLabel* label); |
183 BytecodeArrayBuilder& JumpIfToBooleanFalse(BytecodeLabel* label); | 183 BytecodeArrayBuilder& JumpIfToBooleanFalse(BytecodeLabel* label); |
184 | 184 |
185 BytecodeArrayBuilder& Throw(); | 185 BytecodeArrayBuilder& Throw(); |
186 BytecodeArrayBuilder& Return(); | 186 BytecodeArrayBuilder& Return(); |
187 | 187 |
| 188 // Complex flow control. |
| 189 BytecodeArrayBuilder& ForInPrepare(); |
| 190 BytecodeArrayBuilder& ForInNext(Register for_in_state); |
| 191 BytecodeArrayBuilder& ForInDone(Register for_in_state); |
| 192 |
188 BytecodeArrayBuilder& EnterBlock(); | 193 BytecodeArrayBuilder& EnterBlock(); |
189 BytecodeArrayBuilder& LeaveBlock(); | 194 BytecodeArrayBuilder& LeaveBlock(); |
190 | 195 |
191 // Accessors | 196 // Accessors |
192 Zone* zone() const { return zone_; } | 197 Zone* zone() const { return zone_; } |
193 | 198 |
194 private: | 199 private: |
195 ZoneVector<uint8_t>* bytecodes() { return &bytecodes_; } | 200 ZoneVector<uint8_t>* bytecodes() { return &bytecodes_; } |
196 const ZoneVector<uint8_t>* bytecodes() const { return &bytecodes_; } | 201 const ZoneVector<uint8_t>* bytecodes() const { return &bytecodes_; } |
197 Isolate* isolate() const { return isolate_; } | 202 Isolate* isolate() const { return isolate_; } |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
275 | 280 |
276 private: | 281 private: |
277 static const size_t kInvalidOffset = static_cast<size_t>(-1); | 282 static const size_t kInvalidOffset = static_cast<size_t>(-1); |
278 | 283 |
279 INLINE(void bind_to(size_t offset)) { | 284 INLINE(void bind_to(size_t offset)) { |
280 DCHECK(!bound_ && offset != kInvalidOffset); | 285 DCHECK(!bound_ && offset != kInvalidOffset); |
281 offset_ = offset; | 286 offset_ = offset; |
282 bound_ = true; | 287 bound_ = true; |
283 } | 288 } |
284 INLINE(void set_referrer(size_t offset)) { | 289 INLINE(void set_referrer(size_t offset)) { |
285 DCHECK(!bound_ && offset != kInvalidOffset); | 290 DCHECK(!bound_ && offset != kInvalidOffset && offset_ == kInvalidOffset); |
286 offset_ = offset; | 291 offset_ = offset; |
287 } | 292 } |
288 INLINE(size_t offset() const) { return offset_; } | 293 INLINE(size_t offset() const) { return offset_; } |
289 INLINE(bool is_bound() const) { return bound_; } | 294 INLINE(bool is_bound() const) { return bound_; } |
290 INLINE(bool is_forward_target() const) { | 295 INLINE(bool is_forward_target() const) { |
291 return offset() != kInvalidOffset && !is_bound(); | 296 return offset() != kInvalidOffset && !is_bound(); |
292 } | 297 } |
293 | 298 |
294 // There are three states for a label: | 299 // There are three states for a label: |
295 // bound_ offset_ | 300 // bound_ offset_ |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
328 | 333 |
329 DISALLOW_COPY_AND_ASSIGN(TemporaryRegisterScope); | 334 DISALLOW_COPY_AND_ASSIGN(TemporaryRegisterScope); |
330 }; | 335 }; |
331 | 336 |
332 | 337 |
333 } // namespace interpreter | 338 } // namespace interpreter |
334 } // namespace internal | 339 } // namespace internal |
335 } // namespace v8 | 340 } // namespace v8 |
336 | 341 |
337 #endif // V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ | 342 #endif // V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ |
OLD | NEW |