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