regex_automaton.tcc (_StateSeq<>::_M_clone()): Do _M_alt before _M_next.
2014-04-24 Tim Shen <timshen91@gmail.com> * include/bits/regex_automaton.tcc (_StateSeq<>::_M_clone()): Do _M_alt before _M_next. * testsuite/28_regex/basic_regex/multiple_quantifiers.cc: Add testcases. From-SVN: r209756
This commit is contained in:
parent
0e93c3dc50
commit
836c42f6ad
3 changed files with 16 additions and 8 deletions
|
@ -1,3 +1,9 @@
|
|||
2014-04-24 Tim Shen <timshen91@gmail.com>
|
||||
|
||||
* include/bits/regex_automaton.tcc (_StateSeq<>::_M_clone()):
|
||||
Do _M_alt before _M_next.
|
||||
* testsuite/28_regex/basic_regex/multiple_quantifiers.cc: Add testcases.
|
||||
|
||||
2014-04-24 Marc Glisse <marc.glisse@inria.fr>
|
||||
|
||||
PR libstdc++/43622
|
||||
|
|
|
@ -197,20 +197,18 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION
|
|||
// _M_insert_state() never return -1
|
||||
auto __id = _M_nfa._M_insert_state(__dup);
|
||||
__m[__u] = __id;
|
||||
if (__u == _M_end)
|
||||
continue;
|
||||
if (__dup._M_next != _S_invalid_state_id && __m[__dup._M_next] == -1)
|
||||
__stack.push(__dup._M_next);
|
||||
if (__dup._M_opcode == _S_opcode_alternative
|
||||
|| __dup._M_opcode == _S_opcode_subexpr_lookahead)
|
||||
if (__dup._M_alt != _S_invalid_state_id && __m[__dup._M_alt] == -1)
|
||||
__stack.push(__dup._M_alt);
|
||||
if (__u == _M_end)
|
||||
continue;
|
||||
if (__dup._M_next != _S_invalid_state_id && __m[__dup._M_next] == -1)
|
||||
__stack.push(__dup._M_next);
|
||||
}
|
||||
long __size = static_cast<long>(__m.size());
|
||||
for (long __k = 0; __k < __size; __k++)
|
||||
for (auto __v : __m)
|
||||
{
|
||||
long __v;
|
||||
if ((__v = __m[__k]) == -1)
|
||||
if (__v == -1)
|
||||
continue;
|
||||
auto& __ref = _M_nfa[__v];
|
||||
if (__ref._M_next != _S_invalid_state_id)
|
||||
|
|
|
@ -21,7 +21,10 @@
|
|||
// Tests multiple consecutive quantifiers
|
||||
|
||||
#include <regex>
|
||||
#include <testsuite_hooks.h>
|
||||
#include <testsuite_regex.h>
|
||||
|
||||
using namespace __gnu_test;
|
||||
using namespace std;
|
||||
|
||||
int
|
||||
|
@ -29,5 +32,6 @@ main()
|
|||
{
|
||||
regex re1("a++");
|
||||
regex re2("(a+)+");
|
||||
VERIFY(regex_match_debug("aa", regex("(a)*{3}")));
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue