1349cc55cSDimitry Andric //===----------------------------------------------------------------------===// 20b57cec5SDimitry Andric // 30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 60b57cec5SDimitry Andric // 70b57cec5SDimitry Andric //===----------------------------------------------------------------------===// 80b57cec5SDimitry Andric 981ad6265SDimitry Andric #include <algorithm> 1081ad6265SDimitry Andric #include <iterator> 1181ad6265SDimitry Andric #include <regex> 120b57cec5SDimitry Andric 130b57cec5SDimitry Andric _LIBCPP_BEGIN_NAMESPACE_STD 140b57cec5SDimitry Andric 15*cb14a3feSDimitry Andric static const char* make_error_type_string(regex_constants::error_type ecode) { 16*cb14a3feSDimitry Andric switch (ecode) { 170b57cec5SDimitry Andric case regex_constants::error_collate: 180b57cec5SDimitry Andric return "The expression contained an invalid collating element name."; 190b57cec5SDimitry Andric case regex_constants::error_ctype: 200b57cec5SDimitry Andric return "The expression contained an invalid character class name."; 210b57cec5SDimitry Andric case regex_constants::error_escape: 220b57cec5SDimitry Andric return "The expression contained an invalid escaped character, or a " 230b57cec5SDimitry Andric "trailing escape."; 240b57cec5SDimitry Andric case regex_constants::error_backref: 250b57cec5SDimitry Andric return "The expression contained an invalid back reference."; 260b57cec5SDimitry Andric case regex_constants::error_brack: 270b57cec5SDimitry Andric return "The expression contained mismatched [ and ]."; 280b57cec5SDimitry Andric case regex_constants::error_paren: 290b57cec5SDimitry Andric return "The expression contained mismatched ( and )."; 300b57cec5SDimitry Andric case regex_constants::error_brace: 310b57cec5SDimitry Andric return "The expression contained mismatched { and }."; 320b57cec5SDimitry Andric case regex_constants::error_badbrace: 330b57cec5SDimitry Andric return "The expression contained an invalid range in a {} expression."; 340b57cec5SDimitry Andric case regex_constants::error_range: 350b57cec5SDimitry Andric return "The expression contained an invalid character range, " 360b57cec5SDimitry Andric "such as [b-a] in most encodings."; 370b57cec5SDimitry Andric case regex_constants::error_space: 380b57cec5SDimitry Andric return "There was insufficient memory to convert the expression into " 390b57cec5SDimitry Andric "a finite state machine."; 400b57cec5SDimitry Andric case regex_constants::error_badrepeat: 410b57cec5SDimitry Andric return "One of *?+{ was not preceded by a valid regular expression."; 420b57cec5SDimitry Andric case regex_constants::error_complexity: 430b57cec5SDimitry Andric return "The complexity of an attempted match against a regular " 440b57cec5SDimitry Andric "expression exceeded a pre-set level."; 450b57cec5SDimitry Andric case regex_constants::error_stack: 460b57cec5SDimitry Andric return "There was insufficient memory to determine whether the regular " 470b57cec5SDimitry Andric "expression could match the specified character sequence."; 480b57cec5SDimitry Andric case regex_constants::__re_err_grammar: 490b57cec5SDimitry Andric return "An invalid regex grammar has been requested."; 500b57cec5SDimitry Andric case regex_constants::__re_err_empty: 510b57cec5SDimitry Andric return "An empty regex is not allowed in the POSIX grammar."; 52480093f4SDimitry Andric case regex_constants::__re_err_parse: 53480093f4SDimitry Andric return "The parser did not consume the entire regular expression."; 540b57cec5SDimitry Andric default: 550b57cec5SDimitry Andric break; 560b57cec5SDimitry Andric } 570b57cec5SDimitry Andric return "Unknown error type"; 580b57cec5SDimitry Andric } 590b57cec5SDimitry Andric 600b57cec5SDimitry Andric regex_error::regex_error(regex_constants::error_type ecode) 61*cb14a3feSDimitry Andric : runtime_error(make_error_type_string(ecode)), __code_(ecode) {} 620b57cec5SDimitry Andric 630b57cec5SDimitry Andric regex_error::~regex_error() throw() {} 640b57cec5SDimitry Andric 650b57cec5SDimitry Andric namespace { 660b57cec5SDimitry Andric 67*cb14a3feSDimitry Andric struct collationnames { 680b57cec5SDimitry Andric const char* elem_; 690b57cec5SDimitry Andric char char_; 700b57cec5SDimitry Andric }; 710b57cec5SDimitry Andric 7204eeddc0SDimitry Andric #if defined(__MVS__) && !defined(__NATIVE_ASCII_F) 7304eeddc0SDimitry Andric // EBCDIC IBM-1047 7404eeddc0SDimitry Andric // Sorted via the EBCDIC collating sequence 75*cb14a3feSDimitry Andric const collationnames collatenames[] = { 7604eeddc0SDimitry Andric {"a", 0x81}, 7704eeddc0SDimitry Andric {"alert", 0x2f}, 7804eeddc0SDimitry Andric {"ampersand", 0x50}, 7904eeddc0SDimitry Andric {"apostrophe", 0x7d}, 8004eeddc0SDimitry Andric {"asterisk", 0x5c}, 8104eeddc0SDimitry Andric {"b", 0x82}, 8204eeddc0SDimitry Andric {"backslash", 0xe0}, 8304eeddc0SDimitry Andric {"backspace", 0x16}, 8404eeddc0SDimitry Andric {"c", 0x83}, 8504eeddc0SDimitry Andric {"carriage-return", 0xd}, 8604eeddc0SDimitry Andric {"circumflex", 0x5f}, 8704eeddc0SDimitry Andric {"circumflex-accent", 0x5f}, 8804eeddc0SDimitry Andric {"colon", 0x7a}, 8904eeddc0SDimitry Andric {"comma", 0x6b}, 9004eeddc0SDimitry Andric {"commercial-at", 0x7c}, 9104eeddc0SDimitry Andric {"d", 0x84}, 9204eeddc0SDimitry Andric {"dollar-sign", 0x5b}, 9304eeddc0SDimitry Andric {"e", 0x85}, 9404eeddc0SDimitry Andric {"eight", 0xf8}, 9504eeddc0SDimitry Andric {"equals-sign", 0x7e}, 9604eeddc0SDimitry Andric {"exclamation-mark", 0x5a}, 9704eeddc0SDimitry Andric {"f", 0x86}, 9804eeddc0SDimitry Andric {"five", 0xf5}, 9904eeddc0SDimitry Andric {"form-feed", 0xc}, 10004eeddc0SDimitry Andric {"four", 0xf4}, 10104eeddc0SDimitry Andric {"full-stop", 0x4b}, 10204eeddc0SDimitry Andric {"g", 0x87}, 10304eeddc0SDimitry Andric {"grave-accent", 0x79}, 10404eeddc0SDimitry Andric {"greater-than-sign", 0x6e}, 10504eeddc0SDimitry Andric {"h", 0x88}, 10604eeddc0SDimitry Andric {"hyphen", 0x60}, 10704eeddc0SDimitry Andric {"hyphen-minus", 0x60}, 10804eeddc0SDimitry Andric {"i", 0x89}, 10904eeddc0SDimitry Andric {"j", 0x91}, 11004eeddc0SDimitry Andric {"k", 0x92}, 11104eeddc0SDimitry Andric {"l", 0x93}, 11204eeddc0SDimitry Andric {"left-brace", 0xc0}, 11304eeddc0SDimitry Andric {"left-curly-bracket", 0xc0}, 11404eeddc0SDimitry Andric {"left-parenthesis", 0x4d}, 11504eeddc0SDimitry Andric {"left-square-bracket", 0xad}, 11604eeddc0SDimitry Andric {"less-than-sign", 0x4c}, 11704eeddc0SDimitry Andric {"low-line", 0x6d}, 11804eeddc0SDimitry Andric {"m", 0x94}, 11904eeddc0SDimitry Andric {"n", 0x95}, 12004eeddc0SDimitry Andric {"newline", 0x15}, 12104eeddc0SDimitry Andric {"nine", 0xf9}, 12204eeddc0SDimitry Andric {"number-sign", 0x7b}, 12304eeddc0SDimitry Andric {"o", 0x96}, 12404eeddc0SDimitry Andric {"one", 0xf1}, 12504eeddc0SDimitry Andric {"p", 0x97}, 12604eeddc0SDimitry Andric {"percent-sign", 0x6c}, 12704eeddc0SDimitry Andric {"period", 0x4b}, 12804eeddc0SDimitry Andric {"plus-sign", 0x4e}, 12904eeddc0SDimitry Andric {"q", 0x98}, 13004eeddc0SDimitry Andric {"question-mark", 0x6f}, 13104eeddc0SDimitry Andric {"quotation-mark", 0x7f}, 13204eeddc0SDimitry Andric {"r", 0x99}, 13304eeddc0SDimitry Andric {"reverse-solidus", 0xe0}, 13404eeddc0SDimitry Andric {"right-brace", 0xd0}, 13504eeddc0SDimitry Andric {"right-curly-bracket", 0xd0}, 13604eeddc0SDimitry Andric {"right-parenthesis", 0x5d}, 13704eeddc0SDimitry Andric {"right-square-bracket", 0xbd}, 13804eeddc0SDimitry Andric {"s", 0xa2}, 13904eeddc0SDimitry Andric {"semicolon", 0x5e}, 14004eeddc0SDimitry Andric {"seven", 0xf7}, 14104eeddc0SDimitry Andric {"six", 0xf6}, 14204eeddc0SDimitry Andric {"slash", 0x61}, 14304eeddc0SDimitry Andric {"solidus", 0x61}, 14404eeddc0SDimitry Andric {"space", 0x40}, 14504eeddc0SDimitry Andric {"t", 0xa3}, 14604eeddc0SDimitry Andric {"tab", 0x5}, 14704eeddc0SDimitry Andric {"three", 0xf3}, 14804eeddc0SDimitry Andric {"tilde", 0xa1}, 14904eeddc0SDimitry Andric {"two", 0xf2}, 15004eeddc0SDimitry Andric {"u", 0xa4}, 15104eeddc0SDimitry Andric {"underscore", 0x6d}, 15204eeddc0SDimitry Andric {"v", 0xa5}, 15304eeddc0SDimitry Andric {"vertical-line", 0x4f}, 15404eeddc0SDimitry Andric {"vertical-tab", 0xb}, 15504eeddc0SDimitry Andric {"w", 0xa6}, 15604eeddc0SDimitry Andric {"x", 0xa7}, 15704eeddc0SDimitry Andric {"y", 0xa8}, 15804eeddc0SDimitry Andric {"z", 0xa9}, 15904eeddc0SDimitry Andric {"zero", 0xf0}, 16004eeddc0SDimitry Andric {"A", 0xc1}, 16104eeddc0SDimitry Andric {"B", 0xc2}, 16204eeddc0SDimitry Andric {"C", 0xc3}, 16304eeddc0SDimitry Andric {"D", 0xc4}, 16404eeddc0SDimitry Andric {"E", 0xc5}, 16504eeddc0SDimitry Andric {"F", 0xc6}, 16604eeddc0SDimitry Andric {"G", 0xc7}, 16704eeddc0SDimitry Andric {"H", 0xc8}, 16804eeddc0SDimitry Andric {"I", 0xc9}, 16904eeddc0SDimitry Andric {"J", 0xd1}, 17004eeddc0SDimitry Andric {"K", 0xd2}, 17104eeddc0SDimitry Andric {"L", 0xd3}, 17204eeddc0SDimitry Andric {"M", 0xd4}, 17304eeddc0SDimitry Andric {"N", 0xd5}, 17404eeddc0SDimitry Andric {"NUL", 0}, 17504eeddc0SDimitry Andric {"O", 0xd6}, 17604eeddc0SDimitry Andric {"P", 0xd7}, 17704eeddc0SDimitry Andric {"Q", 0xd8}, 17804eeddc0SDimitry Andric {"R", 0xd9}, 17904eeddc0SDimitry Andric {"S", 0xe2}, 18004eeddc0SDimitry Andric {"T", 0xe3}, 18104eeddc0SDimitry Andric {"U", 0xe4}, 18204eeddc0SDimitry Andric {"V", 0xe5}, 18304eeddc0SDimitry Andric {"W", 0xe6}, 18404eeddc0SDimitry Andric {"X", 0xe7}, 18504eeddc0SDimitry Andric {"Y", 0xe8}, 186*cb14a3feSDimitry Andric {"Z", 0xe9}}; 18704eeddc0SDimitry Andric #else 18804eeddc0SDimitry Andric // ASCII 189*cb14a3feSDimitry Andric const collationnames collatenames[] = { 1900b57cec5SDimitry Andric {"A", 0x41}, 1910b57cec5SDimitry Andric {"B", 0x42}, 1920b57cec5SDimitry Andric {"C", 0x43}, 1930b57cec5SDimitry Andric {"D", 0x44}, 1940b57cec5SDimitry Andric {"E", 0x45}, 1950b57cec5SDimitry Andric {"F", 0x46}, 1960b57cec5SDimitry Andric {"G", 0x47}, 1970b57cec5SDimitry Andric {"H", 0x48}, 1980b57cec5SDimitry Andric {"I", 0x49}, 1990b57cec5SDimitry Andric {"J", 0x4a}, 2000b57cec5SDimitry Andric {"K", 0x4b}, 2010b57cec5SDimitry Andric {"L", 0x4c}, 2020b57cec5SDimitry Andric {"M", 0x4d}, 2030b57cec5SDimitry Andric {"N", 0x4e}, 2040b57cec5SDimitry Andric {"NUL", 0x00}, 2050b57cec5SDimitry Andric {"O", 0x4f}, 2060b57cec5SDimitry Andric {"P", 0x50}, 2070b57cec5SDimitry Andric {"Q", 0x51}, 2080b57cec5SDimitry Andric {"R", 0x52}, 2090b57cec5SDimitry Andric {"S", 0x53}, 2100b57cec5SDimitry Andric {"T", 0x54}, 2110b57cec5SDimitry Andric {"U", 0x55}, 2120b57cec5SDimitry Andric {"V", 0x56}, 2130b57cec5SDimitry Andric {"W", 0x57}, 2140b57cec5SDimitry Andric {"X", 0x58}, 2150b57cec5SDimitry Andric {"Y", 0x59}, 2160b57cec5SDimitry Andric {"Z", 0x5a}, 2170b57cec5SDimitry Andric {"a", 0x61}, 2180b57cec5SDimitry Andric {"alert", 0x07}, 2190b57cec5SDimitry Andric {"ampersand", 0x26}, 2200b57cec5SDimitry Andric {"apostrophe", 0x27}, 2210b57cec5SDimitry Andric {"asterisk", 0x2a}, 2220b57cec5SDimitry Andric {"b", 0x62}, 2230b57cec5SDimitry Andric {"backslash", 0x5c}, 2240b57cec5SDimitry Andric {"backspace", 0x08}, 2250b57cec5SDimitry Andric {"c", 0x63}, 2260b57cec5SDimitry Andric {"carriage-return", 0x0d}, 2270b57cec5SDimitry Andric {"circumflex", 0x5e}, 2280b57cec5SDimitry Andric {"circumflex-accent", 0x5e}, 2290b57cec5SDimitry Andric {"colon", 0x3a}, 2300b57cec5SDimitry Andric {"comma", 0x2c}, 2310b57cec5SDimitry Andric {"commercial-at", 0x40}, 2320b57cec5SDimitry Andric {"d", 0x64}, 2330b57cec5SDimitry Andric {"dollar-sign", 0x24}, 2340b57cec5SDimitry Andric {"e", 0x65}, 2350b57cec5SDimitry Andric {"eight", 0x38}, 2360b57cec5SDimitry Andric {"equals-sign", 0x3d}, 2370b57cec5SDimitry Andric {"exclamation-mark", 0x21}, 2380b57cec5SDimitry Andric {"f", 0x66}, 2390b57cec5SDimitry Andric {"five", 0x35}, 2400b57cec5SDimitry Andric {"form-feed", 0x0c}, 2410b57cec5SDimitry Andric {"four", 0x34}, 2420b57cec5SDimitry Andric {"full-stop", 0x2e}, 2430b57cec5SDimitry Andric {"g", 0x67}, 2440b57cec5SDimitry Andric {"grave-accent", 0x60}, 2450b57cec5SDimitry Andric {"greater-than-sign", 0x3e}, 2460b57cec5SDimitry Andric {"h", 0x68}, 2470b57cec5SDimitry Andric {"hyphen", 0x2d}, 2480b57cec5SDimitry Andric {"hyphen-minus", 0x2d}, 2490b57cec5SDimitry Andric {"i", 0x69}, 2500b57cec5SDimitry Andric {"j", 0x6a}, 2510b57cec5SDimitry Andric {"k", 0x6b}, 2520b57cec5SDimitry Andric {"l", 0x6c}, 2530b57cec5SDimitry Andric {"left-brace", 0x7b}, 2540b57cec5SDimitry Andric {"left-curly-bracket", 0x7b}, 2550b57cec5SDimitry Andric {"left-parenthesis", 0x28}, 2560b57cec5SDimitry Andric {"left-square-bracket", 0x5b}, 2570b57cec5SDimitry Andric {"less-than-sign", 0x3c}, 2580b57cec5SDimitry Andric {"low-line", 0x5f}, 2590b57cec5SDimitry Andric {"m", 0x6d}, 2600b57cec5SDimitry Andric {"n", 0x6e}, 2610b57cec5SDimitry Andric {"newline", 0x0a}, 2620b57cec5SDimitry Andric {"nine", 0x39}, 2630b57cec5SDimitry Andric {"number-sign", 0x23}, 2640b57cec5SDimitry Andric {"o", 0x6f}, 2650b57cec5SDimitry Andric {"one", 0x31}, 2660b57cec5SDimitry Andric {"p", 0x70}, 2670b57cec5SDimitry Andric {"percent-sign", 0x25}, 2680b57cec5SDimitry Andric {"period", 0x2e}, 2690b57cec5SDimitry Andric {"plus-sign", 0x2b}, 2700b57cec5SDimitry Andric {"q", 0x71}, 2710b57cec5SDimitry Andric {"question-mark", 0x3f}, 2720b57cec5SDimitry Andric {"quotation-mark", 0x22}, 2730b57cec5SDimitry Andric {"r", 0x72}, 2740b57cec5SDimitry Andric {"reverse-solidus", 0x5c}, 2750b57cec5SDimitry Andric {"right-brace", 0x7d}, 2760b57cec5SDimitry Andric {"right-curly-bracket", 0x7d}, 2770b57cec5SDimitry Andric {"right-parenthesis", 0x29}, 2780b57cec5SDimitry Andric {"right-square-bracket", 0x5d}, 2790b57cec5SDimitry Andric {"s", 0x73}, 2800b57cec5SDimitry Andric {"semicolon", 0x3b}, 2810b57cec5SDimitry Andric {"seven", 0x37}, 2820b57cec5SDimitry Andric {"six", 0x36}, 2830b57cec5SDimitry Andric {"slash", 0x2f}, 2840b57cec5SDimitry Andric {"solidus", 0x2f}, 2850b57cec5SDimitry Andric {"space", 0x20}, 2860b57cec5SDimitry Andric {"t", 0x74}, 2870b57cec5SDimitry Andric {"tab", 0x09}, 2880b57cec5SDimitry Andric {"three", 0x33}, 2890b57cec5SDimitry Andric {"tilde", 0x7e}, 2900b57cec5SDimitry Andric {"two", 0x32}, 2910b57cec5SDimitry Andric {"u", 0x75}, 2920b57cec5SDimitry Andric {"underscore", 0x5f}, 2930b57cec5SDimitry Andric {"v", 0x76}, 2940b57cec5SDimitry Andric {"vertical-line", 0x7c}, 2950b57cec5SDimitry Andric {"vertical-tab", 0x0b}, 2960b57cec5SDimitry Andric {"w", 0x77}, 2970b57cec5SDimitry Andric {"x", 0x78}, 2980b57cec5SDimitry Andric {"y", 0x79}, 2990b57cec5SDimitry Andric {"z", 0x7a}, 300*cb14a3feSDimitry Andric {"zero", 0x30}}; 30104eeddc0SDimitry Andric #endif 3020b57cec5SDimitry Andric 303*cb14a3feSDimitry Andric struct classnames { 3040b57cec5SDimitry Andric const char* elem_; 3050b57cec5SDimitry Andric regex_traits<char>::char_class_type mask_; 3060b57cec5SDimitry Andric }; 3070b57cec5SDimitry Andric 308*cb14a3feSDimitry Andric const classnames ClassNames[] = { 3090b57cec5SDimitry Andric {"alnum", ctype_base::alnum}, 3100b57cec5SDimitry Andric {"alpha", ctype_base::alpha}, 3110b57cec5SDimitry Andric {"blank", ctype_base::blank}, 3120b57cec5SDimitry Andric {"cntrl", ctype_base::cntrl}, 3130b57cec5SDimitry Andric {"d", ctype_base::digit}, 3140b57cec5SDimitry Andric {"digit", ctype_base::digit}, 3150b57cec5SDimitry Andric {"graph", ctype_base::graph}, 3160b57cec5SDimitry Andric {"lower", ctype_base::lower}, 3170b57cec5SDimitry Andric {"print", ctype_base::print}, 3180b57cec5SDimitry Andric {"punct", ctype_base::punct}, 3190b57cec5SDimitry Andric {"s", ctype_base::space}, 3200b57cec5SDimitry Andric {"space", ctype_base::space}, 3210b57cec5SDimitry Andric {"upper", ctype_base::upper}, 3220b57cec5SDimitry Andric {"w", regex_traits<char>::__regex_word}, 323*cb14a3feSDimitry Andric {"xdigit", ctype_base::xdigit}}; 324*cb14a3feSDimitry Andric 325*cb14a3feSDimitry Andric struct use_strcmp { 326*cb14a3feSDimitry Andric bool operator()(const collationnames& x, const char* y) { return strcmp(x.elem_, y) < 0; } 327*cb14a3feSDimitry Andric bool operator()(const classnames& x, const char* y) { return strcmp(x.elem_, y) < 0; } 3280b57cec5SDimitry Andric }; 3290b57cec5SDimitry Andric 330*cb14a3feSDimitry Andric } // namespace 3310b57cec5SDimitry Andric 332*cb14a3feSDimitry Andric string __get_collation_name(const char* s) { 333*cb14a3feSDimitry Andric const collationnames* i = std::lower_bound(begin(collatenames), end(collatenames), s, use_strcmp()); 3340b57cec5SDimitry Andric string r; 3350b57cec5SDimitry Andric if (i != end(collatenames) && strcmp(s, i->elem_) == 0) 3360b57cec5SDimitry Andric r = char(i->char_); 3370b57cec5SDimitry Andric return r; 3380b57cec5SDimitry Andric } 3390b57cec5SDimitry Andric 340*cb14a3feSDimitry Andric regex_traits<char>::char_class_type __get_classname(const char* s, bool __icase) { 341*cb14a3feSDimitry Andric const classnames* i = std::lower_bound(begin(ClassNames), end(ClassNames), s, use_strcmp()); 3420b57cec5SDimitry Andric regex_traits<char>::char_class_type r = 0; 343*cb14a3feSDimitry Andric if (i != end(ClassNames) && strcmp(s, i->elem_) == 0) { 3440b57cec5SDimitry Andric r = i->mask_; 3450b57cec5SDimitry Andric if (r == regex_traits<char>::__regex_word) 3460b57cec5SDimitry Andric r |= ctype_base::alnum | ctype_base::upper | ctype_base::lower; 347*cb14a3feSDimitry Andric else if (__icase) { 3480b57cec5SDimitry Andric if (r & (ctype_base::lower | ctype_base::upper)) 3490b57cec5SDimitry Andric r |= ctype_base::alpha; 3500b57cec5SDimitry Andric } 3510b57cec5SDimitry Andric } 3520b57cec5SDimitry Andric return r; 3530b57cec5SDimitry Andric } 3540b57cec5SDimitry Andric 3550b57cec5SDimitry Andric template <> 356*cb14a3feSDimitry Andric void __match_any_but_newline<char>::__exec(__state& __s) const { 357*cb14a3feSDimitry Andric if (__s.__current_ != __s.__last_) { 358*cb14a3feSDimitry Andric switch (*__s.__current_) { 3590b57cec5SDimitry Andric case '\r': 3600b57cec5SDimitry Andric case '\n': 3610b57cec5SDimitry Andric __s.__do_ = __state::__reject; 3620b57cec5SDimitry Andric __s.__node_ = nullptr; 3630b57cec5SDimitry Andric break; 3640b57cec5SDimitry Andric default: 3650b57cec5SDimitry Andric __s.__do_ = __state::__accept_and_consume; 3660b57cec5SDimitry Andric ++__s.__current_; 3670b57cec5SDimitry Andric __s.__node_ = this->first(); 3680b57cec5SDimitry Andric break; 3690b57cec5SDimitry Andric } 370*cb14a3feSDimitry Andric } else { 3710b57cec5SDimitry Andric __s.__do_ = __state::__reject; 3720b57cec5SDimitry Andric __s.__node_ = nullptr; 3730b57cec5SDimitry Andric } 3740b57cec5SDimitry Andric } 3750b57cec5SDimitry Andric 3760b57cec5SDimitry Andric template <> 377*cb14a3feSDimitry Andric void __match_any_but_newline<wchar_t>::__exec(__state& __s) const { 378*cb14a3feSDimitry Andric if (__s.__current_ != __s.__last_) { 379*cb14a3feSDimitry Andric switch (*__s.__current_) { 3800b57cec5SDimitry Andric case '\r': 3810b57cec5SDimitry Andric case '\n': 3820b57cec5SDimitry Andric case 0x2028: 3830b57cec5SDimitry Andric case 0x2029: 3840b57cec5SDimitry Andric __s.__do_ = __state::__reject; 3850b57cec5SDimitry Andric __s.__node_ = nullptr; 3860b57cec5SDimitry Andric break; 3870b57cec5SDimitry Andric default: 3880b57cec5SDimitry Andric __s.__do_ = __state::__accept_and_consume; 3890b57cec5SDimitry Andric ++__s.__current_; 3900b57cec5SDimitry Andric __s.__node_ = this->first(); 3910b57cec5SDimitry Andric break; 3920b57cec5SDimitry Andric } 393*cb14a3feSDimitry Andric } else { 3940b57cec5SDimitry Andric __s.__do_ = __state::__reject; 3950b57cec5SDimitry Andric __s.__node_ = nullptr; 3960b57cec5SDimitry Andric } 3970b57cec5SDimitry Andric } 3980b57cec5SDimitry Andric 3990b57cec5SDimitry Andric _LIBCPP_END_NAMESPACE_STD 400