Initial commit of OpenSPARC T2 architecture model.
[OpenSPARC-T2-SAM] / sam-t2 / devtools / amd64 / lib / perl5 / 5.8.8 / warnings.pm
CommitLineData
920dae64
AT
1# -*- buffer-read-only: t -*-
2# !!!!!!! DO NOT EDIT THIS FILE !!!!!!!
3# This file was created by warnings.pl
4# Any changes made here will be lost.
5#
6
7package warnings;
8
9our $VERSION = '1.05';
10
11=head1 NAME
12
13warnings - Perl pragma to control optional warnings
14
15=head1 SYNOPSIS
16
17 use warnings;
18 no warnings;
19
20 use warnings "all";
21 no warnings "all";
22
23 use warnings::register;
24 if (warnings::enabled()) {
25 warnings::warn("some warning");
26 }
27
28 if (warnings::enabled("void")) {
29 warnings::warn("void", "some warning");
30 }
31
32 if (warnings::enabled($object)) {
33 warnings::warn($object, "some warning");
34 }
35
36 warnings::warnif("some warning");
37 warnings::warnif("void", "some warning");
38 warnings::warnif($object, "some warning");
39
40=head1 DESCRIPTION
41
42The C<warnings> pragma is a replacement for the command line flag C<-w>,
43but the pragma is limited to the enclosing block, while the flag is global.
44See L<perllexwarn> for more information.
45
46If no import list is supplied, all possible warnings are either enabled
47or disabled.
48
49A number of functions are provided to assist module authors.
50
51=over 4
52
53=item use warnings::register
54
55Creates a new warnings category with the same name as the package where
56the call to the pragma is used.
57
58=item warnings::enabled()
59
60Use the warnings category with the same name as the current package.
61
62Return TRUE if that warnings category is enabled in the calling module.
63Otherwise returns FALSE.
64
65=item warnings::enabled($category)
66
67Return TRUE if the warnings category, C<$category>, is enabled in the
68calling module.
69Otherwise returns FALSE.
70
71=item warnings::enabled($object)
72
73Use the name of the class for the object reference, C<$object>, as the
74warnings category.
75
76Return TRUE if that warnings category is enabled in the first scope
77where the object is used.
78Otherwise returns FALSE.
79
80=item warnings::warn($message)
81
82Print C<$message> to STDERR.
83
84Use the warnings category with the same name as the current package.
85
86If that warnings category has been set to "FATAL" in the calling module
87then die. Otherwise return.
88
89=item warnings::warn($category, $message)
90
91Print C<$message> to STDERR.
92
93If the warnings category, C<$category>, has been set to "FATAL" in the
94calling module then die. Otherwise return.
95
96=item warnings::warn($object, $message)
97
98Print C<$message> to STDERR.
99
100Use the name of the class for the object reference, C<$object>, as the
101warnings category.
102
103If that warnings category has been set to "FATAL" in the scope where C<$object>
104is first used then die. Otherwise return.
105
106
107=item warnings::warnif($message)
108
109Equivalent to:
110
111 if (warnings::enabled())
112 { warnings::warn($message) }
113
114=item warnings::warnif($category, $message)
115
116Equivalent to:
117
118 if (warnings::enabled($category))
119 { warnings::warn($category, $message) }
120
121=item warnings::warnif($object, $message)
122
123Equivalent to:
124
125 if (warnings::enabled($object))
126 { warnings::warn($object, $message) }
127
128=back
129
130See L<perlmodlib/Pragmatic Modules> and L<perllexwarn>.
131
132=cut
133
134use Carp ();
135
136our %Offsets = (
137
138 # Warnings Categories added in Perl 5.008
139
140 'all' => 0,
141 'closure' => 2,
142 'deprecated' => 4,
143 'exiting' => 6,
144 'glob' => 8,
145 'io' => 10,
146 'closed' => 12,
147 'exec' => 14,
148 'layer' => 16,
149 'newline' => 18,
150 'pipe' => 20,
151 'unopened' => 22,
152 'misc' => 24,
153 'numeric' => 26,
154 'once' => 28,
155 'overflow' => 30,
156 'pack' => 32,
157 'portable' => 34,
158 'recursion' => 36,
159 'redefine' => 38,
160 'regexp' => 40,
161 'severe' => 42,
162 'debugging' => 44,
163 'inplace' => 46,
164 'internal' => 48,
165 'malloc' => 50,
166 'signal' => 52,
167 'substr' => 54,
168 'syntax' => 56,
169 'ambiguous' => 58,
170 'bareword' => 60,
171 'digit' => 62,
172 'parenthesis' => 64,
173 'precedence' => 66,
174 'printf' => 68,
175 'prototype' => 70,
176 'qw' => 72,
177 'reserved' => 74,
178 'semicolon' => 76,
179 'taint' => 78,
180 'threads' => 80,
181 'uninitialized' => 82,
182 'unpack' => 84,
183 'untie' => 86,
184 'utf8' => 88,
185 'void' => 90,
186 'y2k' => 92,
187 );
188
189our %Bits = (
190 'all' => "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x15", # [0..46]
191 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00", # [29]
192 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00", # [30]
193 'closed' => "\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
194 'closure' => "\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
195 'debugging' => "\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00", # [22]
196 'deprecated' => "\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
197 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00", # [31]
198 'exec' => "\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
199 'exiting' => "\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
200 'glob' => "\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
201 'inplace' => "\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00", # [23]
202 'internal' => "\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00", # [24]
203 'io' => "\x00\x54\x55\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11]
204 'layer' => "\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
205 'malloc' => "\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00", # [25]
206 'misc' => "\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
207 'newline' => "\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
208 'numeric' => "\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
209 'once' => "\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
210 'overflow' => "\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
211 'pack' => "\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00", # [16]
212 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00\x00", # [32]
213 'pipe' => "\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
214 'portable' => "\x00\x00\x00\x00\x04\x00\x00\x00\x00\x00\x00\x00", # [17]
215 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00\x00", # [33]
216 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00", # [34]
217 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00", # [35]
218 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00\x00", # [36]
219 'recursion' => "\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00\x00\x00", # [18]
220 'redefine' => "\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00", # [19]
221 'regexp' => "\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00", # [20]
222 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00\x00", # [37]
223 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00\x00", # [38]
224 'severe' => "\x00\x00\x00\x00\x00\x54\x05\x00\x00\x00\x00\x00", # [21..25]
225 'signal' => "\x00\x00\x00\x00\x00\x00\x10\x00\x00\x00\x00\x00", # [26]
226 'substr' => "\x00\x00\x00\x00\x00\x00\x40\x00\x00\x00\x00\x00", # [27]
227 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\x55\x55\x15\x00\x00", # [28..38]
228 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00\x00", # [39]
229 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01\x00", # [40]
230 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04\x00", # [41]
231 'unopened' => "\x00\x00\x40\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
232 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10\x00", # [42]
233 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x40\x00", # [43]
234 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x01", # [44]
235 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04", # [45]
236 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x10", # [46]
237 );
238
239our %DeadBits = (
240 'all' => "\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\xaa\x2a", # [0..46]
241 'ambiguous' => "\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00", # [29]
242 'bareword' => "\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00", # [30]
243 'closed' => "\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [6]
244 'closure' => "\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [1]
245 'debugging' => "\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00", # [22]
246 'deprecated' => "\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [2]
247 'digit' => "\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00", # [31]
248 'exec' => "\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [7]
249 'exiting' => "\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [3]
250 'glob' => "\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [4]
251 'inplace' => "\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00", # [23]
252 'internal' => "\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00", # [24]
253 'io' => "\x00\xa8\xaa\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [5..11]
254 'layer' => "\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [8]
255 'malloc' => "\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00", # [25]
256 'misc' => "\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00\x00", # [12]
257 'newline' => "\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [9]
258 'numeric' => "\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00\x00", # [13]
259 'once' => "\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00", # [14]
260 'overflow' => "\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00", # [15]
261 'pack' => "\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00\x00", # [16]
262 'parenthesis' => "\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00\x00", # [32]
263 'pipe' => "\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [10]
264 'portable' => "\x00\x00\x00\x00\x08\x00\x00\x00\x00\x00\x00\x00", # [17]
265 'precedence' => "\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00\x00", # [33]
266 'printf' => "\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00", # [34]
267 'prototype' => "\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00", # [35]
268 'qw' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x00", # [36]
269 'recursion' => "\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00\x00\x00", # [18]
270 'redefine' => "\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00", # [19]
271 'regexp' => "\x00\x00\x00\x00\x00\x02\x00\x00\x00\x00\x00\x00", # [20]
272 'reserved' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00\x00", # [37]
273 'semicolon' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00\x00", # [38]
274 'severe' => "\x00\x00\x00\x00\x00\xa8\x0a\x00\x00\x00\x00\x00", # [21..25]
275 'signal' => "\x00\x00\x00\x00\x00\x00\x20\x00\x00\x00\x00\x00", # [26]
276 'substr' => "\x00\x00\x00\x00\x00\x00\x80\x00\x00\x00\x00\x00", # [27]
277 'syntax' => "\x00\x00\x00\x00\x00\x00\x00\xaa\xaa\x2a\x00\x00", # [28..38]
278 'taint' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00\x00", # [39]
279 'threads' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00", # [40]
280 'uninitialized' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08\x00", # [41]
281 'unopened' => "\x00\x00\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00", # [11]
282 'unpack' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20\x00", # [42]
283 'untie' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x80\x00", # [43]
284 'utf8' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02", # [44]
285 'void' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x08", # [45]
286 'y2k' => "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x20", # [46]
287 );
288
289$NONE = "\0\0\0\0\0\0\0\0\0\0\0\0";
290$LAST_BIT = 94 ;
291$BYTES = 12 ;
292
293$All = "" ; vec($All, $Offsets{'all'}, 2) = 3 ;
294
295sub Croaker
296{
297 local $Carp::CarpInternal{'warnings'};
298 delete $Carp::CarpInternal{'warnings'};
299 Carp::croak(@_);
300}
301
302sub bits
303{
304 # called from B::Deparse.pm
305
306 push @_, 'all' unless @_;
307
308 my $mask;
309 my $catmask ;
310 my $fatal = 0 ;
311 my $no_fatal = 0 ;
312
313 foreach my $word ( @_ ) {
314 if ($word eq 'FATAL') {
315 $fatal = 1;
316 $no_fatal = 0;
317 }
318 elsif ($word eq 'NONFATAL') {
319 $fatal = 0;
320 $no_fatal = 1;
321 }
322 elsif ($catmask = $Bits{$word}) {
323 $mask |= $catmask ;
324 $mask |= $DeadBits{$word} if $fatal ;
325 $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
326 }
327 else
328 { Croaker("Unknown warnings category '$word'")}
329 }
330
331 return $mask ;
332}
333
334sub import
335{
336 shift;
337
338 my $catmask ;
339 my $fatal = 0 ;
340 my $no_fatal = 0 ;
341
342 my $mask = ${^WARNING_BITS} ;
343
344 if (vec($mask, $Offsets{'all'}, 1)) {
345 $mask |= $Bits{'all'} ;
346 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
347 }
348
349 push @_, 'all' unless @_;
350
351 foreach my $word ( @_ ) {
352 if ($word eq 'FATAL') {
353 $fatal = 1;
354 $no_fatal = 0;
355 }
356 elsif ($word eq 'NONFATAL') {
357 $fatal = 0;
358 $no_fatal = 1;
359 }
360 elsif ($catmask = $Bits{$word}) {
361 $mask |= $catmask ;
362 $mask |= $DeadBits{$word} if $fatal ;
363 $mask &= ~($DeadBits{$word}|$All) if $no_fatal ;
364 }
365 else
366 { Croaker("Unknown warnings category '$word'")}
367 }
368
369 ${^WARNING_BITS} = $mask ;
370}
371
372sub unimport
373{
374 shift;
375
376 my $catmask ;
377 my $mask = ${^WARNING_BITS} ;
378
379 if (vec($mask, $Offsets{'all'}, 1)) {
380 $mask |= $Bits{'all'} ;
381 $mask |= $DeadBits{'all'} if vec($mask, $Offsets{'all'}+1, 1);
382 }
383
384 push @_, 'all' unless @_;
385
386 foreach my $word ( @_ ) {
387 if ($word eq 'FATAL') {
388 next;
389 }
390 elsif ($catmask = $Bits{$word}) {
391 $mask &= ~($catmask | $DeadBits{$word} | $All);
392 }
393 else
394 { Croaker("Unknown warnings category '$word'")}
395 }
396
397 ${^WARNING_BITS} = $mask ;
398}
399
400my %builtin_type; @builtin_type{qw(SCALAR ARRAY HASH CODE REF GLOB LVALUE Regexp)} = ();
401
402sub __chk
403{
404 my $category ;
405 my $offset ;
406 my $isobj = 0 ;
407
408 if (@_) {
409 # check the category supplied.
410 $category = shift ;
411 if (my $type = ref $category) {
412 Croaker("not an object")
413 if exists $builtin_type{$type};
414 $category = $type;
415 $isobj = 1 ;
416 }
417 $offset = $Offsets{$category};
418 Croaker("Unknown warnings category '$category'")
419 unless defined $offset;
420 }
421 else {
422 $category = (caller(1))[0] ;
423 $offset = $Offsets{$category};
424 Croaker("package '$category' not registered for warnings")
425 unless defined $offset ;
426 }
427
428 my $this_pkg = (caller(1))[0] ;
429 my $i = 2 ;
430 my $pkg ;
431
432 if ($isobj) {
433 while (do { { package DB; $pkg = (caller($i++))[0] } } ) {
434 last unless @DB::args && $DB::args[0] =~ /^$category=/ ;
435 }
436 $i -= 2 ;
437 }
438 else {
439 for ($i = 2 ; $pkg = (caller($i))[0] ; ++ $i) {
440 last if $pkg ne $this_pkg ;
441 }
442 $i = 2
443 if !$pkg || $pkg eq $this_pkg ;
444 }
445
446 my $callers_bitmask = (caller($i))[9] ;
447 return ($callers_bitmask, $offset, $i) ;
448}
449
450sub enabled
451{
452 Croaker("Usage: warnings::enabled([category])")
453 unless @_ == 1 || @_ == 0 ;
454
455 my ($callers_bitmask, $offset, $i) = __chk(@_) ;
456
457 return 0 unless defined $callers_bitmask ;
458 return vec($callers_bitmask, $offset, 1) ||
459 vec($callers_bitmask, $Offsets{'all'}, 1) ;
460}
461
462
463sub warn
464{
465 Croaker("Usage: warnings::warn([category,] 'message')")
466 unless @_ == 2 || @_ == 1 ;
467
468 my $message = pop ;
469 my ($callers_bitmask, $offset, $i) = __chk(@_) ;
470 Carp::croak($message)
471 if vec($callers_bitmask, $offset+1, 1) ||
472 vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
473 Carp::carp($message) ;
474}
475
476sub warnif
477{
478 Croaker("Usage: warnings::warnif([category,] 'message')")
479 unless @_ == 2 || @_ == 1 ;
480
481 my $message = pop ;
482 my ($callers_bitmask, $offset, $i) = __chk(@_) ;
483
484 return
485 unless defined $callers_bitmask &&
486 (vec($callers_bitmask, $offset, 1) ||
487 vec($callers_bitmask, $Offsets{'all'}, 1)) ;
488
489 Carp::croak($message)
490 if vec($callers_bitmask, $offset+1, 1) ||
491 vec($callers_bitmask, $Offsets{'all'}+1, 1) ;
492
493 Carp::carp($message) ;
494}
495
4961;
497# ex: set ro: