Remove instructions from ExecConfig

We can just compute whenever we reset last_step, which does not happen
often and we know `forward` at compile time anyway
This commit is contained in:
Maxime Coste 2023-02-19 11:46:17 +11:00
parent f115af7a57
commit 2b74cd4b59

View File

@ -249,17 +249,12 @@ public:
constexpr bool search = (mode & RegexMode::Search);
ConstArrayView<CompiledRegex::Instruction> instructions{m_program.instructions};
instructions = forward ? instructions.subrange(0, m_program.first_backward_inst)
: instructions.subrange(m_program.first_backward_inst);
const ExecConfig config{
Sentinel{forward ? begin : end},
Sentinel{forward ? end : begin},
Sentinel{subject_begin},
Sentinel{subject_end},
flags,
instructions
flags
};
Iterator start = forward ? begin : end;
@ -353,7 +348,6 @@ private:
const Sentinel subject_begin;
const Sentinel subject_end;
const RegexExecFlags flags;
ConstArrayView<CompiledRegex::Instruction> instructions;
};
// Steps a thread until it consumes the current character, matches or fail
@ -483,7 +477,11 @@ private:
if (++current_step == 0)
{
// We wrapped, avoid potential collision on inst.last_step by resetting them
for (auto& inst : config.instructions)
ConstArrayView<CompiledRegex::Instruction> instructions{m_program.instructions};
instructions = forward ? instructions.subrange(0, m_program.first_backward_inst)
: instructions.subrange(m_program.first_backward_inst);
for (auto& inst : instructions)
inst.last_step = 0;
current_step = 1; // step 0 is never valid
}