Revert r216497: "[libcxx] Fix ctype_byname<wchar_t>::do_is() mask checking."
After discussing implementing more tests for this with @danalbert & @mclow, I realized this change is not correct. The C++ standard requires do_is() to behave as if it were a loop that checked is(). Furthermore, it requires is() to check "The first form returns the result of the expression (M & m) != 0; i.e., true if the character has the characteristics specified"... which the reverted patch definitely does not conform to. Even further, furthermore, this requires that ctype's mask be an actual bitmask, unlike what android and newlib provide for _ctype_. Fixing the original bug that instigated this patch remains TBD. git-svn-id: https://llvm.org/svn/llvm-project/libcxx/trunk@216508 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
32050e1e69
commit
116c819cc2
@ -1180,16 +1180,16 @@ ctype_byname<wchar_t>::do_is(mask m, char_type c) const
|
||||
#else
|
||||
bool result = false;
|
||||
wint_t ch = static_cast<wint_t>(c);
|
||||
if ((m & space) == space) result |= (iswspace_l(ch, __l) != 0);
|
||||
if ((m & print) == print) result |= (iswprint_l(ch, __l) != 0);
|
||||
if ((m & cntrl) == cntrl) result |= (iswcntrl_l(ch, __l) != 0);
|
||||
if ((m & upper) == upper) result |= (iswupper_l(ch, __l) != 0);
|
||||
if ((m & lower) == lower) result |= (iswlower_l(ch, __l) != 0);
|
||||
if ((m & alpha) == alpha) result |= (iswalpha_l(ch, __l) != 0);
|
||||
if ((m & digit) == digit) result |= (iswdigit_l(ch, __l) != 0);
|
||||
if ((m & punct) == punct) result |= (iswpunct_l(ch, __l) != 0);
|
||||
if ((m & xdigit) == xdigit) result |= (iswxdigit_l(ch, __l) != 0);
|
||||
if ((m & blank) == blank) result |= (iswblank_l(ch, __l) != 0);
|
||||
if (m & space) result |= (iswspace_l(ch, __l) != 0);
|
||||
if (m & print) result |= (iswprint_l(ch, __l) != 0);
|
||||
if (m & cntrl) result |= (iswcntrl_l(ch, __l) != 0);
|
||||
if (m & upper) result |= (iswupper_l(ch, __l) != 0);
|
||||
if (m & lower) result |= (iswlower_l(ch, __l) != 0);
|
||||
if (m & alpha) result |= (iswalpha_l(ch, __l) != 0);
|
||||
if (m & digit) result |= (iswdigit_l(ch, __l) != 0);
|
||||
if (m & punct) result |= (iswpunct_l(ch, __l) != 0);
|
||||
if (m & xdigit) result |= (iswxdigit_l(ch, __l) != 0);
|
||||
if (m & blank) result |= (iswblank_l(ch, __l) != 0);
|
||||
return result;
|
||||
#endif
|
||||
}
|
||||
@ -1238,16 +1238,16 @@ ctype_byname<wchar_t>::do_scan_is(mask m, const char_type* low, const char_type*
|
||||
break;
|
||||
#else
|
||||
wint_t ch = static_cast<wint_t>(*low);
|
||||
if ((m & space) == space && iswspace_l(ch, __l)) break;
|
||||
if ((m & print) == print && iswprint_l(ch, __l)) break;
|
||||
if ((m & cntrl) == cntrl && iswcntrl_l(ch, __l)) break;
|
||||
if ((m & upper) == upper && iswupper_l(ch, __l)) break;
|
||||
if ((m & lower) == lower && iswlower_l(ch, __l)) break;
|
||||
if ((m & alpha) == alpha && iswalpha_l(ch, __l)) break;
|
||||
if ((m & digit) == digit && iswdigit_l(ch, __l)) break;
|
||||
if ((m & punct) == punct && iswpunct_l(ch, __l)) break;
|
||||
if ((m & xdigit) == xdigit && iswxdigit_l(ch, __l)) break;
|
||||
if ((m & blank) == blank && iswblank_l(ch, __l)) break;
|
||||
if (m & space && iswspace_l(ch, __l)) break;
|
||||
if (m & print && iswprint_l(ch, __l)) break;
|
||||
if (m & cntrl && iswcntrl_l(ch, __l)) break;
|
||||
if (m & upper && iswupper_l(ch, __l)) break;
|
||||
if (m & lower && iswlower_l(ch, __l)) break;
|
||||
if (m & alpha && iswalpha_l(ch, __l)) break;
|
||||
if (m & digit && iswdigit_l(ch, __l)) break;
|
||||
if (m & punct && iswpunct_l(ch, __l)) break;
|
||||
if (m & xdigit && iswxdigit_l(ch, __l)) break;
|
||||
if (m & blank && iswblank_l(ch, __l)) break;
|
||||
#endif
|
||||
}
|
||||
return low;
|
||||
@ -1263,16 +1263,16 @@ ctype_byname<wchar_t>::do_scan_not(mask m, const char_type* low, const char_type
|
||||
break;
|
||||
#else
|
||||
wint_t ch = static_cast<wint_t>(*low);
|
||||
if ((m & space) == space && iswspace_l(ch, __l)) continue;
|
||||
if ((m & print) == print && iswprint_l(ch, __l)) continue;
|
||||
if ((m & cntrl) == cntrl && iswcntrl_l(ch, __l)) continue;
|
||||
if ((m & upper) == upper && iswupper_l(ch, __l)) continue;
|
||||
if ((m & lower) == lower && iswlower_l(ch, __l)) continue;
|
||||
if ((m & alpha) == alpha && iswalpha_l(ch, __l)) continue;
|
||||
if ((m & digit) == digit && iswdigit_l(ch, __l)) continue;
|
||||
if ((m & punct) == punct && iswpunct_l(ch, __l)) continue;
|
||||
if ((m & xdigit) == xdigit && iswxdigit_l(ch, __l)) continue;
|
||||
if ((m & blank) == blank && iswblank_l(ch, __l)) continue;
|
||||
if (m & space && iswspace_l(ch, __l)) continue;
|
||||
if (m & print && iswprint_l(ch, __l)) continue;
|
||||
if (m & cntrl && iswcntrl_l(ch, __l)) continue;
|
||||
if (m & upper && iswupper_l(ch, __l)) continue;
|
||||
if (m & lower && iswlower_l(ch, __l)) continue;
|
||||
if (m & alpha && iswalpha_l(ch, __l)) continue;
|
||||
if (m & digit && iswdigit_l(ch, __l)) continue;
|
||||
if (m & punct && iswpunct_l(ch, __l)) continue;
|
||||
if (m & xdigit && iswxdigit_l(ch, __l)) continue;
|
||||
if (m & blank && iswblank_l(ch, __l)) continue;
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user