summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/warning.pm70
-rw-r--r--pod/perllexwarn.pod10
-rw-r--r--t/pragma/warn/util12
-rw-r--r--util.c36
-rw-r--r--warning.h33
-rw-r--r--warning.pl3
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.
diff --git a/util.c b/util.c
index 132ec5e127..c84510e715 100644
--- 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;
diff --git a/warning.h b/warning.h
index 8b0cacea1b..7395a96abe 100644
--- a/warning.h
+++ b/warning.h
@@ -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,