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 529988 : BytecodeArrayRandomIterator::BytecodeArrayRandomIterator(
14 : Handle<BytecodeArray> bytecode_array, Zone* zone)
15 529988 : : BytecodeArrayAccessor(bytecode_array, 0), offsets_(zone) {
16 : // Run forwards through the bytecode array to determine the offset of each
17 : // bytecode.
18 31021984 : while (current_offset() < bytecode_array->length()) {
19 30491993 : offsets_.push_back(current_offset());
20 15245994 : SetOffset(current_offset() + current_bytecode_size());
21 : }
22 : GoToStart();
23 529989 : }
24 :
25 15776146 : bool BytecodeArrayRandomIterator::IsValid() const {
26 67102133 : return current_index_ >= 0 &&
27 48796903 : static_cast<size_t>(current_index_) < offsets_.size();
28 : }
29 :
30 18305230 : void BytecodeArrayRandomIterator::UpdateOffsetFromIndex() {
31 18305230 : if (IsValid()) {
32 35549842 : SetOffset(offsets_[current_index_]);
33 : }
34 18305226 : }
35 :
36 : } // namespace interpreter
37 : } // namespace internal
38 122036 : } // namespace v8
|