This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Create new perldelta for 5.21.5
[perl5.git] / warnings.h
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*)0)+1)    /* use warnings 'all' */
22 #define pWARN_NONE              (((STRLEN*)0)+2)    /* 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__LEXICAL_TOPIC 53
95 #define WARN_EXPERIMENTAL__REGEX_SETS 54
96 #define WARN_EXPERIMENTAL__SMARTMATCH 55
97
98 /* Warnings Categories added in Perl 5.019 */
99
100 #define WARN_EXPERIMENTAL__AUTODEREF 56
101 #define WARN_EXPERIMENTAL__POSTDEREF 57
102 #define WARN_EXPERIMENTAL__SIGNATURES 58
103 #define WARN_SYSCALLS            59
104
105 /* Warnings Categories added in Perl 5.021 */
106
107 #define WARN_EXPERIMENTAL__WIN32_PERLIO 60
108 #define WARN_MISSING             61
109 #define WARN_REDUNDANT           62
110
111 #define WARNsize                16
112 #define WARN_ALLstring          "\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125"
113 #define WARN_NONEstring         "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
114
115 #define isLEXWARN_on    (PL_curcop->cop_warnings != pWARN_STD)
116 #define isLEXWARN_off   (PL_curcop->cop_warnings == pWARN_STD)
117 #define isWARN_ONCE     (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
118 #define isWARN_on(c,x)  (IsSet((U8 *)(c + 1), 2*(x)))
119 #define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
120
121 #define DUP_WARNINGS(p)         \
122     (specialWARN(p) ? (STRLEN*)(p)      \
123     : (STRLEN*)CopyD(p, PerlMemShared_malloc(sizeof(*p)+*p), sizeof(*p)+*p, \
124                                              char))
125
126 #define ckWARN(w)               Perl_ckwarn(aTHX_ packWARN(w))
127
128 /* The w1, w2 ... should be independent warnings categories; one shouldn't be
129  * a subcategory of any other */
130
131 #define ckWARN2(w1,w2)          Perl_ckwarn(aTHX_ packWARN2(w1,w2))
132 #define ckWARN3(w1,w2,w3)       Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
133 #define ckWARN4(w1,w2,w3,w4)    Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
134
135 #define ckWARN_d(w)             Perl_ckwarn_d(aTHX_ packWARN(w))
136 #define ckWARN2_d(w1,w2)        Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
137 #define ckWARN3_d(w1,w2,w3)     Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
138 #define ckWARN4_d(w1,w2,w3,w4)  Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
139
140 #define WARNshift               8
141
142 #define packWARN(a)             (a                                      )
143
144 /* The a, b, ... should be independent warnings categories; one shouldn't be
145  * a subcategory of any other */
146
147 #define packWARN2(a,b)          ((a) | ((b)<<8)                         )
148 #define packWARN3(a,b,c)        ((a) | ((b)<<8) | ((c)<<16)             )
149 #define packWARN4(a,b,c,d)      ((a) | ((b)<<8) | ((c)<<16) | ((d) <<24))
150
151 #define unpackWARN1(x)          ((x)        & 0xFF)
152 #define unpackWARN2(x)          (((x) >>8)  & 0xFF)
153 #define unpackWARN3(x)          (((x) >>16) & 0xFF)
154 #define unpackWARN4(x)          (((x) >>24) & 0xFF)
155
156 #define ckDEAD(x)                                                       \
157            ( ! specialWARN(PL_curcop->cop_warnings) &&                  \
158             ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) ||          \
159               isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) ||    \
160               isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) ||    \
161               isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) ||    \
162               isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))
163
164 /* end of file warnings.h */
165
166 /* ex: set ro: */