Update __parse_DUP_COUNT and __parse_BACKREF to use the traits class to recognize digits. Fixes PR18514

llvm-svn: 199541
This commit is contained in:
Marshall Clow 2014-01-18 03:40:03 +00:00
parent 5b9e5b5961
commit 9aafa898f9
1 changed files with 19 additions and 10 deletions

View File

@ -3310,13 +3310,17 @@ basic_regex<_CharT, _Traits>::__parse_BACKREF(_ForwardIterator __first,
_ForwardIterator __temp = _VSTD::next(__first); _ForwardIterator __temp = _VSTD::next(__first);
if (__temp != __last) if (__temp != __last)
{ {
if (*__first == '\\' && '1' <= *__temp && *__temp <= '9') if (*__first == '\\')
{ {
__push_back_ref(*__temp - '0'); int __val = __traits_.value(*__temp, 10);
if (__val >= 1 && __val <= 9)
{
__push_back_ref(__val);
__first = ++__temp; __first = ++__temp;
} }
} }
} }
}
return __first; return __first;
} }
@ -4052,14 +4056,19 @@ basic_regex<_CharT, _Traits>::__parse_DUP_COUNT(_ForwardIterator __first,
_ForwardIterator __last, _ForwardIterator __last,
int& __c) int& __c)
{ {
if (__first != __last && '0' <= *__first && *__first <= '9') if (__first != __last )
{ {
__c = *__first - '0'; int __val = __traits_.value(*__first, 10);
for (++__first; __first != __last && '0' <= *__first && *__first <= '9'; if ( __val != -1 )
{
__c = __val;
for (++__first;
__first != __last && ( __val = __traits_.value(*__first, 10)) != -1;
++__first) ++__first)
{ {
__c *= 10; __c *= 10;
__c += *__first - '0'; __c += __val;
}
} }
} }
return __first; return __first;