Source code

Revision control

Copy as Markdown

Other Tools

// Copyright 2025 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.
#ifndef V8_REGEXP_REGEXP_BYTECODE_ITERATOR_H_
#define V8_REGEXP_REGEXP_BYTECODE_ITERATOR_H_
#include <vector>
#include "irregexp/imported/regexp-bytecodes.h"
namespace v8 {
namespace internal {
class TrustedByteArray;
namespace regexp {
class BytecodeIterator {
public:
explicit BytecodeIterator(DirectHandle<TrustedByteArray> bytecode);
BytecodeIterator(DirectHandle<TrustedByteArray> bytecode, uint32_t offset);
~BytecodeIterator();
inline bool done() const;
inline void advance();
inline Bytecode current_bytecode() const;
inline uint8_t current_size() const;
inline uint32_t current_offset() const;
inline uint8_t* current_address() const;
inline void reset();
// Calls |fun| templatized by Bytecode for each bytecode in the
// Bytecode Array.
template <typename Func>
inline void ForEachBytecode(Func&& fun);
static void UpdatePointersCallback(void* iterator);
private:
void UpdatePointers();
DirectHandle<TrustedByteArray> bytecode_;
uint8_t* start_;
uint8_t* end_;
uint8_t* cursor_;
};
} // namespace regexp
} // namespace internal
} // namespace v8
#endif // V8_REGEXP_REGEXP_BYTECODE_ITERATOR_H_