From bcbc37d8a12b87926e8974cdff25ea24e028f142 Mon Sep 17 00:00:00 2001 From: Marshall Clow Date: Tue, 28 Jul 2015 13:30:47 +0000 Subject: [PATCH] Consolidate a bunch of #ifdef _LIBCPP_NO_EXCEPTIONS .. #endif blocks into a single template function. NFC llvm-svn: 243415 --- libcxx/include/regex | 229 ++++++++++++++------------------------------------- 1 file changed, 64 insertions(+), 165 deletions(-) diff --git a/libcxx/include/regex b/libcxx/include/regex index 698278c6..6aecd91 100644 --- a/libcxx/include/regex +++ b/libcxx/include/regex @@ -955,6 +955,15 @@ public: regex_constants::error_type code() const {return __code_;} }; +template +_LIBCPP_ALWAYS_INLINE +void __throw_regex_error() +{ +#ifndef _LIBCPP_NO_EXCEPTIONS + throw regex_error(_Ev); +#endif +} + template struct _LIBCPP_TYPE_VIS_ONLY regex_traits { @@ -2256,10 +2265,8 @@ public: } else { -#ifndef _LIBCPP_NO_EXCEPTIONS if (__b.size() != 1 || __e.size() != 1) - throw regex_error(regex_constants::error_collate); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); if (__icase_) { __b[0] = __traits_.translate_nocase(__b[0]); @@ -3012,10 +3019,8 @@ basic_regex<_CharT, _Traits>::__parse(_ForwardIterator __first, case egrep: __first = __parse_egrep(__first, __last); break; -#ifndef _LIBCPP_NO_EXCEPTIONS default: - throw regex_error(regex_constants::__re_err_grammar); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); } return __first; } @@ -3046,10 +3051,8 @@ basic_regex<_CharT, _Traits>::__parse_basic_reg_exp(_ForwardIterator __first, } } } -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first != __last) - throw regex_error(regex_constants::__re_err_empty); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); } return __first; } @@ -3062,19 +3065,15 @@ basic_regex<_CharT, _Traits>::__parse_extended_reg_exp(_ForwardIterator __first, { __owns_one_state<_CharT>* __sa = __end_; _ForwardIterator __temp = __parse_ERE_branch(__first, __last); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __first) - throw regex_error(regex_constants::__re_err_empty); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __first = __temp; while (__first != __last && *__first == '|') { __owns_one_state<_CharT>* __sb = __end_; __temp = __parse_ERE_branch(++__first, __last); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __first) - throw regex_error(regex_constants::__re_err_empty); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __push_alternation(__sa, __sb); __first = __temp; } @@ -3088,10 +3087,8 @@ basic_regex<_CharT, _Traits>::__parse_ERE_branch(_ForwardIterator __first, _ForwardIterator __last) { _ForwardIterator __temp = __parse_ERE_expression(__first, __last); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __first) - throw regex_error(regex_constants::__re_err_empty); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); do { __first = __temp; @@ -3126,10 +3123,8 @@ basic_regex<_CharT, _Traits>::__parse_ERE_expression(_ForwardIterator __first, unsigned __temp_count = __marked_count_; ++__open_count_; __temp = __parse_extended_reg_exp(++__temp, __last); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __last || *__temp != ')') - throw regex_error(regex_constants::error_paren); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __push_end_marked_subexpression(__temp_count); --__open_count_; ++__temp; @@ -3194,10 +3189,8 @@ basic_regex<_CharT, _Traits>::__parse_nondupl_RE(_ForwardIterator __first, unsigned __temp_count = __marked_count_; __first = __parse_RE_expression(__temp, __last); __temp = __parse_Back_close_paren(__first, __last); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __first) - throw regex_error(regex_constants::error_paren); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __push_end_marked_subexpression(__temp_count); __first = __temp; } @@ -3511,22 +3504,16 @@ basic_regex<_CharT, _Traits>::__parse_RE_dupl_symbol(_ForwardIterator __first, int __min = 0; __first = __temp; __temp = __parse_DUP_COUNT(__first, __last, __min); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __first) - throw regex_error(regex_constants::error_badbrace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __first = __temp; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_brace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); if (*__first != ',') { __temp = __parse_Back_close_brace(__first, __last); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __first) - throw regex_error(regex_constants::error_brace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __push_loop(__min, __min, __s, __mexp_begin, __mexp_end, true); __first = __temp; @@ -3537,18 +3524,14 @@ basic_regex<_CharT, _Traits>::__parse_RE_dupl_symbol(_ForwardIterator __first, int __max = -1; __first = __parse_DUP_COUNT(__first, __last, __max); __temp = __parse_Back_close_brace(__first, __last); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __first) - throw regex_error(regex_constants::error_brace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); if (__max == -1) __push_greedy_inf_repeat(__min, __s, __mexp_begin, __mexp_end); else { -#ifndef _LIBCPP_NO_EXCEPTIONS if (__max < __min) - throw regex_error(regex_constants::error_badbrace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __push_loop(__min, __max, __s, __mexp_begin, __mexp_end, true); } @@ -3608,15 +3591,11 @@ basic_regex<_CharT, _Traits>::__parse_ERE_dupl_symbol(_ForwardIterator __first, { int __min; _ForwardIterator __temp = __parse_DUP_COUNT(++__first, __last, __min); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __first) - throw regex_error(regex_constants::error_badbrace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __first = __temp; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_brace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); switch (*__first) { case '}': @@ -3631,10 +3610,8 @@ basic_regex<_CharT, _Traits>::__parse_ERE_dupl_symbol(_ForwardIterator __first, break; case ',': ++__first; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_badbrace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); if (*__first == '}') { ++__first; @@ -3650,20 +3627,14 @@ basic_regex<_CharT, _Traits>::__parse_ERE_dupl_symbol(_ForwardIterator __first, { int __max = -1; __temp = __parse_DUP_COUNT(__first, __last, __max); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __first) - throw regex_error(regex_constants::error_brace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __first = __temp; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last || *__first != '}') - throw regex_error(regex_constants::error_brace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); ++__first; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__max < __min) - throw regex_error(regex_constants::error_badbrace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); if (__grammar == ECMAScript && __first != __last && *__first == '?') { ++__first; @@ -3673,10 +3644,8 @@ basic_regex<_CharT, _Traits>::__parse_ERE_dupl_symbol(_ForwardIterator __first, __push_loop(__min, __max, __s, __mexp_begin, __mexp_end); } break; -#ifndef _LIBCPP_NO_EXCEPTIONS default: - throw regex_error(regex_constants::error_badbrace); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); } } break; @@ -3694,10 +3663,8 @@ basic_regex<_CharT, _Traits>::__parse_bracket_expression(_ForwardIterator __firs if (__first != __last && *__first == '[') { ++__first; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_brack); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); bool __negate = false; if (*__first == '^') { @@ -3706,29 +3673,23 @@ basic_regex<_CharT, _Traits>::__parse_bracket_expression(_ForwardIterator __firs } __bracket_expression<_CharT, _Traits>* __ml = __start_matching_list(__negate); // __ml owned by *this -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_brack); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); if ((__flags_ & 0x1F0) != ECMAScript && *__first == ']') { __ml->__add_char(']'); ++__first; } __first = __parse_follow_list(__first, __last, __ml); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_brack); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); if (*__first == '-') { __ml->__add_char('-'); ++__first; } -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last || *__first != ']') - throw regex_error(regex_constants::error_brack); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); ++__first; } return __first; @@ -3848,10 +3809,8 @@ basic_regex<_CharT, _Traits>::__parse_class_escape(_ForwardIterator __first, basic_string<_CharT>& __str, __bracket_expression<_CharT, _Traits>* __ml) { -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); switch (*__first) { case 0: @@ -3892,10 +3851,8 @@ basic_regex<_CharT, _Traits>::__parse_awk_escape(_ForwardIterator __first, _ForwardIterator __last, basic_string<_CharT>* __str) { -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); switch (*__first) { case '\\': @@ -3963,10 +3920,8 @@ basic_regex<_CharT, _Traits>::__parse_awk_escape(_ForwardIterator __first, else __push_char(_CharT(__val)); } -#ifndef _LIBCPP_NO_EXCEPTIONS else - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); return __first; } @@ -3982,18 +3937,14 @@ basic_regex<_CharT, _Traits>::__parse_equivalence_class(_ForwardIterator __first value_type _Equal_close[2] = {'=', ']'}; _ForwardIterator __temp = _VSTD::search(__first, __last, _Equal_close, _Equal_close+2); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __last) - throw regex_error(regex_constants::error_brack); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); // [__first, __temp) contains all text in [= ... =] typedef typename _Traits::string_type string_type; string_type __collate_name = __traits_.lookup_collatename(__first, __temp); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__collate_name.empty()) - throw regex_error(regex_constants::error_collate); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); string_type __equiv_name = __traits_.transform_primary(__collate_name.begin(), __collate_name.end()); @@ -4009,10 +3960,8 @@ basic_regex<_CharT, _Traits>::__parse_equivalence_class(_ForwardIterator __first case 2: __ml->__add_digraph(__collate_name[0], __collate_name[1]); break; -#ifndef _LIBCPP_NO_EXCEPTIONS default: - throw regex_error(regex_constants::error_collate); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); } } __first = _VSTD::next(__temp, 2); @@ -4031,18 +3980,14 @@ basic_regex<_CharT, _Traits>::__parse_character_class(_ForwardIterator __first, value_type _Colon_close[2] = {':', ']'}; _ForwardIterator __temp = _VSTD::search(__first, __last, _Colon_close, _Colon_close+2); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __last) - throw regex_error(regex_constants::error_brack); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); // [__first, __temp) contains all text in [: ... :] typedef typename _Traits::char_class_type char_class_type; char_class_type __class_type = __traits_.lookup_classname(__first, __temp, __flags_ & icase); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__class_type == 0) - throw regex_error(regex_constants::error_brack); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __ml->__add_class(__class_type); __first = _VSTD::next(__temp, 2); return __first; @@ -4060,10 +4005,8 @@ basic_regex<_CharT, _Traits>::__parse_collating_symbol(_ForwardIterator __first, value_type _Dot_close[2] = {'.', ']'}; _ForwardIterator __temp = _VSTD::search(__first, __last, _Dot_close, _Dot_close+2); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __last) - throw regex_error(regex_constants::error_brack); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); // [__first, __temp) contains all text in [. ... .] __col_sym = __traits_.lookup_collatename(__first, __temp); switch (__col_sym.size()) @@ -4071,10 +4014,8 @@ basic_regex<_CharT, _Traits>::__parse_collating_symbol(_ForwardIterator __first, case 1: case 2: break; -#ifndef _LIBCPP_NO_EXCEPTIONS default: - throw regex_error(regex_constants::error_collate); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); } __first = _VSTD::next(__temp, 2); return __first; @@ -4218,10 +4159,8 @@ basic_regex<_CharT, _Traits>::__parse_assertion(_ForwardIterator __first, unsigned __mexp = __exp.__marked_count_; __push_lookahead(_VSTD::move(__exp), false, __marked_count_); __marked_count_ += __mexp; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __last || *__temp != ')') - throw regex_error(regex_constants::error_paren); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __first = ++__temp; } break; @@ -4233,10 +4172,8 @@ basic_regex<_CharT, _Traits>::__parse_assertion(_ForwardIterator __first, unsigned __mexp = __exp.__marked_count_; __push_lookahead(_VSTD::move(__exp), true, __marked_count_); __marked_count_ += __mexp; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__temp == __last || *__temp != ')') - throw regex_error(regex_constants::error_paren); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __first = ++__temp; } break; @@ -4273,19 +4210,15 @@ basic_regex<_CharT, _Traits>::__parse_atom(_ForwardIterator __first, case '(': { ++__first; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_paren); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); _ForwardIterator __temp = _VSTD::next(__first); if (__temp != __last && *__first == '?' && *__temp == ':') { ++__open_count_; __first = __parse_ecma_exp(++__temp, __last); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last || *__first != ')') - throw regex_error(regex_constants::error_paren); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); --__open_count_; ++__first; } @@ -4295,10 +4228,8 @@ basic_regex<_CharT, _Traits>::__parse_atom(_ForwardIterator __first, unsigned __temp_count = __marked_count_; ++__open_count_; __first = __parse_ecma_exp(__first, __last); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last || *__first != ')') - throw regex_error(regex_constants::error_paren); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __push_end_marked_subexpression(__temp_count); --__open_count_; ++__first; @@ -4309,9 +4240,7 @@ basic_regex<_CharT, _Traits>::__parse_atom(_ForwardIterator __first, case '+': case '?': case '{': -#ifndef _LIBCPP_NO_EXCEPTIONS - throw regex_error(regex_constants::error_badrepeat); -#endif + __throw_regex_error(); break; default: __first = __parse_pattern_character(__first, __last); @@ -4367,10 +4296,8 @@ basic_regex<_CharT, _Traits>::__parse_decimal_escape(_ForwardIterator __first, unsigned __v = *__first - '0'; for (++__first; '0' <= *__first && *__first <= '9'; ++__first) __v = 10 * __v + *__first - '0'; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__v > mark_count()) - throw regex_error(regex_constants::error_backref); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __push_back_ref(__v); } } @@ -4486,62 +4413,42 @@ basic_regex<_CharT, _Traits>::__parse_character_escape(_ForwardIterator __first, __push_char(_CharT(*__t % 32)); __first = ++__t; } -#ifndef _LIBCPP_NO_EXCEPTIONS else - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); } -#ifndef _LIBCPP_NO_EXCEPTIONS else - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); break; case 'u': ++__first; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __hd = __traits_.value(*__first, 16); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__hd == -1) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __sum = 16 * __sum + static_cast(__hd); ++__first; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __hd = __traits_.value(*__first, 16); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__hd == -1) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __sum = 16 * __sum + static_cast(__hd); // drop through case 'x': ++__first; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __hd = __traits_.value(*__first, 16); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__hd == -1) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __sum = 16 * __sum + static_cast(__hd); ++__first; -#ifndef _LIBCPP_NO_EXCEPTIONS if (__first == __last) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __hd = __traits_.value(*__first, 16); -#ifndef _LIBCPP_NO_EXCEPTIONS if (__hd == -1) - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); __sum = 16 * __sum + static_cast(__hd); if (__str) *__str = _CharT(__sum); @@ -4565,10 +4472,8 @@ basic_regex<_CharT, _Traits>::__parse_character_escape(_ForwardIterator __first, __push_char(*__first); ++__first; } -#ifndef _LIBCPP_NO_EXCEPTIONS else - throw regex_error(regex_constants::error_escape); -#endif // _LIBCPP_NO_EXCEPTIONS + __throw_regex_error(); break; } } @@ -5655,9 +5560,7 @@ basic_regex<_CharT, _Traits>::__match_at_start_ecma( __states.pop_back(); break; default: -#ifndef _LIBCPP_NO_EXCEPTIONS - throw regex_error(regex_constants::__re_err_unknown); -#endif + __throw_regex_error(); break; } @@ -5727,9 +5630,7 @@ basic_regex<_CharT, _Traits>::__match_at_start_posix_nosubs( __states.pop_back(); break; default: -#ifndef _LIBCPP_NO_EXCEPTIONS - throw regex_error(regex_constants::__re_err_unknown); -#endif + __throw_regex_error(); break; } } while (!__states.empty()); @@ -5815,9 +5716,7 @@ basic_regex<_CharT, _Traits>::__match_at_start_posix_subs( __states.pop_back(); break; default: -#ifndef _LIBCPP_NO_EXCEPTIONS - throw regex_error(regex_constants::__re_err_unknown); -#endif + __throw_regex_error(); break; } } while (!__states.empty()); -- 2.7.4