diff options
-rw-r--r-- | lib/warning.pm | 70 | ||||
-rw-r--r-- | pod/perllexwarn.pod | 10 | ||||
-rw-r--r-- | t/pragma/warn/util | 12 | ||||
-rw-r--r-- | util.c | 36 | ||||
-rw-r--r-- | warning.h | 33 | ||||
-rw-r--r-- | warning.pl | 3 |
6 files changed, 88 insertions, 76 deletions
diff --git a/lib/warning.pm b/lib/warning.pm index 1df83d946f..70ed91e56c 100644 --- a/lib/warning.pm +++ b/lib/warning.pm @@ -33,9 +33,10 @@ use Carp ; 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55", # [0..35] 'ambiguous' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [16] 'closed' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [1] - 'closure' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [26] + 'closure' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [27] 'debugging' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [12] 'deprecated' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [17] + 'digit' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [18] 'exec' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [2] 'inplace' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [13] 'internal' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [14] @@ -43,36 +44,39 @@ use Carp ; 'misc' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [6] 'newline' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [3] 'numeric' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [7] - 'octal' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [18] + 'octal' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [19] 'once' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [8] - 'parenthesis' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [19] + 'overflow' => "\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [28] + 'parenthesis' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [20] 'pipe' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [4] - 'precedence' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [20] - 'printf' => "\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [21] + 'portable' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [29] + 'precedence' => "\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [21] + 'printf' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [22] 'recursion' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00", # [9] 'redefine' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [10] - 'reserved' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [22] - 'semicolon' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [23] + 'reserved' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [23] + 'semicolon' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [24] 'severe' => "\x00\x00\x40\x15\x00\x00\x00\x00\x00", # [11..14] - 'signal' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [27] - 'substr' => "\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [28] - 'syntax' => "\x00\x00\x00\x40\x55\x55\x00\x00\x00", # [15..23] - 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [29] - 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [24] + 'signal' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [30] + 'substr' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [31] + 'syntax' => "\x00\x00\x00\x40\x55\x55\x01\x00\x00", # [15..24] + 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [32] + 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [25] 'unopened' => "\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [5] - 'unsafe' => "\x00\x00\x00\x00\x00\x00\x54\x55\x00", # [25..31] - 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [30] - 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [31] - 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [32] + 'unsafe' => "\x00\x00\x00\x00\x00\x00\x50\x55\x15", # [26..34] + 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [33] + 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [34] + 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40", # [35] ); %DeadBits = ( 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", # [0..35] 'ambiguous' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [16] 'closed' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [1] - 'closure' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [26] + 'closure' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [27] 'debugging' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [12] 'deprecated' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [17] + 'digit' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [18] 'exec' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [2] 'inplace' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [13] 'internal' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [14] @@ -80,27 +84,29 @@ use Carp ; 'misc' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [6] 'newline' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [3] 'numeric' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [7] - 'octal' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [18] + 'octal' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [19] 'once' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [8] - 'parenthesis' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [19] + 'overflow' => "\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [28] + 'parenthesis' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [20] 'pipe' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [4] - 'precedence' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [20] - 'printf' => "\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [21] + 'portable' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [29] + 'precedence' => "\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [21] + 'printf' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [22] 'recursion' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00", # [9] 'redefine' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [10] - 'reserved' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [22] - 'semicolon' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [23] + 'reserved' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [23] + 'semicolon' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [24] 'severe' => "\x00\x00\x80\x2a\x00\x00\x00\x00\x00", # [11..14] - 'signal' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [27] - 'substr' => "\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [28] - 'syntax' => "\x00\x00\x00\x80\xaa\xaa\x00\x00\x00", # [15..23] - 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [29] - 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [24] + 'signal' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [30] + 'substr' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [31] + 'syntax' => "\x00\x00\x00\x80\xaa\xaa\x02\x00\x00", # [15..24] + 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [32] + 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [25] 'unopened' => "\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [5] - 'unsafe' => "\x00\x00\x00\x00\x00\x00\xa8\xaa\x00", # [25..31] - 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [30] - 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [31] - 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [32] + 'unsafe' => "\x00\x00\x00\x00\x00\x00\xa0\xaa\x2a", # [26..34] + 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [33] + 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [34] + 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80", # [35] ); diff --git a/pod/perllexwarn.pod b/pod/perllexwarn.pod index 81f44cca3a..b946654425 100644 --- a/pod/perllexwarn.pod +++ b/pod/perllexwarn.pod @@ -219,6 +219,10 @@ hierarchy is: | | | +--- closure | | + | +--- overflow + | | + | +--- portable + | | | +--- untie | | | +--- utf8 @@ -241,7 +245,7 @@ hierarchy is: | | | +--- reserved | | - | +--- octal + | +--- digit | | | +--- parenthesis | | @@ -313,10 +317,6 @@ The experimental features need bottomed out. around the limitations of C<$^W>. Now that those limitations are gone, the module should be revisited. - octal - 'octal' controls illegal octal characters warning, but 'unsafe' controls - illegal hexadecimal and binary characters warnings. - =head1 SEE ALSO L<warning>. diff --git a/t/pragma/warn/util b/t/pragma/warn/util index 605b42a771..eebd9207e4 100644 --- a/t/pragma/warn/util +++ b/t/pragma/warn/util @@ -11,25 +11,25 @@ __END__ # util.c -use warning 'octal' ; +use warning 'digit' ; my $a = oct "029" ; -no warning 'octal' ; +no warning 'digit' ; my $a = oct "029" ; EXPECT Illegal octal digit '9' ignored at - line 3. ######## # util.c -use warning 'unsafe' ; +use warning 'digit' ; *a = hex "0xv9" ; -no warning 'unsafe' ; +no warning 'digit' ; *a = hex "0xv9" ; EXPECT Illegal hexadecimal digit 'v' ignored at - line 3. ######## # util.c -use warning 'unsafe' ; +use warning 'digit' ; *a = oct "0b9" ; -no warning 'unsafe' ; +no warning 'digit' ; *a = oct "0b9" ; EXPECT Illegal binary digit '9' ignored at - line 3. @@ -2809,8 +2809,8 @@ Perl_scan_bin(pTHX_ char *start, I32 len, I32 *retlen) } else { dTHR; - if (ckWARN(WARN_UNSAFE)) - Perl_warner(aTHX_ WARN_UNSAFE, + if (ckWARN(WARN_DIGIT)) + Perl_warner(aTHX_ WARN_DIGIT, "Illegal binary digit '%c' ignored", *s); break; } @@ -2822,8 +2822,8 @@ Perl_scan_bin(pTHX_ char *start, I32 len, I32 *retlen) dTHR; overflowed = TRUE; rnv = (NV) ruv; - if (ckWARN_d(WARN_UNSAFE)) - Perl_warner(aTHX_ WARN_UNSAFE, + if (ckWARN_d(WARN_OVERFLOW)) + Perl_warner(aTHX_ WARN_OVERFLOW, "Integer overflow in binary number"); } else ruv = xuv | (*s - '0'); @@ -2847,8 +2847,8 @@ Perl_scan_bin(pTHX_ char *start, I32 len, I32 *retlen) #endif ) { dTHR; - if (ckWARN(WARN_UNSAFE)) - Perl_warner(aTHX_ WARN_UNSAFE, + if (ckWARN(WARN_PORTABLE)) + Perl_warner(aTHX_ WARN_PORTABLE, "Binary number > 0b11111111111111111111111111111111 non-portable"); } *retlen = s - start; @@ -2873,8 +2873,8 @@ Perl_scan_oct(pTHX_ char *start, I32 len, I32 *retlen) * someone seems to want to use the digits eight and nine). */ if (*s == '8' || *s == '9') { dTHR; - if (ckWARN(WARN_OCTAL)) - Perl_warner(aTHX_ WARN_OCTAL, + if (ckWARN(WARN_DIGIT)) + Perl_warner(aTHX_ WARN_DIGIT, "Illegal octal digit '%c' ignored", *s); } break; @@ -2887,8 +2887,8 @@ Perl_scan_oct(pTHX_ char *start, I32 len, I32 *retlen) dTHR; overflowed = TRUE; rnv = (NV) ruv; - if (ckWARN_d(WARN_UNSAFE)) - Perl_warner(aTHX_ WARN_UNSAFE, + if (ckWARN_d(WARN_OVERFLOW)) + Perl_warner(aTHX_ WARN_OVERFLOW, "Integer overflow in octal number"); } else ruv = xuv | (*s - '0'); @@ -2912,8 +2912,8 @@ Perl_scan_oct(pTHX_ char *start, I32 len, I32 *retlen) #endif ) { dTHR; - if (ckWARN(WARN_UNSAFE)) - Perl_warner(aTHX_ WARN_UNSAFE, + if (ckWARN(WARN_PORTABLE)) + Perl_warner(aTHX_ WARN_PORTABLE, "Octal number > 037777777777 non-portable"); } *retlen = s - start; @@ -2942,8 +2942,8 @@ Perl_scan_hex(pTHX_ char *start, I32 len, I32 *retlen) } else { dTHR; - if (ckWARN(WARN_UNSAFE)) - Perl_warner(aTHX_ WARN_UNSAFE, + if (ckWARN(WARN_DIGIT)) + Perl_warner(aTHX_ WARN_DIGIT, "Illegal hexadecimal digit '%c' ignored", *s); break; } @@ -2955,8 +2955,8 @@ Perl_scan_hex(pTHX_ char *start, I32 len, I32 *retlen) dTHR; overflowed = TRUE; rnv = (NV) ruv; - if (ckWARN_d(WARN_UNSAFE)) - Perl_warner(aTHX_ WARN_UNSAFE, + if (ckWARN_d(WARN_OVERFLOW)) + Perl_warner(aTHX_ WARN_OVERFLOW, "Integer overflow in hexadecimal number"); } else ruv = xuv | ((hexdigit - PL_hexdigit) & 15); @@ -2980,8 +2980,8 @@ Perl_scan_hex(pTHX_ char *start, I32 len, I32 *retlen) #endif ) { dTHR; - if (ckWARN(WARN_UNSAFE)) - Perl_warner(aTHX_ WARN_UNSAFE, + if (ckWARN(WARN_PORTABLE)) + Perl_warner(aTHX_ WARN_PORTABLE, "Hexadecimal number > 0xffffffff non-portable"); } *retlen = s - start; @@ -79,21 +79,24 @@ #define WARN_SYNTAX 15 #define WARN_AMBIGUOUS 16 #define WARN_DEPRECATED 17 -#define WARN_OCTAL 18 -#define WARN_PARENTHESIS 19 -#define WARN_PRECEDENCE 20 -#define WARN_PRINTF 21 -#define WARN_RESERVED 22 -#define WARN_SEMICOLON 23 -#define WARN_UNINITIALIZED 24 -#define WARN_UNSAFE 25 -#define WARN_CLOSURE 26 -#define WARN_SIGNAL 27 -#define WARN_SUBSTR 28 -#define WARN_TAINT 29 -#define WARN_UNTIE 30 -#define WARN_UTF8 31 -#define WARN_VOID 32 +#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" diff --git a/warning.pl b/warning.pl index 400fc7e569..593b5d7e7c 100644 --- a/warning.pl +++ b/warning.pl @@ -14,6 +14,8 @@ my $tree = { 'taint' => DEFAULT_OFF, 'signal' => DEFAULT_OFF, 'closure' => DEFAULT_OFF, + 'overflow' => DEFAULT_OFF, + 'portable' => DEFAULT_OFF, 'utf8' => DEFAULT_OFF, } , 'io' => { 'pipe' => DEFAULT_OFF, @@ -28,6 +30,7 @@ my $tree = { 'precedence' => DEFAULT_OFF, 'reserved' => DEFAULT_OFF, 'octal' => DEFAULT_OFF, + 'digit' => DEFAULT_OFF, 'parenthesis' => DEFAULT_OFF, 'deprecated' => DEFAULT_OFF, 'printf' => DEFAULT_OFF, |