summaryrefslogtreecommitdiff
path: root/pp_ctl.c
diff options
context:
space:
mode:
authorRafael Garcia-Suarez <rgarciasuarez@gmail.com>2003-03-04 22:23:41 +0000
committerRafael Garcia-Suarez <rgarciasuarez@gmail.com>2003-03-04 22:23:41 +0000
commit75b6c4caab1abb3506eab9e8e512c69bbeb1c49f (patch)
treedb7e5e70081c15524e3f4de91ac64c8fca63575f /pp_ctl.c
parent8fa7688f7865696bdfa78bc12d4ffb78bd1d6103 (diff)
downloadperl-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.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/pp_ctl.c b/pp_ctl.c
index 68204ce53c..5143391289 100644
--- a/pp_ctl.c
+++ b/pp_ctl.c
@@ -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));