diff options
| author | Luca Bacci <luca.bacci982@gmail.com> | 2024-12-17 18:57:30 +0000 |
|---|---|---|
| committer | Jonathan Wakely <redi@gcc.gnu.org> | 2024-12-18 08:26:05 +0000 |
| commit | eb339c29ee42aa59591fc50d6d8a1ab903d2a3fe (patch) | |
| tree | aef39b8d8271946f51e87051c07f92ac81405b42 | |
| parent | b34fbab529e64dbeb6db70263e35373c200f899a (diff) | |
| download | gcc-eb339c29ee42aa59591fc50d6d8a1ab903d2a3fe.zip gcc-eb339c29ee42aa59591fc50d6d8a1ab903d2a3fe.tar.gz gcc-eb339c29ee42aa59591fc50d6d8a1ab903d2a3fe.tar.bz2 | |
libstdc++: Call regex_traits::transform_primary() only when necessary [PR98723]
This is both a performance optimization and a partial fix for PR 98723.
This commit fixes the issue for bracket expressions that do not depend
on the locale's collation facet. Examples:
* Character ranges ([a-z]) when std::regex::collate is not set
* Character classes ([:alnum:])
* Individual characters ([abc])
Signed-off-by: Luca Bacci <luca.bacci982@gmail.com>
libstdc++-v3/ChangeLog:
PR libstdc++/98723
* include/bits/regex_compiler.tcc (_BracketMatcher::_M_apply):
Only use transform_primary when an equivalence set is used.
| -rw-r--r-- | libstdc++-v3/include/bits/regex_compiler.tcc | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/libstdc++-v3/include/bits/regex_compiler.tcc b/libstdc++-v3/include/bits/regex_compiler.tcc index 9c5a46a..5037195 100644 --- a/libstdc++-v3/include/bits/regex_compiler.tcc +++ b/libstdc++-v3/include/bits/regex_compiler.tcc @@ -611,10 +611,13 @@ namespace __detail return true; if (_M_traits.isctype(__ch, _M_class_set)) return true; - if (std::find(_M_equiv_set.begin(), _M_equiv_set.end(), - _M_traits.transform_primary(&__ch, &__ch+1)) - != _M_equiv_set.end()) - return true; + if (!_M_equiv_set.empty()) + { + auto __x = _M_traits.transform_primary(&__ch, &__ch+1); + auto __p = std::find(_M_equiv_set.begin(), _M_equiv_set.end(), __x); + if (__p != _M_equiv_set.end()) + return true; + } for (auto& __it : _M_neg_class_set) if (!_M_traits.isctype(__ch, __it)) return true; |
