• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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
3 // found in the LICENSE file.
4 
5 #ifndef V8_INTERPRETER_BYTECODE_ARRAY_ITERATOR_H_
6 #define V8_INTERPRETER_BYTECODE_ARRAY_ITERATOR_H_
7 
8 #include "src/handles.h"
9 #include "src/interpreter/bytecodes.h"
10 #include "src/objects.h"
11 #include "src/runtime/runtime.h"
12 
13 namespace v8 {
14 namespace internal {
15 namespace interpreter {
16 
17 class BytecodeArrayIterator {
18  public:
19   explicit BytecodeArrayIterator(Handle<BytecodeArray> bytecode_array);
20 
21   void Advance();
22   bool done() const;
23   Bytecode current_bytecode() const;
24   int current_bytecode_size() const;
current_offset()25   int current_offset() const { return bytecode_offset_; }
current_operand_scale()26   OperandScale current_operand_scale() const { return operand_scale_; }
current_prefix_offset()27   int current_prefix_offset() const { return prefix_offset_; }
bytecode_array()28   const Handle<BytecodeArray>& bytecode_array() const {
29     return bytecode_array_;
30   }
31 
32   uint32_t GetFlagOperand(int operand_index) const;
33   int32_t GetImmediateOperand(int operand_index) const;
34   uint32_t GetIndexOperand(int operand_index) const;
35   uint32_t GetRegisterCountOperand(int operand_index) const;
36   Register GetRegisterOperand(int operand_index) const;
37   int GetRegisterOperandRange(int operand_index) const;
38   Runtime::FunctionId GetRuntimeIdOperand(int operand_index) const;
39   Runtime::FunctionId GetIntrinsicIdOperand(int operand_index) const;
40   Handle<Object> GetConstantForIndexOperand(int operand_index) const;
41 
42   // Returns the absolute offset of the branch target at the current
43   // bytecode. It is an error to call this method if the bytecode is
44   // not for a jump or conditional jump.
45   int GetJumpTargetOffset() const;
46 
47  private:
48   uint32_t GetUnsignedOperand(int operand_index,
49                               OperandType operand_type) const;
50   int32_t GetSignedOperand(int operand_index, OperandType operand_type) const;
51 
52   void UpdateOperandScale();
53 
54   Handle<BytecodeArray> bytecode_array_;
55   int bytecode_offset_;
56   OperandScale operand_scale_;
57   int prefix_offset_;
58 
59   DISALLOW_COPY_AND_ASSIGN(BytecodeArrayIterator);
60 };
61 
62 }  // namespace interpreter
63 }  // namespace internal
64 }  // namespace v8
65 
66 #endif  // V8_INTERPRETER_BYTECODE_GRAPH_ITERATOR_H_
67