Make warnings::__chk default the returned caller's bitmask to 0.
authorNicholas Clark <nick@ccl4.org>
Sun, 20 Jun 2010 13:12:38 +0000 (14:12 +0100)
committerNicholas Clark <nick@ccl4.org>
Wed, 23 Jun 2010 07:44:42 +0000 (08:44 +0100)
This removes defined checks in subsequence code paths, reducing complexity.

lib/warnings.pm
warnings.pl

index 3ea05e2..ef91ff6 100644 (file)
@@ -451,7 +451,8 @@ sub __chk
         $i = _error_loc(); # see where Carp will allocate the error
     }
 
-    my $callers_bitmask = (caller($i))[9] ;
+    # Defaulting this to 0 reduces complexity in code paths below.
+    my $callers_bitmask = (caller($i))[9] || 0 ;
     return ($callers_bitmask, $offset, $i) ;
 }
 
@@ -467,7 +468,6 @@ sub enabled
 
     my ($callers_bitmask, $offset, $i) = __chk(@_) ;
 
-    return 0 unless defined $callers_bitmask ;
     return vec($callers_bitmask, $offset, 1) ||
            vec($callers_bitmask, $Offsets{'all'}, 1) ;
 }
@@ -479,7 +479,6 @@ sub fatal_enabled
 
     my ($callers_bitmask, $offset, $i) = __chk(@_) ;
 
-    return 0 unless defined $callers_bitmask;
     return vec($callers_bitmask, $offset + 1, 1) ||
            vec($callers_bitmask, $Offsets{'all'} + 1, 1) ;
 }
@@ -507,8 +506,7 @@ sub warnif
     my ($callers_bitmask, $offset, $i) = __chk(@_) ;
 
     return
-        unless defined $callers_bitmask &&
-               (vec($callers_bitmask, $offset, 1) ||
+        unless (vec($callers_bitmask, $offset, 1) ||
                vec($callers_bitmask, $Offsets{'all'}, 1)) ;
 
     require Carp;
index 149d010..25dd302 100644 (file)
@@ -736,7 +736,8 @@ sub __chk
         $i = _error_loc(); # see where Carp will allocate the error
     }
 
-    my $callers_bitmask = (caller($i))[9] ;
+    # Defaulting this to 0 reduces complexity in code paths below.
+    my $callers_bitmask = (caller($i))[9] || 0 ;
     return ($callers_bitmask, $offset, $i) ;
 }
 
@@ -752,7 +753,6 @@ sub enabled
 
     my ($callers_bitmask, $offset, $i) = __chk(@_) ;
 
-    return 0 unless defined $callers_bitmask ;
     return vec($callers_bitmask, $offset, 1) ||
            vec($callers_bitmask, $Offsets{'all'}, 1) ;
 }
@@ -764,7 +764,6 @@ sub fatal_enabled
 
     my ($callers_bitmask, $offset, $i) = __chk(@_) ;
 
-    return 0 unless defined $callers_bitmask;
     return vec($callers_bitmask, $offset + 1, 1) ||
            vec($callers_bitmask, $Offsets{'all'} + 1, 1) ;
 }
@@ -792,8 +791,7 @@ sub warnif
     my ($callers_bitmask, $offset, $i) = __chk(@_) ;
 
     return
-        unless defined $callers_bitmask &&
-               (vec($callers_bitmask, $offset, 1) ||
+        unless (vec($callers_bitmask, $offset, 1) ||
                vec($callers_bitmask, $Offsets{'all'}, 1)) ;
 
     require Carp;