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! 5 */ 6 7 8 #define Off(x) ((x) / 8) 9 #define Bit(x) (1 << ((x) % 8)) 10 #define IsSet(a, x) ((a)[Off(x)] & Bit(x)) 11 12 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) 19 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' */ 23 24 #define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \ 25 (x) == pWARN_NONE) 26 27 /* if PL_warnhook is set to this value, then warnings die */ 28 #define PERL_WARNHOOK_FATAL (&PL_sv_placeholder) 29 30 /* Warnings Categories added in Perl 5.008 */ 31 32 #define WARN_ALL 0 33 #define WARN_CLOSURE 1 34 #define WARN_DEPRECATED 2 35 #define WARN_EXITING 3 36 #define WARN_GLOB 4 37 #define WARN_IO 5 38 #define WARN_CLOSED 6 39 #define WARN_EXEC 7 40 #define WARN_LAYER 8 41 #define WARN_NEWLINE 9 42 #define WARN_PIPE 10 43 #define WARN_UNOPENED 11 44 #define WARN_MISC 12 45 #define WARN_NUMERIC 13 46 #define WARN_ONCE 14 47 #define WARN_OVERFLOW 15 48 #define WARN_PACK 16 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 63 #define WARN_DIGIT 31 64 #define WARN_PARENTHESIS 32 65 #define WARN_PRECEDENCE 33 66 #define WARN_PRINTF 34 67 #define WARN_PROTOTYPE 35 68 #define WARN_QW 36 69 #define WARN_RESERVED 37 70 #define WARN_SEMICOLON 38 71 #define WARN_TAINT 39 72 #define WARN_THREADS 40 73 #define WARN_UNINITIALIZED 41 74 #define WARN_UNPACK 42 75 #define WARN_UNTIE 43 76 #define WARN_UTF8 44 77 #define WARN_VOID 45 78 79 /* Warnings Categories added in Perl 5.011 */ 80 81 #define WARN_IMPRECISION 46 82 #define WARN_ILLEGALPROTO 47 83 84 /* Warnings Categories added in Perl 5.013 */ 85 86 #define WARN_NON_UNICODE 48 87 #define WARN_NONCHAR 49 88 #define WARN_SURROGATE 50 89 90 /* Warnings Categories added in Perl 5.017 */ 91 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 96 97 /* Warnings Categories added in Perl 5.019 */ 98 99 #define WARN_EXPERIMENTAL__POSTDEREF 55 100 #define WARN_EXPERIMENTAL__SIGNATURES 56 101 #define WARN_SYSCALLS 57 102 103 /* Warnings Categories added in Perl 5.021 */ 104 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 113 114 /* Warnings Categories added in Perl 5.025 */ 115 116 #define WARN_EXPERIMENTAL__DECLARED_REFS 66 117 118 /* Warnings Categories added in Perl 5.027 */ 119 120 #define WARN_EXPERIMENTAL__ALPHA_ASSERTIONS 67 121 #define WARN_EXPERIMENTAL__SCRIPT_RUN 68 122 #define WARN_SHADOW 69 123 124 /* Warnings Categories added in Perl 5.029 */ 125 126 #define WARN_EXPERIMENTAL__PRIVATE_USE 70 127 #define WARN_EXPERIMENTAL__UNIPROP_WILDCARDS 71 128 #define WARN_EXPERIMENTAL__VLB 72 129 130 /* Warnings Categories added in Perl 5.031 */ 131 132 #define WARN_EXPERIMENTAL__ISA 73 133 134 135 /* 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 210 211 =cut 212 */ 213 214 #define WARNsize 19 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" 217 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)) 225 226 #define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p) 227 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; \ 231 } STMT_END 232 233 /* 234 235 =head1 Warning and Dieing 236 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 242 the calls below. 243 244 =for apidoc Am|bool|ckWARN|U32 w 245 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. 249 250 =for apidoc Am|bool|ckWARN_d|U32 w 251 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>>. 254 255 =for apidoc Am|bool|ckWARN2|U32 w1|U32 w2 256 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. 262 263 =for apidoc Am|bool|ckWARN2_d|U32 w1|U32 w2 264 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>>. 267 268 =for apidoc Am|bool|ckWARN3|U32 w1|U32 w2|U32 w3 269 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. 275 276 =for apidoc Am|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3 277 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>>. 280 281 =for apidoc Am|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4 282 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. 288 289 =for apidoc Am|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4 290 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>>. 293 294 =cut 295 296 */ 297 298 #define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w)) 299 300 /* The w1, w2 ... should be independent warnings categories; one shouldn't be 301 * a subcategory of any other */ 302 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)) 306 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)) 311 312 #define WARNshift 8 313 314 #define packWARN(a) (a ) 315 316 /* The a, b, ... should be independent warnings categories; one shouldn't be 317 * a subcategory of any other */ 318 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)) 322 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) 327 328 #define ckDEAD(x) \ 329 (PL_curcop && \ 330 !specialWARN(PL_curcop->cop_warnings) && \ 331 (isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \ 332 (unpackWARN2(x) && \ 333 (isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \ 334 (unpackWARN3(x) && \ 335 (isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \ 336 (unpackWARN4(x) && \ 337 isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))))))) 338 339 /* end of file warnings.h */ 340 341 /* ex: set ro: */ 342