mirror of
https://github.com/capstone-engine/llvm-capstone.git
synced 2024-12-14 03:29:57 +00:00
[libcxx] Support std::regex_constants::match_not_null
Summary: Fixes PR21597. Reviewers: mclow.lists, EricWF Subscribers: cfe-commits Differential Revision: https://reviews.llvm.org/D25595 llvm-svn: 284881
This commit is contained in:
parent
62c730c9bd
commit
abd1a6e687
@ -5555,6 +5555,12 @@ basic_regex<_CharT, _Traits>::__match_at_start_ecma(
|
||||
switch (__s.__do_)
|
||||
{
|
||||
case __state::__end_state:
|
||||
if (__flags & regex_constants::match_not_null &&
|
||||
__s.__current_ == __first)
|
||||
{
|
||||
__states.pop_back();
|
||||
break;
|
||||
}
|
||||
__m.__matches_[0].first = __first;
|
||||
__m.__matches_[0].second = _VSTD::next(__first, __s.__current_ - __first);
|
||||
__m.__matches_[0].matched = true;
|
||||
@ -5618,6 +5624,12 @@ basic_regex<_CharT, _Traits>::__match_at_start_posix_nosubs(
|
||||
switch (__s.__do_)
|
||||
{
|
||||
case __state::__end_state:
|
||||
if (__flags & regex_constants::match_not_null &&
|
||||
__s.__current_ == __first)
|
||||
{
|
||||
__states.pop_back();
|
||||
break;
|
||||
}
|
||||
if (!__matched || __highest_j < __s.__current_ - __s.__first_)
|
||||
__highest_j = __s.__current_ - __s.__first_;
|
||||
__matched = true;
|
||||
@ -5703,6 +5715,12 @@ basic_regex<_CharT, _Traits>::__match_at_start_posix_subs(
|
||||
switch (__s.__do_)
|
||||
{
|
||||
case __state::__end_state:
|
||||
if (__flags & regex_constants::match_not_null &&
|
||||
__s.__current_ == __first)
|
||||
{
|
||||
__states.pop_back();
|
||||
break;
|
||||
}
|
||||
if (!__matched || __highest_j < __s.__current_ - __s.__first_)
|
||||
{
|
||||
__highest_j = __s.__current_ - __s.__first_;
|
||||
|
@ -0,0 +1,46 @@
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is dual licensed under the MIT and the University of Illinois Open
|
||||
// Source Licenses. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// <regex>
|
||||
|
||||
// match_not_null:
|
||||
// The regular expression shall not match an empty sequence.
|
||||
|
||||
#include "test_macros.h"
|
||||
#include <cassert>
|
||||
#include <regex>
|
||||
|
||||
int main()
|
||||
{
|
||||
// When match_not_null is on, the regex engine should reject empty matches and
|
||||
// move on to try other solutions.
|
||||
std::cmatch m;
|
||||
assert(!std::regex_search("a", m, std::regex("b*"),
|
||||
std::regex_constants::match_not_null));
|
||||
assert(std::regex_search("aa", m, std::regex("a*?"),
|
||||
std::regex_constants::match_not_null));
|
||||
assert(m[0].length() == 1);
|
||||
assert(!std::regex_search("a", m, std::regex("b*", std::regex::extended),
|
||||
std::regex_constants::match_not_null));
|
||||
assert(!std::regex_search(
|
||||
"a", m,
|
||||
std::regex("b*", std::regex::extended | std::regex_constants::nosubs),
|
||||
std::regex_constants::match_not_null));
|
||||
|
||||
assert(!std::regex_match("", m, std::regex("a*"),
|
||||
std::regex_constants::match_not_null));
|
||||
assert(!std::regex_match("", m, std::regex("a*", std::regex::extended),
|
||||
std::regex_constants::match_not_null));
|
||||
assert(!std::regex_match(
|
||||
"", m,
|
||||
std::regex("a*", std::regex::extended | std::regex_constants::nosubs),
|
||||
std::regex_constants::match_not_null));
|
||||
|
||||
return 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user