Home | History | Annotate | Download | only in interpreter
      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 BytecodeArrayRandomIterator::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 
     25 bool BytecodeArrayRandomIterator::IsValid() const {
     26   return current_index_ >= 0 &&
     27          static_cast<size_t>(current_index_) < offsets_.size();
     28 }
     29 
     30 void BytecodeArrayRandomIterator::UpdateOffsetFromIndex() {
     31   if (IsValid()) {
     32     SetOffset(offsets_[current_index_]);
     33   }
     34 }
     35 
     36 }  // namespace interpreter
     37 }  // namespace internal
     38 }  // namespace v8
     39