Line data Source code
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 : #include "src/interpreter/bytecode-array-random-iterator.h"
6 : #include "src/objects-inl.h"
7 : #include "src/objects/code-inl.h"
8 :
9 : namespace v8 {
10 : namespace internal {
11 : namespace interpreter {
12 :
13 530045 : BytecodeArrayRandomIterator::BytecodeArrayRandomIterator(
14 : Handle<BytecodeArray> bytecode_array, Zone* zone)
15 530045 : : BytecodeArrayAccessor(bytecode_array, 0), offsets_(zone) {
16 : // Run forwards through the bytecode array to determine the offset of each
17 : // bytecode.
18 30996482 : while (current_offset() < bytecode_array->length()) {
19 30466437 : offsets_.push_back(current_offset());
20 15233221 : SetOffset(current_offset() + current_bytecode_size());
21 : }
22 : GoToStart();
23 530047 : }
24 :
25 15763460 : bool BytecodeArrayRandomIterator::IsValid() const {
26 67046787 : return current_index_ >= 0 &&
27 48756507 : static_cast<size_t>(current_index_) < offsets_.size();
28 : }
29 :
30 18290280 : void BytecodeArrayRandomIterator::UpdateOffsetFromIndex() {
31 18290280 : if (IsValid()) {
32 35519866 : SetOffset(offsets_[current_index_]);
33 : }
34 18290281 : }
35 :
36 : } // namespace interpreter
37 : } // namespace internal
38 121996 : } // namespace v8
|