#!/usr/bin/perl
-$VERSION = '1.02_01';
+$VERSION = '1.02_02';
BEGIN {
push @INC, './lib';
#define G_WARN_ONCE 8 /* set if 'once' ever enabled */
#define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF)
-#define pWARN_STD Nullsv
-#define pWARN_ALL (Nullsv+1) /* use warnings 'all' */
-#define pWARN_NONE (Nullsv+2) /* no warnings 'all' */
+#define pWARN_STD NULL
+#define pWARN_ALL (((STRLEN*)0)+1) /* use warnings 'all' */
+#define pWARN_NONE (((STRLEN*)0)+2) /* no warnings 'all' */
#define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \
(x) == pWARN_NONE)
+
+/* if PL_warnhook is set to this value, then warnings die */
+#define PERL_WARNHOOK_FATAL (((SV*)0) + 1)
EOM
my $offset = 0 ;
#define isLEXWARN_on (PL_curcop->cop_warnings != pWARN_STD)
#define isLEXWARN_off (PL_curcop->cop_warnings == pWARN_STD)
#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE))
-#define isWARN_on(c,x) (IsSet(SvPVX_const(c), 2*(x)))
-#define isWARNf_on(c,x) (IsSet(SvPVX_const(c), 2*(x)+1))
-
-#define ckWARN(x) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN2(x,y) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN3(x,y,z) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN4(x,y,z,t) \
- ( (isLEXWARN_on && PL_curcop->cop_warnings != pWARN_NONE && \
- (PL_curcop->cop_warnings == pWARN_ALL || \
- isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) || \
- isWARN_on(PL_curcop->cop_warnings, t) ) ) \
- || (isLEXWARN_off && PL_dowarn & G_WARN_ON) )
-
-#define ckWARN_d(x) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- isWARN_on(PL_curcop->cop_warnings, x) ) )
-
-#define ckWARN2_d(x,y) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) ) ) )
-
-#define ckWARN3_d(x,y,z) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) ) ) )
-
-#define ckWARN4_d(x,y,z,t) \
- (isLEXWARN_off || PL_curcop->cop_warnings == pWARN_ALL || \
- (PL_curcop->cop_warnings != pWARN_NONE && \
- (isWARN_on(PL_curcop->cop_warnings, x) || \
- isWARN_on(PL_curcop->cop_warnings, y) || \
- isWARN_on(PL_curcop->cop_warnings, z) || \
- isWARN_on(PL_curcop->cop_warnings, t) ) ) )
+#define isWARN_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)))
+#define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1))
+
+#define DUP_WARNINGS(p) \
+ specialWARN(p) ? (p) \
+ : CopyD(p, PerlMemShared_malloc(sizeof(*p)+*p), sizeof(*p)+*p, char)
+
+#define ckWARN(w) Perl_ckwarn(aTHX_ packWARN(w))
+#define ckWARN2(w1,w2) Perl_ckwarn(aTHX_ packWARN2(w1,w2))
+#define ckWARN3(w1,w2,w3) Perl_ckwarn(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4(w1,w2,w3,w4) Perl_ckwarn(aTHX_ packWARN4(w1,w2,w3,w4))
+
+#define ckWARN_d(w) Perl_ckwarn_d(aTHX_ packWARN(w))
+#define ckWARN2_d(w1,w2) Perl_ckwarn_d(aTHX_ packWARN2(w1,w2))
+#define ckWARN3_d(w1,w2,w3) Perl_ckwarn_d(aTHX_ packWARN3(w1,w2,w3))
+#define ckWARN4_d(w1,w2,w3,w4) Perl_ckwarn_d(aTHX_ packWARN4(w1,w2,w3,w4))
#define packWARN(a) (a )
#define packWARN2(a,b) ((a) | ((b)<<8) )
package warnings;
-our $VERSION = '1.04';
+our $VERSION = '1.05';
=head1 NAME
sub Croaker
{
require Carp::Heavy; # this initializes %CarpInternal
+ local $Carp::CarpInternal{'warnings'};
delete $Carp::CarpInternal{'warnings'};
Carp::croak(@_);
}