1 /* -*- buffer-read-only: t -*-
2 !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
3 This file is built by regen/warnings.pl.
4 Any changes made here will be lost!
8 #define Off(x) ((x) / 8)
9 #define Bit(x) (1 << ((x) % 8))
10 #define IsSet(a, x) ((a)[Off(x)] & Bit(x))
13 #define G_WARN_OFF 0 /* $^W == 0 */
14 #define G_WARN_ON 1 /* -w flag and $^W != 0 */
15 #define G_WARN_ALL_ON 2 /* -W flag */
16 #define G_WARN_ALL_OFF 4 /* -X flag */
17 #define G_WARN_ONCE 8 /* set if 'once' ever enabled */
18 #define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF)
20 #define pWARN_STD NULL
21 #define pWARN_ALL (STRLEN *) &PL_WARN_ALL /* use warnings 'all' */
22 #define pWARN_NONE (STRLEN *) &PL_WARN_NONE /* no warnings 'all' */
24 #define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \
27 /* if PL_warnhook is set to this value, then warnings die */
28 #define PERL_WARNHOOK_FATAL (&PL_sv_placeholder)
30 /* Warnings Categories added in Perl 5.008 */
33 #define WARN_CLOSURE 1
34 #define WARN_DEPRECATED 2
35 #define WARN_EXITING 3
41 #define WARN_NEWLINE 9
43 #define WARN_UNOPENED 11
45 #define WARN_NUMERIC 13
47 #define WARN_OVERFLOW 15
49 #define WARN_PORTABLE 17
50 #define WARN_RECURSION 18
51 #define WARN_REDEFINE 19
52 #define WARN_REGEXP 20
53 #define WARN_SEVERE 21
54 #define WARN_DEBUGGING 22
55 #define WARN_INPLACE 23
56 #define WARN_INTERNAL 24
57 #define WARN_MALLOC 25
58 #define WARN_SIGNAL 26
59 #define WARN_SUBSTR 27
60 #define WARN_SYNTAX 28
61 #define WARN_AMBIGUOUS 29
62 #define WARN_BAREWORD 30
64 #define WARN_PARENTHESIS 32
65 #define WARN_PRECEDENCE 33
66 #define WARN_PRINTF 34
67 #define WARN_PROTOTYPE 35
69 #define WARN_RESERVED 37
70 #define WARN_SEMICOLON 38
72 #define WARN_THREADS 40
73 #define WARN_UNINITIALIZED 41
74 #define WARN_UNPACK 42
79 /* Warnings Categories added in Perl 5.011 */
81 #define WARN_IMPRECISION 46
82 #define WARN_ILLEGALPROTO 47
84 /* Warnings Categories added in Perl 5.013 */
86 #define WARN_NON_UNICODE 48
87 #define WARN_NONCHAR 49
88 #define WARN_SURROGATE 50
90 /* Warnings Categories added in Perl 5.017 */
92 #define WARN_EXPERIMENTAL 51
93 #define WARN_EXPERIMENTAL__LEXICAL_SUBS 52
94 #define WARN_EXPERIMENTAL__REGEX_SETS 53
95 #define WARN_EXPERIMENTAL__SMARTMATCH 54
97 /* Warnings Categories added in Perl 5.019 */
99 #define WARN_EXPERIMENTAL__POSTDEREF 55
100 #define WARN_EXPERIMENTAL__SIGNATURES 56
101 #define WARN_SYSCALLS 57
103 /* Warnings Categories added in Perl 5.021 */
105 #define WARN_EXPERIMENTAL__BITWISE 58
106 #define WARN_EXPERIMENTAL__CONST_ATTR 59
107 #define WARN_EXPERIMENTAL__RE_STRICT 60
108 #define WARN_EXPERIMENTAL__REFALIASING 61
109 #define WARN_EXPERIMENTAL__WIN32_PERLIO 62
110 #define WARN_LOCALE 63
111 #define WARN_MISSING 64
112 #define WARN_REDUNDANT 65
114 /* Warnings Categories added in Perl 5.025 */
116 #define WARN_EXPERIMENTAL__DECLARED_REFS 66
118 /* Warnings Categories added in Perl 5.027 */
120 #define WARN_EXPERIMENTAL__ALPHA_ASSERTIONS 67
121 #define WARN_EXPERIMENTAL__SCRIPT_RUN 68
122 #define WARN_SHADOW 69
124 /* Warnings Categories added in Perl 5.029 */
126 #define WARN_EXPERIMENTAL__PRIVATE_USE 70
127 #define WARN_EXPERIMENTAL__UNIPROP_WILDCARDS 71
128 #define WARN_EXPERIMENTAL__VLB 72
130 /* Warnings Categories added in Perl 5.031 */
132 #define WARN_EXPERIMENTAL__ISA 73
136 =for apidoc Amnh||WARN_ALL
137 =for apidoc Amnh||WARN_CLOSURE
138 =for apidoc Amnh||WARN_DEPRECATED
139 =for apidoc Amnh||WARN_EXITING
140 =for apidoc Amnh||WARN_GLOB
141 =for apidoc Amnh||WARN_IO
142 =for apidoc Amnh||WARN_CLOSED
143 =for apidoc Amnh||WARN_EXEC
144 =for apidoc Amnh||WARN_LAYER
145 =for apidoc Amnh||WARN_NEWLINE
146 =for apidoc Amnh||WARN_PIPE
147 =for apidoc Amnh||WARN_UNOPENED
148 =for apidoc Amnh||WARN_MISC
149 =for apidoc Amnh||WARN_NUMERIC
150 =for apidoc Amnh||WARN_ONCE
151 =for apidoc Amnh||WARN_OVERFLOW
152 =for apidoc Amnh||WARN_PACK
153 =for apidoc Amnh||WARN_PORTABLE
154 =for apidoc Amnh||WARN_RECURSION
155 =for apidoc Amnh||WARN_REDEFINE
156 =for apidoc Amnh||WARN_REGEXP
157 =for apidoc Amnh||WARN_SEVERE
158 =for apidoc Amnh||WARN_DEBUGGING
159 =for apidoc Amnh||WARN_INPLACE
160 =for apidoc Amnh||WARN_INTERNAL
161 =for apidoc Amnh||WARN_MALLOC
162 =for apidoc Amnh||WARN_SIGNAL
163 =for apidoc Amnh||WARN_SUBSTR
164 =for apidoc Amnh||WARN_SYNTAX
165 =for apidoc Amnh||WARN_AMBIGUOUS
166 =for apidoc Amnh||WARN_BAREWORD
167 =for apidoc Amnh||WARN_DIGIT
168 =for apidoc Amnh||WARN_PARENTHESIS
169 =for apidoc Amnh||WARN_PRECEDENCE
170 =for apidoc Amnh||WARN_PRINTF
171 =for apidoc Amnh||WARN_PROTOTYPE
172 =for apidoc Amnh||WARN_QW
173 =for apidoc Amnh||WARN_RESERVED
174 =for apidoc Amnh||WARN_SEMICOLON
175 =for apidoc Amnh||WARN_TAINT
176 =for apidoc Amnh||WARN_THREADS
177 =for apidoc Amnh||WARN_UNINITIALIZED
178 =for apidoc Amnh||WARN_UNPACK
179 =for apidoc Amnh||WARN_UNTIE
180 =for apidoc Amnh||WARN_UTF8
181 =for apidoc Amnh||WARN_VOID
182 =for apidoc Amnh||WARN_IMPRECISION
183 =for apidoc Amnh||WARN_ILLEGALPROTO
184 =for apidoc Amnh||WARN_NON_UNICODE
185 =for apidoc Amnh||WARN_NONCHAR
186 =for apidoc Amnh||WARN_SURROGATE
187 =for apidoc Amnh||WARN_EXPERIMENTAL
188 =for apidoc Amnh||WARN_EXPERIMENTAL__LEXICAL_SUBS
189 =for apidoc Amnh||WARN_EXPERIMENTAL__REGEX_SETS
190 =for apidoc Amnh||WARN_EXPERIMENTAL__SMARTMATCH
191 =for apidoc Amnh||WARN_EXPERIMENTAL__POSTDEREF
192 =for apidoc Amnh||WARN_EXPERIMENTAL__SIGNATURES
193 =for apidoc Amnh||WARN_SYSCALLS
194 =for apidoc Amnh||WARN_EXPERIMENTAL__BITWISE
195 =for apidoc Amnh||WARN_EXPERIMENTAL__CONST_ATTR
196 =for apidoc Amnh||WARN_EXPERIMENTAL__RE_STRICT
197 =for apidoc Amnh||WARN_EXPERIMENTAL__REFALIASING
198 =for apidoc Amnh||WARN_EXPERIMENTAL__WIN32_PERLIO
199 =for apidoc Amnh||WARN_LOCALE
200 =for apidoc Amnh||WARN_MISSING
201 =for apidoc Amnh||WARN_REDUNDANT
202 =for apidoc Amnh||WARN_EXPERIMENTAL__DECLARED_REFS
203 =for apidoc Amnh||WARN_EXPERIMENTAL__ALPHA_ASSERTIONS
204 =for apidoc Amnh||WARN_EXPERIMENTAL__SCRIPT_RUN
205 =for apidoc Amnh||WARN_SHADOW
206 =for apidoc Amnh||WARN_EXPERIMENTAL__PRIVATE_USE
207 =for apidoc Amnh||WARN_EXPERIMENTAL__UNIPROP_WILDCARDS
208 =for apidoc Amnh||WARN_EXPERIMENTAL__VLB
209 =for apidoc Amnh||WARN_EXPERIMENTAL__ISA
215 #define WARN_ALLstring "\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125"
216 #define WARN_NONEstring "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
218 #define isLEXWARN_on \
219 cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD)
220 #define isLEXWARN_off \
221 cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD)
222 #define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
223 #define isWARN_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)))
224 #define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
226 #define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p)
228 #define free_and_set_cop_warnings(cmp,w) STMT_START { \
229 if (!specialWARN((cmp)->cop_warnings)) PerlMemShared_free((cmp)->cop_warnings); \
230 (cmp)->cop_warnings = w; \
235 =head1 Warning and Dieing
237 In all these calls, the C<U32 wI<n>> parameters are warning category
238 constants. You can see the ones currently available in
239 L<warnings/Category Hierarchy>, just capitalize all letters in the names
240 and prefix them by C<WARN_>. So, for example, the category C<void> used in a
241 perl program becomes C<WARN_VOID> when used in XS code and passed to one of
244 =for apidoc Am|bool|ckWARN|U32 w
246 Returns a boolean as to whether or not warnings are enabled for the warning
247 category C<w>. If the category is by default enabled even if not within the
248 scope of S<C<use warnings>>, instead use the L</ckWARN_d> macro.
250 =for apidoc Am|bool|ckWARN_d|U32 w
252 Like C<L</ckWARN>>, but for use if and only if the warning category is by
253 default enabled even if not within the scope of S<C<use warnings>>.
255 =for apidoc Am|bool|ckWARN2|U32 w1|U32 w2
257 Like C<L</ckWARN>>, but takes two warnings categories as input, and returns
258 TRUE if either is enabled. If either category is by default enabled even if
259 not within the scope of S<C<use warnings>>, instead use the L</ckWARN2_d>
260 macro. The categories must be completely independent, one may not be
261 subclassed from the other.
263 =for apidoc Am|bool|ckWARN2_d|U32 w1|U32 w2
265 Like C<L</ckWARN2>>, but for use if and only if either warning category is by
266 default enabled even if not within the scope of S<C<use warnings>>.
268 =for apidoc Am|bool|ckWARN3|U32 w1|U32 w2|U32 w3
270 Like C<L</ckWARN2>>, but takes three warnings categories as input, and returns
271 TRUE if any is enabled. If any of the categories is by default enabled even
272 if not within the scope of S<C<use warnings>>, instead use the L</ckWARN3_d>
273 macro. The categories must be completely independent, one may not be
274 subclassed from any other.
276 =for apidoc Am|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3
278 Like C<L</ckWARN3>>, but for use if and only if any of the warning categories
279 is by default enabled even if not within the scope of S<C<use warnings>>.
281 =for apidoc Am|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4
283 Like C<L</ckWARN3>>, but takes four warnings categories as input, and returns
284 TRUE if any is enabled. If any of the categories is by default enabled even
285 if not within the scope of S<C<use warnings>>, instead use the L</ckWARN4_d>
286 macro. The categories must be completely independent, one may not be
287 subclassed from any other.
289 =for apidoc Am|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4
291 Like C<L</ckWARN4>>, but for use if and only if any of the warning categories
292 is by default enabled even if not within the scope of S<C<use warnings>>.
298 #define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
300 /* The w1, w2 ... should be independent warnings categories; one shouldn't be
301 * a subcategory of any other */
303 #define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
304 #define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
305 #define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
307 #define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
308 #define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
309 #define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
310 #define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
314 #define packWARN(a) (a )
316 /* The a, b, ... should be independent warnings categories; one shouldn't be
317 * a subcategory of any other */
319 #define packWARN2(a,b) ((a) | ((b)<<8) )
320 #define packWARN3(a,b,c) ((a) | ((b)<<8) | ((c)<<16) )
321 #define packWARN4(a,b,c,d) ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
323 #define unpackWARN1(x) ((x) & 0xFF)
324 #define unpackWARN2(x) (((x) >>8) & 0xFF)
325 #define unpackWARN3(x) (((x) >>16) & 0xFF)
326 #define unpackWARN4(x) (((x) >>24) & 0xFF)
330 !specialWARN(PL_curcop->cop_warnings) && \
331 (isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \
333 (isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \
335 (isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \
337 isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x)))))))))
339 /* end of file warnings.h */