1eb8650a7SLouis Dionne //===----------------------------------------------------------------------===// 270505305SHoward Hinnant // 357b08b09SChandler Carruth // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 457b08b09SChandler Carruth // See https://llvm.org/LICENSE.txt for license information. 557b08b09SChandler Carruth // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 670505305SHoward Hinnant // 770505305SHoward Hinnant //===----------------------------------------------------------------------===// 870505305SHoward Hinnant 970505305SHoward Hinnant #include "regex" 1070505305SHoward Hinnant #include "algorithm" 1170505305SHoward Hinnant #include "iterator" 1270505305SHoward Hinnant 1370505305SHoward Hinnant _LIBCPP_BEGIN_NAMESPACE_STD 1470505305SHoward Hinnant 1570505305SHoward Hinnant static 1670505305SHoward Hinnant const char* 1770505305SHoward Hinnant make_error_type_string(regex_constants::error_type ecode) 1870505305SHoward Hinnant { 1970505305SHoward Hinnant switch (ecode) 2070505305SHoward Hinnant { 2170505305SHoward Hinnant case regex_constants::error_collate: 2224e98486SHoward Hinnant return "The expression contained an invalid collating element name."; 2370505305SHoward Hinnant case regex_constants::error_ctype: 2424e98486SHoward Hinnant return "The expression contained an invalid character class name."; 2570505305SHoward Hinnant case regex_constants::error_escape: 2624e98486SHoward Hinnant return "The expression contained an invalid escaped character, or a " 2724e98486SHoward Hinnant "trailing escape."; 2870505305SHoward Hinnant case regex_constants::error_backref: 2924e98486SHoward Hinnant return "The expression contained an invalid back reference."; 3070505305SHoward Hinnant case regex_constants::error_brack: 3124e98486SHoward Hinnant return "The expression contained mismatched [ and ]."; 3270505305SHoward Hinnant case regex_constants::error_paren: 3324e98486SHoward Hinnant return "The expression contained mismatched ( and )."; 3470505305SHoward Hinnant case regex_constants::error_brace: 3524e98486SHoward Hinnant return "The expression contained mismatched { and }."; 3670505305SHoward Hinnant case regex_constants::error_badbrace: 3724e98486SHoward Hinnant return "The expression contained an invalid range in a {} expression."; 3870505305SHoward Hinnant case regex_constants::error_range: 3924e98486SHoward Hinnant return "The expression contained an invalid character range, " 4024e98486SHoward Hinnant "such as [b-a] in most encodings."; 4170505305SHoward Hinnant case regex_constants::error_space: 4224e98486SHoward Hinnant return "There was insufficient memory to convert the expression into " 4324e98486SHoward Hinnant "a finite state machine."; 4470505305SHoward Hinnant case regex_constants::error_badrepeat: 4524e98486SHoward Hinnant return "One of *?+{ was not preceded by a valid regular expression."; 4670505305SHoward Hinnant case regex_constants::error_complexity: 4724e98486SHoward Hinnant return "The complexity of an attempted match against a regular " 4824e98486SHoward Hinnant "expression exceeded a pre-set level."; 4970505305SHoward Hinnant case regex_constants::error_stack: 5024e98486SHoward Hinnant return "There was insufficient memory to determine whether the regular " 5124e98486SHoward Hinnant "expression could match the specified character sequence."; 526afe8b0aSHoward Hinnant case regex_constants::__re_err_grammar: 536afe8b0aSHoward Hinnant return "An invalid regex grammar has been requested."; 546afe8b0aSHoward Hinnant case regex_constants::__re_err_empty: 556afe8b0aSHoward Hinnant return "An empty regex is not allowed in the POSIX grammar."; 5627c4eaacSMark de Wever case regex_constants::__re_err_parse: 5727c4eaacSMark de Wever return "The parser did not consume the entire regular expression."; 5824e98486SHoward Hinnant default: 5924e98486SHoward Hinnant break; 6070505305SHoward Hinnant } 6124e98486SHoward Hinnant return "Unknown error type"; 6270505305SHoward Hinnant } 6370505305SHoward Hinnant 6470505305SHoward Hinnant regex_error::regex_error(regex_constants::error_type ecode) 6570505305SHoward Hinnant : runtime_error(make_error_type_string(ecode)), 6670505305SHoward Hinnant __code_(ecode) 6770505305SHoward Hinnant {} 6870505305SHoward Hinnant 6970505305SHoward Hinnant regex_error::~regex_error() throw() {} 7070505305SHoward Hinnant 7170505305SHoward Hinnant namespace { 7270505305SHoward Hinnant 7370505305SHoward Hinnant struct collationnames 7470505305SHoward Hinnant { 7570505305SHoward Hinnant const char* elem_; 7670505305SHoward Hinnant char char_; 7770505305SHoward Hinnant }; 7870505305SHoward Hinnant 79*a1da7396SMuiez Ahmed #if defined(__MVS__) && !defined(__NATIVE_ASCII_F) 80*a1da7396SMuiez Ahmed // EBCDIC IBM-1047 81*a1da7396SMuiez Ahmed // Sorted via the EBCDIC collating sequence 82*a1da7396SMuiez Ahmed const collationnames collatenames[] = 83*a1da7396SMuiez Ahmed { 84*a1da7396SMuiez Ahmed {"a", 0x81}, 85*a1da7396SMuiez Ahmed {"alert", 0x2f}, 86*a1da7396SMuiez Ahmed {"ampersand", 0x50}, 87*a1da7396SMuiez Ahmed {"apostrophe", 0x7d}, 88*a1da7396SMuiez Ahmed {"asterisk", 0x5c}, 89*a1da7396SMuiez Ahmed {"b", 0x82}, 90*a1da7396SMuiez Ahmed {"backslash", 0xe0}, 91*a1da7396SMuiez Ahmed {"backspace", 0x16}, 92*a1da7396SMuiez Ahmed {"c", 0x83}, 93*a1da7396SMuiez Ahmed {"carriage-return", 0xd}, 94*a1da7396SMuiez Ahmed {"circumflex", 0x5f}, 95*a1da7396SMuiez Ahmed {"circumflex-accent", 0x5f}, 96*a1da7396SMuiez Ahmed {"colon", 0x7a}, 97*a1da7396SMuiez Ahmed {"comma", 0x6b}, 98*a1da7396SMuiez Ahmed {"commercial-at", 0x7c}, 99*a1da7396SMuiez Ahmed {"d", 0x84}, 100*a1da7396SMuiez Ahmed {"dollar-sign", 0x5b}, 101*a1da7396SMuiez Ahmed {"e", 0x85}, 102*a1da7396SMuiez Ahmed {"eight", 0xf8}, 103*a1da7396SMuiez Ahmed {"equals-sign", 0x7e}, 104*a1da7396SMuiez Ahmed {"exclamation-mark", 0x5a}, 105*a1da7396SMuiez Ahmed {"f", 0x86}, 106*a1da7396SMuiez Ahmed {"five", 0xf5}, 107*a1da7396SMuiez Ahmed {"form-feed", 0xc}, 108*a1da7396SMuiez Ahmed {"four", 0xf4}, 109*a1da7396SMuiez Ahmed {"full-stop", 0x4b}, 110*a1da7396SMuiez Ahmed {"g", 0x87}, 111*a1da7396SMuiez Ahmed {"grave-accent", 0x79}, 112*a1da7396SMuiez Ahmed {"greater-than-sign", 0x6e}, 113*a1da7396SMuiez Ahmed {"h", 0x88}, 114*a1da7396SMuiez Ahmed {"hyphen", 0x60}, 115*a1da7396SMuiez Ahmed {"hyphen-minus", 0x60}, 116*a1da7396SMuiez Ahmed {"i", 0x89}, 117*a1da7396SMuiez Ahmed {"j", 0x91}, 118*a1da7396SMuiez Ahmed {"k", 0x92}, 119*a1da7396SMuiez Ahmed {"l", 0x93}, 120*a1da7396SMuiez Ahmed {"left-brace", 0xc0}, 121*a1da7396SMuiez Ahmed {"left-curly-bracket", 0xc0}, 122*a1da7396SMuiez Ahmed {"left-parenthesis", 0x4d}, 123*a1da7396SMuiez Ahmed {"left-square-bracket", 0xad}, 124*a1da7396SMuiez Ahmed {"less-than-sign", 0x4c}, 125*a1da7396SMuiez Ahmed {"low-line", 0x6d}, 126*a1da7396SMuiez Ahmed {"m", 0x94}, 127*a1da7396SMuiez Ahmed {"n", 0x95}, 128*a1da7396SMuiez Ahmed {"newline", 0x15}, 129*a1da7396SMuiez Ahmed {"nine", 0xf9}, 130*a1da7396SMuiez Ahmed {"number-sign", 0x7b}, 131*a1da7396SMuiez Ahmed {"o", 0x96}, 132*a1da7396SMuiez Ahmed {"one", 0xf1}, 133*a1da7396SMuiez Ahmed {"p", 0x97}, 134*a1da7396SMuiez Ahmed {"percent-sign", 0x6c}, 135*a1da7396SMuiez Ahmed {"period", 0x4b}, 136*a1da7396SMuiez Ahmed {"plus-sign", 0x4e}, 137*a1da7396SMuiez Ahmed {"q", 0x98}, 138*a1da7396SMuiez Ahmed {"question-mark", 0x6f}, 139*a1da7396SMuiez Ahmed {"quotation-mark", 0x7f}, 140*a1da7396SMuiez Ahmed {"r", 0x99}, 141*a1da7396SMuiez Ahmed {"reverse-solidus", 0xe0}, 142*a1da7396SMuiez Ahmed {"right-brace", 0xd0}, 143*a1da7396SMuiez Ahmed {"right-curly-bracket", 0xd0}, 144*a1da7396SMuiez Ahmed {"right-parenthesis", 0x5d}, 145*a1da7396SMuiez Ahmed {"right-square-bracket", 0xbd}, 146*a1da7396SMuiez Ahmed {"s", 0xa2}, 147*a1da7396SMuiez Ahmed {"semicolon", 0x5e}, 148*a1da7396SMuiez Ahmed {"seven", 0xf7}, 149*a1da7396SMuiez Ahmed {"six", 0xf6}, 150*a1da7396SMuiez Ahmed {"slash", 0x61}, 151*a1da7396SMuiez Ahmed {"solidus", 0x61}, 152*a1da7396SMuiez Ahmed {"space", 0x40}, 153*a1da7396SMuiez Ahmed {"t", 0xa3}, 154*a1da7396SMuiez Ahmed {"tab", 0x5}, 155*a1da7396SMuiez Ahmed {"three", 0xf3}, 156*a1da7396SMuiez Ahmed {"tilde", 0xa1}, 157*a1da7396SMuiez Ahmed {"two", 0xf2}, 158*a1da7396SMuiez Ahmed {"u", 0xa4}, 159*a1da7396SMuiez Ahmed {"underscore", 0x6d}, 160*a1da7396SMuiez Ahmed {"v", 0xa5}, 161*a1da7396SMuiez Ahmed {"vertical-line", 0x4f}, 162*a1da7396SMuiez Ahmed {"vertical-tab", 0xb}, 163*a1da7396SMuiez Ahmed {"w", 0xa6}, 164*a1da7396SMuiez Ahmed {"x", 0xa7}, 165*a1da7396SMuiez Ahmed {"y", 0xa8}, 166*a1da7396SMuiez Ahmed {"z", 0xa9}, 167*a1da7396SMuiez Ahmed {"zero", 0xf0}, 168*a1da7396SMuiez Ahmed {"A", 0xc1}, 169*a1da7396SMuiez Ahmed {"B", 0xc2}, 170*a1da7396SMuiez Ahmed {"C", 0xc3}, 171*a1da7396SMuiez Ahmed {"D", 0xc4}, 172*a1da7396SMuiez Ahmed {"E", 0xc5}, 173*a1da7396SMuiez Ahmed {"F", 0xc6}, 174*a1da7396SMuiez Ahmed {"G", 0xc7}, 175*a1da7396SMuiez Ahmed {"H", 0xc8}, 176*a1da7396SMuiez Ahmed {"I", 0xc9}, 177*a1da7396SMuiez Ahmed {"J", 0xd1}, 178*a1da7396SMuiez Ahmed {"K", 0xd2}, 179*a1da7396SMuiez Ahmed {"L", 0xd3}, 180*a1da7396SMuiez Ahmed {"M", 0xd4}, 181*a1da7396SMuiez Ahmed {"N", 0xd5}, 182*a1da7396SMuiez Ahmed {"NUL", 0}, 183*a1da7396SMuiez Ahmed {"O", 0xd6}, 184*a1da7396SMuiez Ahmed {"P", 0xd7}, 185*a1da7396SMuiez Ahmed {"Q", 0xd8}, 186*a1da7396SMuiez Ahmed {"R", 0xd9}, 187*a1da7396SMuiez Ahmed {"S", 0xe2}, 188*a1da7396SMuiez Ahmed {"T", 0xe3}, 189*a1da7396SMuiez Ahmed {"U", 0xe4}, 190*a1da7396SMuiez Ahmed {"V", 0xe5}, 191*a1da7396SMuiez Ahmed {"W", 0xe6}, 192*a1da7396SMuiez Ahmed {"X", 0xe7}, 193*a1da7396SMuiez Ahmed {"Y", 0xe8}, 194*a1da7396SMuiez Ahmed {"Z", 0xe9} 195*a1da7396SMuiez Ahmed }; 196*a1da7396SMuiez Ahmed #else 197*a1da7396SMuiez Ahmed // ASCII 19870505305SHoward Hinnant const collationnames collatenames[] = 19970505305SHoward Hinnant { 20070505305SHoward Hinnant {"A", 0x41}, 20170505305SHoward Hinnant {"B", 0x42}, 20270505305SHoward Hinnant {"C", 0x43}, 20370505305SHoward Hinnant {"D", 0x44}, 20470505305SHoward Hinnant {"E", 0x45}, 20570505305SHoward Hinnant {"F", 0x46}, 20670505305SHoward Hinnant {"G", 0x47}, 20770505305SHoward Hinnant {"H", 0x48}, 20870505305SHoward Hinnant {"I", 0x49}, 20970505305SHoward Hinnant {"J", 0x4a}, 21070505305SHoward Hinnant {"K", 0x4b}, 21170505305SHoward Hinnant {"L", 0x4c}, 21270505305SHoward Hinnant {"M", 0x4d}, 21370505305SHoward Hinnant {"N", 0x4e}, 21470505305SHoward Hinnant {"NUL", 0x00}, 21570505305SHoward Hinnant {"O", 0x4f}, 21670505305SHoward Hinnant {"P", 0x50}, 21770505305SHoward Hinnant {"Q", 0x51}, 21870505305SHoward Hinnant {"R", 0x52}, 21970505305SHoward Hinnant {"S", 0x53}, 22070505305SHoward Hinnant {"T", 0x54}, 22170505305SHoward Hinnant {"U", 0x55}, 22270505305SHoward Hinnant {"V", 0x56}, 22370505305SHoward Hinnant {"W", 0x57}, 22470505305SHoward Hinnant {"X", 0x58}, 22570505305SHoward Hinnant {"Y", 0x59}, 22670505305SHoward Hinnant {"Z", 0x5a}, 22770505305SHoward Hinnant {"a", 0x61}, 22870505305SHoward Hinnant {"alert", 0x07}, 22970505305SHoward Hinnant {"ampersand", 0x26}, 23070505305SHoward Hinnant {"apostrophe", 0x27}, 23170505305SHoward Hinnant {"asterisk", 0x2a}, 23270505305SHoward Hinnant {"b", 0x62}, 23370505305SHoward Hinnant {"backslash", 0x5c}, 23470505305SHoward Hinnant {"backspace", 0x08}, 23570505305SHoward Hinnant {"c", 0x63}, 23670505305SHoward Hinnant {"carriage-return", 0x0d}, 23770505305SHoward Hinnant {"circumflex", 0x5e}, 23870505305SHoward Hinnant {"circumflex-accent", 0x5e}, 23970505305SHoward Hinnant {"colon", 0x3a}, 24070505305SHoward Hinnant {"comma", 0x2c}, 24170505305SHoward Hinnant {"commercial-at", 0x40}, 24270505305SHoward Hinnant {"d", 0x64}, 24370505305SHoward Hinnant {"dollar-sign", 0x24}, 24470505305SHoward Hinnant {"e", 0x65}, 24570505305SHoward Hinnant {"eight", 0x38}, 24670505305SHoward Hinnant {"equals-sign", 0x3d}, 24770505305SHoward Hinnant {"exclamation-mark", 0x21}, 24870505305SHoward Hinnant {"f", 0x66}, 24970505305SHoward Hinnant {"five", 0x35}, 25070505305SHoward Hinnant {"form-feed", 0x0c}, 25170505305SHoward Hinnant {"four", 0x34}, 25270505305SHoward Hinnant {"full-stop", 0x2e}, 25370505305SHoward Hinnant {"g", 0x67}, 25470505305SHoward Hinnant {"grave-accent", 0x60}, 25570505305SHoward Hinnant {"greater-than-sign", 0x3e}, 25670505305SHoward Hinnant {"h", 0x68}, 25770505305SHoward Hinnant {"hyphen", 0x2d}, 25870505305SHoward Hinnant {"hyphen-minus", 0x2d}, 25970505305SHoward Hinnant {"i", 0x69}, 26070505305SHoward Hinnant {"j", 0x6a}, 26170505305SHoward Hinnant {"k", 0x6b}, 26270505305SHoward Hinnant {"l", 0x6c}, 26370505305SHoward Hinnant {"left-brace", 0x7b}, 26470505305SHoward Hinnant {"left-curly-bracket", 0x7b}, 26570505305SHoward Hinnant {"left-parenthesis", 0x28}, 26670505305SHoward Hinnant {"left-square-bracket", 0x5b}, 26770505305SHoward Hinnant {"less-than-sign", 0x3c}, 26870505305SHoward Hinnant {"low-line", 0x5f}, 26970505305SHoward Hinnant {"m", 0x6d}, 27070505305SHoward Hinnant {"n", 0x6e}, 27170505305SHoward Hinnant {"newline", 0x0a}, 27270505305SHoward Hinnant {"nine", 0x39}, 27370505305SHoward Hinnant {"number-sign", 0x23}, 27470505305SHoward Hinnant {"o", 0x6f}, 27570505305SHoward Hinnant {"one", 0x31}, 27670505305SHoward Hinnant {"p", 0x70}, 27770505305SHoward Hinnant {"percent-sign", 0x25}, 27870505305SHoward Hinnant {"period", 0x2e}, 27970505305SHoward Hinnant {"plus-sign", 0x2b}, 28070505305SHoward Hinnant {"q", 0x71}, 28170505305SHoward Hinnant {"question-mark", 0x3f}, 28270505305SHoward Hinnant {"quotation-mark", 0x22}, 28370505305SHoward Hinnant {"r", 0x72}, 28470505305SHoward Hinnant {"reverse-solidus", 0x5c}, 28570505305SHoward Hinnant {"right-brace", 0x7d}, 28670505305SHoward Hinnant {"right-curly-bracket", 0x7d}, 28770505305SHoward Hinnant {"right-parenthesis", 0x29}, 28870505305SHoward Hinnant {"right-square-bracket", 0x5d}, 28970505305SHoward Hinnant {"s", 0x73}, 29070505305SHoward Hinnant {"semicolon", 0x3b}, 29170505305SHoward Hinnant {"seven", 0x37}, 29270505305SHoward Hinnant {"six", 0x36}, 29370505305SHoward Hinnant {"slash", 0x2f}, 29470505305SHoward Hinnant {"solidus", 0x2f}, 29570505305SHoward Hinnant {"space", 0x20}, 29670505305SHoward Hinnant {"t", 0x74}, 29770505305SHoward Hinnant {"tab", 0x09}, 29870505305SHoward Hinnant {"three", 0x33}, 29970505305SHoward Hinnant {"tilde", 0x7e}, 30070505305SHoward Hinnant {"two", 0x32}, 30170505305SHoward Hinnant {"u", 0x75}, 30270505305SHoward Hinnant {"underscore", 0x5f}, 30370505305SHoward Hinnant {"v", 0x76}, 30470505305SHoward Hinnant {"vertical-line", 0x7c}, 30570505305SHoward Hinnant {"vertical-tab", 0x0b}, 30670505305SHoward Hinnant {"w", 0x77}, 30770505305SHoward Hinnant {"x", 0x78}, 30870505305SHoward Hinnant {"y", 0x79}, 30970505305SHoward Hinnant {"z", 0x7a}, 31070505305SHoward Hinnant {"zero", 0x30} 31170505305SHoward Hinnant }; 312*a1da7396SMuiez Ahmed #endif 31370505305SHoward Hinnant 31424757ff7SHoward Hinnant struct classnames 31524757ff7SHoward Hinnant { 31624757ff7SHoward Hinnant const char* elem_; 31715c010a3SDan Albert regex_traits<char>::char_class_type mask_; 31824757ff7SHoward Hinnant }; 31924757ff7SHoward Hinnant 32024757ff7SHoward Hinnant const classnames ClassNames[] = 32124757ff7SHoward Hinnant { 32224757ff7SHoward Hinnant {"alnum", ctype_base::alnum}, 32324757ff7SHoward Hinnant {"alpha", ctype_base::alpha}, 32424757ff7SHoward Hinnant {"blank", ctype_base::blank}, 32524757ff7SHoward Hinnant {"cntrl", ctype_base::cntrl}, 32624757ff7SHoward Hinnant {"d", ctype_base::digit}, 32724757ff7SHoward Hinnant {"digit", ctype_base::digit}, 32824757ff7SHoward Hinnant {"graph", ctype_base::graph}, 32924757ff7SHoward Hinnant {"lower", ctype_base::lower}, 33024757ff7SHoward Hinnant {"print", ctype_base::print}, 33124757ff7SHoward Hinnant {"punct", ctype_base::punct}, 33224757ff7SHoward Hinnant {"s", ctype_base::space}, 33324757ff7SHoward Hinnant {"space", ctype_base::space}, 33424757ff7SHoward Hinnant {"upper", ctype_base::upper}, 33524757ff7SHoward Hinnant {"w", regex_traits<char>::__regex_word}, 33624757ff7SHoward Hinnant {"xdigit", ctype_base::xdigit} 33724757ff7SHoward Hinnant }; 33824757ff7SHoward Hinnant 33970505305SHoward Hinnant struct use_strcmp 34070505305SHoward Hinnant { 34170505305SHoward Hinnant bool operator()(const collationnames& x, const char* y) 34270505305SHoward Hinnant {return strcmp(x.elem_, y) < 0;} 34324757ff7SHoward Hinnant bool operator()(const classnames& x, const char* y) 34424757ff7SHoward Hinnant {return strcmp(x.elem_, y) < 0;} 34570505305SHoward Hinnant }; 34670505305SHoward Hinnant 34770505305SHoward Hinnant } 34870505305SHoward Hinnant 34970505305SHoward Hinnant string 35070505305SHoward Hinnant __get_collation_name(const char* s) 35170505305SHoward Hinnant { 35270505305SHoward Hinnant const collationnames* i = 353ce48a113SHoward Hinnant _VSTD::lower_bound(begin(collatenames), end(collatenames), s, use_strcmp()); 35470505305SHoward Hinnant string r; 35570505305SHoward Hinnant if (i != end(collatenames) && strcmp(s, i->elem_) == 0) 35670505305SHoward Hinnant r = char(i->char_); 35770505305SHoward Hinnant return r; 35870505305SHoward Hinnant } 35970505305SHoward Hinnant 36015c010a3SDan Albert regex_traits<char>::char_class_type 36124757ff7SHoward Hinnant __get_classname(const char* s, bool __icase) 36224757ff7SHoward Hinnant { 36324757ff7SHoward Hinnant const classnames* i = 364ce48a113SHoward Hinnant _VSTD::lower_bound(begin(ClassNames), end(ClassNames), s, use_strcmp()); 36515c010a3SDan Albert regex_traits<char>::char_class_type r = 0; 36624757ff7SHoward Hinnant if (i != end(ClassNames) && strcmp(s, i->elem_) == 0) 36724757ff7SHoward Hinnant { 36824757ff7SHoward Hinnant r = i->mask_; 36924757ff7SHoward Hinnant if (r == regex_traits<char>::__regex_word) 37024757ff7SHoward Hinnant r |= ctype_base::alnum | ctype_base::upper | ctype_base::lower; 37124757ff7SHoward Hinnant else if (__icase) 37224757ff7SHoward Hinnant { 37324757ff7SHoward Hinnant if (r & (ctype_base::lower | ctype_base::upper)) 37424757ff7SHoward Hinnant r |= ctype_base::alpha; 37524757ff7SHoward Hinnant } 37624757ff7SHoward Hinnant } 37724757ff7SHoward Hinnant return r; 37824757ff7SHoward Hinnant } 37924757ff7SHoward Hinnant 3805c679861SHoward Hinnant template <> 3815c679861SHoward Hinnant void 3825c679861SHoward Hinnant __match_any_but_newline<char>::__exec(__state& __s) const 3835c679861SHoward Hinnant { 3845c679861SHoward Hinnant if (__s.__current_ != __s.__last_) 3855c679861SHoward Hinnant { 3865c679861SHoward Hinnant switch (*__s.__current_) 3875c679861SHoward Hinnant { 3885c679861SHoward Hinnant case '\r': 3895c679861SHoward Hinnant case '\n': 3905c679861SHoward Hinnant __s.__do_ = __state::__reject; 3915c679861SHoward Hinnant __s.__node_ = nullptr; 3925c679861SHoward Hinnant break; 3935c679861SHoward Hinnant default: 3945c679861SHoward Hinnant __s.__do_ = __state::__accept_and_consume; 3955c679861SHoward Hinnant ++__s.__current_; 3965c679861SHoward Hinnant __s.__node_ = this->first(); 3975c679861SHoward Hinnant break; 3985c679861SHoward Hinnant } 3995c679861SHoward Hinnant } 4005c679861SHoward Hinnant else 4015c679861SHoward Hinnant { 4025c679861SHoward Hinnant __s.__do_ = __state::__reject; 4035c679861SHoward Hinnant __s.__node_ = nullptr; 4045c679861SHoward Hinnant } 4055c679861SHoward Hinnant } 4065c679861SHoward Hinnant 4075c679861SHoward Hinnant template <> 4085c679861SHoward Hinnant void 4095c679861SHoward Hinnant __match_any_but_newline<wchar_t>::__exec(__state& __s) const 4105c679861SHoward Hinnant { 4115c679861SHoward Hinnant if (__s.__current_ != __s.__last_) 4125c679861SHoward Hinnant { 4135c679861SHoward Hinnant switch (*__s.__current_) 4145c679861SHoward Hinnant { 4155c679861SHoward Hinnant case '\r': 4165c679861SHoward Hinnant case '\n': 4175c679861SHoward Hinnant case 0x2028: 4185c679861SHoward Hinnant case 0x2029: 4195c679861SHoward Hinnant __s.__do_ = __state::__reject; 4205c679861SHoward Hinnant __s.__node_ = nullptr; 4215c679861SHoward Hinnant break; 4225c679861SHoward Hinnant default: 4235c679861SHoward Hinnant __s.__do_ = __state::__accept_and_consume; 4245c679861SHoward Hinnant ++__s.__current_; 4255c679861SHoward Hinnant __s.__node_ = this->first(); 4265c679861SHoward Hinnant break; 4275c679861SHoward Hinnant } 4285c679861SHoward Hinnant } 4295c679861SHoward Hinnant else 4305c679861SHoward Hinnant { 4315c679861SHoward Hinnant __s.__do_ = __state::__reject; 4325c679861SHoward Hinnant __s.__node_ = nullptr; 4335c679861SHoward Hinnant } 4345c679861SHoward Hinnant } 4355c679861SHoward Hinnant 43670505305SHoward Hinnant _LIBCPP_END_NAMESPACE_STD 437