diff options
author | timshen <timshen@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-10-18 16:13:07 +0000 |
---|---|---|
committer | timshen <timshen@138bc75d-0d04-0410-961f-82ee72b054a4> | 2013-10-18 16:13:07 +0000 |
commit | 63ffcb80a66eefad1b7d4f44e5229be8af008467 (patch) | |
tree | edfbc3cc8e346a4ca77164d8ffa6c232be178ce6 | |
parent | a3724f9d40c11b2076915cfc2fcdad3e9ceaeb5a (diff) | |
download | gcc-63ffcb80a66eefad1b7d4f44e5229be8af008467.tar.gz |
2013-10-18 Tim Shen <timshen91@gmail.com>
* 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
-rw-r--r-- | libstdc++-v3/ChangeLog | 8 | ||||
-rw-r--r-- | libstdc++-v3/include/bits/regex_scanner.tcc | 8 | ||||
-rw-r--r-- | libstdc++-v3/testsuite/28_regex/algorithms/regex_match/ecma/wchar_t/cjk_match.cc | 50 |
3 files changed, 62 insertions, 4 deletions
diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 5ae46af3781..b37fdb64aa7 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2013-10-18 Tim Shen <timshen91@gmail.com> + + * 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 <timshen91@gmail.com> * 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 21d1e91f5f7..f6cef6a04c2 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 00000000000..15929ddc532 --- /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 <timshen91@gmail.com> +// +// 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 +// <http://www.gnu.org/licenses/>. + +// 28.11.2 regex_match +// Tests CJK support. + +#include <regex> +#include <testsuite_hooks.h> +#include <testsuite_regex.h> + +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; +} |