diff options
author | Tim Shen <timshen91@gmail.com> | 2013-10-18 16:13:07 +0000 |
---|---|---|
committer | Tim Shen <timshen@gcc.gnu.org> | 2013-10-18 16:13:07 +0000 |
commit | 79488388644d9f3096c283f17a1ffc85f5e319ae (patch) | |
tree | edfbc3cc8e346a4ca77164d8ffa6c232be178ce6 | |
parent | 01e127b1dd90a951a602832070047e2723f072f5 (diff) | |
download | gcc-79488388644d9f3096c283f17a1ffc85f5e319ae.zip gcc-79488388644d9f3096c283f17a1ffc85f5e319ae.tar.gz gcc-79488388644d9f3096c283f17a1ffc85f5e319ae.tar.bz2 |
regex_scanner.tcc: (_Scanner<>::_M_scan_normal...
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.
From-SVN: r203827
-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 5ae46af..b37fdb6 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 21d1e91..f6cef6a 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 0000000..15929dd --- /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; +} |