X-Git-Url: https://perl5.git.perl.org/perl5.git/blobdiff_plain/feff94e1aad31bed61c4743798138362101cc8ad..HEAD:/warnings.h diff --git a/warnings.h b/warnings.h index 6d67520..5547a11 100644 --- a/warnings.h +++ b/warnings.h @@ -5,9 +5,9 @@ */ -#define Off(x) ((x) / 8) -#define Bit(x) (1 << ((x) % 8)) -#define IsSet(a, x) ((a)[Off(x)] & Bit(x)) +#define Perl_Warn_Off_(x) ((x) / 8) +#define Perl_Warn_Bit_(x) (1 << ((x) % 8)) +#define PerlWarnIsSet_(a, x) ((a)[Perl_Warn_Off_(x)] & Perl_Warn_Bit_(x)) #define G_WARN_OFF 0 /* $^W == 0 */ @@ -18,11 +18,11 @@ #define G_WARN_ALL_MASK (G_WARN_ALL_ON|G_WARN_ALL_OFF) #define pWARN_STD NULL -#define pWARN_ALL (((STRLEN*)0)+1) /* use warnings 'all' */ -#define pWARN_NONE (((STRLEN*)0)+2) /* no warnings 'all' */ +#define pWARN_ALL (STRLEN *) &PL_WARN_ALL /* use warnings 'all' */ +#define pWARN_NONE (STRLEN *) &PL_WARN_NONE /* no warnings 'all' */ #define specialWARN(x) ((x) == pWARN_STD || (x) == pWARN_ALL || \ - (x) == pWARN_NONE) + (x) == pWARN_NONE) /* if PL_warnhook is set to this value, then warnings die */ #define PERL_WARNHOOK_FATAL (&PL_sv_placeholder) @@ -115,76 +115,85 @@ #define WARN_EXPERIMENTAL__DECLARED_REFS 66 -#define WARNsize 17 -#define WARN_ALLstring "\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125" -#define WARN_NONEstring "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" +/* Warnings Categories added in Perl 5.027 */ -#define isLEXWARN_on \ - cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD) -#define isLEXWARN_off \ - cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD) -#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE)) -#define isWARN_on(c,x) (IsSet((U8 *)(c + 1), 2*(x))) -#define isWARNf_on(c,x) (IsSet((U8 *)(c + 1), 2*(x)+1)) +#define WARN_EXPERIMENTAL__ALPHA_ASSERTIONS 67 +#define WARN_EXPERIMENTAL__SCRIPT_RUN 68 +#define WARN_SHADOW 69 -#define DUP_WARNINGS(p) \ - (specialWARN(p) ? (STRLEN*)(p) \ - : (STRLEN*)CopyD(p, PerlMemShared_malloc(sizeof(*p)+*p), sizeof(*p)+*p, \ - char)) +/* Warnings Categories added in Perl 5.029 */ -/* +#define WARN_EXPERIMENTAL__PRIVATE_USE 70 +#define WARN_EXPERIMENTAL__UNIPROP_WILDCARDS 71 +#define WARN_EXPERIMENTAL__VLB 72 -=head1 Warning and Dieing +/* Warnings Categories added in Perl 5.031 */ -=for apidoc Am|bool|ckWARN|U32 w +#define WARN_EXPERIMENTAL__ISA 73 -Returns a boolean as to whether or not warnings are enabled for the warning -category C. If the category is by default enabled even if not within the -scope of S>, instead use the L macro. +/* Warnings Categories added in Perl 5.033 */ -=for apidoc Am|bool|ckWARN_d|U32 w +#define WARN_EXPERIMENTAL__TRY 74 +#define WARNsize 19 +#define WARN_ALLstring "\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125\125" +#define WARN_NONEstring "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0" -Like C>, but for use if and only if the warning category is by -default enabled even if not within the scope of S>. +#define isLEXWARN_on \ + cBOOL(PL_curcop && PL_curcop->cop_warnings != pWARN_STD) +#define isLEXWARN_off \ + cBOOL(!PL_curcop || PL_curcop->cop_warnings == pWARN_STD) +#define isWARN_ONCE (PL_dowarn & (G_WARN_ON|G_WARN_ONCE)) +#define isWARN_on(c,x) (PerlWarnIsSet_((U8 *)(c + 1), 2*(x))) +#define isWARNf_on(c,x) (PerlWarnIsSet_((U8 *)(c + 1), 2*(x)+1)) -=for apidoc Am|bool|ckWARN2|U32 w1|U32 w2 +#define DUP_WARNINGS(p) Perl_dup_warnings(aTHX_ p) -Like C>, but takes two warnings categories as input, and returns -TRUE if either is enabled. If either category is by default enabled even if -not within the scope of S>, instead use the L -macro. The categories must be completely independent, one may not be -subclassed from the other. +#define free_and_set_cop_warnings(cmp,w) STMT_START { \ + if (!specialWARN((cmp)->cop_warnings)) PerlMemShared_free((cmp)->cop_warnings); \ + (cmp)->cop_warnings = w; \ +} STMT_END -=for apidoc Am|bool|ckWARN2_d|U32 w1|U32 w2 +/* -Like C>, but for use if and only if either warning category is by -default enabled even if not within the scope of S>. +=head1 Warning and Dieing -=for apidoc Am|bool|ckWARN3|U32 w1|U32 w2|U32 w3 +In all these calls, the C> parameters are warning category +constants. You can see the ones currently available in +L, just capitalize all letters in the names +and prefix them by C. So, for example, the category C used in a +perl program becomes C when used in XS code and passed to one of +the calls below. -Like C>, but takes three warnings categories as input, and returns -TRUE if any is enabled. If any of the categories is by default enabled even -if not within the scope of S>, instead use the L -macro. The categories must be completely independent, one may not be -subclassed from any other. +=for apidoc Am|bool|ckWARN|U32 w +=for apidoc_item ||ckWARN2|U32 w1|U32 w2 +=for apidoc_item ||ckWARN3|U32 w1|U32 w2|U32 w3 +=for apidoc_item ||ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4 +These return a boolean as to whether or not warnings are enabled for any of +the warning category(ies) parameters: C, C, .... -=for apidoc Am|bool|ckWARN3_d|U32 w1|U32 w2|U32 w3 +Should any of the categories by default be enabled even if not within the +scope of S>, instead use the C> macros. -Like C>, but for use if and only if any of the warning categories -is by default enabled even if not within the scope of S>. +The categories must be completely independent, one may not be subclassed from +the other. -=for apidoc Am|bool|ckWARN4|U32 w1|U32 w2|U32 w3|U32 w4 +=for apidoc Am|bool|ckWARN_d|U32 w +=for apidoc_item ||ckWARN2_d|U32 w1|U32 w2 +=for apidoc_item ||ckWARN3_d|U32 w1|U32 w2|U32 w3 +=for apidoc_item ||ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4 -Like C>, but takes four warnings categories as input, and returns -TRUE if any is enabled. If any of the categories is by default enabled even -if not within the scope of S>, instead use the L -macro. The categories must be completely independent, one may not be -subclassed from any other. +Like C>, but for use if and only if the warning category(ies) is by +default enabled even if not within the scope of S>. -=for apidoc Am|bool|ckWARN4_d|U32 w1|U32 w2|U32 w3|U32 w4 +=for apidoc Am|U32|packWARN|U32 w1 +=for apidoc_item ||packWARN2|U32 w1|U32 w2 +=for apidoc_item ||packWARN3|U32 w1|U32 w2|U32 w3 +=for apidoc_item ||packWARN4|U32 w1|U32 w2|U32 w3|U32 w4 -Like C>, but for use if and only if any of the warning categories -is by default enabled even if not within the scope of S>. +These macros are used to pack warning categories into a single U32 to pass to +macros and functions that take a warning category parameter. The number of +categories to pack is given by the name, with a corresponding number of +category parameters passed. =cut @@ -221,12 +230,97 @@ is by default enabled even if not within the scope of S>. #define unpackWARN4(x) (((x) >>24) & 0xFF) #define ckDEAD(x) \ - ( ! specialWARN(PL_curcop->cop_warnings) && \ - ( isWARNf_on(PL_curcop->cop_warnings, WARN_ALL) || \ - isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \ - isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \ - isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \ - isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x)))) + (PL_curcop && \ + !specialWARN(PL_curcop->cop_warnings) && \ + (isWARNf_on(PL_curcop->cop_warnings, unpackWARN1(x)) || \ + (unpackWARN2(x) && \ + (isWARNf_on(PL_curcop->cop_warnings, unpackWARN2(x)) || \ + (unpackWARN3(x) && \ + (isWARNf_on(PL_curcop->cop_warnings, unpackWARN3(x)) || \ + (unpackWARN4(x) && \ + isWARNf_on(PL_curcop->cop_warnings, unpackWARN4(x))))))))) + + + +/* +=for apidoc Amnh||WARN_ALL +=for apidoc Amnh||WARN_CLOSURE +=for apidoc Amnh||WARN_DEPRECATED +=for apidoc Amnh||WARN_EXITING +=for apidoc Amnh||WARN_GLOB +=for apidoc Amnh||WARN_IO +=for apidoc Amnh||WARN_CLOSED +=for apidoc Amnh||WARN_EXEC +=for apidoc Amnh||WARN_LAYER +=for apidoc Amnh||WARN_NEWLINE +=for apidoc Amnh||WARN_PIPE +=for apidoc Amnh||WARN_UNOPENED +=for apidoc Amnh||WARN_MISC +=for apidoc Amnh||WARN_NUMERIC +=for apidoc Amnh||WARN_ONCE +=for apidoc Amnh||WARN_OVERFLOW +=for apidoc Amnh||WARN_PACK +=for apidoc Amnh||WARN_PORTABLE +=for apidoc Amnh||WARN_RECURSION +=for apidoc Amnh||WARN_REDEFINE +=for apidoc Amnh||WARN_REGEXP +=for apidoc Amnh||WARN_SEVERE +=for apidoc Amnh||WARN_DEBUGGING +=for apidoc Amnh||WARN_INPLACE +=for apidoc Amnh||WARN_INTERNAL +=for apidoc Amnh||WARN_MALLOC +=for apidoc Amnh||WARN_SIGNAL +=for apidoc Amnh||WARN_SUBSTR +=for apidoc Amnh||WARN_SYNTAX +=for apidoc Amnh||WARN_AMBIGUOUS +=for apidoc Amnh||WARN_BAREWORD +=for apidoc Amnh||WARN_DIGIT +=for apidoc Amnh||WARN_PARENTHESIS +=for apidoc Amnh||WARN_PRECEDENCE +=for apidoc Amnh||WARN_PRINTF +=for apidoc Amnh||WARN_PROTOTYPE +=for apidoc Amnh||WARN_QW +=for apidoc Amnh||WARN_RESERVED +=for apidoc Amnh||WARN_SEMICOLON +=for apidoc Amnh||WARN_TAINT +=for apidoc Amnh||WARN_THREADS +=for apidoc Amnh||WARN_UNINITIALIZED +=for apidoc Amnh||WARN_UNPACK +=for apidoc Amnh||WARN_UNTIE +=for apidoc Amnh||WARN_UTF8 +=for apidoc Amnh||WARN_VOID +=for apidoc Amnh||WARN_IMPRECISION +=for apidoc Amnh||WARN_ILLEGALPROTO +=for apidoc Amnh||WARN_NON_UNICODE +=for apidoc Amnh||WARN_NONCHAR +=for apidoc Amnh||WARN_SURROGATE +=for apidoc Amnh||WARN_EXPERIMENTAL +=for apidoc Amnh||WARN_EXPERIMENTAL__LEXICAL_SUBS +=for apidoc Amnh||WARN_EXPERIMENTAL__REGEX_SETS +=for apidoc Amnh||WARN_EXPERIMENTAL__SMARTMATCH +=for apidoc Amnh||WARN_EXPERIMENTAL__POSTDEREF +=for apidoc Amnh||WARN_EXPERIMENTAL__SIGNATURES +=for apidoc Amnh||WARN_SYSCALLS +=for apidoc Amnh||WARN_EXPERIMENTAL__BITWISE +=for apidoc Amnh||WARN_EXPERIMENTAL__CONST_ATTR +=for apidoc Amnh||WARN_EXPERIMENTAL__RE_STRICT +=for apidoc Amnh||WARN_EXPERIMENTAL__REFALIASING +=for apidoc Amnh||WARN_EXPERIMENTAL__WIN32_PERLIO +=for apidoc Amnh||WARN_LOCALE +=for apidoc Amnh||WARN_MISSING +=for apidoc Amnh||WARN_REDUNDANT +=for apidoc Amnh||WARN_EXPERIMENTAL__DECLARED_REFS +=for apidoc Amnh||WARN_EXPERIMENTAL__ALPHA_ASSERTIONS +=for apidoc Amnh||WARN_EXPERIMENTAL__SCRIPT_RUN +=for apidoc Amnh||WARN_SHADOW +=for apidoc Amnh||WARN_EXPERIMENTAL__PRIVATE_USE +=for apidoc Amnh||WARN_EXPERIMENTAL__UNIPROP_WILDCARDS +=for apidoc Amnh||WARN_EXPERIMENTAL__VLB +=for apidoc Amnh||WARN_EXPERIMENTAL__ISA +=for apidoc Amnh||WARN_EXPERIMENTAL__TRY + +=cut +*/ /* end of file warnings.h */