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,10 +3310,14 @@ 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);
__first = ++__temp; if (__val >= 1 && __val <= 9)
{
__push_back_ref(__val);
__first = ++__temp;
}
} }
} }
} }
@ -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 )
++__first)
{ {
__c *= 10; __c = __val;
__c += *__first - '0'; for (++__first;
__first != __last && ( __val = __traits_.value(*__first, 10)) != -1;
++__first)
{
__c *= 10;
__c += __val;
}
} }
} }
return __first; return __first;