develooper Front page | perl.perl5.porters | Postings from July 2001

[PATCH B::Deparse] Make warnings handling more robust

Thread Next
From:
Robin Houston
Date:
July 5, 2001 10:34
Subject:
[PATCH B::Deparse] Make warnings handling more robust
Message ID:
20010705183321.A27345@robin.kitsite.com
Abhijit Menon-Sen's mkdir patch caused B::Deparse to break. That was
my fault: the warnings-handling code had some flaws which were only
shown up by adding an extra bit to the warnings mask.

The patch below corrects the problem, I hope.

 .robin.

--- perl@11026/ext/B/B/Deparse.pm	Mon Jul  2 21:49:08 2001
+++ bleadperl/ext/B/B/Deparse.pm	Thu Jul  5 18:27:31 2001
@@ -496,9 +496,15 @@
     return $self;
 }
 
-sub WARN_MASK () {
-    # Mask out the bits that C<use vars> uses
-    $warnings::Bits{all} | $warnings::DeadBits{all};
+{
+    # Mask out the bits that L<warnings::register> uses
+    my $WARN_MASK;
+    BEGIN {
+	$WARN_MASK = $warnings::Bits{all} | $warnings::DeadBits{all};
+    }
+    sub WARN_MASK () {
+	return $WARN_MASK;
+    }
 }
 
 # Initialise the contextual information, either from
@@ -626,7 +632,7 @@
 
 	elsif ($name eq 'warnings') {
 	    if ($val eq 'none') {
-		$warning_bits = "\0"x12;
+		$warning_bits = $warnings::NONE;
 		next();
 	    }
 
@@ -638,7 +644,7 @@
 		@names = split/\s+/, $val;
 	    }
 
-	    $warning_bits = "\0"x12 if !defined ($warning_bits);
+	    $warning_bits = $warnings::NONE if !defined ($warning_bits);
 	    $warning_bits |= warnings::bits(@names);
 	}
 
@@ -1270,10 +1276,10 @@
     my $warnings = $op->warnings;
     my $warning_bits;
     if ($warnings->isa("B::SPECIAL") && $$warnings == 4) {
-	$warning_bits = $warnings::Bits{"all"};
+	$warning_bits = $warnings::Bits{"all"} & WARN_MASK;
     }
     elsif ($warnings->isa("B::SPECIAL") && $$warnings == 5) {
-        $warning_bits = "\0"x12;
+        $warning_bits = $warnings::NONE;
     }
     elsif ($warnings->isa("B::SPECIAL")) {
 	$warning_bits = undef;
@@ -2668,7 +2674,7 @@
     # expression would be parenthesized as well.]
     #
     $idx =~ s/^\((.*)\)$/$1/ if $self->{'parens'};
-    
+
     # Hash-element braces will autoquote a bareword inside themselves.
     # We need to make sure that C<$hash{warn()}> doesn't come out as
     # C<$hash{warn}>, which has a quite different meaning. Currently

Thread Next


nntp.perl.org: Perl Programming lists via nntp and http.
Comments to Ask Bjørn Hansen at ask@perl.org | Group listing | About