]>
Commit | Line | Data |
---|---|---|
1b01963a | 1 | // Errors for std::regex -*- C++ -*- |
849cab7b | 2 | |
83ffe9cd | 3 | // Copyright (C) 2010-2023 Free Software Foundation, Inc. |
849cab7b SW |
4 | // |
5 | // This file is part of the GNU ISO C++ Library. This library is free | |
6 | // software; you can redistribute it and/or modify it under the | |
7 | // terms of the GNU General Public License as published by the | |
8 | // Free Software Foundation; either version 3, or (at your option) | |
9 | // any later version. | |
10 | ||
11 | // This library is distributed in the hope that it will be useful, | |
12 | // but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | // GNU General Public License for more details. | |
15 | ||
16 | // Under Section 7 of GPL version 3, you are granted additional | |
17 | // permissions described in the GCC Runtime Library Exception, version | |
18 | // 3.1, as published by the Free Software Foundation. | |
19 | ||
20 | // You should have received a copy of the GNU General Public License and | |
21 | // a copy of the GCC Runtime Library Exception along with this program; | |
22 | // see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
23 | // <http://www.gnu.org/licenses/>. | |
24 | ||
25 | /** | |
21ffc3f7 | 26 | * @file bits/regex_error.h |
849cab7b SW |
27 | * @brief Error and exception objects for the std regex library. |
28 | * | |
29 | * This is an internal header file, included by other library headers. | |
f910786b | 30 | * Do not attempt to use it directly. @headername{regex} |
849cab7b SW |
31 | */ |
32 | ||
12ffa228 BK |
33 | namespace std _GLIBCXX_VISIBILITY(default) |
34 | { | |
4a15d842 FD |
35 | _GLIBCXX_BEGIN_NAMESPACE_VERSION |
36 | ||
e07b233d BK |
37 | /** |
38 | * @addtogroup regex | |
39 | * @{ | |
40 | */ | |
41 | ||
849cab7b SW |
42 | namespace regex_constants |
43 | { | |
44 | /** | |
45 | * @name 5.3 Error Types | |
46 | */ | |
f0b88346 | 47 | ///@{ |
6cb784b6 | 48 | |
849cab7b SW |
49 | enum error_type |
50 | { | |
63bb98e1 | 51 | _S_error_collate, // XXX should have been a non-zero value |
849cab7b SW |
52 | _S_error_ctype, |
53 | _S_error_escape, | |
54 | _S_error_backref, | |
55 | _S_error_brack, | |
56 | _S_error_paren, | |
57 | _S_error_brace, | |
58 | _S_error_badbrace, | |
59 | _S_error_range, | |
60 | _S_error_space, | |
61 | _S_error_badrepeat, | |
62 | _S_error_complexity, | |
63 | _S_error_stack, | |
9ca4c42a JW |
64 | _S_null, |
65 | _S_grammar | |
849cab7b SW |
66 | }; |
67 | ||
68 | /** The expression contained an invalid collating element name. */ | |
e3b10249 | 69 | _GLIBCXX17_INLINE constexpr error_type error_collate(_S_error_collate); |
849cab7b SW |
70 | |
71 | /** The expression contained an invalid character class name. */ | |
e3b10249 | 72 | _GLIBCXX17_INLINE constexpr error_type error_ctype(_S_error_ctype); |
849cab7b SW |
73 | |
74 | /** | |
75 | * The expression contained an invalid escaped character, or a trailing | |
76 | * escape. | |
77 | */ | |
e3b10249 | 78 | _GLIBCXX17_INLINE constexpr error_type error_escape(_S_error_escape); |
849cab7b SW |
79 | |
80 | /** The expression contained an invalid back reference. */ | |
e3b10249 | 81 | _GLIBCXX17_INLINE constexpr error_type error_backref(_S_error_backref); |
849cab7b SW |
82 | |
83 | /** The expression contained mismatched [ and ]. */ | |
e3b10249 | 84 | _GLIBCXX17_INLINE constexpr error_type error_brack(_S_error_brack); |
849cab7b SW |
85 | |
86 | /** The expression contained mismatched ( and ). */ | |
e3b10249 | 87 | _GLIBCXX17_INLINE constexpr error_type error_paren(_S_error_paren); |
849cab7b SW |
88 | |
89 | /** The expression contained mismatched { and } */ | |
e3b10249 | 90 | _GLIBCXX17_INLINE constexpr error_type error_brace(_S_error_brace); |
849cab7b SW |
91 | |
92 | /** The expression contained an invalid range in a {} expression. */ | |
e3b10249 | 93 | _GLIBCXX17_INLINE constexpr error_type error_badbrace(_S_error_badbrace); |
849cab7b SW |
94 | |
95 | /** | |
96 | * The expression contained an invalid character range, | |
97 | * such as [b-a] in most encodings. | |
98 | */ | |
e3b10249 | 99 | _GLIBCXX17_INLINE constexpr error_type error_range(_S_error_range); |
849cab7b SW |
100 | |
101 | /** | |
102 | * There was insufficient memory to convert the expression into a | |
103 | * finite state machine. | |
104 | */ | |
e3b10249 | 105 | _GLIBCXX17_INLINE constexpr error_type error_space(_S_error_space); |
849cab7b SW |
106 | |
107 | /** | |
93c66bc6 | 108 | * One of <em>*?+{</em> was not preceded by a valid regular expression. |
849cab7b | 109 | */ |
e3b10249 | 110 | _GLIBCXX17_INLINE constexpr error_type error_badrepeat(_S_error_badrepeat); |
849cab7b SW |
111 | |
112 | /** | |
113 | * The complexity of an attempted match against a regular expression | |
114 | * exceeded a pre-set level. | |
115 | */ | |
e3b10249 | 116 | _GLIBCXX17_INLINE constexpr error_type error_complexity(_S_error_complexity); |
849cab7b SW |
117 | |
118 | /** | |
119 | * There was insufficient memory to determine whether the | |
120 | * regular expression could match the specified character sequence. | |
121 | */ | |
e3b10249 | 122 | _GLIBCXX17_INLINE constexpr error_type error_stack(_S_error_stack); |
849cab7b | 123 | |
f0b88346 | 124 | ///@} |
12ffa228 BK |
125 | } // namespace regex_constants |
126 | ||
849cab7b SW |
127 | // [7.8] Class regex_error |
128 | /** | |
129 | * @brief A regular expression exception class. | |
130 | * @ingroup exceptions | |
131 | * | |
132 | * The regular expression library throws objects of this class on error. | |
1b01963a JW |
133 | * |
134 | * @headerfile regex | |
135 | * @since C++11 | |
849cab7b | 136 | */ |
cedf52d2 | 137 | class regex_error : public std::runtime_error |
849cab7b | 138 | { |
260a5334 JW |
139 | using error_type = regex_constants::error_type; |
140 | ||
141 | error_type _M_code; | |
cedf52d2 | 142 | |
849cab7b SW |
143 | public: |
144 | /** | |
145 | * @brief Constructs a regex_error object. | |
146 | * | |
93c66bc6 | 147 | * @param __ecode the regex error code. |
849cab7b SW |
148 | */ |
149 | explicit | |
260a5334 | 150 | regex_error(error_type __ecode); |
cedf52d2 BK |
151 | |
152 | virtual ~regex_error() throw(); | |
849cab7b SW |
153 | |
154 | /** | |
155 | * @brief Gets the regex error code. | |
156 | * | |
157 | * @returns the regex error code. | |
158 | */ | |
159 | regex_constants::error_type | |
df0dd04b | 160 | code() const noexcept |
849cab7b | 161 | { return _M_code; } |
236d76c4 TS |
162 | |
163 | private: | |
1b01963a | 164 | /// @cond undocumented |
260a5334 | 165 | regex_error(error_type __ecode, const char* __what) |
236d76c4 TS |
166 | : std::runtime_error(__what), _M_code(__ecode) |
167 | { } | |
168 | ||
260a5334 JW |
169 | [[__noreturn__]] |
170 | friend void | |
171 | __throw_regex_error(error_type __ecode __attribute__((__unused__)), | |
172 | const char* __what __attribute__((__unused__))) | |
173 | { _GLIBCXX_THROW_OR_ABORT(regex_error(__ecode, __what)); } | |
1b01963a | 174 | /// @endcond |
849cab7b SW |
175 | }; |
176 | ||
260a5334 | 177 | /// @cond undocumented |
849cab7b | 178 | |
260a5334 | 179 | [[__noreturn__]] |
2a86b404 BK |
180 | void |
181 | __throw_regex_error(regex_constants::error_type __ecode); | |
849cab7b | 182 | |
260a5334 | 183 | [[__noreturn__]] |
236d76c4 | 184 | inline void |
260a5334 JW |
185 | __throw_regex_error(regex_constants::error_type __ecode, const char* __what); |
186 | ||
187 | /// @endcond | |
188 | ||
189 | ///@} // group regex | |
236d76c4 | 190 | |
12ffa228 BK |
191 | _GLIBCXX_END_NAMESPACE_VERSION |
192 | } // namespace std |