1 ################################################################################
3 ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
4 ## Version 2.x, Copyright (C) 2001, Paul Marquess.
5 ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
7 ## This program is free software; you can redistribute it and/or
8 ## modify it under the same terms as Perl itself.
10 ################################################################################
27 __UNDEFINED__ WARN_ALL 0
28 __UNDEFINED__ WARN_CLOSURE 1
29 __UNDEFINED__ WARN_DEPRECATED 2
30 __UNDEFINED__ WARN_EXITING 3
31 __UNDEFINED__ WARN_GLOB 4
32 __UNDEFINED__ WARN_IO 5
33 __UNDEFINED__ WARN_CLOSED 6
34 __UNDEFINED__ WARN_EXEC 7
35 __UNDEFINED__ WARN_LAYER 8
36 __UNDEFINED__ WARN_NEWLINE 9
37 __UNDEFINED__ WARN_PIPE 10
38 __UNDEFINED__ WARN_UNOPENED 11
39 __UNDEFINED__ WARN_MISC 12
40 __UNDEFINED__ WARN_NUMERIC 13
41 __UNDEFINED__ WARN_ONCE 14
42 __UNDEFINED__ WARN_OVERFLOW 15
43 __UNDEFINED__ WARN_PACK 16
44 __UNDEFINED__ WARN_PORTABLE 17
45 __UNDEFINED__ WARN_RECURSION 18
46 __UNDEFINED__ WARN_REDEFINE 19
47 __UNDEFINED__ WARN_REGEXP 20
48 __UNDEFINED__ WARN_SEVERE 21
49 __UNDEFINED__ WARN_DEBUGGING 22
50 __UNDEFINED__ WARN_INPLACE 23
51 __UNDEFINED__ WARN_INTERNAL 24
52 __UNDEFINED__ WARN_MALLOC 25
53 __UNDEFINED__ WARN_SIGNAL 26
54 __UNDEFINED__ WARN_SUBSTR 27
55 __UNDEFINED__ WARN_SYNTAX 28
56 __UNDEFINED__ WARN_AMBIGUOUS 29
57 __UNDEFINED__ WARN_BAREWORD 30
58 __UNDEFINED__ WARN_DIGIT 31
59 __UNDEFINED__ WARN_PARENTHESIS 32
60 __UNDEFINED__ WARN_PRECEDENCE 33
61 __UNDEFINED__ WARN_PRINTF 34
62 __UNDEFINED__ WARN_PROTOTYPE 35
63 __UNDEFINED__ WARN_QW 36
64 __UNDEFINED__ WARN_RESERVED 37
65 __UNDEFINED__ WARN_SEMICOLON 38
66 __UNDEFINED__ WARN_TAINT 39
67 __UNDEFINED__ WARN_THREADS 40
68 __UNDEFINED__ WARN_UNINITIALIZED 41
69 __UNDEFINED__ WARN_UNPACK 42
70 __UNDEFINED__ WARN_UNTIE 43
71 __UNDEFINED__ WARN_UTF8 44
72 __UNDEFINED__ WARN_VOID 45
73 __UNDEFINED__ WARN_ASSERTIONS 46
75 __UNDEFINED__ packWARN(a) (a)
76 __UNDEFINED__ packWARN2(a,b) (packWARN(a) << 8 | (b))
77 __UNDEFINED__ packWARN3(a,b,c) (packWARN2(a,b) << 8 | (c))
78 __UNDEFINED__ packWARN4(a,b,c,d) (packWARN3(a,b,c) << 8 | (d))
82 # define ckWARN(a) (PL_dowarn & G_WARN_ON)
84 # define ckWARN(a) PL_dowarn
88 __UNDEFINED__ ckWARN2(a,b) (ckWARN(a) || ckWARN(b))
89 __UNDEFINED__ ckWARN3(a,b,c) (ckWARN(c) || ckWARN2(a,b))
90 __UNDEFINED__ ckWARN4(a,b,c,d) (ckWARN(d) || ckWARN3(a,b,c))
94 # define ckWARN_d(a) (isLEXWARN_off || ckWARN(a))
96 # define ckWARN_d(a) 1
100 __UNDEFINED__ ckWARN2_d(a,b) (ckWARN_d(a) || ckWARN_d(b))
101 __UNDEFINED__ ckWARN3_d(a,b,c) (ckWARN_d(c) || ckWARN2_d(a,b))
102 __UNDEFINED__ ckWARN4_d(a,b,c,d) (ckWARN_d(d) || ckWARN3_d(a,b,c))
104 __UNDEFINED__ vwarner(err, pat, argsp) \
105 STMT_START { SV *sv; \
106 PERL_UNUSED_ARG(err); \
107 sv = vnewSVpvf(pat, argsp); \
109 warn("%s", SvPV_nolen(sv)); \
113 #if { VERSION >= 5.004 } && !defined(warner)
117 warner(U32 err, const char *pat, ...)
121 vwarner(err, pat, &args);
125 # define warner Perl_warner
127 # define Perl_warner_nocontext Perl_warner
132 #if { VERSION >= 5.004 } && !defined(ck_warner)
133 # if { NEED ck_warner }
136 ck_warner(pTHX_ U32 err, const char *pat, ...)
140 if ( ! ckWARN((err ) & 0xFF)
141 && ! ckWARN((err >> 8) & 0xFF)
142 && ! ckWARN((err >> 16) & 0xFF)
143 && ! ckWARN((err >> 24) & 0xFF))
149 vwarner(err, pat, &args);
153 # define ck_warner Perl_ck_warner
157 #if { VERSION >= 5.004 } && !defined(ck_warner_d)
158 # if { NEED ck_warner_d }
161 ck_warner_d(pTHX_ U32 err, const char *pat, ...)
165 if ( ! ckWARN_d((err ) & 0xFF)
166 && ! ckWARN_d((err >> 8) & 0xFF)
167 && ! ckWARN_d((err >> 16) & 0xFF)
168 && ! ckWARN_d((err >> 24) & 0xFF))
174 vwarner(err, pat, &args);
178 # define ck_warner_d Perl_ck_warner_d
187 #define NEED_ck_warner
188 #define NEED_ck_warner_d
195 #if { VERSION >= 5.004 }
196 warner(packWARN(WARN_MISC), "warner %s:%d", "bar", 42);
202 #if { VERSION >= 5.004 }
203 Perl_warner(aTHX_ packWARN(WARN_MISC), "Perl_warner %s:%d", "bar", 42);
209 #if { VERSION >= 5.004 }
210 Perl_ck_warner(aTHX_ packWARN(WARN_MISC), "Perl_ck_warner %s:%d", "bar", 42);
216 #if { VERSION >= 5.004 }
217 Perl_ck_warner_d(aTHX_ packWARN(WARN_MISC), "Perl_ck_warner_d %s:%d", "bar", 42);
221 Perl_warner_nocontext()
223 #if { VERSION >= 5.004 }
224 Perl_warner_nocontext(packWARN(WARN_MISC), "Perl_warner_nocontext %s:%d", "bar", 42);
230 #if { VERSION >= 5.004 }
231 if (ckWARN(WARN_MISC))
232 Perl_warner_nocontext(packWARN(WARN_MISC), "ckWARN %s:%d", "bar", 42);
238 #if { VERSION >= 5.004 }
239 if (ckWARN_d(WARN_MISC))
240 Perl_warner_nocontext(packWARN(WARN_MISC), "ckWARN_d %s:%d", "bar", 42);
249 $SIG{'__WARN__'} = sub { $warning = $_[0] };
252 Devel::PPPort::warner();
253 ok(ivers($]) >= ivers("5.004") ? $warning =~ /^warner bar:42/ : $warning eq '');
256 Devel::PPPort::Perl_warner();
257 ok(ivers($]) >= ivers("5.004") ? $warning =~ /^Perl_warner bar:42/ : $warning eq '');
260 Devel::PPPort::Perl_warner_nocontext();
261 ok(ivers($]) >= ivers("5.004") ? $warning =~ /^Perl_warner_nocontext bar:42/ : $warning eq '');
264 Devel::PPPort::ckWARN();
268 Devel::PPPort::ckWARN_d();
269 ok(ivers($]) >= ivers("5.004") ? $warning =~ /^ckWARN_d bar:42/ : $warning eq '');
272 Devel::PPPort::Perl_ck_warner();
276 Devel::PPPort::Perl_ck_warner_d();
277 ok(ivers($]) >= ivers("5.004") ? $warning =~ /^Perl_ck_warner_d bar:42/ : $warning eq '');
282 Devel::PPPort::ckWARN();
283 ok(ivers($]) >= ivers("5.004") ? $warning =~ /^ckWARN bar:42/ : $warning eq '');
286 Devel::PPPort::ckWARN_d();
287 ok(ivers($]) >= ivers("5.004") ? $warning =~ /^ckWARN_d bar:42/ : $warning eq '');
290 Devel::PPPort::Perl_ck_warner();
291 ok(ivers($]) >= ivers("5.004") ? $warning =~ /^Perl_ck_warner bar:42/ : $warning eq '');
294 Devel::PPPort::Perl_ck_warner_d();
295 ok(ivers($]) >= ivers("5.004") ? $warning =~ /^Perl_ck_warner_d bar:42/ : $warning eq '');