X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=warning.h;h=7395a96abe5d1358cfd64dd86ef3c1455f02bcce;hb=627300f0f7d7170cc4e8db033fb6e61547324f64;hp=dde254d942a7b4caed9036effc17827c60b575ea;hpb=95dfd3ab5ca3e72850832fe8585dd8f0b3fc729f;p=p5sagit%2Fp5-mst-13.2.git diff --git a/warning.h b/warning.h index dde254d..7395a96 100644 --- a/warning.h +++ b/warning.h @@ -4,97 +4,103 @@ */ -#define Off(x) ((x) / 8) -#define Bit(x) (1 << ((x) % 8)) +#define Off(x) ((x) / 8) +#define Bit(x) (1 << ((x) % 8)) #define IsSet(a, x) ((a)[Off(x)] & Bit(x)) + #define G_WARN_OFF 0 /* $^W == 0 */ -#define G_WARN_ON 1 /* $^W != 0 */ +#define G_WARN_ON 1 /* -w flag and $^W != 0 */ #define G_WARN_ALL_ON 2 /* -W flag */ #define G_WARN_ALL_OFF 4 /* -X flag */ +#define G_WARN_ONCE 8 /* set if 'once' ever enabled */ #define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF) -#if 1 +#define WARN_STD Nullsv +#define WARN_ALL (&PL_sv_yes) /* use warning 'all' */ +#define WARN_NONE (&PL_sv_no) /* no warning 'all' */ -/* Part of the logic below assumes that WARN_NONE is NULL */ +#define specialWARN(x) ((x) == WARN_STD || (x) == WARN_ALL || \ + (x) == WARN_NONE) #define ckDEAD(x) \ - (PL_curcop->cop_warnings != WARN_ALL && \ - PL_curcop->cop_warnings != WARN_NONE && \ + ( ! specialWARN(PL_curcop->cop_warnings) && \ IsSet(SvPVX(PL_curcop->cop_warnings), 2*x+1)) #define ckWARN(x) \ - ( (PL_curcop->cop_warnings && \ + ( (PL_curcop->cop_warnings != WARN_STD && \ + PL_curcop->cop_warnings != WARN_NONE && \ (PL_curcop->cop_warnings == WARN_ALL || \ IsSet(SvPVX(PL_curcop->cop_warnings), 2*x) ) ) \ - || (PL_dowarn & G_WARN_ON) ) + || (PL_curcop->cop_warnings == WARN_STD && PL_dowarn & G_WARN_ON) ) #define ckWARN2(x,y) \ - ( (PL_curcop->cop_warnings && \ + ( (PL_curcop->cop_warnings != WARN_STD && \ + PL_curcop->cop_warnings != WARN_NONE && \ (PL_curcop->cop_warnings == WARN_ALL || \ IsSet(SvPVX(PL_curcop->cop_warnings), 2*x) || \ IsSet(SvPVX(PL_curcop->cop_warnings), 2*y) ) ) \ - || (PL_dowarn & G_WARN_ON) ) - -#else - -#define ckDEAD(x) \ - (PL_curcop->cop_warnings != WARN_ALL && \ - PL_curcop->cop_warnings != WARN_NONE && \ - SvPVX(PL_curcop->cop_warnings)[Off(2*x+1)] & Bit(2*x+1) ) - -#define ckWARN(x) \ - ( (PL_dowarn & G_WARN_ON) || ( (PL_dowarn & G_WARN_DISABLE) && \ - PL_curcop->cop_warnings && \ - ( PL_curcop->cop_warnings == WARN_ALL || \ - SvPVX(PL_curcop->cop_warnings)[Off(2*x)] & Bit(2*x) ) ) ) - -#define ckWARN2(x,y) \ - ( (PL_dowarn & G_WARN_ON) || ( (PL_dowarn & G_WARN_DISABLE) && \ - PL_curcop->cop_warnings && \ - ( PL_curcop->cop_warnings == WARN_ALL || \ - SvPVX(PL_curcop->cop_warnings)[Off(2*x)] & Bit(2*x) || \ - SvPVX(PL_curcop->cop_warnings)[Off(2*y)] & Bit(2*y) ) ) ) - -#endif - -#define WARN_NONE NULL -#define WARN_ALL (&PL_sv_yes) - -#define WARN_DEFAULT 0 -#define WARN_IO 1 -#define WARN_CLOSED 2 -#define WARN_EXEC 3 -#define WARN_NEWLINE 4 -#define WARN_PIPE 5 -#define WARN_UNOPENED 6 -#define WARN_MISC 7 -#define WARN_NUMERIC 8 -#define WARN_ONCE 9 -#define WARN_RECURSION 10 -#define WARN_REDEFINE 11 -#define WARN_SYNTAX 12 -#define WARN_AMBIGUOUS 13 -#define WARN_DEPRECATED 14 -#define WARN_OCTAL 15 -#define WARN_PARENTHESIS 16 -#define WARN_PRECEDENCE 17 -#define WARN_PRINTF 18 -#define WARN_RESERVED 19 -#define WARN_SEMICOLON 20 -#define WARN_UNINITIALIZED 21 -#define WARN_UNSAFE 22 -#define WARN_CLOSURE 23 -#define WARN_SIGNAL 24 -#define WARN_SUBSTR 25 -#define WARN_TAINT 26 -#define WARN_UNTIE 27 -#define WARN_UTF8 28 -#define WARN_VOID 29 - -#define WARNsize 8 -#define WARN_ALLstring "\125\125\125\125\125\125\125\125" -#define WARN_NONEstring "\0\0\0\0\0\0\0\0" + || (PL_curcop->cop_warnings == WARN_STD && PL_dowarn & G_WARN_ON) ) + +#define ckWARN_d(x) \ + (PL_curcop->cop_warnings == WARN_STD || \ + PL_curcop->cop_warnings == WARN_ALL || \ + (PL_curcop->cop_warnings != WARN_NONE && \ + IsSet(SvPVX(PL_curcop->cop_warnings), 2*x) ) ) + +#define ckWARN2_d(x,y) \ + (PL_curcop->cop_warnings == WARN_STD || \ + PL_curcop->cop_warnings == WARN_ALL || \ + (PL_curcop->cop_warnings != WARN_NONE && \ + (IsSet(SvPVX(PL_curcop->cop_warnings), 2*x) || \ + IsSet(SvPVX(PL_curcop->cop_warnings), 2*y) ) ) ) + + +#define isLEXWARN_on (PL_curcop->cop_warnings != WARN_STD) +#define isLEXWARN_off (PL_curcop->cop_warnings == WARN_STD) +#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE)) +#define isWARN_on(c,x) (IsSet(SvPVX(c), 2*(x))) + +#define WARN_IO 0 +#define WARN_CLOSED 1 +#define WARN_EXEC 2 +#define WARN_NEWLINE 3 +#define WARN_PIPE 4 +#define WARN_UNOPENED 5 +#define WARN_MISC 6 +#define WARN_NUMERIC 7 +#define WARN_ONCE 8 +#define WARN_RECURSION 9 +#define WARN_REDEFINE 10 +#define WARN_SEVERE 11 +#define WARN_DEBUGGING 12 +#define WARN_INPLACE 13 +#define WARN_INTERNAL 14 +#define WARN_SYNTAX 15 +#define WARN_AMBIGUOUS 16 +#define WARN_DEPRECATED 17 +#define WARN_DIGIT 18 +#define WARN_OCTAL 19 +#define WARN_PARENTHESIS 20 +#define WARN_PRECEDENCE 21 +#define WARN_PRINTF 22 +#define WARN_RESERVED 23 +#define WARN_SEMICOLON 24 +#define WARN_UNINITIALIZED 25 +#define WARN_UNSAFE 26 +#define WARN_CLOSURE 27 +#define WARN_OVERFLOW 28 +#define WARN_PORTABLE 29 +#define WARN_SIGNAL 30 +#define WARN_SUBSTR 31 +#define WARN_TAINT 32 +#define WARN_UNTIE 33 +#define WARN_UTF8 34 +#define WARN_VOID 35 + +#define WARNsize 9 +#define WARN_ALLstring "\125\125\125\125\125\125\125\125\125" +#define WARN_NONEstring "\0\0\0\0\0\0\0\0\0" /* end of file warning.h */