Counter Strike : Global Offensive Source Code
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

497 lines
16 KiB

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