5#ifndef V8_REGEXP_REGEXP_COMPILER_H_
6#define V8_REGEXP_REGEXP_COMPILER_H_
21namespace regexp_compiler_constants {
28 '\t',
'\r' + 1,
' ',
' ' + 1, 0x00A0, 0x00A1, 0x1680,
29 0x1681, 0x2000, 0x200B, 0x2028, 0x202A, 0x202F, 0x2030,
33constexpr int kWordRanges[] = {
'0',
'9' + 1,
'A',
'Z' + 1,
'_',
71 void Advance(
int by,
bool one_byte);
189 info->SetInterval(interval);
212 int min_lookahead,
int max_lookahead,
430 return freq_in_per128;
492 bool Succeeded()
const {
return error == RegExpError::kNone; }
516 if (!node->on_work_list() && !node->label()->is_bound()) {
517 node->set_on_work_list(
true);
RegExpCompiler * compiler()
void SetInterval(int map_number, const Interval &interval)
ZoneList< BoyerMoorePositionInfo * > * bitmaps_
void SetAll(int map_number)
int GetSkipTable(int min_lookahead, int max_lookahead, DirectHandle< ByteArray > boolean_skip_table, DirectHandle< ByteArray > nibble_table=DirectHandle< ByteArray >{})
int Count(int map_number)
RegExpCompiler * compiler_
void SetRest(int from_map)
BoyerMoorePositionInfo * at(int i)
BoyerMooreLookahead(int length, RegExpCompiler *compiler, Zone *zone)
bool FindWorthwhileInterval(int *from, int *to)
int FindBestInterval(int max_number_of_chars, int old_biggest_points, int *from, int *to)
void EmitSkipInstructions(RegExpMacroAssembler *masm)
void Set(int map_number, int character)
static constexpr int kMapSize
static constexpr int kMask
void SetInterval(const Interval &interval)
Bitset raw_bitset() const
std::bitset< kMapSize > Bitset
CharacterFrequency(int character)
int Frequency(int in_character)
CharacterFrequency frequencies_[RegExpMacroAssembler::kTableSize]
void CountCharacter(int character)
Trace counter_backtrack_trace_
Trace * counter_backtrack_trace()
GreedyLoopState(bool not_at_start)
QuickCheckDetails(int characters)
void Merge(QuickCheckDetails *other, int from_index)
void set_characters(int characters)
Position * positions(int index)
bool Rationalize(bool one_byte)
void Advance(int by, bool one_byte)
void set_limiting_recursion(bool value)
static const int kMaxRecursion
int UnicodeLookaroundStackRegister()
static const int kImplementationOffset
void set_read_backward(bool value)
FrequencyCollator frequency_collator_
void IncrementRecursionDepth()
static const int kNumberOfRegistersOffset
void set_flags(RegExpFlags flags)
int unicode_lookaround_position_register_
void ToNodeMaybeCheckForStackOverflow()
int to_node_overflow_check_ticks_
ZoneVector< RegExpNode * > * work_list_
int current_expansion_factor_
RegExpMacroAssembler * macro_assembler()
static const int kNoRegister
RegExpNode * OptionallyStepBackToLeadSurrogate(RegExpNode *on_success)
void set_current_expansion_factor(int value)
bool limiting_recursion()
RegExpMacroAssembler * macro_assembler_
int UnicodeLookaroundPositionRegister()
RegExpNode * PreprocessRegExp(RegExpCompileData *data, bool is_one_byte)
RegExpFlags flags() const
int unicode_lookaround_stack_register_
static const int kCodeOffset
RegExpCompiler(Isolate *isolate, Zone *zone, int capture_count, RegExpFlags flags, bool is_one_byte)
void set_optimize(bool value)
Isolate * isolate() const
void ToNodeCheckForStackOverflow()
FrequencyCollator * frequency_collator()
int current_expansion_factor()
void AddWork(RegExpNode *node)
CompilationResult Assemble(Isolate *isolate, RegExpMacroAssembler *assembler, RegExpNode *start, int capture_count, DirectHandle< String > pattern)
void DecrementRecursionDepth()
static constexpr int kTableSize
static constexpr int kTableMask
static constexpr int kMaxRegister
DeferredAction(ActionNode::ActionType action_type, int reg)
ActionNode::ActionType action_type()
ActionNode::ActionType action_type_
DeferredCapture(int reg, bool is_capture, Trace *trace)
void set_cp_offset(int cp_offset)
DeferredClearCaptures(Interval range)
DeferredIncrementRegister(int reg)
DeferredSetRegisterForLoop(int reg, int value)
QuickCheckDetails * quick_check_performed()
void PerformDeferredActions(RegExpMacroAssembler *macro, int max_register, const DynamicBitSet &affected_registers, DynamicBitSet *registers_to_pop, DynamicBitSet *registers_to_clear, Zone *zone)
void set_stop_node(RegExpNode *node)
int characters_preloaded()
void Flush(RegExpCompiler *compiler, RegExpNode *successor)
void set_at_start(TriBool at_start)
int bound_checked_up_to()
int characters_preloaded_
DeferredAction * actions_
void AdvanceCurrentPositionInTrace(int by, RegExpCompiler *compiler)
void set_characters_preloaded(int count)
void add_action(DeferredAction *new_action)
int FindAffectedRegisters(DynamicBitSet *affected_registers, Zone *zone)
void set_quick_check_performed(QuickCheckDetails *d)
DeferredAction * actions()
void RestoreAffectedRegisters(RegExpMacroAssembler *macro, int max_register, const DynamicBitSet ®isters_to_pop, const DynamicBitSet ®isters_to_clear)
bool mentions_reg(int reg)
bool GetStoredPosition(int reg, int *cp_offset)
void set_backtrack(Label *backtrack)
void set_bound_checked_up_to(int to)
QuickCheckDetails quick_check_performed_
void set_loop_label(Label *label)
void set_flush_budget(int to)
void InvalidateCurrentCharacter()
CharacterRangeVector lead_surrogates_
const CharacterRangeVector * lead_surrogates() const
CharacterRangeVector trail_surrogates_
CharacterRangeVector non_bmp_
void AddRange(CharacterRange range)
const CharacterRangeVector * bmp() const
static constexpr int kInitialSize
V8_EXPORT_PRIVATE UnicodeRangeSplitter(ZoneList< CharacterRange > *base)
const CharacterRangeVector * trail_surrogates() const
const CharacterRangeVector * non_bmp() const
CharacterRangeVector bmp_
RegListBase< RegisterT > registers
constexpr int kWordRangeCount
constexpr int kDigitRanges[]
constexpr int kLineTerminatorRangeCount
constexpr base::uc32 kRangeEndMarker
constexpr int kDigitRangeCount
constexpr int kSpaceRangeCount
constexpr int kSurrogateRangeCount
constexpr int kWordRanges[]
constexpr int kLineTerminatorRanges[]
constexpr uint32_t kPatternTooShortForBoyerMoore
constexpr int kSpaceRanges[]
constexpr uint32_t kMaxLookaheadForBoyerMoore
constexpr int kSurrogateRanges[]
constexpr bool IsEitherUnicode(RegExpFlags f)
ContainedInLattice Combine(ContainedInLattice a, ContainedInLattice b)
bool NeedsUnicodeCaseEquivalents(RegExpFlags flags)
BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL BUILTIN_FP_CALL int character
base::Flags< RegExpFlag > RegExpFlags
RegExpError AnalyzeRegExp(Isolate *isolate, bool is_one_byte, RegExpFlags flags, RegExpNode *node)
static const base::uc32 kLeadSurrogateStart
bool RangeContainsLatin1Equivalents(CharacterRange range)
#define DCHECK_LE(v1, v2)
#define DCHECK(condition)
#define DCHECK_GT(v1, v2)
#define V8_EXPORT_PRIVATE
static const int kEatsAtLeastNotYetInitialized
bool preload_has_checked_bounds_
bool determines_perfectly
CompilationResult(DirectHandle< Object > code, int registers)
static CompilationResult RegExpTooBig()
DirectHandle< Object > code
CompilationResult(RegExpError err)