5#ifndef V8_OBJECTS_JS_REGEXP_H_
6#define V8_OBJECTS_JS_REGEXP_H_
14#include "torque-generated/bit-fields.h"
23#include "torque-generated/src/objects/js-regexp-tq.inc"
28class JSRegExp :
public TorqueGeneratedJSRegExp<JSRegExp, JSObject> {
30 DEFINE_TORQUE_GENERATED_JS_REG_EXP_FLAGS()
52 return static_cast<Flag>(f);
55 return Flags{
static_cast<int>(f)};
63 if (!f.has_value())
return f;
64 if (f.value() == RegExpFlag::kLinear &&
65 !
v8_flags.enable_experimental_regexp_engine) {
72#define V(_, Camel, ...) \
73 static_assert(static_cast<int>(k##Camel) == v8::RegExp::k##Camel); \
74 static_assert(static_cast<int>(k##Camel) == \
75 static_cast<int>(RegExpFlag::k##Camel));
82 DirectHandle<String> flags);
85 Isolate* isolate,
Flags flags);
91 return (
count + 1) * 2;
96 return (register_count - 2) / 2;
170 inline JSRegExp::Flags
flags()
const;
171 inline void set_flags(JSRegExp::Flags flags);
186#define FIELD_LIST(V) \
187 V(kTypeTagOffset, kTaggedSize) \
188 V(kSourceOffset, kTaggedSize) \
189 V(kFlagsOffset, kTaggedSize) \
190 V(kWrapperOffset, kTaggedSize) \
198 class BodyDescriptor;
210#define FIELD_LIST(V) \
211 V(kDataOffset, kTrustedPointerSize) \
230#define FIELD_LIST(V) \
231 V(kPatternOffset, kTaggedSize) \
282#define FIELD_LIST(V) \
283 V(kLatin1BytecodeOffset, kProtectedPointerSize) \
284 V(kUc16BytecodeOffset, kProtectedPointerSize) \
285 V(kLatin1CodeOffset, kCodePointerSize) \
286 V(kUc16CodeOffset, kCodePointerSize) \
287 V(kCaptureNameMapOffset, kTaggedSize) \
288 V(kMaxRegisterCountOffset, kTaggedSize) \
289 V(kCaptureCountOffset, kTaggedSize) \
290 V(kTicksUntilTierUpOffset, kTaggedSize) \
291 V(kBacktrackLimitOffset, kTaggedSize) \
311 :
public TorqueGeneratedJSRegExpResult<JSRegExpResult, JSArray> {
334 :
public TorqueGeneratedJSRegExpResultWithIndices<JSRegExpResultWithIndices,
339 "JSRegExpResultWithIndices must be a subclass of JSRegExpResult");
353 :
public TorqueGeneratedJSRegExpResultIndices<JSRegExpResultIndices,
#define DEFINE_OPERATORS_FOR_FLAGS(Type)
static constexpr int kFlagCount
OBJECT_CONSTRUCTORS(AtomRegExpData, RegExpData)
static constexpr int kHeaderSize
static constexpr int kHeaderSize
void ResetLastTierUpTick()
void SetBytecodeForExperimental(Isolate *isolate, Tagged< TrustedByteArray > bytecode)
bool ShouldProduceBytecode()
bool has_code(bool is_one_byte) const
void set_code(bool is_one_byte, Tagged< Code > code)
void set_bytecode(bool is_one_byte, Tagged< TrustedByteArray > bytecode)
bool has_bytecode(bool is_one_byte) const
void MarkTierUpForNextExec()
void DiscardCompiledCodeForSerialization()
void set_capture_name_map(DirectHandle< FixedArray > capture_name_map)
OBJECT_CONSTRUCTORS(IrRegExpData, RegExpData)
void clear_bytecode(bool is_one_byte)
static DirectHandle< JSRegExpResultIndices > BuildIndices(Isolate *isolate, DirectHandle< RegExpMatchInfo > match_info, DirectHandle< Object > maybe_names)
static constexpr int kGroupsDescriptorIndex
static constexpr int kInObjectPropertyCount
static constexpr int kGroupsIndex
static constexpr int kInObjectPropertyCount
static constexpr int kIndicesIndex
static constexpr int kInputIndex
static constexpr int kNamesIndex
static constexpr int kGroupsIndex
static constexpr int kInObjectPropertyCount
static constexpr int kRegExpInputIndex
static constexpr int kRegExpLastIndex
static constexpr int kIndexIndex
static constexpr int kMapIndexInContext
static const char * FlagsToString(Flags flags, FlagsBuffer *out_buffer)
static constexpr Flag AsJSRegExpFlag(RegExpFlag f)
Tagged< String > source() const
static constexpr int kLastIndexFieldIndex
static constexpr int Size()
static MaybeDirectHandle< JSRegExp > Initialize(DirectHandle< JSRegExp > regexp, DirectHandle< String > source, Flags flags, uint32_t backtrack_limit=kNoBacktrackLimit)
static constexpr int kAtomRegisterCount
static constexpr int kSymbolMatchAllFunctionDescriptorIndex
static constexpr RegExpFlags AsRegExpFlags(Flags f)
static constexpr uint32_t kNoBacktrackLimit
static constexpr int kLastIndexOffset
Tagged< String > EscapedPattern()
static constexpr int kSymbolReplaceFunctionDescriptorIndex
static V8_EXPORT_PRIVATE DirectHandle< String > StringFromFlags(Isolate *isolate, Flags flags)
static V8_EXPORT_PRIVATE MaybeDirectHandle< JSRegExp > New(Isolate *isolate, DirectHandle< String > source, Flags flags, uint32_t backtrack_limit=kNoBacktrackLimit)
static constexpr int kMaxCaptures
static constexpr int CaptureCountForRegisters(int register_count)
static constexpr Flags AsJSRegExpFlags(RegExpFlags f)
static std::optional< RegExpFlag > FlagFromChar(char c)
static constexpr int kExecFunctionDescriptorIndex
static constexpr int kUninitializedValue
static constexpr int RegistersForCaptureCount(int count)
static constexpr int kSymbolSearchFunctionDescriptorIndex
static constexpr int kInObjectFieldCount
static constexpr int kAtomCaptureCount
static std::optional< Flags > FlagsFromString(Isolate *isolate, DirectHandle< String > flags)
static constexpr int kSize
static constexpr int kTierUpForSubjectLengthValue
static constexpr int kInitialLastIndexValue
static constexpr int kSymbolSplitFunctionDescriptorIndex
static constexpr int kSymbolMatchFunctionDescriptorIndex
OBJECT_CONSTRUCTORS(RegExpDataWrapper, Struct)
JSRegExp::Flags flags() const
V8_EXPORT_PRIVATE bool HasCompiledCode() const
void set_flags(JSRegExp::Flags flags)
static constexpr bool TypeSupportsCaptures(Type t)
int capture_count() const
OBJECT_CONSTRUCTORS(RegExpData, ExposedTrustedObject)
DirectHandle< FixedArray > capture_name_map
constexpr std::optional< RegExpFlag > TryRegExpFlagFromChar(char c)
V8_EXPORT_PRIVATE base::Vector< Flag > Flags()
constexpr int kTaggedSize
constexpr int kRegExpFlagCount
Tagged(T object) -> Tagged< T >
V8_EXPORT_PRIVATE FlagValues v8_flags
#define DECL_ACCESSORS(name,...)
#define DECL_TRUSTED_POINTER_ACCESSORS(name, type)
#define DECL_CODE_POINTER_ACCESSORS(name)
#define DECL_VERIFIER(Name)
#define DECL_PROTECTED_POINTER_ACCESSORS(name, type)
#define DECL_PRINTER(Name)
#define DECL_INT_ACCESSORS(name)
#define TQ_OBJECT_CONSTRUCTORS(Type)
#define DCHECK_GE(v1, v2)
#define DCHECK_EQ(v1, v2)
#define V8_EXPORT_PRIVATE
#define DEFINE_FIELD_OFFSET_CONSTANTS(StartOffset, LIST_MACRO)