| Index: src/interpreter/bytecode-array-iterator.cc
|
| diff --git a/src/interpreter/bytecode-array-iterator.cc b/src/interpreter/bytecode-array-iterator.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..84be6cc676c86119819c7d16c590d11e2cd39695
|
| --- /dev/null
|
| +++ b/src/interpreter/bytecode-array-iterator.cc
|
| @@ -0,0 +1,72 @@
|
| +// Copyright 2015 the V8 project authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "src/interpreter/bytecode-array-iterator.h"
|
| +
|
| +#include "src/objects-inl.h"
|
| +
|
| +namespace v8 {
|
| +namespace internal {
|
| +namespace interpreter {
|
| +
|
| +BytecodeArrayIterator::BytecodeArrayIterator(
|
| + Handle<BytecodeArray> bytecode_array)
|
| + : bytecode_array_(bytecode_array), bytecode_offset_(0) {}
|
| +
|
| +
|
| +void BytecodeArrayIterator::Advance() {
|
| + bytecode_offset_ += Bytecodes::Size(current_bytecode());
|
| +}
|
| +
|
| +
|
| +bool BytecodeArrayIterator::done() const {
|
| + return bytecode_offset_ >= bytecode_array()->length();
|
| +}
|
| +
|
| +
|
| +Bytecode BytecodeArrayIterator::current_bytecode() const {
|
| + DCHECK(!done());
|
| + uint8_t current_byte = bytecode_array()->get(bytecode_offset_);
|
| + return interpreter::Bytecodes::FromByte(current_byte);
|
| +}
|
| +
|
| +
|
| +uint8_t BytecodeArrayIterator::GetOperand(int operand_index,
|
| + OperandType operand_type) const {
|
| + DCHECK_GE(operand_index, 0);
|
| + DCHECK_LT(operand_index, Bytecodes::NumberOfOperands(current_bytecode()));
|
| + DCHECK_EQ(operand_type,
|
| + Bytecodes::GetOperandType(current_bytecode(), operand_index));
|
| + int operands_start = bytecode_offset_ + 1;
|
| + return bytecode_array()->get(operands_start + operand_index);
|
| +}
|
| +
|
| +
|
| +int8_t BytecodeArrayIterator::GetSmi8Operand(int operand_index) const {
|
| + uint8_t operand = GetOperand(operand_index, OperandType::kImm8);
|
| + return static_cast<int8_t>(operand);
|
| +}
|
| +
|
| +
|
| +int BytecodeArrayIterator::GetIndexOperand(int operand_index) const {
|
| + uint8_t operand = GetOperand(operand_index, OperandType::kIdx);
|
| + return static_cast<int>(operand);
|
| +}
|
| +
|
| +
|
| +Register BytecodeArrayIterator::GetRegisterOperand(int operand_index) const {
|
| + uint8_t operand = GetOperand(operand_index, OperandType::kReg);
|
| + return Register::FromOperand(operand);
|
| +}
|
| +
|
| +
|
| +Handle<Object> BytecodeArrayIterator::GetConstantForIndexOperand(
|
| + int operand_index) const {
|
| + Handle<FixedArray> constants = handle(bytecode_array()->constant_pool());
|
| + return FixedArray::get(constants, GetIndexOperand(operand_index));
|
| +}
|
| +
|
| +} // namespace interpreter
|
| +} // namespace internal
|
| +} // namespace v8
|
|
|