xref: /aosp_15_r20/external/libcxx/src/regex.cpp (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1*58b9f456SAndroid Build Coastguard Worker //===-------------------------- regex.cpp ---------------------------------===//
2*58b9f456SAndroid Build Coastguard Worker //
3*58b9f456SAndroid Build Coastguard Worker //                     The LLVM Compiler Infrastructure
4*58b9f456SAndroid Build Coastguard Worker //
5*58b9f456SAndroid Build Coastguard Worker // This file is dual licensed under the MIT and the University of Illinois Open
6*58b9f456SAndroid Build Coastguard Worker // Source Licenses. See LICENSE.TXT for details.
7*58b9f456SAndroid Build Coastguard Worker //
8*58b9f456SAndroid Build Coastguard Worker //===----------------------------------------------------------------------===//
9*58b9f456SAndroid Build Coastguard Worker 
10*58b9f456SAndroid Build Coastguard Worker #include "regex"
11*58b9f456SAndroid Build Coastguard Worker #include "algorithm"
12*58b9f456SAndroid Build Coastguard Worker #include "iterator"
13*58b9f456SAndroid Build Coastguard Worker 
14*58b9f456SAndroid Build Coastguard Worker _LIBCPP_BEGIN_NAMESPACE_STD
15*58b9f456SAndroid Build Coastguard Worker 
16*58b9f456SAndroid Build Coastguard Worker static
17*58b9f456SAndroid Build Coastguard Worker const char*
make_error_type_string(regex_constants::error_type ecode)18*58b9f456SAndroid Build Coastguard Worker make_error_type_string(regex_constants::error_type ecode)
19*58b9f456SAndroid Build Coastguard Worker {
20*58b9f456SAndroid Build Coastguard Worker     switch (ecode)
21*58b9f456SAndroid Build Coastguard Worker     {
22*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_collate:
23*58b9f456SAndroid Build Coastguard Worker         return "The expression contained an invalid collating element name.";
24*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_ctype:
25*58b9f456SAndroid Build Coastguard Worker         return "The expression contained an invalid character class name.";
26*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_escape:
27*58b9f456SAndroid Build Coastguard Worker         return "The expression contained an invalid escaped character, or a "
28*58b9f456SAndroid Build Coastguard Worker                "trailing escape.";
29*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_backref:
30*58b9f456SAndroid Build Coastguard Worker         return "The expression contained an invalid back reference.";
31*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_brack:
32*58b9f456SAndroid Build Coastguard Worker         return "The expression contained mismatched [ and ].";
33*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_paren:
34*58b9f456SAndroid Build Coastguard Worker         return "The expression contained mismatched ( and ).";
35*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_brace:
36*58b9f456SAndroid Build Coastguard Worker         return "The expression contained mismatched { and }.";
37*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_badbrace:
38*58b9f456SAndroid Build Coastguard Worker         return "The expression contained an invalid range in a {} expression.";
39*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_range:
40*58b9f456SAndroid Build Coastguard Worker         return "The expression contained an invalid character range, "
41*58b9f456SAndroid Build Coastguard Worker                "such as [b-a] in most encodings.";
42*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_space:
43*58b9f456SAndroid Build Coastguard Worker         return "There was insufficient memory to convert the expression into "
44*58b9f456SAndroid Build Coastguard Worker                "a finite state machine.";
45*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_badrepeat:
46*58b9f456SAndroid Build Coastguard Worker         return "One of *?+{ was not preceded by a valid regular expression.";
47*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_complexity:
48*58b9f456SAndroid Build Coastguard Worker         return "The complexity of an attempted match against a regular "
49*58b9f456SAndroid Build Coastguard Worker                "expression exceeded a pre-set level.";
50*58b9f456SAndroid Build Coastguard Worker     case regex_constants::error_stack:
51*58b9f456SAndroid Build Coastguard Worker         return "There was insufficient memory to determine whether the regular "
52*58b9f456SAndroid Build Coastguard Worker                "expression could match the specified character sequence.";
53*58b9f456SAndroid Build Coastguard Worker     case regex_constants::__re_err_grammar:
54*58b9f456SAndroid Build Coastguard Worker         return "An invalid regex grammar has been requested.";
55*58b9f456SAndroid Build Coastguard Worker     case regex_constants::__re_err_empty:
56*58b9f456SAndroid Build Coastguard Worker         return "An empty regex is not allowed in the POSIX grammar.";
57*58b9f456SAndroid Build Coastguard Worker     default:
58*58b9f456SAndroid Build Coastguard Worker         break;
59*58b9f456SAndroid Build Coastguard Worker     }
60*58b9f456SAndroid Build Coastguard Worker     return "Unknown error type";
61*58b9f456SAndroid Build Coastguard Worker }
62*58b9f456SAndroid Build Coastguard Worker 
regex_error(regex_constants::error_type ecode)63*58b9f456SAndroid Build Coastguard Worker regex_error::regex_error(regex_constants::error_type ecode)
64*58b9f456SAndroid Build Coastguard Worker     : runtime_error(make_error_type_string(ecode)),
65*58b9f456SAndroid Build Coastguard Worker       __code_(ecode)
66*58b9f456SAndroid Build Coastguard Worker {}
67*58b9f456SAndroid Build Coastguard Worker 
~regex_error()68*58b9f456SAndroid Build Coastguard Worker regex_error::~regex_error() throw() {}
69*58b9f456SAndroid Build Coastguard Worker 
70*58b9f456SAndroid Build Coastguard Worker namespace {
71*58b9f456SAndroid Build Coastguard Worker 
72*58b9f456SAndroid Build Coastguard Worker struct collationnames
73*58b9f456SAndroid Build Coastguard Worker {
74*58b9f456SAndroid Build Coastguard Worker     const char* elem_;
75*58b9f456SAndroid Build Coastguard Worker     char char_;
76*58b9f456SAndroid Build Coastguard Worker };
77*58b9f456SAndroid Build Coastguard Worker 
78*58b9f456SAndroid Build Coastguard Worker const collationnames collatenames[] =
79*58b9f456SAndroid Build Coastguard Worker {
80*58b9f456SAndroid Build Coastguard Worker     {"A", 0x41},
81*58b9f456SAndroid Build Coastguard Worker     {"B", 0x42},
82*58b9f456SAndroid Build Coastguard Worker     {"C", 0x43},
83*58b9f456SAndroid Build Coastguard Worker     {"D", 0x44},
84*58b9f456SAndroid Build Coastguard Worker     {"E", 0x45},
85*58b9f456SAndroid Build Coastguard Worker     {"F", 0x46},
86*58b9f456SAndroid Build Coastguard Worker     {"G", 0x47},
87*58b9f456SAndroid Build Coastguard Worker     {"H", 0x48},
88*58b9f456SAndroid Build Coastguard Worker     {"I", 0x49},
89*58b9f456SAndroid Build Coastguard Worker     {"J", 0x4a},
90*58b9f456SAndroid Build Coastguard Worker     {"K", 0x4b},
91*58b9f456SAndroid Build Coastguard Worker     {"L", 0x4c},
92*58b9f456SAndroid Build Coastguard Worker     {"M", 0x4d},
93*58b9f456SAndroid Build Coastguard Worker     {"N", 0x4e},
94*58b9f456SAndroid Build Coastguard Worker     {"NUL", 0x00},
95*58b9f456SAndroid Build Coastguard Worker     {"O", 0x4f},
96*58b9f456SAndroid Build Coastguard Worker     {"P", 0x50},
97*58b9f456SAndroid Build Coastguard Worker     {"Q", 0x51},
98*58b9f456SAndroid Build Coastguard Worker     {"R", 0x52},
99*58b9f456SAndroid Build Coastguard Worker     {"S", 0x53},
100*58b9f456SAndroid Build Coastguard Worker     {"T", 0x54},
101*58b9f456SAndroid Build Coastguard Worker     {"U", 0x55},
102*58b9f456SAndroid Build Coastguard Worker     {"V", 0x56},
103*58b9f456SAndroid Build Coastguard Worker     {"W", 0x57},
104*58b9f456SAndroid Build Coastguard Worker     {"X", 0x58},
105*58b9f456SAndroid Build Coastguard Worker     {"Y", 0x59},
106*58b9f456SAndroid Build Coastguard Worker     {"Z", 0x5a},
107*58b9f456SAndroid Build Coastguard Worker     {"a", 0x61},
108*58b9f456SAndroid Build Coastguard Worker     {"alert", 0x07},
109*58b9f456SAndroid Build Coastguard Worker     {"ampersand", 0x26},
110*58b9f456SAndroid Build Coastguard Worker     {"apostrophe", 0x27},
111*58b9f456SAndroid Build Coastguard Worker     {"asterisk", 0x2a},
112*58b9f456SAndroid Build Coastguard Worker     {"b", 0x62},
113*58b9f456SAndroid Build Coastguard Worker     {"backslash", 0x5c},
114*58b9f456SAndroid Build Coastguard Worker     {"backspace", 0x08},
115*58b9f456SAndroid Build Coastguard Worker     {"c", 0x63},
116*58b9f456SAndroid Build Coastguard Worker     {"carriage-return", 0x0d},
117*58b9f456SAndroid Build Coastguard Worker     {"circumflex", 0x5e},
118*58b9f456SAndroid Build Coastguard Worker     {"circumflex-accent", 0x5e},
119*58b9f456SAndroid Build Coastguard Worker     {"colon", 0x3a},
120*58b9f456SAndroid Build Coastguard Worker     {"comma", 0x2c},
121*58b9f456SAndroid Build Coastguard Worker     {"commercial-at", 0x40},
122*58b9f456SAndroid Build Coastguard Worker     {"d", 0x64},
123*58b9f456SAndroid Build Coastguard Worker     {"dollar-sign", 0x24},
124*58b9f456SAndroid Build Coastguard Worker     {"e", 0x65},
125*58b9f456SAndroid Build Coastguard Worker     {"eight", 0x38},
126*58b9f456SAndroid Build Coastguard Worker     {"equals-sign", 0x3d},
127*58b9f456SAndroid Build Coastguard Worker     {"exclamation-mark", 0x21},
128*58b9f456SAndroid Build Coastguard Worker     {"f", 0x66},
129*58b9f456SAndroid Build Coastguard Worker     {"five", 0x35},
130*58b9f456SAndroid Build Coastguard Worker     {"form-feed", 0x0c},
131*58b9f456SAndroid Build Coastguard Worker     {"four", 0x34},
132*58b9f456SAndroid Build Coastguard Worker     {"full-stop", 0x2e},
133*58b9f456SAndroid Build Coastguard Worker     {"g", 0x67},
134*58b9f456SAndroid Build Coastguard Worker     {"grave-accent", 0x60},
135*58b9f456SAndroid Build Coastguard Worker     {"greater-than-sign", 0x3e},
136*58b9f456SAndroid Build Coastguard Worker     {"h", 0x68},
137*58b9f456SAndroid Build Coastguard Worker     {"hyphen", 0x2d},
138*58b9f456SAndroid Build Coastguard Worker     {"hyphen-minus", 0x2d},
139*58b9f456SAndroid Build Coastguard Worker     {"i", 0x69},
140*58b9f456SAndroid Build Coastguard Worker     {"j", 0x6a},
141*58b9f456SAndroid Build Coastguard Worker     {"k", 0x6b},
142*58b9f456SAndroid Build Coastguard Worker     {"l", 0x6c},
143*58b9f456SAndroid Build Coastguard Worker     {"left-brace", 0x7b},
144*58b9f456SAndroid Build Coastguard Worker     {"left-curly-bracket", 0x7b},
145*58b9f456SAndroid Build Coastguard Worker     {"left-parenthesis", 0x28},
146*58b9f456SAndroid Build Coastguard Worker     {"left-square-bracket", 0x5b},
147*58b9f456SAndroid Build Coastguard Worker     {"less-than-sign", 0x3c},
148*58b9f456SAndroid Build Coastguard Worker     {"low-line", 0x5f},
149*58b9f456SAndroid Build Coastguard Worker     {"m", 0x6d},
150*58b9f456SAndroid Build Coastguard Worker     {"n", 0x6e},
151*58b9f456SAndroid Build Coastguard Worker     {"newline", 0x0a},
152*58b9f456SAndroid Build Coastguard Worker     {"nine", 0x39},
153*58b9f456SAndroid Build Coastguard Worker     {"number-sign", 0x23},
154*58b9f456SAndroid Build Coastguard Worker     {"o", 0x6f},
155*58b9f456SAndroid Build Coastguard Worker     {"one", 0x31},
156*58b9f456SAndroid Build Coastguard Worker     {"p", 0x70},
157*58b9f456SAndroid Build Coastguard Worker     {"percent-sign", 0x25},
158*58b9f456SAndroid Build Coastguard Worker     {"period", 0x2e},
159*58b9f456SAndroid Build Coastguard Worker     {"plus-sign", 0x2b},
160*58b9f456SAndroid Build Coastguard Worker     {"q", 0x71},
161*58b9f456SAndroid Build Coastguard Worker     {"question-mark", 0x3f},
162*58b9f456SAndroid Build Coastguard Worker     {"quotation-mark", 0x22},
163*58b9f456SAndroid Build Coastguard Worker     {"r", 0x72},
164*58b9f456SAndroid Build Coastguard Worker     {"reverse-solidus", 0x5c},
165*58b9f456SAndroid Build Coastguard Worker     {"right-brace", 0x7d},
166*58b9f456SAndroid Build Coastguard Worker     {"right-curly-bracket", 0x7d},
167*58b9f456SAndroid Build Coastguard Worker     {"right-parenthesis", 0x29},
168*58b9f456SAndroid Build Coastguard Worker     {"right-square-bracket", 0x5d},
169*58b9f456SAndroid Build Coastguard Worker     {"s", 0x73},
170*58b9f456SAndroid Build Coastguard Worker     {"semicolon", 0x3b},
171*58b9f456SAndroid Build Coastguard Worker     {"seven", 0x37},
172*58b9f456SAndroid Build Coastguard Worker     {"six", 0x36},
173*58b9f456SAndroid Build Coastguard Worker     {"slash", 0x2f},
174*58b9f456SAndroid Build Coastguard Worker     {"solidus", 0x2f},
175*58b9f456SAndroid Build Coastguard Worker     {"space", 0x20},
176*58b9f456SAndroid Build Coastguard Worker     {"t", 0x74},
177*58b9f456SAndroid Build Coastguard Worker     {"tab", 0x09},
178*58b9f456SAndroid Build Coastguard Worker     {"three", 0x33},
179*58b9f456SAndroid Build Coastguard Worker     {"tilde", 0x7e},
180*58b9f456SAndroid Build Coastguard Worker     {"two", 0x32},
181*58b9f456SAndroid Build Coastguard Worker     {"u", 0x75},
182*58b9f456SAndroid Build Coastguard Worker     {"underscore", 0x5f},
183*58b9f456SAndroid Build Coastguard Worker     {"v", 0x76},
184*58b9f456SAndroid Build Coastguard Worker     {"vertical-line", 0x7c},
185*58b9f456SAndroid Build Coastguard Worker     {"vertical-tab", 0x0b},
186*58b9f456SAndroid Build Coastguard Worker     {"w", 0x77},
187*58b9f456SAndroid Build Coastguard Worker     {"x", 0x78},
188*58b9f456SAndroid Build Coastguard Worker     {"y", 0x79},
189*58b9f456SAndroid Build Coastguard Worker     {"z", 0x7a},
190*58b9f456SAndroid Build Coastguard Worker     {"zero", 0x30}
191*58b9f456SAndroid Build Coastguard Worker };
192*58b9f456SAndroid Build Coastguard Worker 
193*58b9f456SAndroid Build Coastguard Worker struct classnames
194*58b9f456SAndroid Build Coastguard Worker {
195*58b9f456SAndroid Build Coastguard Worker     const char* elem_;
196*58b9f456SAndroid Build Coastguard Worker     regex_traits<char>::char_class_type mask_;
197*58b9f456SAndroid Build Coastguard Worker };
198*58b9f456SAndroid Build Coastguard Worker 
199*58b9f456SAndroid Build Coastguard Worker const classnames ClassNames[] =
200*58b9f456SAndroid Build Coastguard Worker {
201*58b9f456SAndroid Build Coastguard Worker     {"alnum",  ctype_base::alnum},
202*58b9f456SAndroid Build Coastguard Worker     {"alpha",  ctype_base::alpha},
203*58b9f456SAndroid Build Coastguard Worker     {"blank",  ctype_base::blank},
204*58b9f456SAndroid Build Coastguard Worker     {"cntrl",  ctype_base::cntrl},
205*58b9f456SAndroid Build Coastguard Worker     {"d",      ctype_base::digit},
206*58b9f456SAndroid Build Coastguard Worker     {"digit",  ctype_base::digit},
207*58b9f456SAndroid Build Coastguard Worker     {"graph",  ctype_base::graph},
208*58b9f456SAndroid Build Coastguard Worker     {"lower",  ctype_base::lower},
209*58b9f456SAndroid Build Coastguard Worker     {"print",  ctype_base::print},
210*58b9f456SAndroid Build Coastguard Worker     {"punct",  ctype_base::punct},
211*58b9f456SAndroid Build Coastguard Worker     {"s",      ctype_base::space},
212*58b9f456SAndroid Build Coastguard Worker     {"space",  ctype_base::space},
213*58b9f456SAndroid Build Coastguard Worker     {"upper",  ctype_base::upper},
214*58b9f456SAndroid Build Coastguard Worker     {"w",      regex_traits<char>::__regex_word},
215*58b9f456SAndroid Build Coastguard Worker     {"xdigit", ctype_base::xdigit}
216*58b9f456SAndroid Build Coastguard Worker };
217*58b9f456SAndroid Build Coastguard Worker 
218*58b9f456SAndroid Build Coastguard Worker struct use_strcmp
219*58b9f456SAndroid Build Coastguard Worker {
operator ()__anon31cfe5030111::use_strcmp220*58b9f456SAndroid Build Coastguard Worker     bool operator()(const collationnames& x, const char* y)
221*58b9f456SAndroid Build Coastguard Worker         {return strcmp(x.elem_, y) < 0;}
operator ()__anon31cfe5030111::use_strcmp222*58b9f456SAndroid Build Coastguard Worker     bool operator()(const classnames& x, const char* y)
223*58b9f456SAndroid Build Coastguard Worker         {return strcmp(x.elem_, y) < 0;}
224*58b9f456SAndroid Build Coastguard Worker };
225*58b9f456SAndroid Build Coastguard Worker 
226*58b9f456SAndroid Build Coastguard Worker }
227*58b9f456SAndroid Build Coastguard Worker 
228*58b9f456SAndroid Build Coastguard Worker string
__get_collation_name(const char * s)229*58b9f456SAndroid Build Coastguard Worker __get_collation_name(const char* s)
230*58b9f456SAndroid Build Coastguard Worker {
231*58b9f456SAndroid Build Coastguard Worker     const collationnames* i =
232*58b9f456SAndroid Build Coastguard Worker             _VSTD::lower_bound(begin(collatenames), end(collatenames), s, use_strcmp());
233*58b9f456SAndroid Build Coastguard Worker     string r;
234*58b9f456SAndroid Build Coastguard Worker     if (i != end(collatenames) && strcmp(s, i->elem_) == 0)
235*58b9f456SAndroid Build Coastguard Worker         r = char(i->char_);
236*58b9f456SAndroid Build Coastguard Worker     return r;
237*58b9f456SAndroid Build Coastguard Worker }
238*58b9f456SAndroid Build Coastguard Worker 
239*58b9f456SAndroid Build Coastguard Worker regex_traits<char>::char_class_type
__get_classname(const char * s,bool __icase)240*58b9f456SAndroid Build Coastguard Worker __get_classname(const char* s, bool __icase)
241*58b9f456SAndroid Build Coastguard Worker {
242*58b9f456SAndroid Build Coastguard Worker     const classnames* i =
243*58b9f456SAndroid Build Coastguard Worker             _VSTD::lower_bound(begin(ClassNames), end(ClassNames), s, use_strcmp());
244*58b9f456SAndroid Build Coastguard Worker     regex_traits<char>::char_class_type r = 0;
245*58b9f456SAndroid Build Coastguard Worker     if (i != end(ClassNames) && strcmp(s, i->elem_) == 0)
246*58b9f456SAndroid Build Coastguard Worker     {
247*58b9f456SAndroid Build Coastguard Worker         r = i->mask_;
248*58b9f456SAndroid Build Coastguard Worker         if (r == regex_traits<char>::__regex_word)
249*58b9f456SAndroid Build Coastguard Worker             r |= ctype_base::alnum | ctype_base::upper | ctype_base::lower;
250*58b9f456SAndroid Build Coastguard Worker         else if (__icase)
251*58b9f456SAndroid Build Coastguard Worker         {
252*58b9f456SAndroid Build Coastguard Worker             if (r & (ctype_base::lower | ctype_base::upper))
253*58b9f456SAndroid Build Coastguard Worker                 r |= ctype_base::alpha;
254*58b9f456SAndroid Build Coastguard Worker         }
255*58b9f456SAndroid Build Coastguard Worker     }
256*58b9f456SAndroid Build Coastguard Worker     return r;
257*58b9f456SAndroid Build Coastguard Worker }
258*58b9f456SAndroid Build Coastguard Worker 
259*58b9f456SAndroid Build Coastguard Worker template <>
260*58b9f456SAndroid Build Coastguard Worker void
__exec(__state & __s) const261*58b9f456SAndroid Build Coastguard Worker __match_any_but_newline<char>::__exec(__state& __s) const
262*58b9f456SAndroid Build Coastguard Worker {
263*58b9f456SAndroid Build Coastguard Worker     if (__s.__current_ != __s.__last_)
264*58b9f456SAndroid Build Coastguard Worker     {
265*58b9f456SAndroid Build Coastguard Worker         switch (*__s.__current_)
266*58b9f456SAndroid Build Coastguard Worker         {
267*58b9f456SAndroid Build Coastguard Worker         case '\r':
268*58b9f456SAndroid Build Coastguard Worker         case '\n':
269*58b9f456SAndroid Build Coastguard Worker             __s.__do_ = __state::__reject;
270*58b9f456SAndroid Build Coastguard Worker             __s.__node_ = nullptr;
271*58b9f456SAndroid Build Coastguard Worker             break;
272*58b9f456SAndroid Build Coastguard Worker         default:
273*58b9f456SAndroid Build Coastguard Worker             __s.__do_ = __state::__accept_and_consume;
274*58b9f456SAndroid Build Coastguard Worker             ++__s.__current_;
275*58b9f456SAndroid Build Coastguard Worker             __s.__node_ = this->first();
276*58b9f456SAndroid Build Coastguard Worker             break;
277*58b9f456SAndroid Build Coastguard Worker         }
278*58b9f456SAndroid Build Coastguard Worker     }
279*58b9f456SAndroid Build Coastguard Worker     else
280*58b9f456SAndroid Build Coastguard Worker     {
281*58b9f456SAndroid Build Coastguard Worker         __s.__do_ = __state::__reject;
282*58b9f456SAndroid Build Coastguard Worker         __s.__node_ = nullptr;
283*58b9f456SAndroid Build Coastguard Worker     }
284*58b9f456SAndroid Build Coastguard Worker }
285*58b9f456SAndroid Build Coastguard Worker 
286*58b9f456SAndroid Build Coastguard Worker template <>
287*58b9f456SAndroid Build Coastguard Worker void
__exec(__state & __s) const288*58b9f456SAndroid Build Coastguard Worker __match_any_but_newline<wchar_t>::__exec(__state& __s) const
289*58b9f456SAndroid Build Coastguard Worker {
290*58b9f456SAndroid Build Coastguard Worker     if (__s.__current_ != __s.__last_)
291*58b9f456SAndroid Build Coastguard Worker     {
292*58b9f456SAndroid Build Coastguard Worker         switch (*__s.__current_)
293*58b9f456SAndroid Build Coastguard Worker         {
294*58b9f456SAndroid Build Coastguard Worker         case '\r':
295*58b9f456SAndroid Build Coastguard Worker         case '\n':
296*58b9f456SAndroid Build Coastguard Worker         case 0x2028:
297*58b9f456SAndroid Build Coastguard Worker         case 0x2029:
298*58b9f456SAndroid Build Coastguard Worker             __s.__do_ = __state::__reject;
299*58b9f456SAndroid Build Coastguard Worker             __s.__node_ = nullptr;
300*58b9f456SAndroid Build Coastguard Worker             break;
301*58b9f456SAndroid Build Coastguard Worker         default:
302*58b9f456SAndroid Build Coastguard Worker             __s.__do_ = __state::__accept_and_consume;
303*58b9f456SAndroid Build Coastguard Worker             ++__s.__current_;
304*58b9f456SAndroid Build Coastguard Worker             __s.__node_ = this->first();
305*58b9f456SAndroid Build Coastguard Worker             break;
306*58b9f456SAndroid Build Coastguard Worker         }
307*58b9f456SAndroid Build Coastguard Worker     }
308*58b9f456SAndroid Build Coastguard Worker     else
309*58b9f456SAndroid Build Coastguard Worker     {
310*58b9f456SAndroid Build Coastguard Worker         __s.__do_ = __state::__reject;
311*58b9f456SAndroid Build Coastguard Worker         __s.__node_ = nullptr;
312*58b9f456SAndroid Build Coastguard Worker     }
313*58b9f456SAndroid Build Coastguard Worker }
314*58b9f456SAndroid Build Coastguard Worker 
315*58b9f456SAndroid Build Coastguard Worker _LIBCPP_END_NAMESPACE_STD
316