aboutsummaryrefslogtreecommitdiff
path: root/include/regex
diff options
context:
space:
mode:
Diffstat (limited to 'include/regex')
-rw-r--r--include/regex24
1 files changed, 13 insertions, 11 deletions
diff --git a/include/regex b/include/regex
index 84aacc029edc..bd83d7c10ca7 100644
--- a/include/regex
+++ b/include/regex
@@ -769,6 +769,7 @@ typedef regex_token_iterator<wstring::const_iterator> wsregex_token_iterator;
#include <memory>
#include <vector>
#include <deque>
+#include <version>
#if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
#pragma GCC system_header
@@ -989,6 +990,10 @@ public:
#if defined(__mips__) && defined(__GLIBC__)
static const char_class_type __regex_word = static_cast<char_class_type>(_ISbit(15));
+#elif defined(__NetBSD__)
+ // NetBSD defines classes up to 0x2000
+ // see sys/ctype_bits.h, _CTYPE_Q
+ static const char_class_type __regex_word = 0x8000;
#else
static const char_class_type __regex_word = 0x80;
#endif
@@ -1351,9 +1356,9 @@ public:
virtual ~__node() {}
_LIBCPP_INLINE_VISIBILITY
- virtual void __exec(__state&) const {};
+ virtual void __exec(__state&) const {}
_LIBCPP_INLINE_VISIBILITY
- virtual void __exec_split(bool, __state&) const {};
+ virtual void __exec_split(bool, __state&) const {}
};
// __end_state
@@ -2414,20 +2419,17 @@ __bracket_expression<_CharT, _Traits>::__exec(__state& __s) const
goto __exit;
}
}
- // set of "__found" chars =
+ // When there's at least one of __neg_chars_ and __neg_mask_, the set
+ // of "__found" chars is
// union(complement(union(__neg_chars_, __neg_mask_)),
// other cases...)
//
- // __neg_chars_ and __neg_mask_'d better be handled together, as there
- // are no short circuit opportunities.
- //
- // In addition, when __neg_mask_/__neg_chars_ is empty, they should be
- // treated as all ones/all chars.
+ // It doesn't make sense to check this when there are no __neg_chars_
+ // and no __neg_mask_.
+ if (!(__neg_mask_ == 0 && __neg_chars_.empty()))
{
- const bool __in_neg_mask = (__neg_mask_ == 0) ||
- __traits_.isctype(__ch, __neg_mask_);
+ const bool __in_neg_mask = __traits_.isctype(__ch, __neg_mask_);
const bool __in_neg_chars =
- __neg_chars_.empty() ||
std::find(__neg_chars_.begin(), __neg_chars_.end(), __ch) !=
__neg_chars_.end();
if (!(__in_neg_mask || __in_neg_chars))