diff options
author | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2003-03-04 22:23:41 +0000 |
---|---|---|
committer | Rafael Garcia-Suarez <rgarciasuarez@gmail.com> | 2003-03-04 22:23:41 +0000 |
commit | 75b6c4caab1abb3506eab9e8e512c69bbeb1c49f (patch) | |
tree | db7e5e70081c15524e3f4de91ac64c8fca63575f /pp_ctl.c | |
parent | 8fa7688f7865696bdfa78bc12d4ffb78bd1d6103 (diff) | |
download | perl-75b6c4caab1abb3506eab9e8e512c69bbeb1c49f.tar.gz |
Patch by Salvador FandiƱo to read the warning mask
returned by caller() and ${^WARNING_BITS} from
$warnings::Bits{all} and not from the hardcoded core
constant. (This mask could have been extended by
warnings::register.) Plus tests.
p4raw-id: //depot/perl@18829
Diffstat (limited to 'pp_ctl.c')
-rw-r--r-- | pp_ctl.c | 14 |
1 files changed, 12 insertions, 2 deletions
@@ -1635,8 +1635,18 @@ PP(pp_caller) (old_warnings == pWARN_STD && (PL_dowarn & G_WARN_ON) == 0)) mask = newSVpvn(WARN_NONEstring, WARNsize) ; else if (old_warnings == pWARN_ALL || - (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) - mask = newSVpvn(WARN_ALLstring, WARNsize) ; + (old_warnings == pWARN_STD && PL_dowarn & G_WARN_ON)) { + /* Get the bit mask for $warnings::Bits{all}, because + * it could have been extended by warnings::register */ + SV **bits_all; + HV *bits = get_hv("warnings::Bits", FALSE); + if (bits && (bits_all=hv_fetch(bits, "all", 3, FALSE))) { + mask = newSVsv(*bits_all); + } + else { + mask = newSVpvn(WARN_ALLstring, WARNsize) ; + } + } else mask = newSVsv(old_warnings); PUSHs(sv_2mortal(mask)); |