← Index
NYTProf Performance Profile   « line view »
For -e
  Run on Thu Mar 24 14:41:10 2016
Reported on Thu Mar 24 14:41:17 2016

Filename/home/s1/perl5/perlbrew/perls/perl-5.22.0/lib/5.22.0/warnings.pm
StatementsExecuted 19 statements in 223µs
Subroutines
Calls P F Exclusive
Time
Inclusive
Time
Subroutine
11126µs26µswarnings::::CORE:regcompwarnings::CORE:regcomp (opcode)
11117µs17µswarnings::::importwarnings::import
11111µs11µswarnings::::CORE:matchwarnings::CORE:match (opcode)
0000s0swarnings::::Croakerwarnings::Croaker
0000s0swarnings::::__chkwarnings::__chk
0000s0swarnings::::_bitswarnings::_bits
0000s0swarnings::::_error_locwarnings::_error_loc
0000s0swarnings::::_mkMaskwarnings::_mkMask
0000s0swarnings::::bitswarnings::bits
0000s0swarnings::::enabledwarnings::enabled
0000s0swarnings::::fatal_enabledwarnings::fatal_enabled
0000s0swarnings::::register_categorieswarnings::register_categories
0000s0swarnings::::unimportwarnings::unimport
0000s0swarnings::::warnwarnings::warn
0000s0swarnings::::warnifwarnings::warnif
Call graph for these subroutines as a Graphviz dot language file.
Line State
ments
Time
on line
Calls Time
in subs
Code
1# -*- buffer-read-only: t -*-
2# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
3# This file is built by regen/warnings.pl.
4# Any changes made here will be lost!
5
6package warnings;
7
81700nsour $VERSION = '1.32';
9
10# Verify that we're called correctly so that warnings will work.
11# see also strict.pm.
12161µs237µsunless ( __FILE__ =~ /(^|[\/\\])\Q${\__PACKAGE__}\E\.pmc?$/ ) {
# spent 26µs making 1 call to warnings::CORE:regcomp # spent 11µs making 1 call to warnings::CORE:match
13 my (undef, $f, $l) = caller;
14 die("Incorrect use of pragma '${\__PACKAGE__}' at $f line $l.\n");
15}
16
17133µsour %Offsets = (
18 # Warnings Categories added in Perl 5.008
19 'all' => 0,
20 'closure' => 2,
21 'deprecated' => 4,
22 'exiting' => 6,
23 'glob' => 8,
24 'io' => 10,
25 'closed' => 12,
26 'exec' => 14,
27 'layer' => 16,
28 'newline' => 18,
29 'pipe' => 20,
30 'unopened' => 22,
31 'misc' => 24,
32 'numeric' => 26,
33 'once' => 28,
34 'overflow' => 30,
35 'pack' => 32,
36 'portable' => 34,
37 'recursion' => 36,
38 'redefine' => 38,
39 'regexp' => 40,
40 'severe' => 42,
41 'debugging' => 44,
42 'inplace' => 46,
43 'internal' => 48,
44 'malloc' => 50,
45 'signal' => 52,
46 'substr' => 54,
47 'syntax' => 56,
48 'ambiguous' => 58,
49 'bareword' => 60,
50 'digit' => 62,
51 'parenthesis' => 64,
52 'precedence' => 66,
53 'printf' => 68,
54 'prototype' => 70,
55 'qw' => 72,
56 'reserved' => 74,
57 'semicolon' => 76,
58 'taint' => 78,
59 'threads' => 80,
60 'uninitialized' => 82,
61 'unpack' => 84,
62 'untie' => 86,
63 'utf8' => 88,
64 'void' => 90,
65
66 # Warnings Categories added in Perl 5.011
67 'imprecision' => 92,
68 'illegalproto' => 94,
69
70 # Warnings Categories added in Perl 5.013
71 'non_unicode' => 96,
72 'nonchar' => 98,
73 'surrogate' => 100,
74
75 # Warnings Categories added in Perl 5.017
76 'experimental' => 102,
77 'experimental::lexical_subs' => 104,
78 'experimental::lexical_topic' => 106,
79 'experimental::regex_sets' => 108,
80 'experimental::smartmatch' => 110,
81
82 # Warnings Categories added in Perl 5.019
83 'experimental::autoderef' => 112,
84 'experimental::postderef' => 114,
85 'experimental::signatures' => 116,
86 'syscalls' => 118,
87
88 # Warnings Categories added in Perl 5.021
89 'experimental::bitwise' => 120,
90 'experimental::const_attr' => 122,
91 'experimental::re_strict' => 124,
92 'experimental::refaliasing' => 126,
93 'experimental::win32_perlio' => 128,
94 'locale' => 130,
95 'missing' => 132,
96 'redundant' => 134,
97);
98
99127µsour %Bits = (
100 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55", # [0..67]
101 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29]
102 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30]
103 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
104 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
105 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22]
106 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
107 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
108 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
109 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
110 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x55\x15\x55\x01", # [51..58,60..64]
111 'experimental::autoderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [56]
112 'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [60]
113 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [61]
114 'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [52]
115 'experimental::lexical_topic' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [53]
116 'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [57]
117 'experimental::re_strict' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [62]
118 'experimental::refaliasing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [63]
119 'experimental::regex_sets' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [54]
120 'experimental::signatures' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [58]
121 'experimental::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [55]
122 'experimental::win32_perlio' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [64]
123 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
124 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [47]
125 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [46]
126 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23]
127 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24]
128 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [5..11,59]
129 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
130 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [65]
131 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25]
132 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
133 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [66]
134 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
135 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00", # [48]
136 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [49]
137 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
138 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
139 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
140 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16]
141 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [32]
142 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
143 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17]
144 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [33]
145 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [34]
146 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [35]
147 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [36]
148 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18]
149 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19]
150 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40", # [67]
151 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20]
152 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [37]
153 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [38]
154 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25]
155 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26]
156 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27]
157 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [50]
158 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x40\x00\x00\x00\x00\x00", # [28..38,47]
159 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [59]
160 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [39]
161 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [40]
162 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00", # [41]
163 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
164 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [42]
165 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [43]
166 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x15\x00\x00\x00\x00", # [44,48..50]
167 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [45]
168);
169
170119µsour %DeadBits = (
171 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa", # [0..67]
172 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [29]
173 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [30]
174 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
175 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
176 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [22]
177 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
178 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [31]
179 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
180 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
181 'experimental' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\xaa\x2a\xaa\x02", # [51..58,60..64]
182 'experimental::autoderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [56]
183 'experimental::bitwise' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [60]
184 'experimental::const_attr' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [61]
185 'experimental::lexical_subs' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [52]
186 'experimental::lexical_topic' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [53]
187 'experimental::postderef' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [57]
188 'experimental::re_strict' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [62]
189 'experimental::refaliasing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [63]
190 'experimental::regex_sets' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [54]
191 'experimental::signatures' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [58]
192 'experimental::smartmatch' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [55]
193 'experimental::win32_perlio' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [64]
194 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
195 'illegalproto' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [47]
196 'imprecision' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [46]
197 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [23]
198 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [24]
199 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [5..11,59]
200 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
201 'locale' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [65]
202 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [25]
203 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
204 'missing' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [66]
205 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
206 'non_unicode' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00", # [48]
207 'nonchar' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [49]
208 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
209 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
210 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
211 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [16]
212 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [32]
213 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
214 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [17]
215 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [33]
216 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [34]
217 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [35]
218 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [36]
219 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [18]
220 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [19]
221 'redundant' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80", # [67]
222 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [20]
223 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [37]
224 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [38]
225 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [21..25]
226 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [26]
227 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [27]
228 'surrogate' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [50]
229 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x80\x00\x00\x00\x00\x00", # [28..38,47]
230 'syscalls' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [59]
231 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [39]
232 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [40]
233 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00", # [41]
234 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
235 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [42]
236 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [43]
237 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x2a\x00\x00\x00\x00", # [44,48..50]
238 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [45]
239);
240
241# These are used by various things, including our own tests
2421200nsour $NONE = "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0";
2431300nsour $DEFAULT = "\x10\x01\x00\x00\x00\x50\x04\x00\x00\x00\x00\x00\x00\x55\x15\x55\x05", # [2,56,60,61,52,53,57,62,63,54,58,55,64,4,65,22,23,25]
244our $LAST_BIT = 136 ;
2451100nsour $BYTES = 17 ;
246
247211µsour $All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
248
249sub Croaker
250{
251 require Carp; # this initializes %CarpInternal
252 local $Carp::CarpInternal{'warnings'};
253 delete $Carp::CarpInternal{'warnings'};
254 Carp::croak(@_);
255}
256
257sub _bits {
258 my $mask = shift ;
259 my $catmask ;
260 my $fatal = 0 ;
261 my $no_fatal = 0 ;
262
263 foreach my $word ( @_ ) {
264 if ($word eq 'FATAL') {
265 $fatal = 1;
266 $no_fatal = 0;
267 }
268 elsif ($word eq 'NONFATAL') {
269 $fatal = 0;
270 $no_fatal = 1;
271 }
272 elsif ($catmask = $Bits{$word}) {
273 $mask |= $catmask ;
274 $mask |= $DeadBits{$word} if $fatal ;
275 $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
276 }
277 else
278 { Croaker("Unknown warnings category '$word'")}
279 }
280
281 return $mask ;
282}
283
284sub bits
285{
286 # called from B::Deparse.pm
287 push @_, 'all' unless @_ ;
288 return _bits(undef, @_) ;
289}
290
291sub import
292
# spent 17µs within warnings::import which was called: # once (17µs+0s) by JSON::Decode::Regexp::BEGIN@8 at line 8 of lib/JSON/Decode/Regexp.pm
{
29311µs shift;
294
29514µs my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
296
29712µs if (vec($mask, $Offsets{'all'}, 1)) {
298 $mask |= $Bits{'all'} ;
299 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
300 }
301
302 # append 'all' when implied (after a lone "FATAL" or "NONFATAL")
30311µs push @_, 'all' if @_==1 && ( $_[0] eq 'FATAL' || $_[0] eq 'NONFATAL' );
304
305 # Empty @_ is equivalent to @_ = 'all' ;
306110µs ${^WARNING_BITS} = @_ ? _bits($mask, @_) : $mask | $Bits{all} ;
307}
308
309sub unimport
310{
311 shift;
312
313 my $catmask ;
314 my $mask = ${^WARNING_BITS} // ($^W ? $Bits{all} : $DEFAULT) ;
315
316 if (vec($mask, $Offsets{'all'}, 1)) {
317 $mask |= $Bits{'all'} ;
318 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
319 }
320
321 # append 'all' when implied (empty import list or after a lone "FATAL")
322 push @_, 'all' if !@_ || @_==1 && $_[0] eq 'FATAL';
323
324 foreach my $word ( @_ ) {
325 if ($word eq 'FATAL') {
326 next;
327 }
328 elsif ($catmask = $Bits{$word}) {
329 $mask &= ~($catmask | $DeadBits{$word} | $All);
330 }
331 else
332 { Croaker("Unknown warnings category '$word'")}
333 }
334
335 ${^WARNING_BITS} = $mask ;
336}
337
33828µsmy %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
339
340sub MESSAGE () { 4 };
341sub FATAL () { 2 };
342sub NORMAL () { 1 };
343
344sub __chk
345{
346 my $category ;
347 my $offset ;
348 my $isobj = 0 ;
349 my $wanted = shift;
350 my $has_message = $wanted & MESSAGE;
351
352 unless (@_ == 1 || @_ == ($has_message ? 2 : 0)) {
353 my $sub = (caller 1)[3];
354 my $syntax = $has_message ? "[category,] 'message'" : '[category]';
355 Croaker("Usage: $sub($syntax)");
356 }
357
358 my $message = pop if $has_message;
359
360 if (@_) {
361 # check the category supplied.
362 $category = shift ;
363 if (my $type = ref $category) {
364 Croaker("not an object")
365 if exists $builtin_type{$type};
366 $category = $type;
367 $isobj = 1 ;
368 }
369 $offset = $Offsets{$category};
370 Croaker("Unknown warnings category '$category'")
371 unless defined $offset;
372 }
373 else {
374 $category = (caller(1))[0] ;
375 $offset = $Offsets{$category};
376 Croaker("package '$category' not registered for warnings")
377 unless defined $offset ;
378 }
379
380 my $i;
381
382 if ($isobj) {
383 my $pkg;
384 $i = 2;
385 while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
386 last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
387 }
388 $i -= 2 ;
389 }
390 else {
391 $i = _error_loc(); # see where Carp will allocate the error
392 }
393
394 # Default to 0 if caller returns nothing. Default to $DEFAULT if it
395 # explicitly returns undef.
396 my(@callers_bitmask) = (caller($i))[9] ;
397 my $callers_bitmask =
398 @callers_bitmask ? $callers_bitmask[0] // $DEFAULT : 0 ;
399
400 my @results;
401 foreach my $type (FATAL, NORMAL) {
402 next unless $wanted & $type;
403
404 push @results, (vec($callers_bitmask, $offset + $type - 1, 1) ||
405 vec($callers_bitmask, $Offsets{'all'} + $type - 1, 1));
406 }
407
408 # &enabled and &fatal_enabled
409 return $results[0] unless $has_message;
410
411 # &warnif, and the category is neither enabled as warning nor as fatal
412 return if $wanted == (NORMAL | FATAL | MESSAGE)
413 && !($results[0] || $results[1]);
414
415 require Carp;
416 Carp::croak($message) if $results[0];
417 # will always get here for &warn. will only get here for &warnif if the
418 # category is enabled
419 Carp::carp($message);
420}
421
422sub _mkMask
423{
424 my ($bit) = @_;
425 my $mask = "";
426
427 vec($mask, $bit, 1) = 1;
428 return $mask;
429}
430
431sub register_categories
432{
433 my @names = @_;
434
435 for my $name (@names) {
436 if (! defined $Bits{$name}) {
437 $Bits{$name} = _mkMask($LAST_BIT);
438 vec($Bits{'all'}, $LAST_BIT, 1) = 1;
439 $Offsets{$name} = $LAST_BIT ++;
440 foreach my $k (keys %Bits) {
441 vec($Bits{$k}, $LAST_BIT, 1) = 0;
442 }
443 $DeadBits{$name} = _mkMask($LAST_BIT);
444 vec($DeadBits{'all'}, $LAST_BIT++, 1) = 1;
445 }
446 }
447}
448
449sub _error_loc {
450 require Carp;
451 goto &Carp::short_error_loc; # don't introduce another stack frame
452}
453
454sub enabled
455{
456 return __chk(NORMAL, @_);
457}
458
459sub fatal_enabled
460{
461 return __chk(FATAL, @_);
462}
463
464sub warn
465{
466 return __chk(FATAL | MESSAGE, @_);
467}
468
469sub warnif
470{
471 return __chk(NORMAL | FATAL | MESSAGE, @_);
472}
473
474# These are not part of any public interface, so we can delete them to save
475# space.
47618µsdelete @warnings::{qw(NORMAL FATAL MESSAGE)};
477
478136µs1;
479__END__
 
# spent 11µs within warnings::CORE:match which was called: # once (11µs+0s) by JSON::Decode::Regexp::BEGIN@8 at line 12
sub warnings::CORE:match; # opcode
# spent 26µs within warnings::CORE:regcomp which was called: # once (26µs+0s) by JSON::Decode::Regexp::BEGIN@8 at line 12
sub warnings::CORE:regcomp; # opcode