+2013-09-26 Tim Shen <timshen91@gmail.com>
+
+ * regex_error.h: Remove _S_error_last to follow the standard.
+ * regex_scanner.tcc:
+ (_Scanner<_FwdIter>::_M_scan_in_brace): Change error_brace to
+ error_badbrace.
+ (_Scanner<>::_M_eat_escape_posix): Extended doesn't support
+ back-reference.
+ * testsuite/28_regex/algorithms/regex_match/ecma/char/53622.cc:
+ Move here from ../../extended.
+ * testsuite/28_regex/algorithms/regex_match/ecma/char/57173.cc:
+ Likewise.
+
2013-09-25 Marc Glisse <marc.glisse@inria.fr>
PR libstdc++/58338
_S_error_badrepeat,
_S_error_complexity,
_S_error_stack,
- _S_error_last
};
/** The expression contained an invalid collating element name. */
++_M_current;
}
else
- __throw_regex_error(regex_constants::error_brace);
+ __throw_regex_error(regex_constants::error_badbrace);
}
else if (__c == '}')
{
_M_token = _S_token_interval_end;
}
else
- __throw_regex_error(regex_constants::error_brace);
+ __throw_regex_error(regex_constants::error_badbrace);
}
template<typename _FwdIter>
}
}
+ // Differences between styles:
+ // 1) Extended doesn't support backref, but basic does.
template<typename _FwdIter>
void
_Scanner<_FwdIter>::
_M_eat_escape_awk();
return;
}
- else if (_M_ctype.is(_CtypeT::digit, __c) && __c != '0')
+ else if (_M_is_basic() && _M_ctype.is(_CtypeT::digit, __c) && __c != '0')
{
_M_token = _S_token_backref;
_M_value.assign(1, __c);
--- /dev/null
+// { dg-options "-std=gnu++11" }
+
+//
+// 2013-07-23 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
+
+#include <regex>
+#include <testsuite_hooks.h>
+
+// libstdc++/53622
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ {
+ std::regex re("zxcv/(one.*)abc", std::regex::ECMAScript);
+ std::string target("zxcv/onetwoabc");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+ VERIFY( m.size() == 2 );
+ VERIFY( m[0].matched == true );
+ VERIFY( std::string(m[0].first, m[0].second) == "zxcv/onetwoabc" );
+ VERIFY( m[1].matched == true );
+ VERIFY( std::string(m[1].first, m[1].second) == "onetwo" );
+ }
+
+ {
+ std::regex re("zxcv/(one.*)abc()\\2", std::regex::ECMAScript);
+ std::string target("zxcv/onetwoabc");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+ VERIFY( m.size() == 3 );
+ VERIFY( m[0].matched == true );
+ VERIFY( std::string(m[0].first, m[0].second) == "zxcv/onetwoabc" );
+ VERIFY( m[1].matched == true );
+ VERIFY( std::string(m[1].first, m[1].second) == "onetwo" );
+ }
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
--- /dev/null
+// { dg-options "-std=gnu++11" }
+
+//
+// 2013-07-23 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
+
+#include <regex>
+#include <testsuite_hooks.h>
+#include <iostream>
+
+// libstdc++/57173
+void
+test01()
+{
+ bool test __attribute__((unused)) = true;
+
+ {
+ std::regex re("/asdf(/.*)", std::regex::ECMAScript);
+ std::string target("/asdf/qwerty");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+ VERIFY( m.size() == 2 );
+ VERIFY( std::string(m[1].first, m[1].second) == "/qwerty");
+ }
+ {
+ std::regex re("/asdf(/.*)()\\2", std::regex::ECMAScript);
+ std::string target("/asdf/qwerty");
+ std::smatch m;
+
+ VERIFY( std::regex_match(target, m, re) );
+ VERIFY( m.size() == 3 );
+ VERIFY( std::string(m[1].first, m[1].second) == "/qwerty");
+ }
+}
+
+int
+main()
+{
+ test01();
+ return 0;
+}
+++ /dev/null
-// { dg-options "-std=gnu++11" }
-
-//
-// 2013-07-23 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 Extended grouping against a std::string target.
-
-#include <regex>
-#include <testsuite_hooks.h>
-
-// libstdc++/53622
-void
-test01()
-{
- bool test __attribute__((unused)) = true;
-
- {
- std::regex re("zxcv/(one.*)abc", std::regex::extended);
- std::string target("zxcv/onetwoabc");
- std::smatch m;
-
- VERIFY( std::regex_match(target, m, re) );
- VERIFY( m.size() == 2 );
- VERIFY( m[0].matched == true );
- VERIFY( std::string(m[0].first, m[0].second) == "zxcv/onetwoabc" );
- VERIFY( m[1].matched == true );
- VERIFY( std::string(m[1].first, m[1].second) == "onetwo" );
- }
-
- {
- std::regex re("zxcv/(one.*)abc()\\2", std::regex::extended);
- std::string target("zxcv/onetwoabc");
- std::smatch m;
-
- VERIFY( std::regex_match(target, m, re) );
- VERIFY( m.size() == 3 );
- VERIFY( m[0].matched == true );
- VERIFY( std::string(m[0].first, m[0].second) == "zxcv/onetwoabc" );
- VERIFY( m[1].matched == true );
- VERIFY( std::string(m[1].first, m[1].second) == "onetwo" );
- }
-}
-
-int
-main()
-{
- test01();
- return 0;
-}
+++ /dev/null
-// { dg-options "-std=gnu++11" }
-
-//
-// 2013-07-23 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.3 regex_search
-// Tests Extended against a std::string target.
-
-#include <regex>
-#include <testsuite_hooks.h>
-#include <iostream>
-
-// libstdc++/57173
-void
-test01()
-{
- bool test __attribute__((unused)) = true;
-
- {
- std::regex re("/asdf(/.*)", std::regex::extended);
- std::string target("/asdf/qwerty");
- std::smatch m;
-
- VERIFY( std::regex_match(target, m, re) );
- VERIFY( m.size() == 2 );
- VERIFY( std::string(m[1].first, m[1].second) == "/qwerty");
- }
- {
- std::regex re("/asdf(/.*)()\\2", std::regex::extended);
- std::string target("/asdf/qwerty");
- std::smatch m;
-
- VERIFY( std::regex_match(target, m, re) );
- VERIFY( m.size() == 3 );
- VERIFY( std::string(m[1].first, m[1].second) == "/qwerty");
- }
-}
-
-int
-main()
-{
- test01();
- return 0;
-}