From: Jonathan Wakely Date: Mon, 20 Oct 2014 12:34:10 +0000 (+0100) Subject: Makefile.am: Move ctype.cc, ctype_configure_char.cc and ctype_members.cc to ... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=a3e4cd810c6f84e1b47f14dec2d3cba2985f9794;p=gcc.git Makefile.am: Move ctype.cc, ctype_configure_char.cc and ctype_members.cc to ... * src/c++98/Makefile.am: Move ctype.cc, ctype_configure_char.cc and ctype_members.cc to ... * src/c++11/Makefile.am: Here. * src/c++98/Makefile.in: Regenerate. * src/c++11/Makefile.in: Regenerate. * src/c++98/ctype.cc: Move file to ... * src/c++11/ctype.cc: Here, define ctype_base::blank. * config/abi/pre/gnu.ver: Export ctype_base::blank. * config/locale/generic/ctype_members.cc (ctype::_M_convert_to_wmask): Handle blank. Update comments. * config/locale/gnu/ctype_members.cc (ctype::_M_convert_to_wmask): Likewise. * config/os/aix/ctype_base.h (ctype_base::blank): Declare. * config/os/bionic/ctype_base.h (ctype_base::blank): Likewise. * config/os/bsd/darwin/ctype_base.h (ctype_base::blank): Declare. * config/os/bsd/darwin/ctype_inline.h (ctype::is): Use blank. (ctype::is): Use blank. (ctype::is): Use blank. (ctype::is): Use blank. * config/os/gnu-linux/ctype_base.h (ctype_base::blank): Declare. * config/os/hpux/ctype_base.h (ctype_base::blank): Likewise. * config/os/mingw32-w64/ctype_base.h (ctype_base::blank): Declare. * config/os/mingw32-w64/ctype_configure_char.cc (ctype::classic_table()): Set blank bit for space and tab. * config/os/mingw32/ctype_base.h (ctype_base::blank): Declare. * config/os/mingw32/ctype_configure_char.cc (ctype::classic_table()): Set blank bit for space and tab. * config/os/newlib/ctype_base.h (ctype_base::blank): Declare. * config/os/qnx/qnx6.1/ctype_base.h (ctype_base::blank): Likewise. * config/os/solaris/solaris2.10/ctype_base.h (ctype_base::blank): Likewise. * config/os/tpf/ctype_base.h (ctype_base::blank): Likewise. * config/os/uclibc/ctype_base.h (ctype_base::blank): Likewise. * config/os/vxworks/ctype_base.h (ctype_base::blank): Likewise. * include/bits/locale_facets.h (isblank): Define. * include/bits/localefwd.h (isblank): Declare. * testsuite/22_locale/classification/isblank.cc: New. * testsuite/22_locale/ctype_base/blank.cc: New. From-SVN: r216464 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index fcaaea010ce..e00b071ec44 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,53 @@ +2014-10-16 Jonathan Wakely + + * src/c++98/Makefile.am: Move ctype.cc, ctype_configure_char.cc and + ctype_members.cc to ... + * src/c++11/Makefile.am: Here. + * src/c++98/Makefile.in: Regenerate. + * src/c++11/Makefile.in: Regenerate. + * src/c++98/ctype.cc: Move file to ... + * src/c++11/ctype.cc: Here, define ctype_base::blank. + * config/abi/pre/gnu.ver: Export ctype_base::blank. + * config/locale/generic/ctype_members.cc + (ctype::_M_convert_to_wmask): Handle blank. Update comments. + * config/locale/gnu/ctype_members.cc + (ctype::_M_convert_to_wmask): Likewise. + * config/os/aix/ctype_base.h (ctype_base::blank): Declare. + * config/os/bionic/ctype_base.h (ctype_base::blank): Likewise. + * config/os/bsd/darwin/ctype_base.h (ctype_base::blank): Declare. + * config/os/bsd/darwin/ctype_inline.h (ctype::is): Use blank. + (ctype::is): Use blank. + (ctype::is): Use blank. + (ctype::is): Use blank. + * config/os/gnu-linux/ctype_base.h (ctype_base::blank): Declare. + * config/os/hpux/ctype_base.h (ctype_base::blank): Likewise. + * config/os/mingw32-w64/ctype_base.h (ctype_base::blank): Declare. + * config/os/mingw32-w64/ctype_configure_char.cc + (ctype::classic_table()): Set blank bit for space and tab. + * config/os/mingw32/ctype_base.h (ctype_base::blank): Declare. + * config/os/mingw32/ctype_configure_char.cc + (ctype::classic_table()): Set blank bit for space and tab. + * config/os/newlib/ctype_base.h (ctype_base::blank): Declare. + * config/os/qnx/qnx6.1/ctype_base.h (ctype_base::blank): Likewise. + * config/os/solaris/solaris2.10/ctype_base.h (ctype_base::blank): + Likewise. + * config/os/tpf/ctype_base.h (ctype_base::blank): Likewise. + * config/os/uclibc/ctype_base.h (ctype_base::blank): Likewise. + * config/os/vxworks/ctype_base.h (ctype_base::blank): Likewise. + * include/bits/locale_facets.h (isblank): Define. + * include/bits/localefwd.h (isblank): Declare. + * testsuite/22_locale/classification/isblank.cc: New. + * testsuite/22_locale/ctype_base/blank.cc: New. + 2014-10-19 Maxim Kuvyrkov * testsuite/lib/libstdc++.exp (v3-copy-file): New proc split from ... diff --git a/libstdc++-v3/config/abi/pre/gnu.ver b/libstdc++-v3/config/abi/pre/gnu.ver index 0559444a87b..4c6d994197f 100644 --- a/libstdc++-v3/config/abi/pre/gnu.ver +++ b/libstdc++-v3/config/abi/pre/gnu.ver @@ -513,7 +513,7 @@ GLIBCXX_3.4 { _ZNSt5ctypeI[cw]*; # std::ctype_base - _ZNSt10ctype_base*; + _ZNSt10ctype_base[56][ac-z]*; # std::ctype_byname _ZNSt12ctype_bynameI[cw]*; @@ -1473,6 +1473,9 @@ GLIBCXX_3.4.21 { # std::basic_ios::operator bool() const _ZNKSt9basic_iosI[cw]St11char_traitsI[cw]EEcvbEv; + # std::ctype_base::blank + _ZNSt10ctype_base5blankE; + } GLIBCXX_3.4.20; diff --git a/libstdc++-v3/config/locale/generic/ctype_members.cc b/libstdc++-v3/config/locale/generic/ctype_members.cc index 126c0f36b4f..367a8931a55 100644 --- a/libstdc++-v3/config/locale/generic/ctype_members.cc +++ b/libstdc++-v3/config/locale/generic/ctype_members.cc @@ -93,7 +93,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __ret = wctype("graph"); break; default: - __ret = __wmask_type(); + // For some targets ctype_base::blank == ctype_base::space so check + // here to avoid a duplicate case error. + if (__m == blank) + __ret = wctype("blank"); + else + __ret = __wmask_type(); } return __ret; }; @@ -133,7 +138,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION do_is(mask __m, char_type __c) const { bool __ret = false; - // Generically, 15 (instead of 10) since we don't know the numerical + // Generically, 15 (instead of 11) since we don't know the numerical // encoding of the various categories in /usr/include/ctype.h. const size_t __bitmasksize = 15; for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) @@ -152,7 +157,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { for (;__lo < __hi; ++__vec, ++__lo) { - // Generically, 15 (instead of 10) since we don't know the numerical + // Generically, 15 (instead of 11) since we don't know the numerical // encoding of the various categories in /usr/include/ctype.h. const size_t __bitmasksize = 15; mask __m = 0; diff --git a/libstdc++-v3/config/locale/gnu/ctype_members.cc b/libstdc++-v3/config/locale/gnu/ctype_members.cc index 043a53a8abb..cd9604c7338 100644 --- a/libstdc++-v3/config/locale/gnu/ctype_members.cc +++ b/libstdc++-v3/config/locale/gnu/ctype_members.cc @@ -94,6 +94,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION case graph: __ret = __wctype_l("graph", _M_c_locale_ctype); break; + case blank: + __ret = __wctype_l("blank", _M_c_locale_ctype); + break; default: __ret = __wmask_type(); } @@ -144,8 +147,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION __ret = __iswctype_l(__c, _M_wmask[5], _M_c_locale_ctype); else { - // Highest bitmask in ctype_base == 10, but extra in "C" - // library for blank. + // Highest bitmask in ctype_base == 11 const size_t __bitmasksize = 11; for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) if (__m & _M_bit[__bitcur]) @@ -168,8 +170,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { for (; __lo < __hi; ++__vec, ++__lo) { - // Highest bitmask in ctype_base == 10, but extra in "C" - // library for blank. + // Highest bitmask in ctype_base == 11 const size_t __bitmasksize = 11; mask __m = 0; for (size_t __bitcur = 0; __bitcur <= __bitmasksize; ++__bitcur) diff --git a/libstdc++-v3/config/os/aix/ctype_base.h b/libstdc++-v3/config/os/aix/ctype_base.h index 012375f6000..de78205750e 100644 --- a/libstdc++-v3/config/os/aix/ctype_base.h +++ b/libstdc++-v3/config/os/aix/ctype_base.h @@ -52,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _ISCNTRL; static const mask punct = _ISPUNCT; static const mask alnum = _ISALPHA | _ISDIGIT; +#if __cplusplus >= 201103L + static const mask blank = _ISBLANK; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/bionic/ctype_base.h b/libstdc++-v3/config/os/bionic/ctype_base.h index 597509bef2a..1b441a67995 100644 --- a/libstdc++-v3/config/os/bionic/ctype_base.h +++ b/libstdc++-v3/config/os/bionic/ctype_base.h @@ -26,9 +26,7 @@ // ISO C++ 14882: 22.1 Locales // -// Information as gleaned from /usr/include/ctype.h, for solaris2.5.1 - -// Support for Solaris 2.5.1 +// Information as gleaned from /usr/include/ctype.h namespace std _GLIBCXX_VISIBILITY(default) { @@ -54,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _C; static const mask punct = _P; static const mask alnum = _U | _L | _N; +#if __cplusplus >= 201103L + static const mask blank = space; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/bsd/darwin/ctype_base.h b/libstdc++-v3/config/os/bsd/darwin/ctype_base.h index edf23e1c477..b77ac70517a 100644 --- a/libstdc++-v3/config/os/bsd/darwin/ctype_base.h +++ b/libstdc++-v3/config/os/bsd/darwin/ctype_base.h @@ -54,6 +54,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _CTYPE_C; static const mask punct = _CTYPE_P; static const mask alnum = _CTYPE_A | _CTYPE_D; + static const mask blank = _CTYPE_B; #else // Older versions, including Free BSD 3.4, use this style of define. static const mask upper = _U; @@ -67,6 +68,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _C; static const mask punct = _P; static const mask alnum = _A | _D; + static const mask blank = _B; #endif }; diff --git a/libstdc++-v3/config/os/bsd/darwin/ctype_inline.h b/libstdc++-v3/config/os/bsd/darwin/ctype_inline.h index 1170e4eacd4..5ae578994ef 100644 --- a/libstdc++-v3/config/os/bsd/darwin/ctype_inline.h +++ b/libstdc++-v3/config/os/bsd/darwin/ctype_inline.h @@ -60,7 +60,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { #if defined (_CTYPE_S) || defined (__istype) *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit - | space | print | graph | cntrl | punct | alnum); + | space | print | graph | cntrl | punct | alnum + | blank); #else mask __m = 0; if (this->is(upper, *__low)) __m |= upper; @@ -75,6 +76,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (this->is(punct, *__low)) __m |= punct; // Do not include explicit line for alnum mask since it is a // pure composite of masks on FreeBSD. + if (this->is(blank, *__low)) __m |= blank; *__vec = __m; #endif } @@ -123,7 +125,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { for (; __lo < __hi; ++__vec, ++__lo) *__vec = __maskrune (*__lo, upper | lower | alpha | digit | xdigit - | space | print | graph | cntrl | punct | alnum); + | space | print | graph | cntrl | punct | alnum + | blank); return __hi; } diff --git a/libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h b/libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h index a95b248d016..856da8e5755 100644 --- a/libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h +++ b/libstdc++-v3/config/os/bsd/dragonfly/ctype_base.h @@ -52,6 +52,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _CTYPE_C; static const mask punct = _CTYPE_P; static const mask alnum = _CTYPE_A | _CTYPE_D; + static const mask blank = _CTYPE_B; }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h b/libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h index 984665ef948..8e0f078fb66 100644 --- a/libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h +++ b/libstdc++-v3/config/os/bsd/dragonfly/ctype_inline.h @@ -59,7 +59,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION for (;__low < __high; ++__vec, ++__low) { *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit - | space | print | graph | cntrl | punct | alnum); + | space | print | graph | cntrl | punct | alnum + | blank); } return __high; } @@ -106,7 +107,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { for (; __lo < __hi; ++__vec, ++__lo) *__vec = __maskrune (*__lo, upper | lower | alpha | digit | xdigit - | space | print | graph | cntrl | punct | alnum); + | space | print | graph | cntrl | punct | alnum + | blank); return __hi; } diff --git a/libstdc++-v3/config/os/bsd/freebsd/ctype_base.h b/libstdc++-v3/config/os/bsd/freebsd/ctype_base.h index 9bd2a18dd3c..ba6433ad30d 100644 --- a/libstdc++-v3/config/os/bsd/freebsd/ctype_base.h +++ b/libstdc++-v3/config/os/bsd/freebsd/ctype_base.h @@ -56,6 +56,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _CTYPE_C; static const mask punct = _CTYPE_P; static const mask alnum = _CTYPE_A | _CTYPE_D; + static const mask blank = _CTYPE_B; #else // Older versions, including Free BSD 3.4, use this style of define. static const mask upper = _U; @@ -69,6 +70,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _C; static const mask punct = _P; static const mask alnum = _A | _D; + static const mask blank = _B; #endif }; diff --git a/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h b/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h index 939304a0dbb..01530996e1f 100644 --- a/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h +++ b/libstdc++-v3/config/os/bsd/freebsd/ctype_inline.h @@ -60,7 +60,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { #if defined (_CTYPE_S) || defined (__istype) *__vec = __maskrune (*__low, upper | lower | alpha | digit | xdigit - | space | print | graph | cntrl | punct | alnum); + | space | print | graph | cntrl | punct | alnum + | blank); #else mask __m = 0; if (this->is(upper, *__low)) __m |= upper; @@ -75,6 +76,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION if (this->is(punct, *__low)) __m |= punct; // Do not include explicit line for alnum mask since it is a // pure composite of masks on FreeBSD. + if (this->is(blank, *__low)) __m |= blank; *__vec = __m; #endif } @@ -123,7 +125,8 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { for (; __lo < __hi; ++__vec, ++__lo) *__vec = __maskrune (*__lo, upper | lower | alpha | digit | xdigit - | space | print | graph | cntrl | punct | alnum); + | space | print | graph | cntrl | punct | alnum + | blank); return __hi; } diff --git a/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h b/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h index f441d749c1f..6cd339f443f 100644 --- a/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h +++ b/libstdc++-v3/config/os/bsd/netbsd/ctype_base.h @@ -69,6 +69,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _CTYPE_C; static const mask punct = _CTYPE_P; static const mask alnum = _CTYPE_U | _CTYPE_L | _CTYPE_N; +#endif +#if __cplusplus >= 201103L + static const mask blank = space; #endif }; diff --git a/libstdc++-v3/config/os/bsd/openbsd/ctype_base.h b/libstdc++-v3/config/os/bsd/openbsd/ctype_base.h index 3599c95f317..ad9799aaeb1 100644 --- a/libstdc++-v3/config/os/bsd/openbsd/ctype_base.h +++ b/libstdc++-v3/config/os/bsd/openbsd/ctype_base.h @@ -53,6 +53,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _C; static const mask punct = _P; static const mask alnum = _U | _L | _N; +#if __cplusplus >= 201103L + static const mask blank = space; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/djgpp/ctype_base.h b/libstdc++-v3/config/os/djgpp/ctype_base.h index b4befe1600b..1be9767ed87 100644 --- a/libstdc++-v3/config/os/djgpp/ctype_base.h +++ b/libstdc++-v3/config/os/djgpp/ctype_base.h @@ -51,6 +51,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask xdigit = __dj_ISXDIGIT; // Hexadecimal numeric static const mask alnum = __dj_ISALPHA | __dj_ISDIGIT; // Alphanumeric static const mask graph = __dj_ISALPHA | __dj_ISDIGIT | __dj_ISPUNCT; // Graphical +#if __cplusplus >= 201103L + static const mask blank = __dj_ISBLANK; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/generic/ctype_base.h b/libstdc++-v3/config/os/generic/ctype_base.h index 8a8606b8f48..c70c03f1ff5 100644 --- a/libstdc++-v3/config/os/generic/ctype_base.h +++ b/libstdc++-v3/config/os/generic/ctype_base.h @@ -52,6 +52,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = 1 << 8; static const mask punct = 1 << 9; static const mask alnum = (1 << 2) | (1 << 3); // alpha|digit + static const mask blank = 1 << 10; }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/generic/ctype_inline.h b/libstdc++-v3/config/os/generic/ctype_inline.h index d150f31ad65..31c8c57a3e6 100644 --- a/libstdc++-v3/config/os/generic/ctype_inline.h +++ b/libstdc++-v3/config/os/generic/ctype_inline.h @@ -97,6 +97,11 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION case graph: __testis = isgraph(__c); break; +#ifdef _GLIBCXX_USE_C99_CTYPE_TR1 + case blank: + __testis = isblank(__c); + break; +#endif default: __testis = false; break; @@ -117,7 +122,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION *__vec++ = _M_table[static_cast(*__low++)]; else { - // Highest bitmask in ctype_base == 10. + // Highest bitmask in ctype_base == 11. const size_t __bitmasksize = 15; for (;__low < __high; ++__vec, ++__low) { diff --git a/libstdc++-v3/config/os/gnu-linux/ctype_base.h b/libstdc++-v3/config/os/gnu-linux/ctype_base.h index 8cd1d464fa2..e28ed945e6a 100644 --- a/libstdc++-v3/config/os/gnu-linux/ctype_base.h +++ b/libstdc++-v3/config/os/gnu-linux/ctype_base.h @@ -57,6 +57,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _IScntrl; static const mask punct = _ISpunct; static const mask alnum = _ISalpha | _ISdigit; +#if __cplusplus >= 201103L + static const mask blank = _ISblank; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/hpux/ctype_base.h b/libstdc++-v3/config/os/hpux/ctype_base.h index f8b0f7c6cf3..b093ffbcc3e 100644 --- a/libstdc++-v3/config/os/hpux/ctype_base.h +++ b/libstdc++-v3/config/os/hpux/ctype_base.h @@ -52,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _ISCNTRL; static const mask punct = _ISPUNCT; static const mask alnum = _ISALPHA | _ISDIGIT; +#if __cplusplus >= 201103L + static const mask blank = _ISBLANK; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/mingw32-w64/ctype_base.h b/libstdc++-v3/config/os/mingw32-w64/ctype_base.h index 7803422fb52..0780091196c 100644 --- a/libstdc++-v3/config/os/mingw32-w64/ctype_base.h +++ b/libstdc++-v3/config/os/mingw32-w64/ctype_base.h @@ -58,6 +58,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = 1 << 8; static const mask punct = 1 << 9; static const mask alnum = (1 << 2) | (1 << 3); // alpha|digit +#if __cplusplus >= 201103L + static const mask blank = 1 << 10; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc b/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc index 19456e0dd0d..b1b4fa07a5e 100644 --- a/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc +++ b/libstdc++-v3/config/os/mingw32-w64/ctype_configure_char.cc @@ -54,7 +54,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION cntrl /* ^F */, cntrl /* ^G */, cntrl /* ^H */, - ctype_base::mask(space | cntrl) /* tab */, + ctype_base::mask(space | cntrl | blank) /* tab */, ctype_base::mask(space | cntrl) /* LF */, ctype_base::mask(space | cntrl) /* ^K */, ctype_base::mask(space | cntrl) /* FF */, @@ -77,7 +77,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION cntrl /* ^] */, cntrl /* ^^ */, cntrl /* ^_ */, - ctype_base::mask(space | print) /* */, + ctype_base::mask(space | print | blank) /* */, ctype_base::mask(punct | print) /* ! */, ctype_base::mask(punct | print) /* " */, ctype_base::mask(punct | print) /* # */, diff --git a/libstdc++-v3/config/os/mingw32/ctype_base.h b/libstdc++-v3/config/os/mingw32/ctype_base.h index 7803422fb52..0780091196c 100644 --- a/libstdc++-v3/config/os/mingw32/ctype_base.h +++ b/libstdc++-v3/config/os/mingw32/ctype_base.h @@ -58,6 +58,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = 1 << 8; static const mask punct = 1 << 9; static const mask alnum = (1 << 2) | (1 << 3); // alpha|digit +#if __cplusplus >= 201103L + static const mask blank = 1 << 10; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/mingw32/ctype_configure_char.cc b/libstdc++-v3/config/os/mingw32/ctype_configure_char.cc index 19456e0dd0d..b1b4fa07a5e 100644 --- a/libstdc++-v3/config/os/mingw32/ctype_configure_char.cc +++ b/libstdc++-v3/config/os/mingw32/ctype_configure_char.cc @@ -54,7 +54,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION cntrl /* ^F */, cntrl /* ^G */, cntrl /* ^H */, - ctype_base::mask(space | cntrl) /* tab */, + ctype_base::mask(space | cntrl | blank) /* tab */, ctype_base::mask(space | cntrl) /* LF */, ctype_base::mask(space | cntrl) /* ^K */, ctype_base::mask(space | cntrl) /* FF */, @@ -77,7 +77,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION cntrl /* ^] */, cntrl /* ^^ */, cntrl /* ^_ */, - ctype_base::mask(space | print) /* */, + ctype_base::mask(space | print | blank) /* */, ctype_base::mask(punct | print) /* ! */, ctype_base::mask(punct | print) /* " */, ctype_base::mask(punct | print) /* # */, diff --git a/libstdc++-v3/config/os/newlib/ctype_base.h b/libstdc++-v3/config/os/newlib/ctype_base.h index 29f527d8bf0..1bf5beba0f1 100644 --- a/libstdc++-v3/config/os/newlib/ctype_base.h +++ b/libstdc++-v3/config/os/newlib/ctype_base.h @@ -26,10 +26,8 @@ // ISO C++ 14882: 22.1 Locales // -// Information as gleaned from /usr/include/ctype.h, for solaris2.5.1 +// Information as gleaned from /usr/include/ctype.h -// Support for Solaris 2.5.1 - namespace std _GLIBCXX_VISIBILITY(default) { _GLIBCXX_BEGIN_NAMESPACE_VERSION @@ -54,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _C; static const mask punct = _P; static const mask alnum = _U | _L | _N; +#if __cplusplus >= 201103L + static const mask blank = space; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/qnx/qnx6.1/ctype_base.h b/libstdc++-v3/config/os/qnx/qnx6.1/ctype_base.h index bf7c7566cb2..c5e11826b2c 100644 --- a/libstdc++-v3/config/os/qnx/qnx6.1/ctype_base.h +++ b/libstdc++-v3/config/os/qnx/qnx6.1/ctype_base.h @@ -57,6 +57,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _BB; static const mask punct = _PU; static const mask alnum = _DI | _LO | _UP | _XA; +#if __cplusplus >= 201103L + static const mask blank = _SP | _XB; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/solaris/solaris2.10/ctype_base.h b/libstdc++-v3/config/os/solaris/solaris2.10/ctype_base.h index c584feea48d..893b7320c55 100644 --- a/libstdc++-v3/config/os/solaris/solaris2.10/ctype_base.h +++ b/libstdc++-v3/config/os/solaris/solaris2.10/ctype_base.h @@ -54,6 +54,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _ISCNTRL; static const mask punct = _ISPUNCT; static const mask alnum = _ISALPHA | _ISDIGIT; +#if __cplusplus >= 201103L + static const mask blank = _ISBLANK; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/tpf/ctype_base.h b/libstdc++-v3/config/os/tpf/ctype_base.h index d3b2a25d5c5..2089358de17 100644 --- a/libstdc++-v3/config/os/tpf/ctype_base.h +++ b/libstdc++-v3/config/os/tpf/ctype_base.h @@ -52,6 +52,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _IScntrl; static const mask punct = _ISpunct; static const mask alnum = _ISalpha | _ISdigit; +#if __cplusplus >= 201103L + static const mask blank = _ISblank; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/uclibc/ctype_base.h b/libstdc++-v3/config/os/uclibc/ctype_base.h index 39453afecb7..86a600750b3 100644 --- a/libstdc++-v3/config/os/uclibc/ctype_base.h +++ b/libstdc++-v3/config/os/uclibc/ctype_base.h @@ -59,6 +59,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _IScntrl; static const mask punct = _ISpunct; static const mask alnum = _ISalpha | _ISdigit; +#if __cplusplus >= 201103L + static const mask blank = _ISblank; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/config/os/vxworks/ctype_base.h b/libstdc++-v3/config/os/vxworks/ctype_base.h index bc105a2c53e..4f92412d0c1 100644 --- a/libstdc++-v3/config/os/vxworks/ctype_base.h +++ b/libstdc++-v3/config/os/vxworks/ctype_base.h @@ -53,6 +53,9 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION static const mask cntrl = _C_CONTROL; static const mask punct = _C_PUNCT; static const mask alnum = _C_UPPER | _C_LOWER | _C_NUMBER; +#if __cplusplus >= 201103L + static const mask blank = _C_WHITE_SPACE; +#endif }; _GLIBCXX_END_NAMESPACE_VERSION diff --git a/libstdc++-v3/include/bits/locale_facets.h b/libstdc++-v3/include/bits/locale_facets.h index 453bbedbd62..234693bd416 100644 --- a/libstdc++-v3/include/bits/locale_facets.h +++ b/libstdc++-v3/include/bits/locale_facets.h @@ -2590,6 +2590,14 @@ _GLIBCXX_END_NAMESPACE_LDBL isgraph(_CharT __c, const locale& __loc) { return use_facet >(__loc).is(ctype_base::graph, __c); } +#if __cplusplus >= 201103L + /// Convenience interface to ctype.is(ctype_base::blank, __c). + template + inline bool + isblank(_CharT __c, const locale& __loc) + { return use_facet >(__loc).is(ctype_base::blank, __c); } +#endif + /// Convenience interface to ctype.toupper(__c). template inline _CharT diff --git a/libstdc++-v3/include/bits/localefwd.h b/libstdc++-v3/include/bits/localefwd.h index f9983c9b5de..3025c226110 100644 --- a/libstdc++-v3/include/bits/localefwd.h +++ b/libstdc++-v3/include/bits/localefwd.h @@ -107,6 +107,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION bool isgraph(_CharT, const locale&); +#if __cplusplus >= 201103L + template + bool + isblank(_CharT, const locale&); +#endif + template _CharT toupper(_CharT, const locale&); diff --git a/libstdc++-v3/src/c++11/Makefile.am b/libstdc++-v3/src/c++11/Makefile.am index 39425d41c22..c8507cec8df 100644 --- a/libstdc++-v3/src/c++11/Makefile.am +++ b/libstdc++-v3/src/c++11/Makefile.am @@ -27,9 +27,22 @@ noinst_LTLIBRARIES = libc++11convenience.la headers = +# Source files linked in via configuration/make substitution for a +# particular host. +host_sources = \ + ctype_configure_char.cc \ + ctype_members.cc + +ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc + $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true + +ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC) + $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true + sources = \ chrono.cc \ condition_variable.cc \ + ctype.cc \ debug.cc \ functexcept.cc \ functional.cc \ @@ -45,7 +58,8 @@ sources = \ shared_ptr.cc \ snprintf_lite.cc \ system_error.cc \ - thread.cc + thread.cc \ + ${host_sources} if ENABLE_EXTERN_TEMPLATE # XTEMPLATE_FLAGS = -fno-implicit-templates diff --git a/libstdc++-v3/src/c++11/Makefile.in b/libstdc++-v3/src/c++11/Makefile.in index 70c6c4b61fd..fd3e7801d85 100644 --- a/libstdc++-v3/src/c++11/Makefile.in +++ b/libstdc++-v3/src/c++11/Makefile.in @@ -67,18 +67,19 @@ CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libc__11convenience_la_LIBADD = -am__objects_1 = chrono.lo condition_variable.lo debug.lo \ +am__objects_1 = ctype_configure_char.lo ctype_members.lo +am__objects_2 = chrono.lo condition_variable.lo ctype.lo debug.lo \ functexcept.lo functional.lo future.lo hash_c++0x.lo \ hashtable_c++0x.lo ios.lo limits.lo mutex.lo placeholders.lo \ random.lo regex.lo shared_ptr.lo snprintf_lite.lo \ - system_error.lo thread.lo -@ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_2 = ext11-inst.lo \ + system_error.lo thread.lo $(am__objects_1) +@ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_3 = ext11-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ fstream-inst.lo ios-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ iostream-inst.lo istream-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ ostream-inst.lo sstream-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ streambuf-inst.lo string-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ wstring-inst.lo -am_libc__11convenience_la_OBJECTS = $(am__objects_1) $(am__objects_2) +am_libc__11convenience_la_OBJECTS = $(am__objects_2) $(am__objects_3) libc__11convenience_la_OBJECTS = $(am_libc__11convenience_la_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir) depcomp = @@ -314,9 +315,17 @@ AM_CPPFLAGS = $(GLIBCXX_INCLUDES) # Convenience library for C++11 runtime. noinst_LTLIBRARIES = libc++11convenience.la headers = + +# Source files linked in via configuration/make substitution for a +# particular host. +host_sources = \ + ctype_configure_char.cc \ + ctype_members.cc + sources = \ chrono.cc \ condition_variable.cc \ + ctype.cc \ debug.cc \ functexcept.cc \ functional.cc \ @@ -332,7 +341,8 @@ sources = \ shared_ptr.cc \ snprintf_lite.cc \ system_error.cc \ - thread.cc + thread.cc \ + ${host_sources} # XTEMPLATE_FLAGS = @ENABLE_EXTERN_TEMPLATE_FALSE@inst_sources = @@ -646,6 +656,12 @@ uninstall-am: pdf pdf-am ps ps-am tags uninstall uninstall-am +ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc + $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true + +ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC) + $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true + vpath % $(top_srcdir)/src/c++11 # Use special rules for the hashtable.cc file so that all diff --git a/libstdc++-v3/src/c++11/ctype.cc b/libstdc++-v3/src/c++11/ctype.cc new file mode 100644 index 00000000000..b76962aa561 --- /dev/null +++ b/libstdc++-v3/src/c++11/ctype.cc @@ -0,0 +1,133 @@ +// Copyright (C) 1997-2014 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// Under Section 7 of GPL version 3, you are granted additional +// permissions described in the GCC Runtime Library Exception, version +// 3.1, as published by the Free Software Foundation. + +// You should have received a copy of the GNU General Public License and +// a copy of the GCC Runtime Library Exception along with this program; +// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see +// . + +#include +#include +#include + +namespace std _GLIBCXX_VISIBILITY(default) +{ +_GLIBCXX_BEGIN_NAMESPACE_VERSION + + // Definitions for static const data members of ctype_base. + const ctype_base::mask ctype_base::space; + const ctype_base::mask ctype_base::print; + const ctype_base::mask ctype_base::cntrl; + const ctype_base::mask ctype_base::upper; + const ctype_base::mask ctype_base::lower; + const ctype_base::mask ctype_base::alpha; + const ctype_base::mask ctype_base::digit; + const ctype_base::mask ctype_base::punct; + const ctype_base::mask ctype_base::xdigit; + const ctype_base::mask ctype_base::alnum; + const ctype_base::mask ctype_base::graph; + const ctype_base::mask ctype_base::blank; + + // Definitions for locale::id of standard facets that are specialized. + locale::id ctype::id; + +#ifdef _GLIBCXX_USE_WCHAR_T + locale::id ctype::id; +#endif + + const size_t ctype::table_size; + + ctype::~ctype() + { + _S_destroy_c_locale(_M_c_locale_ctype); + if (_M_del) + delete[] this->table(); + } + + // Fill in the narrowing cache and flag whether all values are + // valid or not. _M_narrow_ok is set to 2 if memcpy can't + // be used. + void + ctype:: + _M_narrow_init() const + { + char __tmp[sizeof(_M_narrow)]; + for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i) + __tmp[__i] = __i; + do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow); + + _M_narrow_ok = 1; + if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow))) + _M_narrow_ok = 2; + else + { + // Deal with the special case of zero: renarrow with a + // different default and compare. + char __c; + do_narrow(__tmp, __tmp + 1, 1, &__c); + if (__c == 1) + _M_narrow_ok = 2; + } + } + + void + ctype:: + _M_widen_init() const + { + char __tmp[sizeof(_M_widen)]; + for (size_t __i = 0; __i < sizeof(_M_widen); ++__i) + __tmp[__i] = __i; + do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen); + + _M_widen_ok = 1; + // Set _M_widen_ok to 2 if memcpy can't be used. + if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen))) + _M_widen_ok = 2; + } + +#ifdef _GLIBCXX_USE_WCHAR_T + ctype::ctype(size_t __refs) + : __ctype_abstract_base(__refs), + _M_c_locale_ctype(_S_get_c_locale()), _M_narrow_ok(false) + { _M_initialize_ctype(); } + + ctype::ctype(__c_locale __cloc, size_t __refs) + : __ctype_abstract_base(__refs), + _M_c_locale_ctype(_S_clone_c_locale(__cloc)), _M_narrow_ok(false) + { _M_initialize_ctype(); } + + ctype::~ctype() + { _S_destroy_c_locale(_M_c_locale_ctype); } + + ctype_byname::ctype_byname(const char* __s, size_t __refs) + : ctype(__refs) + { + if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0) + { + this->_S_destroy_c_locale(this->_M_c_locale_ctype); + this->_S_create_c_locale(this->_M_c_locale_ctype, __s); + this->_M_initialize_ctype(); + } + } + + ctype_byname::~ctype_byname() + { } + +#endif + +_GLIBCXX_END_NAMESPACE_VERSION +} // namespace diff --git a/libstdc++-v3/src/c++98/Makefile.am b/libstdc++-v3/src/c++98/Makefile.am index 6da69f8ef2e..9afe904cd2b 100644 --- a/libstdc++-v3/src/c++98/Makefile.am +++ b/libstdc++-v3/src/c++98/Makefile.am @@ -33,8 +33,6 @@ host_sources = \ atomicity.cc \ codecvt_members.cc \ collate_members.cc \ - ctype_configure_char.cc \ - ctype_members.cc \ messages_members.cc \ monetary_members.cc \ numeric_members.cc \ @@ -46,12 +44,6 @@ codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC) collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC) $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true -ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc - $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true - -ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC) - $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true - messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC) $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true @@ -104,7 +96,6 @@ sources = \ mt_allocator.cc \ codecvt.cc \ complex_io.cc \ - ctype.cc \ globals_io.cc \ hash_tr1.cc \ hashtable_tr1.cc \ diff --git a/libstdc++-v3/src/c++98/Makefile.in b/libstdc++-v3/src/c++98/Makefile.in index 38f96ccc943..9d937927ed7 100644 --- a/libstdc++-v3/src/c++98/Makefile.in +++ b/libstdc++-v3/src/c++98/Makefile.in @@ -68,8 +68,8 @@ CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libc__98convenience_la_LIBADD = am__objects_1 = atomicity.lo codecvt_members.lo collate_members.lo \ - ctype_configure_char.lo ctype_members.lo messages_members.lo \ - monetary_members.lo numeric_members.lo time_members.lo + messages_members.lo monetary_members.lo numeric_members.lo \ + time_members.lo @ENABLE_EXTERN_TEMPLATE_TRUE@am__objects_2 = allocator-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ concept-inst.lo ext-inst.lo \ @ENABLE_EXTERN_TEMPLATE_TRUE@ locale-inst.lo misc-inst.lo \ @@ -78,7 +78,7 @@ am__objects_3 = parallel_settings.lo am__objects_4 = basic_file.lo c++locale.lo $(am__objects_2) \ $(am__objects_3) am__objects_5 = bitmap_allocator.lo pool_allocator.lo mt_allocator.lo \ - codecvt.lo complex_io.lo ctype.lo globals_io.lo hash_tr1.lo \ + codecvt.lo complex_io.lo globals_io.lo hash_tr1.lo \ hashtable_tr1.lo ios_failure.lo ios_init.lo ios_locale.lo \ list.lo list-aux.lo list-aux-2.lo list_associated.lo \ list_associated-2.lo locale.lo locale_init.lo locale_facets.lo \ @@ -328,8 +328,6 @@ host_sources = \ atomicity.cc \ codecvt_members.cc \ collate_members.cc \ - ctype_configure_char.cc \ - ctype_members.cc \ messages_members.cc \ monetary_members.cc \ numeric_members.cc \ @@ -364,7 +362,6 @@ sources = \ mt_allocator.cc \ codecvt.cc \ complex_io.cc \ - ctype.cc \ globals_io.cc \ hash_tr1.cc \ hashtable_tr1.cc \ @@ -699,12 +696,6 @@ codecvt_members.cc: ${glibcxx_srcdir}/$(CCODECVT_CC) collate_members.cc: ${glibcxx_srcdir}/$(CCOLLATE_CC) $(LN_S) ${glibcxx_srcdir}/$(CCOLLATE_CC) . || true -ctype_configure_char.cc: ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc - $(LN_S) ${glibcxx_srcdir}/$(OS_INC_SRCDIR)/ctype_configure_char.cc . || true - -ctype_members.cc: ${glibcxx_srcdir}/$(CCTYPE_CC) - $(LN_S) ${glibcxx_srcdir}/$(CCTYPE_CC) . || true - messages_members.cc: ${glibcxx_srcdir}/$(CMESSAGES_CC) $(LN_S) ${glibcxx_srcdir}/$(CMESSAGES_CC) . || true diff --git a/libstdc++-v3/src/c++98/ctype.cc b/libstdc++-v3/src/c++98/ctype.cc deleted file mode 100644 index ffeeafc8bfc..00000000000 --- a/libstdc++-v3/src/c++98/ctype.cc +++ /dev/null @@ -1,132 +0,0 @@ -// Copyright (C) 1997-2014 Free Software Foundation, Inc. -// -// This file is part of the GNU ISO C++ Library. This library is free -// software; you can redistribute it and/or modify it under the -// terms of the GNU General Public License as published by the -// Free Software Foundation; either version 3, or (at your option) -// any later version. - -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. - -// Under Section 7 of GPL version 3, you are granted additional -// permissions described in the GCC Runtime Library Exception, version -// 3.1, as published by the Free Software Foundation. - -// You should have received a copy of the GNU General Public License and -// a copy of the GCC Runtime Library Exception along with this program; -// see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -// . - -#include -#include -#include - -namespace std _GLIBCXX_VISIBILITY(default) -{ -_GLIBCXX_BEGIN_NAMESPACE_VERSION - - // Definitions for static const data members of ctype_base. - const ctype_base::mask ctype_base::space; - const ctype_base::mask ctype_base::print; - const ctype_base::mask ctype_base::cntrl; - const ctype_base::mask ctype_base::upper; - const ctype_base::mask ctype_base::lower; - const ctype_base::mask ctype_base::alpha; - const ctype_base::mask ctype_base::digit; - const ctype_base::mask ctype_base::punct; - const ctype_base::mask ctype_base::xdigit; - const ctype_base::mask ctype_base::alnum; - const ctype_base::mask ctype_base::graph; - - // Definitions for locale::id of standard facets that are specialized. - locale::id ctype::id; - -#ifdef _GLIBCXX_USE_WCHAR_T - locale::id ctype::id; -#endif - - const size_t ctype::table_size; - - ctype::~ctype() - { - _S_destroy_c_locale(_M_c_locale_ctype); - if (_M_del) - delete[] this->table(); - } - - // Fill in the narrowing cache and flag whether all values are - // valid or not. _M_narrow_ok is set to 2 if memcpy can't - // be used. - void - ctype:: - _M_narrow_init() const - { - char __tmp[sizeof(_M_narrow)]; - for (size_t __i = 0; __i < sizeof(_M_narrow); ++__i) - __tmp[__i] = __i; - do_narrow(__tmp, __tmp + sizeof(__tmp), 0, _M_narrow); - - _M_narrow_ok = 1; - if (__builtin_memcmp(__tmp, _M_narrow, sizeof(_M_narrow))) - _M_narrow_ok = 2; - else - { - // Deal with the special case of zero: renarrow with a - // different default and compare. - char __c; - do_narrow(__tmp, __tmp + 1, 1, &__c); - if (__c == 1) - _M_narrow_ok = 2; - } - } - - void - ctype:: - _M_widen_init() const - { - char __tmp[sizeof(_M_widen)]; - for (size_t __i = 0; __i < sizeof(_M_widen); ++__i) - __tmp[__i] = __i; - do_widen(__tmp, __tmp + sizeof(__tmp), _M_widen); - - _M_widen_ok = 1; - // Set _M_widen_ok to 2 if memcpy can't be used. - if (__builtin_memcmp(__tmp, _M_widen, sizeof(_M_widen))) - _M_widen_ok = 2; - } - -#ifdef _GLIBCXX_USE_WCHAR_T - ctype::ctype(size_t __refs) - : __ctype_abstract_base(__refs), - _M_c_locale_ctype(_S_get_c_locale()), _M_narrow_ok(false) - { _M_initialize_ctype(); } - - ctype::ctype(__c_locale __cloc, size_t __refs) - : __ctype_abstract_base(__refs), - _M_c_locale_ctype(_S_clone_c_locale(__cloc)), _M_narrow_ok(false) - { _M_initialize_ctype(); } - - ctype::~ctype() - { _S_destroy_c_locale(_M_c_locale_ctype); } - - ctype_byname::ctype_byname(const char* __s, size_t __refs) - : ctype(__refs) - { - if (std::strcmp(__s, "C") != 0 && std::strcmp(__s, "POSIX") != 0) - { - this->_S_destroy_c_locale(this->_M_c_locale_ctype); - this->_S_create_c_locale(this->_M_c_locale_ctype, __s); - this->_M_initialize_ctype(); - } - } - - ctype_byname::~ctype_byname() - { } - -#endif - -_GLIBCXX_END_NAMESPACE_VERSION -} // namespace diff --git a/libstdc++-v3/testsuite/22_locale/classification/isblank.cc b/libstdc++-v3/testsuite/22_locale/classification/isblank.cc new file mode 100644 index 00000000000..0c7adc21d90 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/classification/isblank.cc @@ -0,0 +1,49 @@ +// Copyright (C) 2014 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options " -std=gnu++11 " } + +// 22.3.3.1 Character classification [classification] + +#include +#include + +typedef char char_type; + +void +test01() +{ + bool test __attribute__((unused)) = true; + VERIFY( std::isblank(' ', std::locale::classic()) ); + VERIFY( std::isblank('\t', std::locale::classic()) ); +} + +void +test02() +{ +#ifdef _GLIBCXX_USE_WCHAR_T + bool test __attribute__((unused)) = true; + VERIFY( std::isblank(L' ', std::locale::classic()) ); + VERIFY( std::isblank(L'\t', std::locale::classic()) ); +#endif +} + +int main() +{ + test01(); + test02(); +} diff --git a/libstdc++-v3/testsuite/22_locale/ctype_base/blank.cc b/libstdc++-v3/testsuite/22_locale/ctype_base/blank.cc new file mode 100644 index 00000000000..cfd02a41507 --- /dev/null +++ b/libstdc++-v3/testsuite/22_locale/ctype_base/blank.cc @@ -0,0 +1,28 @@ +// Copyright (C) 2014 Free Software Foundation, Inc. +// +// This file is part of the GNU ISO C++ Library. This library is free +// software; you can redistribute it and/or modify it under the +// terms of the GNU General Public License as published by the +// Free Software Foundation; either version 3, or (at your option) +// any later version. + +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. + +// You should have received a copy of the GNU General Public License along +// with this library; see the file COPYING3. If not see +// . + +// { dg-options "-std=gnu++11" } +// { dg-do compile } + +#include + +void +test01() +{ + const std::ctype_base::mask* blank __attribute__((unused)); + blank = &std::ctype_base::blank; +}