#!/usr/bin/perl
-#
+#
# Regenerate (overwriting only if changed):
#
# lib/warnings.pm
my $tree = {
'all' => [ 5.008, {
- 'io' => [ 5.008, {
+ 'io' => [ 5.008, {
'pipe' => [ 5.008, DEFAULT_OFF],
'unopened' => [ 5.008, DEFAULT_OFF],
'closed' => [ 5.008, DEFAULT_OFF],
'layer' => [ 5.008, DEFAULT_OFF],
'syscalls' => [ 5.019, DEFAULT_OFF],
}],
- 'syntax' => [ 5.008, {
+ 'syntax' => [ 5.008, {
'ambiguous' => [ 5.008, DEFAULT_OFF],
'semicolon' => [ 5.008, DEFAULT_OFF],
'precedence' => [ 5.008, DEFAULT_OFF],
'qw' => [ 5.008, DEFAULT_OFF],
'illegalproto' => [ 5.011, DEFAULT_OFF],
}],
- 'severe' => [ 5.008, {
+ 'severe' => [ 5.008, {
'inplace' => [ 5.008, DEFAULT_ON],
'internal' => [ 5.008, DEFAULT_OFF],
'debugging' => [ 5.008, DEFAULT_ON],
my ($ver, $rest) = @{ $v } ;
push @{ $v_list{$ver} }, $k;
-
+
if (ref $rest)
{ valueWalk ($rest) }
push @{ $list{$k} }, $NameToValue{uc $k} ;
die "Value associated with key '$k' is not an ARRAY reference"
if !ref $v || ref $v ne 'ARRAY' ;
-
+
my ($ver, $rest) = @{ $v } ;
if (ref $rest)
{ push (@{ $list{$k} }, walk ($rest)) }
$v = $tre->{$k};
die "Value associated with key '$k' is not an ARRAY reference"
if !ref $v || ref $v ne 'ARRAY' ;
-
+
my $offset ;
if ($tre ne $tree) {
print $prefix . "|\n" ;
open_new($_, '>', { by => 'regen/warnings.pl' });
} 'warnings.h', 'lib/warnings.pm';
-print $warn <<'EOM';
+my ($index, $warn_size);
+
+{
+ # generate warnings.h
+
+ print $warn <<'EOM';
#define Off(x) ((x) / 8)
#define Bit(x) (1 << ((x) % 8))
#define PERL_WARNHOOK_FATAL (&PL_sv_placeholder)
EOM
-my $offset = 0 ;
+ my $offset = 0 ;
-valueWalk ($tree) ;
-my $index = orderValues();
+ valueWalk ($tree) ;
+ $index = orderValues();
-die <<EOM if $index > 255 ;
+ die <<EOM if $index > 255 ;
Too many warnings categories -- max is 255
- rewrite packWARN* & unpackWARN* macros
+ rewrite packWARN* & unpackWARN* macros
EOM
-walk ($tree) ;
+ walk ($tree) ;
-$index *= 2 ;
-my $warn_size = int($index / 8) + ($index % 8 != 0) ;
+ $index *= 2 ;
+ $warn_size = int($index / 8) + ($index % 8 != 0) ;
-my $k ;
-my $last_ver = 0;
-foreach $k (sort { $a <=> $b } keys %ValueToName) {
- my ($name, $version) = @{ $ValueToName{$k} };
- print $warn "\n/* Warnings Categories added in Perl $version */\n\n"
- if $last_ver != $version ;
- $name =~ y/:/_/;
- print $warn tab(5, "#define WARN_$name"), " $k\n" ;
- $last_ver = $version ;
-}
-print $warn "\n" ;
+ my $k ;
+ my $last_ver = 0;
+ foreach $k (sort { $a <=> $b } keys %ValueToName) {
+ my ($name, $version) = @{ $ValueToName{$k} };
+ print $warn "\n/* Warnings Categories added in Perl $version */\n\n"
+ if $last_ver != $version ;
+ $name =~ y/:/_/;
+ print $warn tab(5, "#define WARN_$name"), " $k\n" ;
+ $last_ver = $version ;
+ }
+ print $warn "\n" ;
-print $warn tab(5, '#define WARNsize'), "$warn_size\n" ;
-#print WARN tab(5, '#define WARN_ALLstring'), '"', ('\377' x $warn_size) , "\"\n" ;
-print $warn tab(5, '#define WARN_ALLstring'), '"', ('\125' x $warn_size) , "\"\n" ;
-print $warn tab(5, '#define WARN_NONEstring'), '"', ('\0' x $warn_size) , "\"\n" ;
+ print $warn tab(5, '#define WARNsize'), "$warn_size\n" ;
+ print $warn tab(5, '#define WARN_ALLstring'), '"', ('\125' x $warn_size) , "\"\n" ;
+ print $warn tab(5, '#define WARN_NONEstring'), '"', ('\0' x $warn_size) , "\"\n" ;
-print $warn <<'EOM';
+ print $warn <<'EOM';
#define isLEXWARN_on (PL_curcop->cop_warnings != pWARN_STD)
#define isLEXWARN_off (PL_curcop->cop_warnings == pWARN_STD)
/* end of file warnings.h */
EOM
-read_only_bottom_close_and_rename($warn);
+ read_only_bottom_close_and_rename($warn);
+}
while (<DATA>) {
last if /^KEYWORDS$/ ;
print $pm $_ ;
}
-$last_ver = 0;
+my $last_ver = 0;
print $pm "our %Offsets = (\n" ;
foreach my $k (sort { $a <=> $b } keys %ValueToName) {
my ($name, $version) = @{ $ValueToName{$k} };
print $pm " );\n\n" ;
print $pm "our %Bits = (\n" ;
-foreach $k (sort keys %list) {
+foreach my $k (sort keys %list) {
my $v = $list{$k} ;
my @list = sort { $a <=> $b } @$v ;
print $pm " );\n\n" ;
print $pm "our %DeadBits = (\n" ;
-foreach $k (sort keys %list) {
+foreach my $k (sort keys %list) {
my $v = $list{$k} ;
my @list = sort { $a <=> $b } @$v ;
return _bits(undef, @_) ;
}
-sub import
+sub import
{
shift;
# append 'all' when implied (after a lone "FATAL" or "NONFATAL")
push @_, 'all' if @_==1 && ( $_[0] eq 'FATAL' || $_[0] eq 'NONFATAL' );
-
+
# Empty @_ is equivalent to @_ = 'all' ;
${^WARNING_BITS} = @_ ? _bits($mask, @_) : $mask | $Bits{all} ;
}
-sub unimport
+sub unimport
{
shift;
foreach my $word ( @_ ) {
if ($word eq 'FATAL') {
- next;
+ next;
}
elsif ($catmask = $Bits{$word}) {
$mask &= ~($catmask | $DeadBits{$word} | $All);