VMS fix-ups and status
[p5sagit/p5-mst-13.2.git] / lib / warnings.pm
index df9f787..e341641 100644 (file)
@@ -5,6 +5,8 @@
 
 package warnings;
 
+our $VERSION = '1.00';
+
 =head1 NAME
 
 warnings - Perl pragma to control optional warnings
@@ -39,7 +41,7 @@ warnings - Perl pragma to control optional warnings
 If no import list is supplied, all possible warnings are either enabled
 or disabled.
 
-A number of functions are provided to assist module authors. 
+A number of functions are provided to assist module authors.
 
 =over 4
 
@@ -295,7 +297,7 @@ sub bits {
            $mask |= $DeadBits{$word} if $fatal ;
        }
        else
-          { croak("unknown warnings category '$word'")}  
+          { croak("unknown warnings category '$word'")}
     }
 
     return $mask ;
@@ -303,14 +305,19 @@ sub bits {
 
 sub import {
     shift;
-    ${^WARNING_BITS} |= bits(@_ ? @_ : 'all') ;
+    my $mask = ${^WARNING_BITS} ;
+    if (vec($mask, $Offsets{'all'}, 1)) {
+        $mask |= $Bits{'all'} ;
+        $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
+    }
+    ${^WARNING_BITS} = $mask | bits(@_ ? @_ : 'all') ;
 }
 
 sub unimport {
     shift;
     my $mask = ${^WARNING_BITS} ;
     if (vec($mask, $Offsets{'all'}, 1)) {
-        $mask = $Bits{'all'} ;
+        $mask |= $Bits{'all'} ;
         $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
     }
     ${^WARNING_BITS} = $mask & ~ (bits(@_ ? @_ : 'all') | $All) ;
@@ -336,13 +343,13 @@ sub __chk
            unless defined $offset;
     }
     else {
-        $category = (caller(1))[0] ; 
+        $category = (caller(1))[0] ;
         $offset = $Offsets{$category};
         croak("package '$category' not registered for warnings")
            unless defined $offset ;
     }
 
-    my $this_pkg = (caller(1))[0] ; 
+    my $this_pkg = (caller(1))[0] ;
     my $i = 2 ;
     my $pkg ;
 
@@ -356,11 +363,11 @@ sub __chk
         for ($i = 2 ; $pkg = (caller($i))[0] ; ++ $i) {
             last if $pkg ne $this_pkg ;
         }
-        $i = 2 
+        $i = 2
             if !$pkg || $pkg eq $this_pkg ;
     }
 
-    my $callers_bitmask = (caller($i))[9] ; 
+    my $callers_bitmask = (caller($i))[9] ;
     return ($callers_bitmask, $offset, $i) ;
 }
 
@@ -385,7 +392,7 @@ sub warn
     my $message = pop ;
     my ($callers_bitmask, $offset, $i) = __chk(@_) ;
     local $Carp::CarpLevel = $i ;
-    croak($message) 
+    croak($message)
        if vec($callers_bitmask, $offset+1, 1) ||
           vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
     carp($message) ;
@@ -400,12 +407,12 @@ sub warnif
     my ($callers_bitmask, $offset, $i) = __chk(@_) ;
     local $Carp::CarpLevel = $i ;
 
-    return 
+    return
         unless defined $callers_bitmask &&
                (vec($callers_bitmask, $offset, 1) ||
                vec($callers_bitmask, $Offsets{'all'}, 1)) ;
 
-    croak($message) 
+    croak($message)
        if vec($callers_bitmask, $offset+1, 1) ||
           vec($callers_bitmask, $Offsets{'all'}+1, 1) ;