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/ast.h" | 10 #include "src/ast/ast.h" |
11 #include "src/identity-map.h" | 11 #include "src/identity-map.h" |
12 #include "src/interpreter/bytecodes.h" | 12 #include "src/interpreter/bytecodes.h" |
13 #include "src/zone.h" | 13 #include "src/zone.h" |
14 #include "src/zone-containers.h" | 14 #include "src/zone-containers.h" |
15 | 15 |
16 namespace v8 { | 16 namespace v8 { |
17 namespace internal { | 17 namespace internal { |
18 | 18 |
19 class Isolate; | 19 class Isolate; |
20 | 20 |
21 namespace interpreter { | 21 namespace interpreter { |
22 | 22 |
23 class BytecodeLabel; | 23 class BytecodeLabel; |
24 class Register; | 24 class Register; |
25 | 25 |
26 // TODO(rmcilroy): Unify this with CreateArgumentsParameters::Type in Turbofan | 26 // TODO(rmcilroy): Unify this with CreateArgumentsParameters::Type in Turbofan |
27 // when rest parameters implementation has settled down. | 27 // when rest parameters implementation has settled down. |
28 enum class CreateArgumentsType { kMappedArguments, kUnmappedArguments }; | 28 enum class CreateArgumentsType { kMappedArguments, kUnmappedArguments }; |
29 | 29 |
30 class BytecodeArrayBuilder { | 30 class BytecodeArrayBuilder final { |
31 public: | 31 public: |
32 BytecodeArrayBuilder(Isolate* isolate, Zone* zone); | 32 BytecodeArrayBuilder(Isolate* isolate, Zone* zone); |
| 33 ~BytecodeArrayBuilder(); |
| 34 |
33 Handle<BytecodeArray> ToBytecodeArray(); | 35 Handle<BytecodeArray> ToBytecodeArray(); |
34 | 36 |
35 // Set the number of parameters expected by function. | 37 // Set the number of parameters expected by function. |
36 void set_parameter_count(int number_of_params); | 38 void set_parameter_count(int number_of_params); |
37 int parameter_count() const { | 39 int parameter_count() const { |
38 DCHECK_GE(parameter_count_, 0); | 40 DCHECK_GE(parameter_count_, 0); |
39 return parameter_count_; | 41 return parameter_count_; |
40 } | 42 } |
41 | 43 |
42 // Set the number of locals required for bytecode array. | 44 // Set the number of locals required for bytecode array. |
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
204 BytecodeArrayBuilder& Jump(BytecodeLabel* label); | 206 BytecodeArrayBuilder& Jump(BytecodeLabel* label); |
205 BytecodeArrayBuilder& JumpIfTrue(BytecodeLabel* label); | 207 BytecodeArrayBuilder& JumpIfTrue(BytecodeLabel* label); |
206 BytecodeArrayBuilder& JumpIfFalse(BytecodeLabel* label); | 208 BytecodeArrayBuilder& JumpIfFalse(BytecodeLabel* label); |
207 BytecodeArrayBuilder& JumpIfNull(BytecodeLabel* label); | 209 BytecodeArrayBuilder& JumpIfNull(BytecodeLabel* label); |
208 BytecodeArrayBuilder& JumpIfUndefined(BytecodeLabel* label); | 210 BytecodeArrayBuilder& JumpIfUndefined(BytecodeLabel* label); |
209 | 211 |
210 BytecodeArrayBuilder& Throw(); | 212 BytecodeArrayBuilder& Throw(); |
211 BytecodeArrayBuilder& Return(); | 213 BytecodeArrayBuilder& Return(); |
212 | 214 |
213 // Complex flow control. | 215 // Complex flow control. |
214 BytecodeArrayBuilder& ForInPrepare(Register receiver); | 216 BytecodeArrayBuilder& ForInPrepare(Register cache_type, Register cache_array, |
215 BytecodeArrayBuilder& ForInNext(Register for_in_state, Register index); | 217 Register cache_length); |
216 BytecodeArrayBuilder& ForInDone(Register for_in_state); | 218 BytecodeArrayBuilder& ForInDone(Register index, Register cache_length); |
| 219 BytecodeArrayBuilder& ForInNext(Register receiver, Register cache_type, |
| 220 Register cache_array, Register index); |
| 221 BytecodeArrayBuilder& ForInStep(Register index); |
217 | 222 |
218 // Accessors | 223 // Accessors |
219 Zone* zone() const { return zone_; } | 224 Zone* zone() const { return zone_; } |
220 | 225 |
221 private: | 226 private: |
222 ZoneVector<uint8_t>* bytecodes() { return &bytecodes_; } | 227 ZoneVector<uint8_t>* bytecodes() { return &bytecodes_; } |
223 const ZoneVector<uint8_t>* bytecodes() const { return &bytecodes_; } | 228 const ZoneVector<uint8_t>* bytecodes() const { return &bytecodes_; } |
224 Isolate* isolate() const { return isolate_; } | 229 Isolate* isolate() const { return isolate_; } |
225 | 230 |
226 static Bytecode BytecodeForBinaryOperation(Token::Value op); | 231 static Bytecode BytecodeForBinaryOperation(Token::Value op); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
281 Register first_temporary_register() const; | 286 Register first_temporary_register() const; |
282 Register last_temporary_register() const; | 287 Register last_temporary_register() const; |
283 | 288 |
284 Isolate* isolate_; | 289 Isolate* isolate_; |
285 Zone* zone_; | 290 Zone* zone_; |
286 ZoneVector<uint8_t> bytecodes_; | 291 ZoneVector<uint8_t> bytecodes_; |
287 bool bytecode_generated_; | 292 bool bytecode_generated_; |
288 size_t last_block_end_; | 293 size_t last_block_end_; |
289 size_t last_bytecode_start_; | 294 size_t last_bytecode_start_; |
290 bool exit_seen_in_block_; | 295 bool exit_seen_in_block_; |
| 296 int unbound_jumps_; |
291 | 297 |
292 IdentityMap<size_t> constants_map_; | 298 IdentityMap<size_t> constants_map_; |
293 ZoneVector<Handle<Object>> constants_; | 299 ZoneVector<Handle<Object>> constants_; |
294 | 300 |
295 int parameter_count_; | 301 int parameter_count_; |
296 int local_register_count_; | 302 int local_register_count_; |
297 int context_register_count_; | 303 int context_register_count_; |
298 int temporary_register_count_; | 304 int temporary_register_count_; |
299 | 305 |
300 ZoneSet<int> free_temporaries_; | 306 ZoneSet<int> free_temporaries_; |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
373 | 379 |
374 DISALLOW_COPY_AND_ASSIGN(TemporaryRegisterScope); | 380 DISALLOW_COPY_AND_ASSIGN(TemporaryRegisterScope); |
375 }; | 381 }; |
376 | 382 |
377 | 383 |
378 } // namespace interpreter | 384 } // namespace interpreter |
379 } // namespace internal | 385 } // namespace internal |
380 } // namespace v8 | 386 } // namespace v8 |
381 | 387 |
382 #endif // V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ | 388 #endif // V8_INTERPRETER_BYTECODE_ARRAY_BUILDER_H_ |
OLD | NEW |