Regex: use StartDesc to early out when not searching

Early out as well if we do not find any potential start position.
This commit is contained in:
Maxime Coste 2017-12-01 15:03:03 +08:00
parent 65b057f261
commit 8d892eeb62

View File

@ -183,8 +183,18 @@ public:
const bool search = (flags & RegexExecFlags::Search); const bool search = (flags & RegexExecFlags::Search);
Utf8It start{m_begin}; Utf8It start{m_begin};
if (search and m_program.start_desc) if (m_program.start_desc)
{
if (search)
{
to_next_start(start, m_end, *m_program.start_desc); to_next_start(start, m_end, *m_program.start_desc);
if (start == m_end) // If start_desc is not null, it means we consume at least one char
return false;
}
else if (start != m_end and
not m_program.start_desc->map[std::min(*start, CompiledRegex::StartDesc::other)])
return false;
}
return exec_program(start, Thread{&m_program.instructions[search ? 0 : CompiledRegex::search_prefix_size], nullptr}); return exec_program(start, Thread{&m_program.instructions[search ? 0 : CompiledRegex::search_prefix_size], nullptr});
} }