This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
add support for assertions. Updated form of:
[perl5.git] / warnings.h
1 /* !!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
2    This file is built by warnings.pl
3    Any changes made here will be lost!
4 */
5
6
7 #define Off(x)                  ((x) / 8)
8 #define Bit(x)                  (1 << ((x) % 8))
9 #define IsSet(a, x)             ((a)[Off(x)] & Bit(x))
10
11
12 #define G_WARN_OFF              0       /* $^W == 0 */
13 #define G_WARN_ON               1       /* -w flag and $^W != 0 */
14 #define G_WARN_ALL_ON           2       /* -W flag */
15 #define G_WARN_ALL_OFF          4       /* -X flag */
16 #define G_WARN_ONCE             8       /* set if 'once' ever enabled */
17 #define G_WARN_ALL_MASK         (G_WARN_ALL_ON|G_WARN_ALL_OFF)
18
19 #define pWARN_STD               Nullsv
20 #define pWARN_ALL               (Nullsv+1)      /* use warnings 'all' */
21 #define pWARN_NONE              (Nullsv+2)      /* no  warnings 'all' */
22
23 #define specialWARN(x)          ((x) == pWARN_STD || (x) == pWARN_ALL ||        \
24                                  (x) == pWARN_NONE)
25
26 /* Warnings Categories added in Perl 5.008 */
27
28 #define WARN_ALL                0
29 #define WARN_CLOSURE            1
30 #define WARN_DEPRECATED         2
31 #define WARN_EXITING            3
32 #define WARN_GLOB               4
33 #define WARN_IO                 5
34 #define WARN_CLOSED             6
35 #define WARN_EXEC               7
36 #define WARN_LAYER              8
37 #define WARN_NEWLINE            9
38 #define WARN_PIPE               10
39 #define WARN_UNOPENED           11
40 #define WARN_MISC               12
41 #define WARN_NUMERIC            13
42 #define WARN_ONCE               14
43 #define WARN_OVERFLOW           15
44 #define WARN_PACK               16
45 #define WARN_PORTABLE           17
46 #define WARN_RECURSION          18
47 #define WARN_REDEFINE           19
48 #define WARN_REGEXP             20
49 #define WARN_SEVERE             21
50 #define WARN_DEBUGGING          22
51 #define WARN_INPLACE            23
52 #define WARN_INTERNAL           24
53 #define WARN_MALLOC             25
54 #define WARN_SIGNAL             26
55 #define WARN_SUBSTR             27
56 #define WARN_SYNTAX             28
57 #define WARN_AMBIGUOUS          29
58 #define WARN_BAREWORD           30
59 #define WARN_DIGIT              31
60 #define WARN_PARENTHESIS        32
61 #define WARN_PRECEDENCE         33
62 #define WARN_PRINTF             34
63 #define WARN_PROTOTYPE          35
64 #define WARN_QW                 36
65 #define WARN_RESERVED           37
66 #define WARN_SEMICOLON          38
67 #define WARN_TAINT              39
68 #define WARN_THREADS            40
69 #define WARN_UNINITIALIZED      41
70 #define WARN_UNPACK             42
71 #define WARN_UNTIE              43
72 #define WARN_UTF8               44
73 #define WARN_VOID               45
74 #define WARN_Y2K                46
75
76 #define WARNsize                12
77 #define WARN_ALLstring          "\125\125\125\125\125\125\125\125\125\125\125\125"
78 #define WARN_NONEstring         "\0\0\0\0\0\0\0\0\0\0\0\0"
79 #define WARN_TAINTstring        "\0\0\0\0\0\0\0\0\0\100\0\0"
80
81 #define isLEXWARN_on    (PL_curcop->cop_warnings != pWARN_STD)
82 #define isLEXWARN_off   (PL_curcop->cop_warnings == pWARN_STD)
83 #define isWARN_ONCE     (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
84 #define isWARN_on(c,x)  (IsSet(SvPVX(c), 2*(x)))
85 #define isWARNf_on(c,x) (IsSet(SvPVX(c), 2*(x)+1))
86
87 #define ckWARN(x)                                                       \
88         ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE &&     \
89               (PL_curcop->cop_warnings == pWARN_ALL ||                  \
90                isWARN_on(PL_curcop->cop_warnings, x) ) )                \
91           || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
92
93 #define ckWARN2(x,y)                                                    \
94           ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE &&   \
95               (PL_curcop->cop_warnings == pWARN_ALL ||                  \
96                 isWARN_on(PL_curcop->cop_warnings, x)  ||               \
97                 isWARN_on(PL_curcop->cop_warnings, y) ) )               \
98             ||  (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
99
100 #define ckWARN3(x,y,z)                                                  \
101           ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE &&   \
102               (PL_curcop->cop_warnings == pWARN_ALL ||                  \
103                 isWARN_on(PL_curcop->cop_warnings, x)  ||               \
104                 isWARN_on(PL_curcop->cop_warnings, y)  ||               \
105                 isWARN_on(PL_curcop->cop_warnings, z) ) )               \
106             ||  (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
107
108 #define ckWARN4(x,y,z,t)                                                \
109           ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE &&   \
110               (PL_curcop->cop_warnings == pWARN_ALL ||                  \
111                 isWARN_on(PL_curcop->cop_warnings, x)  ||               \
112                 isWARN_on(PL_curcop->cop_warnings, y)  ||               \
113                 isWARN_on(PL_curcop->cop_warnings, z)  ||               \
114                 isWARN_on(PL_curcop->cop_warnings, t) ) )               \
115             ||  (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
116
117 #define ckWARN_d(x)                                                     \
118           (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL ||     \
119              (PL_curcop->cop_warnings != pWARN_NONE &&                  \
120               isWARN_on(PL_curcop->cop_warnings, x) ) )
121
122 #define ckWARN2_d(x,y)                                                  \
123           (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL ||     \
124              (PL_curcop->cop_warnings != pWARN_NONE &&                  \
125                 (isWARN_on(PL_curcop->cop_warnings, x)  ||              \
126                  isWARN_on(PL_curcop->cop_warnings, y) ) ) )
127
128 #define ckWARN3_d(x,y,z)                                                \
129           (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL ||     \
130              (PL_curcop->cop_warnings != pWARN_NONE &&                  \
131                 (isWARN_on(PL_curcop->cop_warnings, x)  ||              \
132                  isWARN_on(PL_curcop->cop_warnings, y)  ||              \
133                  isWARN_on(PL_curcop->cop_warnings, z) ) ) )
134
135 #define ckWARN4_d(x,y,z,t)                                              \
136           (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL ||     \
137              (PL_curcop->cop_warnings != pWARN_NONE &&                  \
138                 (isWARN_on(PL_curcop->cop_warnings, x)  ||              \
139                  isWARN_on(PL_curcop->cop_warnings, y)  ||              \
140                  isWARN_on(PL_curcop->cop_warnings, z)  ||              \
141                  isWARN_on(PL_curcop->cop_warnings, t) ) ) )
142
143 #define packWARN(a)             (a                                 )
144 #define packWARN2(a,b)          ((a) | (b)<<8                      )
145 #define packWARN3(a,b,c)        ((a) | (b)<<8 | (c) <<16           )
146 #define packWARN4(a,b,c,d)      ((a) | (b)<<8 | (c) <<16 | (d) <<24)
147
148 #define unpackWARN1(x)          ((x)        & 0xFF)
149 #define unpackWARN2(x)          (((x) >>8)  & 0xFF)
150 #define unpackWARN3(x)          (((x) >>16) & 0xFF)
151 #define unpackWARN4(x)          (((x) >>24) & 0xFF)
152
153 #define ckDEAD(x)                                                       \
154            ( ! specialWARN(PL_curcop->cop_warnings) &&                  \
155             ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) ||          \
156               isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) ||    \
157               isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) ||    \
158               isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) ||    \
159               isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))
160
161 /* end of file warnings.h */
162