mirror of
https://github.com/boostorg/regex.git
synced 2025-07-19 15:22:09 +02:00
Extended leading repeat optimization to more cases.
[SVN r42992]
This commit is contained in:
@ -1270,6 +1270,19 @@ void basic_regex_creator<charT, traits>::probe_leading_repeat(re_syntax_base* st
|
|||||||
state = state->next.p;
|
state = state->next.p;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if((static_cast<re_brace*>(state)->index == -1)
|
||||||
|
|| (static_cast<re_brace*>(state)->index == -2))
|
||||||
|
{
|
||||||
|
// skip past the zero width assertion:
|
||||||
|
state = static_cast<const re_jump*>(state->next.p)->alt.p->next.p;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if(static_cast<re_brace*>(state)->index == -3)
|
||||||
|
{
|
||||||
|
// Have to skip the leading jump state:
|
||||||
|
state = state->next.p->next.p;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
case syntax_element_endmark:
|
case syntax_element_endmark:
|
||||||
case syntax_element_start_line:
|
case syntax_element_start_line:
|
||||||
|
@ -1193,6 +1193,9 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_char_repeat(bool r)
|
|||||||
pstate = rep->next.p;
|
pstate = rep->next.p;
|
||||||
}while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
|
}while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
|
||||||
}
|
}
|
||||||
|
// remember where we got to if this is a leading repeat:
|
||||||
|
if((rep->leading) && (count < rep->max))
|
||||||
|
restart = position;
|
||||||
if(position == last)
|
if(position == last)
|
||||||
{
|
{
|
||||||
// can't repeat any more, remove the pushed state:
|
// can't repeat any more, remove the pushed state:
|
||||||
@ -1259,6 +1262,9 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_short_set_repeat(bool
|
|||||||
pstate = rep->next.p;
|
pstate = rep->next.p;
|
||||||
}while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
|
}while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
|
||||||
}
|
}
|
||||||
|
// remember where we got to if this is a leading repeat:
|
||||||
|
if((rep->leading) && (count < rep->max))
|
||||||
|
restart = position;
|
||||||
if(position == last)
|
if(position == last)
|
||||||
{
|
{
|
||||||
// can't repeat any more, remove the pushed state:
|
// can't repeat any more, remove the pushed state:
|
||||||
@ -1326,6 +1332,9 @@ bool perl_matcher<BidiIterator, Allocator, traits>::unwind_long_set_repeat(bool
|
|||||||
pstate = rep->next.p;
|
pstate = rep->next.p;
|
||||||
}while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
|
}while((count < rep->max) && (position != last) && !can_start(*position, rep->_map, mask_skip));
|
||||||
}
|
}
|
||||||
|
// remember where we got to if this is a leading repeat:
|
||||||
|
if((rep->leading) && (count < rep->max))
|
||||||
|
restart = position;
|
||||||
if(position == last)
|
if(position == last)
|
||||||
{
|
{
|
||||||
// can't repeat any more, remove the pushed state:
|
// can't repeat any more, remove the pushed state:
|
||||||
|
Reference in New Issue
Block a user