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