lexwarn maintenance: new warning class unsafe
Jarkko Hietaniemi [Mon, 9 Aug 1999 20:35:13 +0000 (20:35 +0000)]
subclasses 'overflow' and 'portable' created,
used by the recent integer overflow warnings.
Class syntax subclass 'octal' renamed to 'digit',
binary and hexadecimal parsing errors also 'digit' warnings.

p4raw-id: //depot/cfgperl@3942

lib/warning.pm
pod/perllexwarn.pod
t/pragma/warn/util
util.c
warning.h
warning.pl

index 1df83d9..70ed91e 100644 (file)
@@ -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]
   );
 
 
index 81f44cc..b946654 100644 (file)
@@ -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>.
index 605b42a..eebd920 100644 (file)
 
 __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.
diff --git a/util.c b/util.c
index 132ec5e..c84510e 100644 (file)
--- a/util.c
+++ b/util.c
@@ -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;
index 8b0cace..7395a96 100644 (file)
--- a/warning.h
+++ b/warning.h
 #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"
index 400fc7e..593b5d7 100644 (file)
@@ -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,