From: timshen Date: Fri, 18 Oct 2013 16:13:07 +0000 (+0000) Subject: 2013-10-18 Tim Shen X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=63ffcb80a66eefad1b7d4f44e5229be8af008467;p=thirdparty%2Fgcc.git 2013-10-18 Tim Shen * include/bits/regex_scanner.tcc: (_Scanner<>::_M_scan_normal, _Scanner<>::_M_eat_escape_ecma, _Scanner<>::_M_eat_escape_posix, _Scanner<>::_M_eat_escape_awk): Narrow character before finding in maps. * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@203827 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 5ae46af37811..b37fdb64aa79 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2013-10-18 Tim Shen + + * include/bits/regex_scanner.tcc: (_Scanner<>::_M_scan_normal, + _Scanner<>::_M_eat_escape_ecma, _Scanner<>::_M_eat_escape_posix, + _Scanner<>::_M_eat_escape_awk): Narrow character before finding in maps. + * testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc: + New. + 2013-10-17 Tim Shen * include/bits/regex.h (regex_token_iterator<>::regex_token_iterator): diff --git a/libstdc++-v3/include/bits/regex_scanner.tcc b/libstdc++-v3/include/bits/regex_scanner.tcc index 21d1e91f5f72..f6cef6a04c2d 100644 --- a/libstdc++-v3/include/bits/regex_scanner.tcc +++ b/libstdc++-v3/include/bits/regex_scanner.tcc @@ -244,7 +244,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION _M_state = _S_state_in_brace; _M_token = _S_token_interval_begin; } - else if ((_M_spec_char.count(__c) + else if ((_M_spec_char.count(_M_ctype.narrow(__c, '\0')) && __c != ']' && __c != '}') || (_M_is_grep() && __c == '\n')) @@ -367,7 +367,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION auto __c = *_M_current++; - if (_M_escape_map.count(__c) + if (_M_escape_map.count(_M_ctype.narrow(__c, '\0')) && (__c != 'b' || _M_state == _S_state_in_bracket)) { _M_token = _S_token_ord_char; @@ -441,7 +441,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION auto __c = *_M_current; - if (_M_spec_char.count(__c)) + if (_M_spec_char.count(_M_ctype.narrow(__c, '\0'))) { _M_token = _S_token_ord_char; _M_value.assign(1, __c); @@ -476,7 +476,7 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION { auto __c = *_M_current++; - if (_M_escape_map.count(__c)) + if (_M_escape_map.count(_M_ctype.narrow(__c, '\0'))) { _M_token = _S_token_ord_char; _M_value.assign(1, _M_escape_map.at(__c)); diff --git a/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc new file mode 100644 index 000000000000..15929ddc532d --- /dev/null +++ b/libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc @@ -0,0 +1,50 @@ +// { dg-options "-std=gnu++11" } + +// +// 2013-10-18 Tim Shen +// +// Copyright (C) 2013 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 +// . + +// 28.11.2 regex_match +// Tests CJK support. + +#include +#include +#include + +using namespace __gnu_test; +using namespace std; + +void +test01() +{ + bool test __attribute__((unused)) = true; + + const wchar_t * s = L"\u4f60\u597d\u002c\u0020\u4e16\u002b\u754c"; + + wregex re(s); + VERIFY(regex_match_debug(L"\u4f60\u597d\u002c\u0020\u4e16\u4e16\u4e16\u754c", + re)); +} + +int +main() +{ + test01(); + return 0; +}