1 #if 0
2 <<'SKIP';
3 #endif
4 /*
5 ----------------------------------------------------------------------
6
7 ppport.h -- Perl/Pollution/Portability Version 3.54
8
9 Automatically created by Devel::PPPort running under perl 5.026002.
10
11 Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
12 includes in parts/inc/ instead.
13
14 Use 'perldoc ppport.h' to view the documentation below.
15
16 ----------------------------------------------------------------------
17
18 SKIP
19
20 =pod
21
22 =head1 NAME
23
24 ppport.h - Perl/Pollution/Portability version 3.54
25
26 =head1 SYNOPSIS
27
28 perl ppport.h [options] [source files]
29
30 Searches current directory for files if no [source files] are given
31
32 --help show short help
33
34 --version show version
35
36 --patch=file write one patch file with changes
37 --copy=suffix write changed copies with suffix
38 --diff=program use diff program and options
39
40 --compat-version=version provide compatibility with Perl version
41 --cplusplus accept C++ comments
42
43 --quiet don't output anything except fatal errors
44 --nodiag don't show diagnostics
45 --nohints don't show hints
46 --nochanges don't suggest changes
47 --nofilter don't filter input files
48
49 --strip strip all script and doc functionality
50 from ppport.h
51
52 --list-provided list provided API
53 --list-unsupported list unsupported API
54 --api-info=name show Perl API portability information
55
56 =head1 COMPATIBILITY
57
58 This version of F<ppport.h> is designed to support operation with Perl
59 installations back to 5.003_07, and has been tested up to 5.31.4.
60
61 =head1 OPTIONS
62
63 =head2 --help
64
65 Display a brief usage summary.
66
67 =head2 --version
68
69 Display the version of F<ppport.h>.
70
71 =head2 --patch=I<file>
72
73 If this option is given, a single patch file will be created if
74 any changes are suggested. This requires a working diff program
75 to be installed on your system.
76
77 =head2 --copy=I<suffix>
78
79 If this option is given, a copy of each file will be saved with
80 the given suffix that contains the suggested changes. This does
81 not require any external programs. Note that this does not
82 automagically add a dot between the original filename and the
83 suffix. If you want the dot, you have to include it in the option
84 argument.
85
86 If neither C<--patch> or C<--copy> are given, the default is to
87 simply print the diffs for each file. This requires either
88 C<Text::Diff> or a C<diff> program to be installed.
89
90 =head2 --diff=I<program>
91
92 Manually set the diff program and options to use. The default
93 is to use C<Text::Diff>, when installed, and output unified
94 context diffs.
95
96 =head2 --compat-version=I<version>
97
98 Tell F<ppport.h> to check for compatibility with the given
99 Perl version. The default is to check for compatibility with Perl
100 version 5.003_07. You can use this option to reduce the output
101 of F<ppport.h> if you intend to be backward compatible only
102 down to a certain Perl version.
103
104 =head2 --cplusplus
105
106 Usually, F<ppport.h> will detect C++ style comments and
107 replace them with C style comments for portability reasons.
108 Using this option instructs F<ppport.h> to leave C++
109 comments untouched.
110
111 =head2 --quiet
112
113 Be quiet. Don't print anything except fatal errors.
114
115 =head2 --nodiag
116
117 Don't output any diagnostic messages. Only portability
118 alerts will be printed.
119
120 =head2 --nohints
121
122 Don't output any hints. Hints often contain useful portability
123 notes. Warnings will still be displayed.
124
125 =head2 --nochanges
126
127 Don't suggest any changes. Only give diagnostic output and hints
128 unless these are also deactivated.
129
130 =head2 --nofilter
131
132 Don't filter the list of input files. By default, files not looking
133 like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
134
135 =head2 --strip
136
137 Strip all script and documentation functionality from F<ppport.h>.
138 This reduces the size of F<ppport.h> dramatically and may be useful
139 if you want to include F<ppport.h> in smaller modules without
140 increasing their distribution size too much.
141
142 The stripped F<ppport.h> will have a C<--unstrip> option that allows
143 you to undo the stripping, but only if an appropriate C<Devel::PPPort>
144 module is installed.
145
146 =head2 --list-provided
147
148 Lists the API elements for which compatibility is provided by
149 F<ppport.h>. Also lists if it must be explicitly requested,
150 if it has dependencies, and if there are hints or warnings for it.
151
152 =head2 --list-unsupported
153
154 Lists the API elements that are known not to be supported by
155 F<ppport.h> and below which version of Perl they probably
156 won't be available or work.
157
158 =head2 --api-info=I<name>
159
160 Show portability information for API elements matching I<name>.
161 If I<name> is surrounded by slashes, it is interpreted as a regular
162 expression.
163
164 =head1 DESCRIPTION
165
166 In order for a Perl extension (XS) module to be as portable as possible
167 across differing versions of Perl itself, certain steps need to be taken.
168
169 =over 4
170
171 =item *
172
173 Including this header is the first major one. This alone will give you
174 access to a large part of the Perl API that hasn't been available in
175 earlier Perl releases. Use
176
177 perl ppport.h --list-provided
178
179 to see which API elements are provided by ppport.h.
180
181 =item *
182
183 You should avoid using deprecated parts of the API. For example, using
184 global Perl variables without the C<PL_> prefix is deprecated. Also,
185 some API functions used to have a C<perl_> prefix. Using this form is
186 also deprecated. You can safely use the supported API, as F<ppport.h>
187 will provide wrappers for older Perl versions.
188
189 =item *
190
191 If you use one of a few functions or variables that were not present in
192 earlier versions of Perl, and that can't be provided using a macro, you
193 have to explicitly request support for these functions by adding one or
194 more C<#define>s in your source code before the inclusion of F<ppport.h>.
195
196 These functions or variables will be marked C<explicit> in the list shown
197 by C<--list-provided>.
198
199 Depending on whether you module has a single or multiple files that
200 use such functions or variables, you want either C<static> or global
201 variants.
202
203 For a C<static> function or variable (used only in a single source
204 file), use:
205
206 #define NEED_function
207 #define NEED_variable
208
209 For a global function or variable (used in multiple source files),
210 use:
211
212 #define NEED_function_GLOBAL
213 #define NEED_variable_GLOBAL
214
215 Note that you mustn't have more than one global request for the
216 same function or variable in your project.
217
218 Function / Variable Static Request Global Request
219 -----------------------------------------------------------------------------------------
220 caller_cx() NEED_caller_cx NEED_caller_cx_GLOBAL
221 croak_xs_usage() NEED_croak_xs_usage NEED_croak_xs_usage_GLOBAL
222 die_sv() NEED_die_sv NEED_die_sv_GLOBAL
223 eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL
224 grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL
225 grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL
226 grok_number() NEED_grok_number NEED_grok_number_GLOBAL
227 grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL
228 grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL
229 load_module() NEED_load_module NEED_load_module_GLOBAL
230 mess() NEED_mess NEED_mess_GLOBAL
231 mess_nocontext() NEED_mess_nocontext NEED_mess_nocontext_GLOBAL
232 mess_sv() NEED_mess_sv NEED_mess_sv_GLOBAL
233 mg_findext() NEED_mg_findext NEED_mg_findext_GLOBAL
234 my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL
235 my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL
236 my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL
237 my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL
238 my_strnlen() NEED_my_strnlen NEED_my_strnlen_GLOBAL
239 newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL
240 newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL
241 PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL
242 PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL
243 pv_display() NEED_pv_display NEED_pv_display_GLOBAL
244 pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL
245 pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL
246 sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL
247 sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL
248 sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL
249 sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL
250 sv_unmagicext() NEED_sv_unmagicext NEED_sv_unmagicext_GLOBAL
251 utf8_to_uvchr_buf() NEED_utf8_to_uvchr_buf NEED_utf8_to_uvchr_buf_GLOBAL
252 vload_module() NEED_vload_module NEED_vload_module_GLOBAL
253 vmess() NEED_vmess NEED_vmess_GLOBAL
254 warner() NEED_warner NEED_warner_GLOBAL
255
256 To avoid namespace conflicts, you can change the namespace of the
257 explicitly exported functions / variables using the C<DPPP_NAMESPACE>
258 macro. Just C<#define> the macro before including C<ppport.h>:
259
260 #define DPPP_NAMESPACE MyOwnNamespace_
261 #include "ppport.h"
262
263 The default namespace is C<DPPP_>.
264
265 =back
266
267 The good thing is that most of the above can be checked by running
268 F<ppport.h> on your source code. See the next section for
269 details.
270
271 =head1 EXAMPLES
272
273 To verify whether F<ppport.h> is needed for your module, whether you
274 should make any changes to your code, and whether any special defines
275 should be used, F<ppport.h> can be run as a Perl script to check your
276 source code. Simply say:
277
278 perl ppport.h
279
280 The result will usually be a list of patches suggesting changes
281 that should at least be acceptable, if not necessarily the most
282 efficient solution, or a fix for all possible problems.
283
284 If you know that your XS module uses features only available in
285 newer Perl releases, if you're aware that it uses C++ comments,
286 and if you want all suggestions as a single patch file, you could
287 use something like this:
288
289 perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
290
291 If you only want your code to be scanned without any suggestions
292 for changes, use:
293
294 perl ppport.h --nochanges
295
296 You can specify a different C<diff> program or options, using
297 the C<--diff> option:
298
299 perl ppport.h --diff='diff -C 10'
300
301 This would output context diffs with 10 lines of context.
302
303 If you want to create patched copies of your files instead, use:
304
305 perl ppport.h --copy=.new
306
307 To display portability information for the C<newSVpvn> function,
308 use:
309
310 perl ppport.h --api-info=newSVpvn
311
312 Since the argument to C<--api-info> can be a regular expression,
313 you can use
314
315 perl ppport.h --api-info=/_nomg$/
316
317 to display portability information for all C<_nomg> functions or
318
319 perl ppport.h --api-info=/./
320
321 to display information for all known API elements.
322
323 =head1 BUGS
324
325 Some of the suggested edits and/or generated patches may not compile as-is
326 without tweaking manually. This is generally due to the need for an extra
327 parameter to be added to the call to prevent buffer overflow.
328
329 If this version of F<ppport.h> is causing failure during
330 the compilation of this module, please check if newer versions
331 of either this module or C<Devel::PPPort> are available on CPAN
332 before sending a bug report.
333
334 If F<ppport.h> was generated using the latest version of
335 C<Devel::PPPort> and is causing failure of this module, please
336 send a bug report to L<perlbug@perl.org|mailto:perlbug@perl.org>.
337
338 Please include the following information:
339
340 =over 4
341
342 =item 1.
343
344 The complete output from running "perl -V"
345
346 =item 2.
347
348 This file.
349
350 =item 3.
351
352 The name and version of the module you were trying to build.
353
354 =item 4.
355
356 A full log of the build that failed.
357
358 =item 5.
359
360 Any other information that you think could be relevant.
361
362 =back
363
364 For the latest version of this code, please get the C<Devel::PPPort>
365 module from CPAN.
366
367 =head1 COPYRIGHT
368
369 Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz.
370
371 Version 2.x, Copyright (C) 2001, Paul Marquess.
372
373 Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
374
375 This program is free software; you can redistribute it and/or
376 modify it under the same terms as Perl itself.
377
378 =head1 SEE ALSO
379
380 See L<Devel::PPPort>.
381
382 =cut
383
384 # These are tools that must be included in ppport.h. It doesn't work if given
385 # a .pl suffix
386
387 sub format_version
388 {
389 # Given an input version that is acceptable to parse_version(), return a
390 # string of the standard representation of it.
391
392 my($r,$v,$s) = parse_version(shift);
393
394 if ($r < 5 || ($r == 5 && $v < 6)) {
395 my $ver = sprintf "%d.%03d", $r, $v;
396 $s > 0 and $ver .= sprintf "_%02d", $s;
397
398 return $ver;
399 }
400
401 return sprintf "%d.%d.%d", $r, $v, $s;
402 }
403
404 sub parse_version
405 {
406 # Returns a triplet, (5, major, minor) from the input, which can be in any
407 # of several typical formats
408
409 my $ver = shift;
410 $ver = "" unless defined $ver;
411
412 my($r,$v,$s);
413
414 if ( ($r, $v, $s) = $ver =~ /^(5)(\d{3})(\d{3})$/ # 5029010, from the file
415 # names in our
416 # parts/base/ and
417 # parts/todo directories
418 or ($r, $v, $s) = $ver =~ /^(\d+)\.(\d+)\.(\d+)$/ # 5.25.7
419 or ($r, $v, $s) = $ver =~ /^(\d+)\.(\d{3})(\d{3})$/ # 5.025008, from the
420 # output of $]
421 or ($r, $v, $s) = $ver =~ /^(\d+)\.(\d{1,3})()$/ # 5.24, 5.004
422 or ($r, $v, $s) = $ver =~ /^(\d+)\.(00[1-5])_?(\d{2})$/ # 5.003_07
423 ) {
424
425 $s = 0 unless $s;
426
427 die "Only Perl 5 is supported '$ver'\n" if $r != 5;
428 die "Invalid version number: $ver\n" if $v >= 1000 || $s >= 1000;
429 return (5, 0 + $v, 0 + $s);
430 }
431
432 my $mesg = "";
433 $mesg = ". (In 5.00x_yz, x must be 1-5.)" if $ver =~ /_/;
434 die "Invalid version number format: '$ver'$mesg\n";
435 }
436
437 sub int_parse_version
438 {
439 # Returns integer 7 digit human-readable version, suitable for use in file
440 # names in parts/todo parts/base.
441
442 return 0 + join "", map { sprintf("%03d", $_) } parse_version(shift);
443 }
444
445 sub format_version_line
446 {
447 # Returns a floating point representation of the input version
448
449 my $version = int_parse_version(shift);
450 $version =~ s/^5\B/5./;
451 return $version;
452 }
453
454 sub dictionary_order($$) # Sort caselessly, ignoring punct
455 {
456 my ($lc_a, $lc_b);
457 my ($squeezed_a, $squeezed_b);
458 my ($valid_a, $valid_b); # Meaning valid for all releases
459
460 # On early perls, the implicit pass by reference doesn't work, so we have
461 # to use the globals to initialize.
462 if ("$]" < "5.006" ) {
463 $valid_a = $a; $valid_b = $b;
464 }
465 else {
466 ($valid_a, $valid_b) = @_;
467 }
468
469 $lc_a = lc $valid_a;
470 $lc_b = lc $valid_b;
471
472 $squeezed_a = $lc_a;
473 $squeezed_a =~ s/[\W_]//g; # No punct, including no underscore
474 $squeezed_b = $lc_b;
475 $squeezed_b =~ s/[\W_]//g;
476
477 return( $squeezed_a cmp $squeezed_b
478 or $lc_a cmp $lc_b
479 or $valid_a cmp $valid_b);
480 }
481
482 sub sort_api_lines # Sort lines of the form flags|return|name|args...
483 # by 'name'
484 {
485 $a =~ / ^ [^|]* \| [^|]* \| (\w+) /x; # 3rd field '|' is sep
486 my $a_name = $1;
487 $b =~ / ^ [^|]* \| [^|]* \| (\w+) /x;
488 my $b_name = $1;
489 return dictionary_order($a_name, $b_name);
490 }
491
492 1;
493
494 use strict;
495
496 # Disable broken TRIE-optimization
497 BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if "$]" >= 5.009004 && "$]" <= 5.009005 }
498
499 my $VERSION = 3.54;
500
501 my %opt = (
502 quiet => 0,
503 diag => 1,
504 hints => 1,
505 changes => 1,
506 cplusplus => 0,
507 filter => 1,
508 strip => 0,
509 version => 0,
510 );
511
512 my($ppport) = $0 =~ /([\w.]+)$/;
513 my $LF = '(?:\r\n|[\r\n])'; # line feed
514 my $HS = "[ \t]"; # horizontal whitespace
515
516 # Never use C comments in this file!
517 my $ccs = '/'.'*';
518 my $cce = '*'.'/';
519 my $rccs = quotemeta $ccs;
520 my $rcce = quotemeta $cce;
521
522 eval {
523 require Getopt::Long;
524 Getopt::Long::GetOptions(\%opt, qw(
525 help quiet diag! filter! hints! changes! cplusplus strip version
526 patch=s copy=s diff=s compat-version=s
527 list-provided list-unsupported api-info=s
528 )) or usage();
529 };
530
531 if ($@ and grep /^-/, @ARGV) {
532 usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
533 die "Getopt::Long not found. Please don't use any options.\n";
534 }
535
536 if ($opt{version}) {
537 print "This is $0 $VERSION.\n";
538 exit 0;
539 }
540
541 usage() if $opt{help};
542 strip() if $opt{strip};
543
544 $opt{'compat-version'} = 5.003_07 unless exists $opt{'compat-version'};
545 $opt{'compat-version'} = int_parse_version($opt{'compat-version'});
546
547 my $int_min_perl = int_parse_version(5.003_07);
548
549 # Each element of this hash looks something like:
550 # 'Poison' => {
551 # 'base' => '5.008000',
552 # 'provided' => 1,
553 # 'todo' => '5.003007'
554 # },
555 my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
556 ? ( $1 => {
557 ($2 ? ( base => $2 ) : ()),
558 ($3 ? ( todo => $3 ) : ()),
559 (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()),
560 (index($4, 'p') >= 0 ? ( provided => 1 ) : ()),
561 (index($4, 'n') >= 0 ? ( noTHXarg => 1 ) : ()),
562 (index($4, 'c') >= 0 ? ( core_only => 1 ) : ()),
563 (index($4, 'd') >= 0 ? ( deprecated => 1 ) : ()),
564 (index($4, 'i') >= 0 ? ( inaccessible => 1 ) : ()),
565 (index($4, 'x') >= 0 ? ( experimental => 1 ) : ()),
566 (index($4, 'u') >= 0 ? ( undocumented => 1 ) : ()),
567 (index($4, 'o') >= 0 ? ( ppport_fnc => 1 ) : ()),
568 (index($4, 'V') >= 0 ? ( unverified => 1 ) : ()),
569 } )
570 : die "invalid spec: $_" } qw(
571 abort_execution|5.025010||Viu
572 add_above_Latin1_folds|5.021001||Viu
573 add_cp_to_invlist|5.013011||Viu
574 add_data|5.005000||nViu
575 add_multi_match|5.021004||Viu
576 _add_range_to_invlist|5.016000||cViu
577 add_utf16_textfilter|5.011001||Viu
578 adjust_size_and_find_bucket|5.019003||nViu
579 advance_one_LB|5.023007||Viu
580 advance_one_SB|5.021009||Viu
581 advance_one_WB|5.021009||Viu
582 alloccopstash|5.017001|5.017001|x
583 alloc_LOGOP|5.025004||xViu
584 allocmy|5.008001||Viu
585 amagic_call|5.003007|5.003007|u
586 amagic_cmp|5.009003||Viu
587 amagic_cmp_locale|5.009003||Viu
588 amagic_deref_call|5.013007|5.013007|u
589 amagic_i_ncmp|5.009003||Viu
590 amagic_is_enabled|5.015008||Viu
591 amagic_ncmp|5.009003||Viu
592 _aMY_CXT|5.009000|5.009000|p
593 aMY_CXT_|5.009000|5.009000|p
594 aMY_CXT|5.009000|5.009000|p
595 anonymise_cv_maybe|5.013003||Viu
596 any_dup|5.006000||Vu
597 ao|5.005000||Viu
598 _append_range_to_invlist|5.013010||Viu
599 append_utf8_from_native_byte|5.019004||ncViu
600 apply|5.003007||Viu
601 apply_attrs|5.006000||Viu
602 apply_attrs_my|5.007003||Viu
603 apply_attrs_string|5.006001|5.006001|xu
604 ARCHNAME|5.004000|5.004000|
605 argvout_final|5.029006||Viu
606 ASCII_TO_NEED|5.019004||ndcVu
607 __ASSERT_|5.019007|5.008008|p
608 assert_uft8_cache_coherent|5.013003||Viu
609 assignment_type|5.021005||Viu
610 atfork_lock|5.007002|5.007002|nu
611 atfork_unlock|5.007002|5.007002|nu
612 aTHX_|5.006000|5.003007|p
613 aTHX|5.006000|5.003007|p
614 aTHXR_||5.003007|pou
615 aTHXR||5.003007|pou
616 av_arylen_p|5.009003|5.009003|u
617 av_clear|5.003007|5.003007|
618 av_create_and_push|5.009005|5.009005|x
619 av_create_and_unshift_one|5.009005|5.009005|x
620 av_delete|5.006000|5.006000|
621 av_exists|5.006000|5.006000|
622 av_extend|5.003007|5.003007|
623 av_extend_guts|5.017004||Viu
624 av_fetch|5.003007|5.003007|
625 av_fill|5.003007|5.003007|
626 AvFILL|5.003007|5.003007|
627 AvFILLp|5.004005|5.003007|poV
628 av_iter_p|5.011000|5.011000|u
629 av_len|5.003007|5.003007|
630 av_make|5.003007|5.003007|
631 av_nonelem|5.027009||Viu
632 av_pop|5.003007|5.003007|
633 av_push|5.003007|5.003007|
634 av_reify|5.004004||cViu
635 av_shift|5.003007|5.003007|
636 av_store|5.003007|5.003007|
637 av_tindex|5.017009|5.003007|p
638 av_top_index|5.017009|5.003007|p
639 av_undef|5.003007|5.003007|
640 av_unshift|5.003007|5.003007|
641 ax|5.003007|5.003007|
642 backup_one_GCB|5.025003||Viu
643 backup_one_LB|5.023007||Viu
644 backup_one_SB|5.021009||Viu
645 backup_one_WB|5.021009||Viu
646 bad_type_gv|5.019002||Viu
647 bad_type_pv|5.016000||Viu
648 BhkDISABLE|||x
649 BhkENABLE|||x
650 BhkENTRY_set|||x
651 BhkENTRY|||xi
652 BhkFLAGS|||xi
653 BIN|5.003007|5.003007|
654 bind_match|5.003007||Viu
655 block_end|5.004000|5.004000|
656 block_gimme|5.004000|5.004000|u
657 blockhook_register|5.013003|5.013003|x
658 block_start|5.004000|5.004000|
659 BOM_UTF8|5.025005|5.003007|p
660 boolSV|5.004000|5.003007|p
661 boot_core_mro|5.009005||Viu
662 boot_core_PerlIO|5.007002||Viu
663 boot_core_UNIVERSAL|5.003007||Viu
664 _byte_dump_string|5.025006||Viu
665 BYTEORDER|5.003007|5.003007|
666 bytes_cmp_utf8|5.013007|5.013007|
667 bytes_from_utf8|5.007001|5.007001|x
668 bytes_from_utf8_loc|5.027001|5.027001|nxu
669 bytes_to_utf8|5.006001|5.006001|x
670 call_argv|5.006000|5.003007|p
671 call_atexit|5.006000|5.006000|u
672 CALL_BLOCK_HOOKS|||xi
673 caller_cx|5.013005|5.006000|p
674 call_list|5.004000|5.004000|u
675 call_method|5.006000|5.003007|p
676 calloc|5.007002|5.007002|n
677 call_pv|5.006000|5.003007|p
678 call_sv|5.006000|5.003007|p
679 cando|5.003007||Viu
680 C_ARRAY_END|5.013002|5.003007|p
681 C_ARRAY_LENGTH|5.008001|5.003007|p
682 CASTFLAGS|5.003007|5.003007|
683 cast_i32|5.006000|5.006000|nu
684 cast_iv|5.006000|5.006000|nu
685 cast_ulong|5.006000|5.006000|nu
686 cast_uv|5.006000|5.006000|nu
687 category_name|5.027008||nViu
688 cBOOL|5.013000|5.003007|p
689 change_engine_size|5.029004||Viu
690 CHARBITS|5.011002|5.011002|
691 check_and_deprecate|5.025009||Viu
692 checkcomma|5.003007||Viu
693 check_locale_boundary_crossing|5.015006||Viu
694 check_type_and_open|5.009003||Viu
695 check_uni|5.003007||Viu
696 check_utf8_print|5.013009||Viu
697 ck_entersub_args_core|||iu
698 ck_entersub_args_list|5.013006|5.013006|
699 ck_entersub_args_proto|5.013006|5.013006|
700 ck_entersub_args_proto_or_list|5.013006|5.013006|
701 ckWARN2|5.006000|5.006000|
702 ckWARN2_d|5.006000|5.006000|
703 ckWARN3|5.007003|5.007003|
704 ckWARN3_d|5.007003|5.007003|
705 ckWARN4|5.007003|5.007003|
706 ckWARN4_d|5.007003|5.007003|
707 ckWARN|5.006000|5.003007|p
708 ckwarn|5.009003|5.009003|u
709 ckwarn_common|5.011001||Viu
710 ckWARN_d|5.006000|5.006000|
711 ckwarn_d|5.009003|5.009003|u
712 ck_warner|5.011001|5.011001|vu
713 ck_warner_d|5.011001|5.011001|vu
714 CLASS||5.003007|
715 clear_defarray|5.023008|5.023008|u
716 CLEAR_ERRSV|5.025007|5.025007|
717 clear_placeholders|5.009004||xViu
718 clear_special_blocks|5.021003||Viu
719 clone_params_del|5.013002|5.013002|nu
720 clone_params_new|5.013002|5.013002|nu
721 closest_cop|5.007002||Viu
722 cntrl_to_mnemonic|5.021004||nViu
723 compute_EXACTish|5.017003||nViu
724 construct_ahocorasick_from_trie|5.021001||Viu
725 cop_fetch_label|5.015001|5.015001|x
726 CopFILE|5.006000||pVu
727 CopFILEAV|5.006000||pVu
728 CopFILEGV|5.006000||pVu
729 CopFILEGV_set|5.006000||pVu
730 CopFILE_set|5.006000||pVu
731 CopFILESV|5.006000||pVu
732 cop_free|5.006000||Viu
733 cophh_2hv|5.013007|5.013007|x
734 cophh_copy|5.013007|5.013007|x
735 cophh_delete_pv|5.013007|5.013007|x
736 cophh_delete_pvn|5.013007|5.013007|x
737 cophh_delete_pvs|5.013007|5.013007|x
738 cophh_delete_sv|5.013007|5.013007|x
739 cophh_fetch_pv|5.013007|5.013007|x
740 cophh_fetch_pvn|5.013007|5.013007|x
741 cophh_fetch_pvs|5.013007|5.013007|x
742 cophh_fetch_sv|5.013007|5.013007|x
743 cophh_free|5.013007|5.013007|x
744 cophh_new_empty|5.013007|5.013007|x
745 cophh_store_pv|5.013007|5.013007|x
746 cophh_store_pvn|5.013007|5.013007|x
747 cophh_store_pvs|5.013007|5.013007|x
748 cophh_store_sv|5.013007|5.013007|x
749 cop_hints_2hv|5.013007|5.013007|
750 cop_hints_fetch_pv|5.013007|5.013007|
751 cop_hints_fetch_pvn|5.013007|5.013007|
752 cop_hints_fetch_pvs|5.013007|5.013007|
753 cop_hints_fetch_sv|5.013007|5.013007|
754 CopLABEL|5.009005|5.009005|
755 CopLABEL_len|5.016000|5.016000|
756 CopLABEL_len_flags|5.016000|5.016000|
757 CopSTASH|5.006000||pVu
758 CopSTASH_eq|5.006000||pVu
759 CopSTASHPV|5.006000||pVu
760 CopSTASHPV_set|5.006000||pVu
761 CopSTASH_set|5.006000||pVu
762 cop_store_label|5.015001|5.015001|x
763 Copy|5.003007|5.003007|
764 CopyD|5.009002|5.003007|p
765 core_prototype|5.015002||Vi
766 coresub_op|5.015003||Viu
767 CPERLscope|5.005000||pVu
768 CPPLAST|5.006000|5.006000|
769 CPPMINUS|5.003007|5.003007|
770 CPPRUN|5.006000|5.006000|
771 CPPSTDIN|5.003007|5.003007|
772 create_eval_scope|5.009004||xViu
773 croak|5.006000|5.003007|v
774 croak_caller|5.025004||vnViu
775 croak_memory_wrap|5.017006|5.003007|pnu
776 croak_nocontext|5.006000||pvnVu
777 croak_no_mem|5.017006||nViu
778 croak_no_modify|5.013003|5.003007|pn
779 croak_popstack|5.017008||ncViu
780 croak_sv|5.013001|5.003007|p
781 croak_xs_usage|5.010001|5.003007|pn
782 cr_textfilter|5.006000||Viu
783 csighandler|5.009003|5.009003|nu
784 current_re_engine|5.017001||cViu
785 curse|5.013009||Viu
786 custom_op_desc|5.007003|5.007003|d
787 custom_op_get_field|5.019006||cViu
788 custom_op_name|5.007003|5.007003|d
789 custom_op_register|5.013007|5.013007|
790 cv_ckproto_len_flags|5.015004||xcViu
791 cv_clone|5.003007|5.003007|
792 cv_clone_into|5.017004||Viu
793 cv_const_sv|5.003007|5.003007|n
794 cv_const_sv_or_av|5.019003||nViu
795 CvDEPTH|5.003007|5.003007|nu
796 cv_dump|5.006000||Vi
797 cv_forget_slab|5.017002||Vi
798 cv_get_call_checker|5.013006|5.013006|
799 cv_get_call_checker_flags|5.027003|5.027003|
800 CvGV|5.003007|5.003007|u
801 cvgv_from_hek|||ciu
802 cvgv_set|5.013003||cViu
803 cv_name|5.021005|5.021005|
804 CvPADLIST|5.008001|5.008001|x
805 cv_set_call_checker|5.013006|5.013006|
806 cv_set_call_checker_flags|5.021004|5.021004|
807 CvSTASH|5.003007|5.003007|
808 cvstash_set|5.013007||cViu
809 cv_undef|5.003007|5.003007|
810 cv_undef_flags|5.021004||Viu
811 CvWEAKOUTSIDE|||i
812 CX_CURPAD_SAVE|||i
813 CX_CURPAD_SV|||i
814 cx_dump|5.005000|5.005000|u
815 cx_dup|5.007003|5.007003|u
816 cxinc|5.003007|5.003007|u
817 cx_popblock|5.023008|5.023008|xu
818 cx_popeval|5.023008|5.023008|xu
819 cx_popformat|5.023008|5.023008|xu
820 cx_popgiven|5.027008|5.027008|xu
821 cx_poploop|5.023008|5.023008|xu
822 cx_popsub|5.023008|5.023008|xu
823 cx_popsub_args|5.023008|5.023008|xu
824 cx_popsub_common|5.023008|5.023008|xu
825 cx_popwhen|5.027008|5.027008|xu
826 cx_pushblock|5.023008|5.023008|xu
827 cx_pusheval|5.023008|5.023008|xu
828 cx_pushformat|5.023008|5.023008|xu
829 cx_pushgiven|5.027008|5.027008|xu
830 cx_pushloop_for|5.023008|5.023008|xu
831 cx_pushloop_plain|5.023008|5.023008|xu
832 cx_pushsub|5.023008|5.023008|xu
833 cx_pushwhen|5.027008|5.027008|xu
834 cx_topblock|5.023008|5.023008|xu
835 dAX|5.007002|5.003007|p
836 dAXMARK|5.009003|5.003007|p
837 deb|5.007003|5.007003|vu
838 deb_curcv|5.007002||Viu
839 deb_nocontext|5.007003|5.007003|vnu
840 debop|5.005000|5.005000|u
841 debprof|5.005000||Viu
842 debprofdump|5.005000|5.005000|u
843 debstack|5.007003|5.007003|u
844 deb_stack_all|5.008001||Viu
845 deb_stack_n|5.008001||Viu
846 debstackptrs|5.007003|5.007003|u
847 debug_start_match|5.009004||Viu
848 DECLARATION_FOR_LC_NUMERIC_MANIPULATION|5.021010|5.021010|
849 defelem_target|5.019002||Viu
850 DEFSV|5.004005|5.003007|poVu
851 DEFSV_set|5.010001||pVu
852 delete_eval_scope|5.009004||xViu
853 delimcpy|5.004000|5.004000|nu
854 delimcpy_no_escape|5.025005||nViu
855 del_sv|5.005000||Viu
856 despatch_signals|5.007001|5.007001|u
857 destroy_matcher|5.027008||Viu
858 die|5.006000|5.003007|v
859 die_nocontext|5.006000||vnVu
860 die_sv|5.013001|5.003007|p
861 die_unwind|5.013001||Viu
862 dirp_dup|5.013007|5.013007|u
863 dITEMS|5.007002|5.003007|p
864 div128|5.005000||Viu
865 djSP|||i
866 dMARK|5.003007|5.003007|
867 dMULTICALL|5.009003|5.009003|
868 dMY_CXT|5.009000|5.009000|p
869 dMY_CXT_SV|5.007003||poVu
870 dNOOP|5.006000|5.003007|poVu
871 do_aexec5|5.006000||Viu
872 do_aexec|||iu
873 do_aspawn|5.008000||Vu
874 do_binmode|5.004005|5.004005|du
875 docatch|5.005000||Vi
876 do_chomp|5.003007||Viu
877 do_close|5.003007|5.003007|u
878 do_delete_local|5.011000||Viu
879 do_dump_pad|5.008001||Vi
880 do_eof|5.003007||Viu
881 does_utf8_overflow|5.025006||nViu
882 doeval_compile|5.023008||Viu
883 do_exec3|5.006000||Viu
884 do_exec|5.003007||Viu
885 dofile|5.005003||Viu
886 dofindlabel|5.003007||Viu
887 doform|5.005000||Viu
888 do_gv_dump|5.006000|5.006000|u
889 do_gvgv_dump|5.006000|5.006000|u
890 do_hv_dump|5.006000|5.006000|u
891 doing_taint|5.008001|5.008001|nu
892 do_ipcctl|5.003007||Viu
893 do_ipcget|5.003007||Viu
894 do_join|5.003007|5.003007|u
895 do_magic_dump|5.006000|5.006000|u
896 do_msgrcv|5.003007||Viu
897 do_msgsnd|5.003007||Viu
898 do_ncmp|5.015001||Viu
899 do_oddball|5.006000||Viu
900 dooneliner|5.006000||Viu
901 do_op_dump|5.006000|5.006000|u
902 do_open|5.003007|5.003007|u
903 do_open6|5.019010||xViu
904 do_open9|5.006000|5.006000|du
905 do_openn|5.007001|5.007001|u
906 doopen_pm|5.008001||Viu
907 do_open_raw|5.019010||xViu
908 doparseform|5.005000||Viu
909 do_pmop_dump|5.006000|5.006000|u
910 dopoptoeval|5.003007||Viu
911 dopoptogivenfor|5.027008||Viu
912 dopoptolabel|5.005000||Viu
913 dopoptoloop|5.005000||Viu
914 dopoptosub_at|5.005000||Viu
915 dopoptowhen|5.027008||Viu
916 do_print|5.003007||Viu
917 do_readline|5.003007||Viu
918 doref|5.009003|5.009003|u
919 dORIGMARK|5.003007|5.003007|
920 do_seek|5.003007||Viu
921 do_semop|5.003007||Viu
922 do_shmio|5.003007||Viu
923 do_smartmatch|5.027008||Viu
924 do_spawn|5.008000||Vu
925 do_spawn_nowait|5.008000||Vu
926 do_sprintf|5.003007|5.003007|u
927 do_sv_dump|5.006000|5.006000|u
928 do_sysseek|5.004000||Viu
929 do_tell|5.003007||Viu
930 do_trans|5.003007||Viu
931 do_trans_complex|5.006001||Viu
932 do_trans_complex_utf8|5.006001||Viu
933 do_trans_count|5.006001||Viu
934 do_trans_count_utf8|5.006001||Viu
935 do_trans_simple|5.006001||Viu
936 do_trans_simple_utf8|5.006001||Viu
937 DOUBLEINFBYTES|5.023000|5.023000|
938 DOUBLEKIND|5.021006|5.021006|
939 DOUBLEMANTBITS|5.023000|5.023000|
940 DOUBLENANBYTES|5.023000|5.023000|
941 DOUBLESIZE|5.005000|5.005000|
942 dounwind|5.003007|5.003007|u
943 DO_UTF8|5.006000|5.006000|
944 do_vecget|5.006000||Viu
945 do_vecset|5.003007||Viu
946 do_vop|5.003007||Viu
947 dowantarray|5.003007|5.003007|u
948 drand48_init_r|||nciu
949 drand48_r|||nciu
950 dSAVEDERRNO|||i
951 dSAVE_ERRNO|||i
952 dSP|5.003007|5.003007|
953 dTHR|5.004005|5.003007|p
954 dTHX|5.003007|5.003007|p
955 dTHXa|5.006000||pVu
956 dTHXoa|5.006000||pVu
957 dTHXR||5.003007|pou
958 dtrace_probe_call|||ciu
959 dtrace_probe_load|||ciu
960 dtrace_probe_op|||ciu
961 dtrace_probe_phase|||ciu
962 dump_all|5.006000|5.006000|
963 dump_all_perl|5.011000||Viu
964 dump_c_backtrace|5.021001||V
965 dump_eval|5.006000|5.006000|u
966 dump_exec_pos|5.009004||Viu
967 dump_form|5.006000|5.006000|u
968 dump_indent|5.006000|5.006000|vu
969 dump_mstats|5.003007||Vu
970 dump_packsubs|5.006000|5.006000|
971 dump_packsubs_perl|5.011000||Viu
972 dump_regex_sets_structures|5.025006||Viu
973 dump_sub|5.006000|5.006000|u
974 dump_sub_perl|5.011000||Viu
975 dump_sv_child|5.009003||Viu
976 dump_trie|5.009004||Viu
977 dump_trie_interim_list|5.009004||Viu
978 dump_trie_interim_table|5.009004||Viu
979 dumpuntil|5.005000||Viu
980 dump_vindent|5.006000|5.006000|u
981 dUNDERBAR|5.009002|5.003007|p
982 dup_attrlist|5.006000||Viu
983 dup_warnings|||ciu
984 dVAR|5.009003|5.003007|p
985 dXCPT|5.009002|5.003007|p
986 dXSARGS|5.003007|5.003007|
987 dXSI32|5.003007|5.003007|V
988 dXSTARG|5.006000|5.003007|poVu
989 edit_distance|5.023008||nViu
990 emulate_cop_io|||xciu
991 emulate_setlocale|5.027009||nViu
992 END_EXTERN_C|5.005000|5.003007|poVu
993 ENTER|5.003007|5.003007|
994 ENTER_with_name|5.011002|5.011002|
995 ERRSV|5.004005|5.003007|p
996 eval_pv|5.006000|5.003007|p
997 eval_sv|5.006000|5.003007|p
998 exec_failed|5.009004||Viu
999 expect_number|5.007001||Viu
1000 EXTEND|5.003007|5.003007|
1001 EXTERN_C|5.005000|5.003007|poVu
1002 F0convert|5.009003||nViu
1003 fbm_compile|5.005000|5.005000|
1004 fbm_instr|5.005000|5.005000|
1005 feature_is_enabled|||ciu
1006 filter_add|5.003007|5.003007|
1007 filter_del|5.003007|5.003007|u
1008 filter_gets|5.005000||Viu
1009 filter_read|5.003007|5.003007|
1010 finalize_op|5.015002||Viu
1011 finalize_optree|5.015002||Vi
1012 find_and_forget_pmops|5.009005||Viu
1013 find_array_subscript|5.009004||Viu
1014 find_beginning|5.005000||Viu
1015 find_byclass|5.006000||Viu
1016 find_default_stash|5.019004||Viu
1017 find_hash_subscript|5.009004||Viu
1018 find_in_my_stash|5.006001||Viu
1019 find_lexical_cv|5.019001||Viu
1020 find_next_masked|5.027009||nViu
1021 find_runcv|5.008001|5.008001|
1022 find_runcv_where|5.017002||Viu
1023 find_rundefsv|5.013002|5.013002|
1024 find_rundefsvoffset|5.009002|5.009002|d
1025 find_script|5.004005||Viu
1026 find_span_end|5.027009||nViu
1027 find_span_end_mask|5.027009||nViu
1028 find_uninit_var|5.009002||xVi
1029 first_symbol|5.009003||nViu
1030 fixup_errno_string|5.019007||Viu
1031 fold_constants|5.003007||Viu
1032 foldEQ|5.013002|5.013002|n
1033 foldEQ_latin1|5.013008|5.013008|nu
1034 foldEQ_latin1_s2_folded|5.029007||nViu
1035 foldEQ_locale|5.013002|5.013002|n
1036 foldEQ_utf8|5.013002|5.007003|p
1037 foldEQ_utf8_flags|5.013010||cVu
1038 forbid_setid|5.005000||Viu
1039 force_ident|5.003007||Viu
1040 force_ident_maybe_lex|5.017004||Viu
1041 force_list|5.003007||Viu
1042 force_next|5.003007||Viu
1043 _force_out_malformed_utf8_message|5.025009||cVu
1044 force_strict_version|5.011004||Viu
1045 force_version|5.005000||Viu
1046 force_word|5.003007||Viu
1047 forget_pmop|5.017007||Viu
1048 form|5.006000|5.004000|v
1049 form_nocontext|5.006000||vnVu
1050 form_short_octal_warning|5.017008||Viu
1051 fp_dup|5.007003|5.007003|u
1052 fprintf_nocontext|5.006000||vndVu
1053 free_c_backtrace|5.021001||Vi
1054 free_global_struct|5.009003||Vu
1055 free_tied_hv_pool|5.008001||Viu
1056 FREETMPS|5.003007|5.003007|
1057 free_tmps|5.003007|5.003007|u
1058 G_ARRAY|5.003007|5.003007|
1059 G_DISCARD|5.003007|5.003007|
1060 gen_constant_list|5.003007||Viu
1061 get_and_check_backslash_N_name|5.017006||cViu
1062 get_and_check_backslash_N_name_wrapper|5.029009||Viu
1063 get_ANYOF_cp_list_for_ssc|5.019005||Viu
1064 get_ANYOFM_contents|5.027009||Viu
1065 get_aux_mg|5.011000||Viu
1066 get_av|5.006000|5.003007|p
1067 get_c_backtrace|5.021001||Vi
1068 get_c_backtrace_dump|5.021001||V
1069 get_context|5.006000|5.006000|nu
1070 get_cv|5.006000|5.003007|p
1071 get_cvn_flags|5.009005|5.003007|p
1072 get_cvs|5.011000||pVu
1073 getcwd_sv|5.007002|5.007002|
1074 get_db_sub|||iu
1075 get_debug_opts|5.008001||Viu
1076 getenv_len|5.006000||Viu
1077 get_hash_seed|5.008001||Viu
1078 get_hv|5.006000|5.003007|p
1079 get_invlist_iter_addr|5.015001||nViu
1080 get_invlist_offset_addr|5.019002||nViu
1081 get_invlist_previous_index_addr|5.017004||nViu
1082 get_mstats|5.006000||Vu
1083 get_no_modify|5.005000||Viu
1084 get_num|5.008001||Viu
1085 get_opargs|5.005000||Viu
1086 get_op_descs|5.005000|5.005000|u
1087 get_op_names|5.005000|5.005000|u
1088 get_ppaddr|5.006000|5.006000|u
1089 get_re_arg|||xciu
1090 _get_regclass_nonbitmap_data|5.019009||cViu
1091 get_regex_charset_name|5.031004||nViu
1092 get_sv|5.006000|5.003007|p
1093 GetVars|5.006000||Vu
1094 get_vtbl|5.005003|5.005003|u
1095 G_EVAL|5.003007|5.003007|
1096 GIMME|5.003007|5.003007|
1097 GIMME_V|5.004000|5.004000|
1098 glob_2number|5.009004||Viu
1099 glob_assign_glob|5.009004||Viu
1100 G_METHOD|5.006001|5.003007|p
1101 G_METHOD_NAMED|5.019002|5.019002|
1102 G_NOARGS|5.003007|5.003007|
1103 gp_dup|5.007003|5.007003|u
1104 gp_free|5.003007|5.003007|u
1105 gp_ref|5.003007|5.003007|u
1106 grok_atoUV|5.021010||ncVi
1107 grok_bin|5.007003|5.003007|p
1108 grok_bslash_c|5.013001||cViu
1109 grok_bslash_N|5.017003||Viu
1110 grok_bslash_o|5.013003||cViu
1111 grok_bslash_x|5.017002||cViu
1112 grok_hex|5.007003|5.003007|p
1113 grok_infnan|5.021004|5.021004|
1114 grok_number|5.007002|5.003007|p
1115 grok_number_flags|5.021002|5.021002|
1116 GROK_NUMERIC_RADIX|5.007002|5.003007|p
1117 grok_numeric_radix|5.007002|5.003007|p
1118 grok_oct|5.007003|5.003007|p
1119 group_end|5.007003||Viu
1120 G_SCALAR|5.003007|5.003007|
1121 GV_ADD|5.003007|5.003007|
1122 gv_add_by_type|5.011000|5.011000|u
1123 Gv_AMupdate|5.011000|5.011000|u
1124 gv_autoload4|5.004000|5.004000|u
1125 gv_autoload_pv|5.015004|5.015004|u
1126 gv_autoload_pvn|5.015004|5.015004|u
1127 gv_autoload_sv|5.015004|5.015004|u
1128 GvAV|5.003007|5.003007|
1129 gv_AVadd|5.003007|5.003007|u
1130 gv_check|5.003007|5.003007|u
1131 gv_const_sv|5.009003|5.009003|
1132 GvCV|5.003007|5.003007|
1133 gv_dump|5.006000|5.006000|u
1134 gv_efullname3|5.003007|5.003007|u
1135 gv_efullname4|5.006001|5.006001|u
1136 gv_efullname|5.003007|5.003007|du
1137 gv_fetchfile|5.003007|5.003007|u
1138 gv_fetchfile_flags|5.009005|5.009005|u
1139 gv_fetchmeth|5.003007|5.003007|
1140 gv_fetchmeth_autoload|5.007003|5.007003|
1141 gv_fetchmeth_internal|5.021007||Viu
1142 gv_fetchmethod|5.003007|5.003007|
1143 gv_fetchmethod_autoload|5.004000|5.004000|
1144 gv_fetchmethod_pv_flags|5.015004|5.015004|xu
1145 gv_fetchmethod_pvn_flags|5.015004|5.015004|xu
1146 gv_fetchmethod_sv_flags|5.015004|5.015004|xu
1147 gv_fetchmeth_pv|5.015004|5.015004|
1148 gv_fetchmeth_pv_autoload|5.015004|5.015004|
1149 gv_fetchmeth_pvn|5.015004|5.015004|
1150 gv_fetchmeth_pvn_autoload|5.015004|5.015004|
1151 gv_fetchmeth_sv|5.015004|5.015004|
1152 gv_fetchmeth_sv_autoload|5.015004|5.015004|
1153 gv_fetchpv|5.003007|5.003007|u
1154 gv_fetchpvn_flags|5.009002|5.003007|pu
1155 gv_fetchpvs|5.009004||pVu
1156 gv_fetchsv|5.009002|5.003007|pu
1157 gv_fullname3|5.003007|5.003007|u
1158 gv_fullname4|5.006001|5.006001|u
1159 gv_fullname|5.003007|5.003007|du
1160 gv_handler|5.007001|5.007001|u
1161 GvHV|5.003007|5.003007|
1162 gv_HVadd|5.003007|5.003007|u
1163 gv_init|5.003007|5.003007|
1164 gv_init_pv|5.015004|5.015004|
1165 gv_init_pvn|5.015004|5.003007|p
1166 gv_init_sv|5.015004|5.015004|
1167 gv_init_svtype|5.015004||Viu
1168 gv_IOadd|5.003007|5.003007|u
1169 gv_is_in_main|5.019004||Viu
1170 gv_magicalize|5.019004||Viu
1171 gv_magicalize_isa|5.013005||Viu
1172 gv_name_set|5.009004|5.009004|u
1173 GV_NOADD_MASK|5.009005|5.003007|poVu
1174 G_VOID|5.004000|5.004000|
1175 gv_override|5.019006||Viu
1176 gv_setref|5.021005||Viu
1177 gv_stashpv|5.003007|5.003007|
1178 gv_stashpvn|5.003007|5.003007|p
1179 gv_stashpvn_internal|5.021004||Viu
1180 gv_stashpvs|5.009003|5.003007|p
1181 gv_stashsv|5.003007|5.003007|
1182 gv_stashsvpvn_cached|5.021004||Viu
1183 GV_SUPER|5.017004|5.017004|
1184 GvSV|5.003007|5.003007|
1185 gv_SVadd|||u
1186 GvSVn|5.009003||pVu
1187 gv_try_downgrade|5.011002||xcVi
1188 handle_named_backref|5.023008||Viu
1189 handle_possible_posix|5.023008||Viu
1190 handle_regex_sets|5.017009||Viu
1191 handle_user_defined_property|5.029008||cViu
1192 he_dup|5.007003|5.007003|u
1193 HEf_SVKEY|5.003007|5.003007|p
1194 HeHASH|5.003007|5.003007|
1195 hek_dup|5.009000|5.009000|u
1196 HeKEY|5.003007|5.003007|
1197 HeKLEN|5.003007|5.003007|
1198 HePV|5.004000|5.004000|
1199 HeSVKEY|5.003007|5.003007|
1200 HeSVKEY_force|5.003007|5.003007|
1201 HeSVKEY_set|5.004000|5.004000|
1202 HeUTF8|5.010001|5.008000|p
1203 HeVAL|5.003007|5.003007|
1204 hfree_next_entry|||iu
1205 hsplit|5.005000||Viu
1206 hv_assert|5.008009|5.008009|
1207 hv_auxinit|5.009003||Viu
1208 hv_auxinit_internal|5.019010||nViu
1209 hv_backreferences_p|||xiu
1210 hv_bucket_ratio|5.025003|5.025003|x
1211 hv_clear|5.003007|5.003007|
1212 hv_clear_placeholders|5.009001|5.009001|
1213 hv_common|5.010000|5.010000|u
1214 hv_common_key_len|5.010000|5.010000|u
1215 hv_copy_hints_hv|5.009004|5.009004|
1216 hv_delayfree_ent|5.004000|5.004000|u
1217 hv_delete|5.003007|5.003007|
1218 hv_delete_common|5.009001||xViu
1219 hv_delete_ent|5.003007|5.003007|
1220 hv_eiter_p|5.009003|5.009003|u
1221 hv_eiter_set|5.009003|5.009003|u
1222 HvENAME|5.013007|5.013007|
1223 hv_ename_add|5.013007||Vi
1224 hv_ename_delete|5.013007||Vi
1225 HvENAMELEN|5.015004|5.015004|
1226 HvENAMEUTF8|5.015004|5.015004|
1227 hv_exists|5.003007|5.003007|
1228 hv_exists_ent|5.003007|5.003007|
1229 hv_fetch|5.003007|5.003007|
1230 hv_fetch_ent|5.003007|5.003007|
1231 hv_fetchs|5.009003|5.003007|p
1232 HvFILL|5.003007|5.003007|
1233 hv_fill|5.013002|5.013002|
1234 hv_free_ent|5.004000|5.004000|u
1235 hv_free_ent_ret|5.015000||Viu
1236 hv_free_entries|5.027002||Viu
1237 hv_iterinit|5.003007|5.003007|
1238 hv_iterkey|5.003007|5.003007|
1239 hv_iterkeysv|5.003007|5.003007|
1240 hv_iternext|5.003007|5.003007|
1241 hv_iternext_flags|5.008000|5.008000|x
1242 hv_iternextsv|5.003007|5.003007|
1243 hv_iterval|5.003007|5.003007|
1244 hv_kill_backrefs|||xiu
1245 hv_ksplit|5.003007|5.003007|u
1246 hv_magic|5.003007|5.003007|
1247 hv_magic_check|5.006000||nViu
1248 HvNAME|5.003007|5.003007|
1249 HvNAME_get|5.009003||pVu
1250 HvNAMELEN|5.015004|5.015004|
1251 HvNAMELEN_get|5.009003||pVu
1252 hv_name_set|5.009003|5.009003|u
1253 HvNAMEUTF8|5.015004|5.015004|
1254 hv_notallowed|5.008000||Viu
1255 hv_placeholders_get|5.009003|5.009003|u
1256 hv_placeholders_p|||ciu
1257 hv_placeholders_set|5.009003|5.009003|u
1258 hv_pushkv|5.027003||Viu
1259 hv_rand_set|5.018000|5.018000|u
1260 hv_riter_p|5.009003|5.009003|u
1261 hv_riter_set|5.009003|5.009003|u
1262 hv_scalar|5.009001|5.009001|
1263 hv_store|5.003007|5.003007|
1264 hv_store_ent|5.003007|5.003007|
1265 hv_store_flags|5.008000|5.008000|xu
1266 hv_stores|5.009004|5.003007|p
1267 hv_undef|5.003007|5.003007|
1268 hv_undef_flags|||ciu
1269 I16SIZE|5.006000|5.006000|
1270 I16TYPE|5.006000|5.006000|
1271 I32SIZE|5.006000|5.006000|
1272 I32TYPE|5.006000|5.006000|
1273 I8SIZE|5.006000|5.006000|
1274 I8TYPE|5.006000|5.006000|
1275 ibcmp|5.003007|5.003007|
1276 ibcmp_locale|5.004000|5.004000|
1277 ibcmp_utf8|5.007003|5.007003|u
1278 incline|5.005000||Viu
1279 incpush|5.005000||Viu
1280 incpush_if_exists|5.009003||Viu
1281 incpush_use_sep|5.011000||Viu
1282 ingroup|5.003007||Viu
1283 init_argv_symbols|5.007003||Viu
1284 init_constants|5.017003||Viu
1285 init_dbargs|||iu
1286 init_debugger|5.005000||Viu
1287 init_global_struct|5.009003||Vu
1288 init_i18nl10n|5.006000||cVu
1289 init_i18nl14n|5.006000||dcVu
1290 initialize_invlist_guts|5.029002||Viu
1291 init_ids|5.005000||Viu
1292 init_interp|5.005000||Viu
1293 init_main_stash|5.005000||Viu
1294 init_named_cv|5.027010||cViu
1295 init_perllib|5.005000||Viu
1296 init_postdump_symbols|5.005000||Viu
1297 init_predump_symbols|5.005000||Viu
1298 init_stacks|5.005000|5.005000|u
1299 init_tm|5.007002|5.007002|u
1300 init_uniprops|5.027011||Viu
1301 IN_LOCALE|5.007002|5.004000|p
1302 IN_LOCALE_COMPILETIME|5.007002|5.004000|p
1303 IN_LOCALE_RUNTIME|5.007002|5.004000|p
1304 IN_PERL_COMPILETIME|5.008001|5.003007|poVu
1305 inplace_aassign|5.015003||Viu
1306 instr|5.003007|5.003007|n
1307 INT2PTR|5.006000|5.003007|p
1308 intro_my|5.004000|5.004000|
1309 INTSIZE|5.003007|5.003007|
1310 intuit_method|5.005000||Viu
1311 intuit_more|5.003007||Viu
1312 _inverse_folds|5.027011||cViu
1313 invert|5.003007||Viu
1314 invlist_array|5.013010||nViu
1315 _invlist_array_init|5.015001||nViu
1316 invlist_clear|5.023009||Viu
1317 invlist_clone|5.015001||cViu
1318 _invlist_contains_cp|5.017003||nViu
1319 invlist_contents|5.023008||Viu
1320 _invlist_dump|5.019003||cViu
1321 _invlistEQ|5.023006||cViu
1322 invlist_extend|5.013010||Viu
1323 invlist_highest|5.017002||nViu
1324 _invlist_intersection|5.015001||Viu
1325 _invlist_intersection_maybe_complement_2nd|5.015008||cViu
1326 _invlist_invert|5.015001||cViu
1327 invlist_is_iterating|5.017008||nViu
1328 invlist_iterfinish|5.017008||nViu
1329 invlist_iterinit|5.015001||nViu
1330 invlist_iternext|5.015001||nViu
1331 _invlist_len|5.017004||nViu
1332 invlist_max|5.013010||nViu
1333 invlist_previous_index|5.017004||nViu
1334 invlist_replace_list_destroys_src|5.023009||Viu
1335 _invlist_search|5.017003||ncViu
1336 invlist_set_len|5.013010||Viu
1337 invlist_set_previous_index|5.017004||nViu
1338 _invlist_subtract|5.015001||Viu
1339 invlist_trim|5.013010||nViu
1340 _invlist_union|5.015001||cVu
1341 _invlist_union_maybe_complement_2nd|5.015008||cViu
1342 invoke_exception_hook|5.013001||Viu
1343 io_close|5.003007||Viu
1344 isALNUM|5.003007|5.003007|p
1345 isALNUM_A|5.031003|5.003007|p
1346 isALNUMC|5.006000|5.003007|p
1347 isALNUMC_A|5.013006|5.003007|p
1348 isALNUMC_L1|5.013006|5.003007|p
1349 isALNUMC_LC|5.006000|5.006000|
1350 isALNUMC_LC_uvchr|5.017007|5.017007|
1351 isALNUM_lazy|5.017008||dcVu
1352 isALNUM_LC|5.004000|5.004000|
1353 isALNUM_LC_uvchr|5.007001|5.007001|
1354 isa_lookup|5.005000||Viu
1355 isALPHA|5.003007|5.003007|p
1356 isALPHA_A|5.013006|5.003007|p
1357 isALPHA_L1|5.013006|5.003007|p
1358 isALPHA_LC|5.004000|5.004000|
1359 isALPHA_LC_utf8_safe|5.025009|5.025009|
1360 isALPHA_LC_uvchr|5.007001|5.007001|
1361 isALPHANUMERIC|5.017008|5.003007|p
1362 isALPHANUMERIC_A|5.017008|5.003007|p
1363 isALPHANUMERIC_L1|5.017008|5.003007|p
1364 isALPHANUMERIC_LC|5.017008|5.017008|
1365 isALPHANUMERIC_LC_utf8_safe|5.025009|5.025009|
1366 isALPHANUMERIC_LC_uvchr|5.017008|5.017008|
1367 isALPHANUMERIC_utf8|5.017008|5.017008|
1368 isALPHANUMERIC_utf8_safe|5.025009|5.025009|
1369 isALPHANUMERIC_uvchr|5.023009|5.023009|
1370 isALPHA_utf8|5.006000|5.006000|
1371 isALPHA_utf8_safe|5.025009|5.025009|
1372 isALPHA_uvchr|5.023009|5.023009|
1373 is_an_int|5.005000||Viu
1374 isASCII|5.006000|5.003007|p
1375 isASCII_A|5.013006|5.003007|p
1376 isASCII_L1|5.015004|5.003007|p
1377 isASCII_LC|5.015008|5.015008|
1378 isASCII_LC_utf8_safe|5.025009|5.025009|
1379 isASCII_LC_uvchr|5.017007|5.017007|
1380 is_ascii_string|5.011000|5.011000|n
1381 isASCII_utf8|5.006000|5.006000|
1382 isASCII_utf8_safe|5.025009|5.025009|
1383 isASCII_uvchr|5.023009|5.023009|
1384 isBLANK|5.006001|5.003007|p
1385 isBLANK_A|5.013006|5.003007|p
1386 isBLANK_L1|5.013006|5.003007|p
1387 isBLANK_LC|5.006001|5.006001|
1388 isBLANK_LC_utf8_safe|5.025009|5.025009|
1389 isBLANK_LC_uvchr|5.017007|5.017007|
1390 isBLANK_utf8|5.006001|5.006001|
1391 isBLANK_utf8_safe|5.025009|5.025009|
1392 isBLANK_uvchr|5.023009|5.023009|
1393 isC9_STRICT_UTF8_CHAR|5.025005|5.025005|n
1394 is_c9strict_utf8_string|5.025006|5.025006|n
1395 is_c9strict_utf8_string_loc|5.025006|5.025006|n
1396 is_c9strict_utf8_string_loclen|5.025006|5.025006|n
1397 isCNTRL|5.006000|5.003007|p
1398 isCNTRL_A|5.013006|5.003007|p
1399 isCNTRL_L1|5.013006|5.003007|p
1400 isCNTRL_LC|5.006000|5.006000|
1401 isCNTRL_LC_utf8_safe|5.025009|5.025009|
1402 isCNTRL_LC_uvchr|5.007001|5.007001|
1403 isCNTRL_utf8|5.006000|5.006000|
1404 isCNTRL_utf8_safe|5.025009|5.025009|
1405 isCNTRL_uvchr|5.023009|5.023009|
1406 _is_cur_LC_category_utf8|5.021001||cVu
1407 isDIGIT|5.003007|5.003007|p
1408 isDIGIT_A|5.013006|5.003007|p
1409 isDIGIT_L1|5.013006|5.003007|p
1410 isDIGIT_LC|5.004000|5.004000|
1411 isDIGIT_LC_utf8_safe|5.025009|5.025009|
1412 isDIGIT_LC_uvchr|5.007001|5.007001|
1413 isDIGIT_utf8|5.006000|5.006000|
1414 isDIGIT_utf8_safe|5.025009|5.025009|
1415 isDIGIT_uvchr|5.023009|5.023009|
1416 isFF_OVERLONG|5.025007||nViu
1417 isFOO_lc|5.017007||cViu
1418 isFOO_utf8_lc|5.017008||Viu
1419 isGCB|5.021009||Viu
1420 isGRAPH|5.006000|5.003007|p
1421 isGRAPH_A|5.013006|5.003007|p
1422 _is_grapheme|5.025009||Viu
1423 isGRAPH_L1|5.013006|5.003007|p
1424 isGRAPH_LC|5.006000|5.006000|
1425 isGRAPH_LC_utf8_safe|5.025009|5.025009|
1426 isGRAPH_LC_uvchr|5.007001|5.007001|
1427 isGRAPH_utf8|5.006000|5.006000|
1428 isGRAPH_utf8_safe|5.025009|5.025009|
1429 isGRAPH_uvchr|5.023009|5.023009|
1430 isGV_with_GP|5.009004||pVu
1431 is_handle_constructor|5.006000||nViu
1432 isIDCONT|5.017008|5.003007|p
1433 isIDCONT_A|5.017008|5.003007|p
1434 isIDCONT_L1|5.017008|5.003007|p
1435 isIDCONT_LC|5.017008|5.017008|
1436 isIDCONT_LC_utf8_safe|5.025009|5.025009|
1437 isIDCONT_LC_uvchr|5.017008|5.017008|
1438 isIDCONT_utf8|5.013010|5.013010|
1439 isIDCONT_utf8_safe|5.025009|5.025009|
1440 isIDCONT_uvchr|5.023009|5.023009|
1441 isIDFIRST|5.003007|5.003007|p
1442 isIDFIRST_A|5.013006|5.003007|p
1443 isIDFIRST_L1|5.013006|5.003007|p
1444 isIDFIRST_lazy|5.017008||dcVu
1445 isIDFIRST_LC|5.004000|5.004000|
1446 isIDFIRST_LC_utf8_safe|5.025009|5.025009|
1447 isIDFIRST_LC_uvchr|5.007001|5.007001|
1448 isIDFIRST_utf8|5.006000|5.006000|
1449 isIDFIRST_utf8_safe|5.025009|5.025009|
1450 isIDFIRST_uvchr|5.023009|5.023009|
1451 isinfnan|5.021004|5.021004|n
1452 isinfnansv|5.021005||Viu
1453 _is_in_locale_category|5.021001||cViu
1454 is_invariant_string|5.021007|5.011000|pn
1455 is_invlist|5.029002||nViu
1456 isLB|5.023007||Viu
1457 isLOWER|5.003007|5.003007|p
1458 isLOWER_A|5.013006|5.003007|p
1459 isLOWER_L1|5.013006|5.003007|p
1460 isLOWER_LC|5.004000|5.004000|
1461 isLOWER_LC_utf8_safe|5.025009|5.025009|
1462 isLOWER_LC_uvchr|5.007001|5.007001|
1463 isLOWER_utf8|5.006000|5.006000|
1464 isLOWER_utf8_safe|5.025009|5.025009|
1465 isLOWER_uvchr|5.023009|5.023009|
1466 is_lvalue_sub|5.007001|5.007001|u
1467 IS_NUMBER_GREATER_THAN_UV_MAX|5.007002|5.003007|p
1468 IS_NUMBER_INFINITY|5.007002|5.003007|p
1469 IS_NUMBER_IN_UV|5.007002|5.003007|p
1470 IS_NUMBER_NAN|5.007003|5.003007|p
1471 IS_NUMBER_NEG|5.007002|5.003007|p
1472 IS_NUMBER_NOT_INT|5.007002|5.003007|p
1473 isOCTAL|5.013005|5.003007|p
1474 isOCTAL_A|5.013006|5.003007|p
1475 isOCTAL_L1|5.013006|5.003007|p
1476 isPRINT|5.004000|5.003007|p
1477 isPRINT_A|5.013006|5.003007|p
1478 isPRINT_L1|5.013006|5.003007|p
1479 isPRINT_LC|5.004000|5.004000|
1480 isPRINT_LC_utf8_safe|5.025009|5.025009|
1481 isPRINT_LC_uvchr|5.007001|5.007001|
1482 isPRINT_utf8|5.006000|5.006000|
1483 isPRINT_utf8_safe|5.025009|5.025009|
1484 isPRINT_uvchr|5.023009|5.023009|
1485 isPSXSPC|5.006001|5.003007|p
1486 isPSXSPC_A|5.013006|5.003007|p
1487 isPSXSPC_L1|5.013006|5.003007|p
1488 isPSXSPC_LC|5.006001|5.006001|
1489 isPSXSPC_LC_utf8_safe|5.025009|5.025009|
1490 isPSXSPC_LC_uvchr|5.017007|5.017007|
1491 isPSXSPC_utf8|5.006001|5.006001|
1492 isPSXSPC_utf8_safe|5.025009|5.025009|
1493 isPSXSPC_uvchr|5.023009|5.023009|
1494 isPUNCT|5.006000|5.003007|p
1495 isPUNCT_A|5.013006|5.003007|p
1496 isPUNCT_L1|5.013006|5.003007|p
1497 isPUNCT_LC|5.006000|5.006000|
1498 isPUNCT_LC_utf8_safe|5.025009|5.025009|
1499 isPUNCT_LC_uvchr|5.007001|5.007001|
1500 isPUNCT_utf8|5.006000|5.006000|
1501 isPUNCT_utf8_safe|5.025009|5.025009|
1502 isPUNCT_uvchr|5.023009|5.023009|
1503 IS_SAFE_SYSCALL|5.019004|5.019004|
1504 is_safe_syscall|5.019004|5.019004|
1505 isSB|5.021009||Viu
1506 isSCRIPT_RUN|5.027008||cVi
1507 isSPACE|5.003007|5.003007|p
1508 isSPACE_A|5.013006|5.003007|p
1509 isSPACE_L1|5.013006|5.003007|p
1510 isSPACE_LC|5.004000|5.004000|
1511 isSPACE_LC_utf8_safe|5.025009|5.025009|
1512 isSPACE_LC_uvchr|5.007001|5.007001|
1513 isSPACE_utf8|5.006000|5.006000|
1514 isSPACE_utf8_safe|5.025009|5.025009|
1515 isSPACE_uvchr|5.023009|5.023009|
1516 is_ssc_worth_it|5.021005||nViu
1517 isSTRICT_UTF8_CHAR|5.025005|5.025005|n
1518 is_strict_utf8_string|5.025006|5.025006|n
1519 is_strict_utf8_string_loc|5.025006|5.025006|n
1520 is_strict_utf8_string_loclen|5.025006|5.025006|n
1521 is_uni_alnum|5.006000||dcVu
1522 is_uni_alnumc|5.017007||dcVu
1523 is_uni_alnumc_lc|5.017007||dcVu
1524 is_uni_alnum_lc|5.006000||dcVu
1525 is_uni_alpha|5.006000||dcVu
1526 is_uni_alpha_lc|5.006000||dcVu
1527 is_uni_ascii|5.006000||dcVu
1528 is_uni_ascii_lc|5.006000||dcVu
1529 is_uni_blank|5.017002||dcVu
1530 is_uni_blank_lc|5.017007||dcVu
1531 is_uni_cntrl|5.006000||dcVu
1532 is_uni_cntrl_lc|5.006000||dcVu
1533 is_uni_digit|5.006000||dcVu
1534 is_uni_digit_lc|5.006000||dcVu
1535 _is_uni_FOO|5.017008||cVu
1536 is_uni_graph|5.006000||dcVu
1537 is_uni_graph_lc|5.006000||dcVu
1538 is_uni_idfirst|5.006000||dcVu
1539 is_uni_idfirst_lc|5.006000||dcVu
1540 is_uni_lower|5.006000||dcVu
1541 is_uni_lower_lc|5.006000||dcVu
1542 _is_uni_perl_idcont|5.017008||cVu
1543 _is_uni_perl_idstart|5.017007||cVu
1544 is_uni_print|5.006000||dcVu
1545 is_uni_print_lc|5.006000||dcVu
1546 is_uni_punct|5.006000||dcVu
1547 is_uni_punct_lc|5.006000||dcVu
1548 is_uni_space|5.006000||dcVu
1549 is_uni_space_lc|5.006000||dcVu
1550 is_uni_upper|5.006000||dcVu
1551 is_uni_upper_lc|5.006000||dcVu
1552 is_uni_xdigit|5.006000||dcVu
1553 is_uni_xdigit_lc|5.006000||dcVu
1554 isUPPER|5.003007|5.003007|p
1555 isUPPER_A|5.013006|5.003007|p
1556 isUPPER_L1|5.013006|5.003007|p
1557 isUPPER_LC|5.004000|5.004000|
1558 isUPPER_LC_utf8_safe|5.025009|5.025009|
1559 isUPPER_LC_uvchr|5.007001|5.007001|
1560 isUPPER_utf8|5.006000|5.006000|
1561 isUPPER_utf8_safe|5.025009|5.025009|
1562 isUPPER_uvchr|5.023009|5.023009|
1563 is_utf8_alnum|5.006000||dcVu
1564 is_utf8_alnumc|5.017007||dcVu
1565 is_utf8_alpha|5.006000||dcVu
1566 is_utf8_ascii|5.006000||dcVu
1567 is_utf8_blank|5.017002||dcVu
1568 is_utf8_char|5.006000|5.006000|nd
1569 isUTF8_CHAR|5.021001|5.006001|pn
1570 is_utf8_char_buf|5.015008|5.015008|n
1571 isUTF8_CHAR_flags|5.025005|5.025005|
1572 is_utf8_char_helper|5.031004||ncVu
1573 is_utf8_cntrl|5.006000||dcVu
1574 is_utf8_common|5.009003||Viu
1575 is_utf8_common_with_len|5.025009||Viu
1576 is_utf8_cp_above_31_bits|5.025005||nViu
1577 is_utf8_digit|5.006000||dcVu
1578 is_utf8_fixed_width_buf_flags|5.025006|5.025006|n
1579 is_utf8_fixed_width_buf_loc_flags|5.025006|5.025006|n
1580 is_utf8_fixed_width_buf_loclen_flags|5.025006|5.025006|n
1581 _is_utf8_FOO|5.017008||cVu
1582 _is_utf8_FOO_with_len|5.025009||cVu
1583 is_utf8_graph|5.006000||dcVu
1584 is_utf8_idcont|5.008000||dcVu
1585 _is_utf8_idcont|5.021001||cVu
1586 is_utf8_idfirst|5.006000||dcVu
1587 _is_utf8_idstart|5.021001||cVu
1588 is_utf8_invariant_string|5.025005|5.011000|pn
1589 is_utf8_invariant_string_loc|5.027001|5.027001|n
1590 is_utf8_lower|5.006000||dcVu
1591 is_utf8_mark|5.006000|5.006000|dxu
1592 _is_utf8_mark|5.017008||cVu
1593 is_utf8_non_invariant_string|5.027007||ncVi
1594 is_utf8_overlong_given_start_byte_ok|5.025006||nViu
1595 _is_utf8_perl_idcont_with_len|5.025009||cVu
1596 _is_utf8_perl_idstart_with_len|5.025009||cVu
1597 is_utf8_perl_space|5.011001||dcVu
1598 is_utf8_perl_word|5.011001||dcVu
1599 is_utf8_posix_digit|5.011001||dcVu
1600 is_utf8_print|5.006000||dcVu
1601 is_utf8_punct|5.006000||dcVu
1602 is_utf8_space|5.006000||dcVu
1603 is_utf8_string|5.006001|5.006001|n
1604 is_utf8_string_flags|5.025006|5.025006|n
1605 is_utf8_string_loc|5.008001|5.008001|n
1606 is_utf8_string_loc_flags|5.025006|5.025006|n
1607 is_utf8_string_loclen|5.009003|5.009003|n
1608 is_utf8_string_loclen_flags|5.025006|5.025006|n
1609 is_utf8_upper|5.006000||dcVu
1610 is_utf8_valid_partial_char|5.025005|5.025005|n
1611 is_utf8_valid_partial_char_flags|5.025005|5.025005|n
1612 is_utf8_xdigit|5.006000||dcVu
1613 is_utf8_xidcont|5.013010||dcVu
1614 _is_utf8_xidcont|5.021001||cVu
1615 is_utf8_xidfirst|5.013010||dcVu
1616 _is_utf8_xidstart|5.021001||cVu
1617 isWB|5.021009||Viu
1618 isWORDCHAR|5.013006|5.003007|p
1619 isWORDCHAR_A|5.013006|5.003007|p
1620 isWORDCHAR_L1|5.013006|5.003007|p
1621 isWORDCHAR_LC|5.017007|5.017007|
1622 isWORDCHAR_LC_utf8_safe|5.025009|5.025009|
1623 isWORDCHAR_LC_uvchr|5.017007|5.017007|
1624 isWORDCHAR_utf8|5.017006|5.017006|
1625 isWORDCHAR_utf8_safe|5.025009|5.025009|
1626 isWORDCHAR_uvchr|5.023009|5.023009|
1627 isXDIGIT|5.006000|5.003007|p
1628 isXDIGIT_A|5.013006|5.003007|p
1629 isXDIGIT_L1|5.013006|5.003007|p
1630 isXDIGIT_LC|5.017007|5.017007|
1631 isXDIGIT_LC_utf8_safe|5.025009|5.025009|
1632 isXDIGIT_LC_uvchr|5.017007|5.017007|
1633 isXDIGIT_utf8|5.006000|5.006000|
1634 isXDIGIT_utf8_safe|5.025009|5.025009|
1635 isXDIGIT_uvchr|5.023009|5.023009|
1636 items|5.003007|5.003007|V
1637 IVdf|5.006000|5.003007|p
1638 IVSIZE|5.006000|5.003007|p
1639 IVTYPE|5.006000|5.003007|p
1640 ix|5.003007|5.003007|V
1641 jmaybe|5.003007||Viu
1642 join_exact|5.009004||Viu
1643 keyword|5.003007||Viu
1644 keyword_plugin_standard|||iu
1645 LATIN1_TO_NATIVE|5.019004|5.003007|p
1646 LEAVE|5.003007|5.003007|
1647 leave_adjust_stacks|5.023008|5.023008|xu
1648 leave_scope|5.003007|5.003007|u
1649 LEAVE_with_name|5.011002|5.011002|
1650 lex_bufutf8|5.011002|5.011002|x
1651 lex_discard_to|5.011002|5.011002|x
1652 lex_grow_linestr|5.011002|5.011002|x
1653 lex_next_chunk|5.011002|5.011002|x
1654 lex_peek_unichar|5.011002|5.011002|x
1655 lex_read_space|5.011002|5.011002|x
1656 lex_read_to|5.011002|5.011002|x
1657 lex_read_unichar|5.011002|5.011002|x
1658 lex_start|5.009005|5.009005|x
1659 lex_stuff_pv|5.013006|5.013006|x
1660 lex_stuff_pvn|5.011002|5.011002|x
1661 lex_stuff_pvs|5.013005|5.013005|x
1662 lex_stuff_sv|5.011002|5.011002|x
1663 lex_unstuff|5.011002|5.011002|x
1664 LIKELY|5.009004|5.003007|p
1665 LINKLIST|5.013006|5.013006|
1666 list|5.003007||Viu
1667 listkids|5.003007||Viu
1668 load_module|5.006000|5.003007|pv
1669 load_module_nocontext|5.006000||vnVu
1670 localize|5.003007||Viu
1671 LONGDBLINFBYTES|5.023000|5.023000|
1672 LONGDBLMANTBITS|5.023000|5.023000|
1673 LONGDBLNANBYTES|5.023000|5.023000|
1674 LONGSIZE|5.004000|5.003007|
1675 looks_like_bool|5.027008||Viu
1676 looks_like_number|5.003007|5.003007|
1677 lop|5.005000||Viu
1678 lossless_NV_to_IV|5.031001||nViu
1679 LSEEKSIZE|5.006000|5.006000|
1680 LVRET|||i
1681 magic_clear_all_env|5.004001||Viu
1682 magic_cleararylen_p|5.017002||Viu
1683 magic_clearenv|5.003007||Viu
1684 magic_clearhint|5.009004||Vi
1685 magic_clearhints|5.011000||Vi
1686 magic_clearisa|5.010001||Viu
1687 magic_clearpack|5.003007||Viu
1688 magic_clearsig|5.003007||Viu
1689 magic_copycallchecker|5.017000||Viu
1690 magic_dump|5.006000|5.006000|u
1691 magic_existspack|5.003007||Viu
1692 magic_freearylen_p|5.009003||Viu
1693 magic_freeovrld|5.007001||Viu
1694 magic_get|5.003007||Viu
1695 magic_getarylen|5.003007||Viu
1696 magic_getdebugvar|5.021005||Viu
1697 magic_getdefelem|5.004000||Viu
1698 magic_getnkeys|5.004005||Viu
1699 magic_getpack|5.003007||Viu
1700 magic_getpos|5.003007||Viu
1701 magic_getsig|5.003007||Viu
1702 magic_getsubstr|5.004005||Viu
1703 magic_gettaint|5.003007||Viu
1704 magic_getuvar|5.003007||Viu
1705 magic_getvec|5.004005||Viu
1706 magic_killbackrefs|5.006000||Viu
1707 magic_methcall1|5.013001||Viu
1708 magic_methcall|||vi
1709 magic_methpack|5.005000||Viu
1710 magic_nextpack|5.003007||Viu
1711 magic_regdata_cnt|5.006000||Viu
1712 magic_regdatum_get|5.006000||Viu
1713 magic_regdatum_set|5.006001||Viu
1714 magic_scalarpack|5.009001||Viu
1715 magic_set|5.003007||Viu
1716 magic_set_all_env|5.004004||Viu
1717 magic_setarylen|5.003007||Viu
1718 magic_setcollxfrm|5.004000||Viu
1719 magic_setdbline|5.003007||Viu
1720 magic_setdebugvar|5.021005||Viu
1721 magic_setdefelem|5.004000||Viu
1722 magic_setenv|5.003007||Viu
1723 magic_sethint|5.009004||Vi
1724 magic_setisa|5.003007||Viu
1725 magic_setlvref|5.021005||Viu
1726 magic_setmglob|5.003007||Viu
1727 magic_setnkeys|5.003007||Viu
1728 magic_setnonelem|5.027009||Viu
1729 magic_setpack|5.003007||Viu
1730 magic_setpos|5.003007||Viu
1731 magic_setregexp|5.008001||Viu
1732 magic_setsig|5.003007||Viu
1733 magic_setsubstr|5.003007||Viu
1734 magic_settaint|5.003007||Viu
1735 magic_setutf8|5.008001||Viu
1736 magic_setuvar|5.003007||Viu
1737 magic_setvec|5.003007||Viu
1738 magic_sizepack|5.005000||Viu
1739 magic_wipepack|5.003007||Viu
1740 _make_exactf_invlist|5.021007||Viu
1741 make_matcher|5.027008||Viu
1742 make_trie|5.009002||Viu
1743 malloc|5.007002|5.007002|n
1744 malloced_size|5.005000||nViu
1745 malloc_good_size|5.010001||nViu
1746 MARK|5.003007|5.003007|
1747 markstack_grow|5.021001|5.021001|u
1748 matcher_matches_sv|5.027008||Viu
1749 maybe_multimagic_gv|5.019004||Viu
1750 mayberelocate|5.015006||Viu
1751 measure_struct|5.007003||Viu
1752 mem_collxfrm|5.003007||dViu
1753 _mem_collxfrm|5.025002||Viu
1754 memEQ|5.004000|5.003007|p
1755 memEQs|5.009005|5.003007|p
1756 mem_log_alloc|5.024000||nViu
1757 mem_log_common|5.010001||nViu
1758 mem_log_free|5.024000||nViu
1759 mem_log_realloc|5.024000||nViu
1760 memNE|5.004000|5.003007|p
1761 memNEs|5.009005|5.003007|p
1762 mess|5.006000|5.004000|pv
1763 mess_alloc|5.005000||Viu
1764 mess_nocontext|5.006000||pvnVu
1765 mess_sv|5.013001|5.004000|p
1766 mfree|5.007002|5.007002|nu
1767 mg_clear|5.003007|5.003007|
1768 mg_copy|5.003007|5.003007|
1769 mg_dup|5.007003|5.007003|u
1770 mg_find|5.003007|5.003007|n
1771 mg_findext|5.013008|5.003007|pn
1772 mg_find_mglob|5.019002||cViu
1773 mg_free|5.003007|5.003007|
1774 mg_freeext|5.027004|5.027004|
1775 mg_free_type|5.013006|5.013006|
1776 mg_get|5.003007|5.003007|
1777 mg_length|5.005000|5.005000|d
1778 mg_localize|5.009003||Vi
1779 mg_magical|5.003007|5.003007|n
1780 mg_set|5.003007|5.003007|
1781 mg_size|5.005000|5.005000|u
1782 mini_mktime|5.007002|5.007002|nu
1783 minus_v|5.015006||Viu
1784 missingterm|5.005000||Viu
1785 mode_from_discipline|5.006000||Viu
1786 modkids|5.003007||Viu
1787 more_bodies|||iu
1788 more_sv|5.009004||Viu
1789 moreswitches|5.003007|5.003007|u
1790 Move|5.003007|5.003007|
1791 MoveD|5.009002|5.003007|p
1792 move_proto_attr|5.019005||Viu
1793 mPUSHi|5.009002|5.003007|p
1794 mPUSHn|5.009002|5.003007|p
1795 mPUSHp|5.009002|5.003007|p
1796 mPUSHs|5.010001|5.003007|p
1797 mPUSHu|5.009002|5.003007|p
1798 mro_clean_isarev|5.013007||Viu
1799 mro_gather_and_rename|5.013007||Viu
1800 mro_get_from_name|5.010001|5.010001|u
1801 mro_get_linear_isa|5.009005|5.009005|
1802 mro_get_linear_isa_dfs|5.009005||Vi
1803 mro_get_private_data|5.010001|5.010001|
1804 mro_isa_changed_in|5.009005||Vi
1805 mro_meta_dup|5.009005||Viu
1806 mro_meta_init|||ciu
1807 mro_method_changed_in|5.009005|5.009005|
1808 mro_package_moved|5.013006||Vi
1809 mro_register|5.010001|5.010001|
1810 mro_set_mro|5.010001|5.010001|u
1811 mro_set_private_data|5.010001|5.010001|
1812 mul128|5.005000||Viu
1813 MULTICALL|5.009003|5.009003|
1814 multiconcat_stringify|5.027006||cViu
1815 multideref_stringify|5.021009||cViu
1816 MUTABLE_PTR|5.010001||pVu
1817 MUTABLE_SV|5.010001||pVu
1818 mXPUSHi|5.009002|5.003007|p
1819 mXPUSHn|5.009002|5.003007|p
1820 mXPUSHp|5.009002|5.003007|p
1821 mXPUSHs|5.010001|5.003007|p
1822 mXPUSHu|5.009002|5.003007|p
1823 my_atof2|||cu
1824 my_atof3|5.029000||cVu
1825 my_atof|5.006000|5.006000|u
1826 my_attrs|5.006000||Viu
1827 my_bytes_to_utf8|5.021009||nViu
1828 my_chsize|5.003007||Vu
1829 my_clearenv|5.009003||Viu
1830 MY_CXT|5.009000|5.009000|p
1831 MY_CXT_CLONE|5.009002|5.009000|p
1832 my_cxt_index|||u
1833 MY_CXT_INIT|5.009000|5.009000|p
1834 my_cxt_init|5.009000|5.009000|u
1835 my_dirfd|5.009005|5.009005|nu
1836 my_exit|5.003007|5.003007|
1837 my_exit_jump|5.005000||Viu
1838 my_failure_exit|5.004000|5.004000|u
1839 my_fflush_all|5.006000|5.006000|u
1840 my_fork|5.007003|5.007003|nu
1841 my_kid|5.006000||Viu
1842 my_lstat_flags|5.013003||cViu
1843 my_lstat|||u
1844 my_memrchr|5.027006||nViu
1845 my_mkostemp_cloexec|||niu
1846 my_mkostemp|||niu
1847 my_mkstemp_cloexec|||niu
1848 my_mkstemp|||niu
1849 my_nl_langinfo|5.027006||nViu
1850 my_pclose|5.003007|5.003007|u
1851 my_popen|5.003007|5.003007|u
1852 my_popen_list|5.007001|5.007001|u
1853 my_setenv|5.003007|5.003007|
1854 my_snprintf|5.009004|5.003007|pvn
1855 my_socketpair|5.007003|5.007003|nu
1856 my_sprintf|5.009003|5.003007|pnd
1857 my_stat_flags|5.013003||cViu
1858 my_stat|||u
1859 my_strerror|5.021001||Viu
1860 my_strftime|5.007002|5.007002|u
1861 my_strlcat|5.009004|5.003007|pn
1862 my_strlcpy|5.009004|5.003007|pn
1863 my_strnlen|5.027006|5.003007|pn
1864 my_strtod|5.029010|5.029010|n
1865 my_unexec|5.003007||Viu
1866 my_vsnprintf|5.009004|5.009004|n
1867 NATIVE_TO_LATIN1|5.019004|5.003007|p
1868 NATIVE_TO_NEED|5.019004||ndcVu
1869 NATIVE_TO_UNI|5.007001|5.007001|
1870 need_utf8|5.009003||nViu
1871 newANONATTRSUB|5.006000|5.006000|u
1872 newANONHASH|5.003007|5.003007|u
1873 newANONLIST|5.003007|5.003007|u
1874 newANONSUB|5.003007|5.003007|u
1875 newASSIGNOP|5.003007|5.003007|
1876 newATTRSUB|5.006000|5.006000|u
1877 newATTRSUB_x|5.019008||cVi
1878 newAV|5.003007|5.003007|
1879 newAVREF|5.003007|5.003007|u
1880 newBINOP|5.003007|5.003007|
1881 new_collate|5.006000||Viu
1882 newCONDOP|5.003007|5.003007|
1883 new_constant|||iu
1884 newCONSTSUB|5.004005|5.003007|p
1885 newCONSTSUB_flags|5.015006|5.015006|
1886 new_ctype|5.006000||Viu
1887 newCVREF|5.003007|5.003007|u
1888 newDEFSVOP|5.021006|5.021006|
1889 newFORM|5.003007|5.003007|u
1890 newFOROP|5.013007|5.013007|
1891 newGIVENOP|5.009003|5.009003|
1892 newGIVWHENOP|5.027008||Viu
1893 newGP|||xiu
1894 newGVgen|5.003007|5.003007|u
1895 newGVgen_flags|5.015004|5.015004|u
1896 newGVOP|5.003007|5.003007|
1897 newGVREF|5.003007|5.003007|u
1898 new_he|5.005000||Viu
1899 newHV|5.003007|5.003007|
1900 newHVhv|5.005000|5.005000|u
1901 newHVREF|5.003007|5.003007|u
1902 _new_invlist|5.013010||cViu
1903 _new_invlist_C_array|5.015008||cViu
1904 newIO|5.003007|5.003007|u
1905 newLISTOP|5.003007|5.003007|
1906 newLOGOP|5.003007|5.003007|
1907 new_logop|5.005000||Viu
1908 newLOOPEX|5.003007|5.003007|
1909 newLOOPOP|5.003007|5.003007|
1910 newMETHOP|5.021005|5.021005|
1911 newMETHOP_internal|5.021005||Viu
1912 newMETHOP_named|5.021005|5.021005|
1913 new_msg_hv|5.027009||Viu
1914 newMYSUB|5.017004|5.017004|u
1915 newNULLLIST|5.003007|5.003007|
1916 new_numeric|5.006000||Viu
1917 newOP|5.003007|5.003007|
1918 newPADNAMELIST|5.021007|5.021007|nx
1919 newPADNAMEouter|5.021007|5.021007|nx
1920 newPADNAMEpvn|5.021007|5.021007|nx
1921 newPADOP|5.006000||V
1922 newPMOP|5.003007|5.003007|
1923 newPROG|5.003007|5.003007|u
1924 newPVOP|5.003007|5.003007|
1925 newRANGE|5.003007|5.003007|
1926 new_regcurly|5.027001||nViu
1927 newRV|5.003007|5.003007|u
1928 newRV_inc|5.004000|5.003007|p
1929 newRV_noinc|5.004000|5.003007|p
1930 newSLICEOP|5.003007|5.003007|
1931 new_stackinfo|5.005000|5.005000|u
1932 newSTATEOP|5.003007|5.003007|
1933 newSTUB|5.017001||Viu
1934 newSUB|5.003007|5.003007|u
1935 newSV|5.003007|5.003007|
1936 newSVavdefelem|5.019004||Viu
1937 newSVhek|5.009003|5.009003|
1938 newSViv|5.003007|5.003007|
1939 newSVnv|5.006000|5.003007|
1940 newSVOP|5.003007|5.003007|
1941 newSVpadname|5.017004|5.017004|x
1942 newSVpv|5.003007|5.003007|
1943 newSVpvf|5.006000|5.004000|v
1944 newSVpvf_nocontext|5.006000||vnVu
1945 newSVpvn|5.004005|5.003007|p
1946 newSVpvn_flags|5.010001|5.003007|p
1947 newSVpvn_share|5.007001|5.003007|p
1948 newSVpvn_utf8|5.010001|5.003007|p
1949 newSVpvs|5.009003|5.003007|p
1950 newSVpvs_flags|5.010001|5.003007|p
1951 newSVpv_share|5.013006|5.013006|
1952 newSVpvs_share|5.009003|5.003007|p
1953 newSVREF|5.003007|5.003007|u
1954 newSVrv|5.003007|5.003007|
1955 newSVsv|5.003007|5.003007|
1956 newSVsv_flags|5.029009|5.007002|pu
1957 newSVsv_nomg|5.029009|5.007003|p
1958 newSV_type|5.009005|5.003007|p
1959 newSVuv|5.006000|5.003007|p
1960 newUNOP|5.003007|5.003007|
1961 newUNOP_AUX|5.021007|5.021007|
1962 new_version|5.009000|5.009000|
1963 new_warnings_bitfield|||xciu
1964 newWHENOP|5.027008|5.027008|
1965 newWHILEOP|5.013007|5.013007|
1966 Newx|5.009003|5.003007|p
1967 Newxc|5.009003|5.003007|p
1968 newXS|5.006000|5.006000|
1969 newXS_deffile|5.021006||cViu
1970 newXS_flags|5.009004|5.009004|xu
1971 newXS_len_flags|5.015006||Vi
1972 newXSproto|5.006000|5.006000|
1973 Newxz|5.009003|5.003007|p
1974 nextargv|5.003007||Viu
1975 nextchar|5.005000||Viu
1976 next_symbol|5.007003||Viu
1977 ninstr|5.003007|5.003007|n
1978 no_bareword_allowed|5.005004||Viu
1979 no_fh_allowed|5.003007||Viu
1980 no_op|5.003007||Viu
1981 NOOP|5.005000|5.003007|poVu
1982 noperl_die|5.021006||vnViu
1983 not_a_number|5.005000||Viu
1984 nothreadhook|5.008000|5.008000|
1985 notify_parser_that_changed_to_utf8|5.025010||Viu
1986 not_incrementable|5.021002||Viu
1987 nuke_stacks|5.005000||Viu
1988 Nullav|5.003007|5.003007|d
1989 Nullch|5.003007|5.003007|
1990 Nullcv|5.003007|5.003007|d
1991 Nullhv|5.003007|5.003007|d
1992 Nullsv|5.003007|5.003007|
1993 NUM2PTR|5.006000||pVu
1994 num_overflow|5.009001||nViu
1995 NVef|5.006001|5.003007|p
1996 NVff|5.006001|5.003007|p
1997 NVgf|5.006001|5.003007|p
1998 NVMANTBITS|5.023000|5.023000|
1999 NVSIZE|5.006001|5.006001|
2000 NVTYPE|5.006000|5.003007|p
2001 oopsAV|5.003007||Viu
2002 oopsHV|5.003007||Viu
2003 op_append_elem|5.013006|5.013006|
2004 op_append_list|5.013006|5.013006|
2005 OP_CLASS|5.013007|5.013007|
2006 op_class|5.025010|5.025010|
2007 op_clear|5.006000||cViu
2008 op_contextualize|5.013006|5.013006|
2009 op_convert_list|5.021006|5.021006|
2010 OP_DESC|5.007003|5.007003|
2011 op_dump|5.006000|5.006000|
2012 openn_cleanup|5.019010||Viu
2013 openn_setup|5.019010||Viu
2014 open_script|5.005000||Viu
2015 op_free|5.003007|5.003007|
2016 OpHAS_SIBLING|5.021007|5.003007|p
2017 op_integerize|5.015003||Viu
2018 OpLASTSIB_set|5.021011|5.003007|p
2019 op_linklist|5.013006|5.013006|
2020 op_lvalue|5.013007|5.013007|x
2021 op_lvalue_flags|||ciu
2022 OpMAYBESIB_set|5.021011|5.003007|p
2023 opmethod_stash|5.021007||Viu
2024 OpMORESIB_set|5.021011|5.003007|p
2025 OP_NAME|5.007003|5.007003|
2026 op_null|5.007002|5.007002|
2027 op_parent|5.025001|5.025001|n
2028 op_prepend_elem|5.013006|5.013006|
2029 op_refcnt_dec|||xiu
2030 op_refcnt_inc|||xiu
2031 op_refcnt_lock|5.009002|5.009002|u
2032 op_refcnt_unlock|5.009002|5.009002|u
2033 op_relocate_sv|5.021005||Viu
2034 op_scope|5.013007|5.013007|x
2035 OpSIBLING|5.021007|5.003007|p
2036 op_sibling_splice|5.021002|5.021002|n
2037 opslab_force_free|5.017002||Viu
2038 opslab_free|5.017002||Viu
2039 opslab_free_nopad|5.017002||Viu
2040 op_std_init|5.015003||Viu
2041 optimize_op|5.027006||Viu
2042 optimize_optree|5.027006||Vi
2043 OP_TYPE_IS|5.019007|5.019007|
2044 OP_TYPE_IS_OR_WAS|5.019010|5.019010|
2045 op_unscope|5.017003||xViu
2046 ORIGMARK|5.003007|5.003007|
2047 OSNAME|5.003007|5.003007|
2048 OSVERS|5.007002|5.007002|
2049 output_posix_warnings|5.029005||Viu
2050 package|5.003007||Viu
2051 package_version|5.011001||Viu
2052 pack_cat|||
2053 packlist|5.008001|5.008001|
2054 pack_rec|5.008001||Viu
2055 packWARN|5.007003||pVu
2056 pad_add_anon|5.008001|5.008001|
2057 pad_add_name_pv|5.015001|5.015001|
2058 pad_add_name_pvn|5.015001|5.015001|
2059 pad_add_name_pvs|5.015001|5.015001|
2060 pad_add_name_sv|5.015001|5.015001|
2061 pad_add_weakref|5.021007||Viu
2062 pad_alloc|5.003007|5.003007|x
2063 pad_alloc_name|5.015001||Vi
2064 PadARRAY|5.017004|5.017004|x
2065 PAD_BASE_SV|||i
2066 pad_block_start|5.008001||Vi
2067 pad_check_dup|5.008001||Vi
2068 PAD_CLONE_VARS|||i
2069 PAD_COMPNAME_FLAGS|||i
2070 PAD_COMPNAME_GEN|||i
2071 PAD_COMPNAME_GEN_set|||i
2072 PAD_COMPNAME_OURSTASH|||i
2073 PAD_COMPNAME_PV|||i
2074 pad_compname_type|||
2075 PAD_COMPNAME_TYPE|||i
2076 pad_findlex|5.005000||Vi
2077 pad_findmy_pv|5.015001|5.015001|
2078 pad_findmy_pvn|5.015001|5.015001|
2079 pad_findmy_pvs|5.015001|5.015001|
2080 pad_findmy_sv|5.015001|5.015001|
2081 pad_fixup_inner_anons|5.008001||Vi
2082 pad_free|5.003007||Vi
2083 pad_leavemy|5.003007||Vi
2084 PadlistARRAY|5.017004|5.017004|x
2085 padlist_dup|5.013002||Vi
2086 PadlistMAX|5.017004|5.017004|x
2087 PadlistNAMES|5.017004|5.017004|x
2088 PadlistNAMESARRAY|5.017004|5.017004|x
2089 PadlistNAMESMAX|5.017004|5.017004|x
2090 PadlistREFCNT|5.017004|5.017004|x
2091 padlist_store|5.017004||Viu
2092 PadMAX|5.017004|5.017004|x
2093 padname_dup|5.021007||Vi
2094 padname_free|||ciu
2095 PadnameIN_SCOPE|5.031004||nViu
2096 PadnameIsOUR|||i
2097 PadnameIsSTATE|||i
2098 PadnameLEN|5.017004|5.017004|x
2099 PadnamelistARRAY|5.017004|5.017004|x
2100 padnamelist_dup|5.021007||Vi
2101 padnamelist_fetch|5.021007|5.021007|nx
2102 padnamelist_free|||ciu
2103 PadnamelistMAX|5.017004|5.017004|x
2104 PadnamelistREFCNT|5.021007|5.021007|x
2105 PadnamelistREFCNT_dec|5.021007|5.021007|x
2106 padnamelist_store|5.021007|5.021007|x
2107 PadnameOURSTASH|||i
2108 PadnameOUTER|||i
2109 PadnamePV|5.017004|5.017004|x
2110 PadnameREFCNT|5.021007|5.021007|x
2111 PadnameREFCNT_dec|5.021007|5.021007|x
2112 PadnameSV|5.017004|5.017004|x
2113 PadnameTYPE|||i
2114 PadnameUTF8|5.017004|5.017004|x
2115 pad_new|5.008001|5.008001|
2116 pad_push|5.008001||cVi
2117 pad_reset|5.003007||Vi
2118 PAD_RESTORE_LOCAL|||i
2119 PAD_SAVE_LOCAL|||i
2120 PAD_SAVE_SETNULLPAD|||i
2121 PAD_SET_CUR|||i
2122 PAD_SET_CUR_NOSAVE|||i
2123 pad_setsv|5.008001|5.008001|
2124 PAD_SETSV|||i
2125 pad_sv|5.003007||V
2126 PAD_SV|||i
2127 PAD_SVl|||i
2128 pad_swipe|5.003007||Vi
2129 pad_tidy|5.008001|5.008001|x
2130 parse_arithexpr|5.013008|5.013008|x
2131 parse_barestmt|5.013007|5.013007|x
2132 parse_block|5.013007|5.013007|x
2133 parse_body|5.006000||Viu
2134 parse_fullexpr|5.013008|5.013008|x
2135 parse_fullstmt|5.013005|5.013005|x
2136 parse_gv_stash_name|5.019004||Viu
2137 parse_ident|5.017010||Viu
2138 parse_label|5.013007|5.013007|x
2139 parse_listexpr|5.013008|5.013008|x
2140 parse_lparen_question_flags|5.017009||Viu
2141 parser_dup|5.009000|5.009000|u
2142 parser_free|5.009005||Viu
2143 parser_free_nexttoke_ops|5.017006||Viu
2144 parse_stmtseq|5.013006|5.013006|x
2145 parse_subsignature|5.031003|5.031003|x
2146 parse_termexpr|5.013008|5.013008|x
2147 parse_unicode_opts|5.008001||Viu
2148 parse_uniprop_string|5.027011||cViu
2149 path_is_searchable|5.019001||nViu
2150 peep|5.003007||Viu
2151 pending_ident|5.017004||Viu
2152 PERL_ABS|5.008001|5.003007|p
2153 perl_alloc|5.003007|5.003007|n
2154 perl_alloc_using|5.006000||nVu
2155 PERL_BCDVERSION||5.003007|pou
2156 perl_clone|5.006000||nV
2157 perl_clone_using|5.006000||nVu
2158 perl_construct|5.003007|5.003007|n
2159 Perl_custom_op_xop|5.013007||V
2160 perl_destruct|5.007003|5.007003|n
2161 perl_free|5.003007|5.003007|n
2162 PERL_HASH|5.003007|5.003007|p
2163 PERL_INT_MAX|5.003007|5.003007|p
2164 PERL_INT_MIN|5.003007|5.003007|p
2165 PerlIO_apply_layers|5.007001|5.007001|
2166 PerlIO_binmode|5.007001|5.007001|
2167 PerlIO_canset_cnt|5.003007|5.003007|n
2168 PerlIO_clearerr|5.007003|5.007003|
2169 PerlIO_close|5.007003|5.007003|
2170 PerlIO_context_layers|5.009004|5.009004|u
2171 PerlIO_debug|5.007001|5.007001|
2172 PerlIO_eof|5.007003|5.007003|
2173 PerlIO_error|5.007003|5.007003|
2174 PerlIO_exportFILE|5.003007|5.003007|n
2175 PerlIO_fast_gets|5.003007|5.003007|n
2176 PerlIO_fdopen|5.003007|5.003007|n
2177 PerlIO_fileno|5.007003|5.007003|
2178 PerlIO_fill|5.007003|5.007003|u
2179 PerlIO_findFILE|5.003007|5.003007|n
2180 PerlIO_flush|5.007003|5.007003|
2181 PERLIO_FUNCS_CAST|5.009003||pVu
2182 PERLIO_FUNCS_DECL|5.009003||pVu
2183 PerlIO_get_base|5.007003|5.007003|
2184 PerlIO_get_bufsiz|5.007003|5.007003|
2185 PerlIO_getc|5.003007|5.003007|n
2186 PerlIO_get_cnt|5.007003|5.007003|
2187 PerlIO_getpos|5.003007|5.003007|n
2188 PerlIO_get_ptr|5.007003|5.007003|
2189 PerlIO_has_base|5.003007|5.003007|n
2190 PerlIO_has_cntptr|5.003007|5.003007|n
2191 PerlIO_importFILE|5.003007|5.003007|n
2192 PerlIO_open|5.003007|5.003007|n
2193 PerlIO_printf|5.006000|5.003007|
2194 PerlIO_putc|5.003007|5.003007|n
2195 PerlIO_puts|5.003007|5.003007|n
2196 PerlIO_read|5.007003|5.007003|
2197 PerlIO_releaseFILE|5.003007|5.003007|n
2198 PerlIO_reopen|5.003007|5.003007|
2199 PerlIO_restore_errno|5.021006||cViu
2200 PerlIO_rewind|5.003007|5.003007|n
2201 PerlIO_save_errno|5.021006||cViu
2202 PerlIO_seek|5.007003|5.007003|
2203 PerlIO_set_cnt|5.007003|5.007003|
2204 PerlIO_setlinebuf|5.007003|5.007003|
2205 PerlIO_setpos|5.003007|5.003007|n
2206 PerlIO_set_ptrcnt|5.007003|5.007003|
2207 PerlIO_stderr|5.007003|5.007003|
2208 PerlIO_stdin|5.007003|5.007003|
2209 PerlIO_stdout|5.007003|5.007003|
2210 PerlIO_stdoutf|5.006000|5.003007|
2211 PerlIO_tell|5.007003|5.007003|
2212 PerlIO_ungetc|5.003007|5.003007|n
2213 PerlIO_unread|5.007003|5.007003|u
2214 PerlIO_vprintf|5.003007|5.003007|n
2215 PerlIO_write|5.007003|5.007003|
2216 Perl_langinfo|5.027004|5.027004|n
2217 PerlLIO_dup2_cloexec|5.027008||Viu
2218 PerlLIO_dup_cloexec|5.027008||Viu
2219 PerlLIO_open3_cloexec|5.027008||Viu
2220 PerlLIO_open_cloexec|5.027008||Viu
2221 PERL_LOADMOD_DENY||5.003007|ou
2222 PERL_LOADMOD_IMPORT_OPS||5.003007|ou
2223 PERL_LOADMOD_NOIMPORT||5.003007|ou
2224 PERL_LONG_MAX|5.003007|5.003007|p
2225 PERL_LONG_MIN|5.003007|5.003007|p
2226 PERL_MAGIC_arylen|5.007002|5.003007|p
2227 PERL_MAGIC_arylen_p|5.009003|5.009003|
2228 PERL_MAGIC_backref|5.007002|5.003007|p
2229 PERL_MAGIC_bm|5.007002|5.003007|p
2230 PERL_MAGIC_checkcall|5.013006|5.013006|
2231 PERL_MAGIC_collxfrm|5.007002|5.003007|p
2232 PERL_MAGIC_dbfile|5.007002|5.003007|p
2233 PERL_MAGIC_dbline|5.007002|5.003007|p
2234 PERL_MAGIC_debugvar|5.021005|5.021005|
2235 PERL_MAGIC_defelem|5.007002|5.003007|p
2236 PERL_MAGIC_env|5.007002|5.003007|p
2237 PERL_MAGIC_envelem|5.007002|5.003007|p
2238 PERL_MAGIC_ext|5.007002|5.003007|p
2239 PERL_MAGIC_fm|5.007002|5.003007|p
2240 PERL_MAGIC_glob||5.003007|pou
2241 PERL_MAGIC_hints|5.009004|5.009004|
2242 PERL_MAGIC_hintselem|5.009004|5.009004|
2243 PERL_MAGIC_isa|5.007002|5.003007|p
2244 PERL_MAGIC_isaelem|5.007002|5.003007|p
2245 PERL_MAGIC_lvref|5.021005|5.021005|
2246 PERL_MAGIC_mutex||5.003007|pou
2247 PERL_MAGIC_nkeys|5.007002|5.003007|p
2248 PERL_MAGIC_nonelem|5.027009|5.027009|
2249 PERL_MAGIC_overload||5.003007|pou
2250 PERL_MAGIC_overload_elem||5.003007|pou
2251 PERL_MAGIC_overload_table|5.007002|5.003007|p
2252 PERL_MAGIC_pos|5.007002|5.003007|p
2253 PERL_MAGIC_qr|5.007002|5.003007|p
2254 PERL_MAGIC_regdata|5.007002|5.003007|p
2255 PERL_MAGIC_regdatum|5.007002|5.003007|p
2256 PERL_MAGIC_regex_global|5.007002|5.003007|p
2257 PERL_MAGIC_rhash|5.009003|5.009003|
2258 PERL_MAGIC_shared|5.007003|5.003007|p
2259 PERL_MAGIC_shared_scalar|5.007003|5.003007|p
2260 PERL_MAGIC_sig|5.007002|5.003007|p
2261 PERL_MAGIC_sigelem|5.007002|5.003007|p
2262 PERL_MAGIC_substr|5.007002|5.003007|p
2263 PERL_MAGIC_sv|5.007002|5.003007|p
2264 PERL_MAGIC_symtab|5.009003|5.009003|
2265 PERL_MAGIC_taint|5.007002|5.003007|p
2266 PERL_MAGIC_tied|5.007002|5.003007|p
2267 PERL_MAGIC_tiedelem|5.007002|5.003007|p
2268 PERL_MAGIC_tiedscalar|5.007002|5.003007|p
2269 PERL_MAGIC_utf8|5.008001|5.003007|p
2270 PERL_MAGIC_uvar|5.007002|5.003007|p
2271 PERL_MAGIC_uvar_elem|5.007003|5.003007|p
2272 PERL_MAGIC_vec|5.007002|5.003007|p
2273 PERL_MAGIC_vstring|5.008001|5.003007|p
2274 perl_parse|5.006000|5.006000|n
2275 PerlProc_pipe_cloexec|5.027008||Viu
2276 PERL_PV_ESCAPE_ALL|5.009004|5.003007|p
2277 PERL_PV_ESCAPE_FIRSTCHAR|5.009004|5.003007|p
2278 PERL_PV_ESCAPE_NOBACKSLASH|5.009004|5.003007|p
2279 PERL_PV_ESCAPE_NOCLEAR|5.009004|5.003007|p
2280 PERL_PV_ESCAPE_NONASCII|5.013009|5.013009|
2281 PERL_PV_ESCAPE_QUOTE|5.009004|5.003007|p
2282 PERL_PV_ESCAPE_RE|5.009005|5.003007|p
2283 PERL_PV_ESCAPE_UNI|5.009004|5.003007|p
2284 PERL_PV_ESCAPE_UNI_DETECT|5.009004|5.003007|p
2285 PERL_PV_PRETTY_DUMP|5.009004|5.003007|poVu
2286 PERL_PV_PRETTY_ELLIPSES|5.010000|5.003007|p
2287 PERL_PV_PRETTY_LTGT|5.009004|5.003007|p
2288 PERL_PV_PRETTY_NOCLEAR|5.010000|5.003007|poVu
2289 PERL_PV_PRETTY_QUOTE|5.009004|5.003007|p
2290 PERL_PV_PRETTY_REGPROP|5.009004|5.003007|poVu
2291 PERL_QUAD_MAX|5.003007|5.003007|p
2292 PERL_QUAD_MIN|5.003007|5.003007|p
2293 PERL_REVISION|5.006000|5.003007|p
2294 perl_run|5.003007|5.003007|n
2295 PERL_SCAN_ALLOW_UNDERSCORES|5.007003|5.003007|p
2296 PERL_SCAN_DISALLOW_PREFIX|5.007003|5.003007|p
2297 PERL_SCAN_GREATER_THAN_UV_MAX|5.007003|5.003007|p
2298 PERL_SCAN_SILENT_ILLDIGIT|5.008001|5.003007|p
2299 PERL_SCAN_TRAILING|5.021002|5.021002|
2300 Perl_setlocale|5.027002|5.027002|n
2301 PERL_SHORT_MAX|5.003007|5.003007|p
2302 PERL_SHORT_MIN|5.003007|5.003007|p
2303 PERL_SIGNALS_UNSAFE_FLAG|5.008001|5.003007|poVu
2304 Perl_signbit|5.009005|5.009005|nx
2305 PerlSock_accept_cloexec|5.027008||Viu
2306 PerlSock_socket_cloexec|5.027008||Viu
2307 PerlSock_socketpair_cloexec|5.027008||Viu
2308 PERL_SUBVERSION|5.006000|5.003007|p
2309 PERL_SYS_INIT3|5.006000|5.006000|
2310 PERL_SYS_INIT|5.003007|5.003007|
2311 PERL_SYS_TERM|5.003007|5.003007|
2312 PERL_UCHAR_MAX|5.003007|5.003007|p
2313 PERL_UCHAR_MIN|5.003007|5.003007|p
2314 PERL_UINT_MAX|5.003007|5.003007|p
2315 PERL_UINT_MIN|5.003007|5.003007|poVu
2316 PERL_ULONG_MAX|5.003007|5.003007|p
2317 PERL_ULONG_MIN|5.003007|5.003007|p
2318 PERL_UNUSED_ARG|5.009003||pVu
2319 PERL_UNUSED_CONTEXT|5.009004|5.003007|poVu
2320 PERL_UNUSED_DECL|5.007002|5.003007|poVu
2321 PERL_UNUSED_RESULT|5.021001||pVu
2322 PERL_UNUSED_VAR|5.007002||pVu
2323 PERL_UQUAD_MAX|5.003007|5.003007|p
2324 PERL_UQUAD_MIN|5.003007|5.003007|p
2325 PERL_USE_GCC_BRACE_GROUPS|5.009004|5.004000|poVu
2326 PERL_USHORT_MAX|5.003007|5.003007|p
2327 PERL_USHORT_MIN|5.003007|5.003007|p
2328 PERL_VERSION|5.006000|5.003007|p
2329 pidgone|5.003007||Viu
2330 PL_bufend||5.003007|pou
2331 PL_bufptr||5.003007|pou
2332 PL_check|5.009003|5.006000|
2333 PL_compiling|5.004005|5.003007|poVu
2334 PL_comppad|5.008001|5.008001|x
2335 PL_comppad_name|5.017004|5.017004|x
2336 PL_copline||5.003007|pou
2337 PL_curcop|5.004005|5.003007|p
2338 PL_curpad|5.005000|5.005000|x
2339 PL_curstash|5.004005|5.003007|p
2340 PL_DBsignal|5.005000|5.003007|poVu
2341 PL_DBsingle|5.004005|5.003007|poV
2342 PL_DBsub|5.004005|5.003007|poV
2343 PL_DBtrace|5.005000|5.003007|poV
2344 PL_debstash|5.004005|5.003007|poVu
2345 PL_defgv|5.004005|5.003007|p
2346 PL_diehook|5.004005|5.003007|poVu
2347 PL_dirty|5.004005|5.003007|poVu
2348 PL_dowarn|5.004005|5.003007|poV
2349 PL_errgv|5.004005|5.003007|p
2350 PL_error_count||5.003007|pou
2351 PL_exit_flags|5.006000|5.006000|
2352 PL_expect||5.003007|pou
2353 PL_hexdigit|5.005000|5.003007|poVu
2354 PL_hints|5.005000|5.003007|poVu
2355 PL_in_my||5.003007|pou
2356 PL_in_my_stash||5.005000|pou
2357 PL_keyword_plugin|5.011002|5.011002|x
2358 PL_last_in_gv|||i
2359 PL_laststatval|5.005000|5.003007|poVu
2360 PL_lex_state||5.003007|pou
2361 PL_lex_stuff||5.003007|pou
2362 PL_linestr||5.003007|pou
2363 PL_mess_sv|5.005000|5.004000|poVu
2364 PL_modglobal|5.005000|5.005000|
2365 PL_na|5.004005|5.003007|p
2366 PL_no_modify|5.006000|5.003007|poVu
2367 PL_ofsgv|||i
2368 PL_opfreehook|5.011000|5.011000|
2369 PL_parser|5.009005|5.003007|p
2370 PL_peepp|5.007003|5.007003|
2371 PL_perldb|5.004005|5.003007|poVu
2372 PL_perl_destruct_level|5.004005|5.003007|p
2373 PL_ppaddr|5.006000|5.003007|poVu
2374 PL_rpeepp|5.013005|5.013005|
2375 PL_rsfp||5.003007|pou
2376 PL_rsfp_filters||5.003007|pou
2377 PL_rs|||i
2378 PL_runops|5.006000|5.006000|
2379 PL_signals|5.008001||pVu
2380 PL_stack_base|5.004005|5.003007|poVu
2381 PL_stack_sp|5.004005|5.003007|poVu
2382 PL_statcache|5.005000|5.003007|poVu
2383 PL_stdingv|5.004005|5.003007|poVu
2384 PL_Sv|5.005000|5.003007|poVu
2385 PL_sv_arenaroot|5.004005|5.003007|poVu
2386 PL_sv_no|5.004005|5.003007|p
2387 PL_sv_undef|5.004005|5.003007|p
2388 PL_sv_yes|5.004005|5.003007|p
2389 PL_sv_zero|5.027003|5.027003|
2390 PL_tainted|5.004005|5.003007|poVu
2391 PL_tainting|5.004005|5.003007|poVu
2392 PL_tokenbuf||5.003007|pou
2393 pm_description|5.009004||Viu
2394 pmop_dump|5.006000|5.006000|u
2395 pmruntime|5.003007||Viu
2396 pmtrans|5.003007||Viu
2397 _pMY_CXT|5.007003|5.009000|pV
2398 pMY_CXT_|5.007003|5.009000|pV
2399 pMY_CXT|5.009000|5.009000|p
2400 Poison|5.008000|5.003007|p
2401 PoisonFree|5.009004|5.003007|p
2402 PoisonNew|5.009004|5.003007|p
2403 PoisonWith|5.009004|5.003007|p
2404 POPi|5.003007|5.003007|
2405 POPl|5.003007|5.003007|
2406 POPMARK|||ciu
2407 POP_MULTICALL|5.009003|5.009003|
2408 POPn|5.006000|5.003007|
2409 POPp|5.003007|5.003007|
2410 POPpbytex|5.007001|5.007001|
2411 POPpx|5.005003|5.005003|
2412 POPs|5.003007|5.003007|
2413 pop_scope|5.003007|5.003007|u
2414 POPu|5.004000|5.004000|
2415 POPul|5.006000|5.006000|
2416 populate_ANYOF_from_invlist|5.019005||Viu
2417 populate_isa|||viu
2418 pregcomp|5.009005|5.009005|u
2419 pregexec|5.003007|5.003007|u
2420 pregfree2|5.011000|5.011000|u
2421 pregfree|5.003007|5.003007|u
2422 prescan_version|5.011004|5.011004|
2423 printbuf|5.009004||Viu
2424 print_bytes_for_locale|5.027002||Viu
2425 print_collxfrm_input_and_return|5.025004||Viu
2426 printf_nocontext|5.007001|5.007001|vndu
2427 PRIVLIB|5.003007|5.003007|
2428 process_special_blocks|5.009005||Viu
2429 pTHX|5.006000|5.003007|p
2430 pTHX_|5.006000|5.003007|pV
2431 PTR2IV|5.006000|5.003007|p
2432 PTR2nat|5.009003||pVu
2433 PTR2NV|5.006000|5.003007|p
2434 PTR2ul|5.007001||pVu
2435 PTR2UV|5.006000|5.003007|p
2436 ptr_hash|5.017010||nViu
2437 PTRSIZE|5.005000|5.005000|
2438 ptr_table_clear|5.009005|5.009005|du
2439 ptr_table_fetch|5.009005|5.009005|u
2440 ptr_table_find|5.009004||nViu
2441 ptr_table_free|5.009005|5.009005|u
2442 ptr_table_new|5.009005|5.009005|u
2443 ptr_table_split|5.009005|5.009005|u
2444 ptr_table_store|5.009005|5.009005|u
2445 PTRV|5.006000|5.003007|poVu
2446 PUSHi|5.003007|5.003007|
2447 PUSHMARK|5.003007|5.003007|
2448 PUSHmortal|5.009002|5.003007|p
2449 PUSH_MULTICALL|5.011000|5.011000|
2450 PUSHn|5.006000|5.003007|
2451 PUSHp|5.003007|5.003007|
2452 PUSHs|5.003007|5.003007|
2453 push_scope|5.003007|5.003007|u
2454 PUSHu|5.004000|5.003007|p
2455 PUTBACK|5.003007|5.003007|
2456 put_charclass_bitmap_innards|5.021004||Viu
2457 put_charclass_bitmap_innards_common|5.023008||Viu
2458 put_charclass_bitmap_innards_invlist|5.023008||Viu
2459 put_code_point|5.021004||Viu
2460 put_range|5.019009||Viu
2461 pv_display|5.006000|5.003007|p
2462 pv_escape|5.009004|5.003007|p
2463 pv_pretty|5.009004|5.003007|p
2464 pv_uni_display|5.007003|5.007003|
2465 qerror|5.006000||cViu
2466 quadmath_format_needed|5.021004||nV
2467 quadmath_format_single|5.021004||nV
2468 RANDBITS|5.003007|5.003007|
2469 READ_XDIGIT|5.017006|5.017006|
2470 realloc|5.007002|5.007002|n
2471 ReANY|||ncu
2472 re_compile|5.009005|5.009005|u
2473 re_croak2|||iu
2474 re_dup_guts|5.011000|5.011000|u
2475 reentrant_free|5.010000|5.010000|u
2476 reentrant_init|5.010000|5.010000|u
2477 reentrant_retry|5.010000|5.010000|vnu
2478 reentrant_size|5.010000|5.010000|u
2479 re_exec_indentf|5.023009||vViu
2480 ref|5.003007||Vu
2481 ref_array_or_hash|5.027008||Viu
2482 refcounted_he_chain_2hv|5.013007||cVi
2483 refcounted_he_fetch_pv|5.013007||cVi
2484 refcounted_he_fetch_pvn|5.013007||cVi
2485 refcounted_he_fetch_pvs|||i
2486 refcounted_he_fetch_sv|5.013007||cVi
2487 refcounted_he_free|5.013007||cVi
2488 refcounted_he_inc|5.013007||cVi
2489 refcounted_he_new_pv|5.013007||cVi
2490 refcounted_he_new_pvn|5.013007||cVi
2491 refcounted_he_new_pvs|||i
2492 refcounted_he_new_sv|5.013007||cVi
2493 refcounted_he_value|5.009004||Viu
2494 refkids|5.003007||Viu
2495 refto|5.005000||Viu
2496 reg2Lanode|5.021005||Viu
2497 reg|5.005000||Viu
2498 reganode|5.005000||Viu
2499 regatom|5.005000||Viu
2500 regbranch|5.005000||Viu
2501 reg_check_named_buff_matched|5.009005||nViu
2502 regclass|5.005000||Viu
2503 regcppop|5.005000||Viu
2504 regcppush|5.005000||Viu
2505 regcp_restore|5.025006||Viu
2506 regcurly|5.013010||nViu
2507 regdump|5.005000|5.005000|u
2508 regdump_extflags|5.009005||Viu
2509 regdump_intflags|5.019002||Viu
2510 regdupe_internal|5.009000|5.009000|u
2511 regexec_flags|5.005000|5.005000|u
2512 regex_set_precedence|5.021010||nViu
2513 regfree_internal|5.009005|5.009005|u
2514 reghop3|5.007001||nViu
2515 reghop4|5.009005||nViu
2516 reghopmaybe3|5.007001||nViu
2517 reginclass|5.005000||Viu
2518 reginitcolors|5.006000|5.006000|u
2519 reginsert|5.005000||Viu
2520 regmatch|5.005000||Viu
2521 reg_named_buff|5.009005||cViu
2522 reg_named_buff_all|5.009005|5.009005|u
2523 reg_named_buff_exists|5.009005|5.009005|u
2524 reg_named_buff_fetch|5.009005|5.009005|u
2525 reg_named_buff_firstkey|5.009005|5.009005|u
2526 reg_named_buff_iter|5.009005||cViu
2527 reg_named_buff_nextkey|5.009005|5.009005|u
2528 reg_named_buff_scalar|5.009005|5.009005|u
2529 regnext|5.005000|5.005000|u
2530 reg_node|5.005000||Viu
2531 regnode_guts|5.021005||Viu
2532 reg_numbered_buff_fetch|5.009005||cViu
2533 reg_numbered_buff_length|5.009005||cViu
2534 reg_numbered_buff_store|5.009005||cViu
2535 regpiece|5.005000||Viu
2536 regprop|5.003007||Viu
2537 reg_qr_package|5.009005||cViu
2538 regrepeat|5.005000||Viu
2539 reg_scan_name|5.009005||Viu
2540 reg_skipcomment|5.009005||nViu
2541 regtail|5.005000||Viu
2542 regtail_study|5.009004||Viu
2543 reg_temp_copy|5.009005||cViu
2544 regtry|5.005000||Viu
2545 re_indentf|5.023009||vViu
2546 re_intuit_start|5.006000||cVu
2547 re_intuit_string|5.006000||cVu
2548 Renew|5.003007|5.003007|
2549 Renewc|5.003007|5.003007|
2550 re_op_compile|5.017001||Viu
2551 repeatcpy|5.003007|5.003007|nu
2552 REPLACEMENT_CHARACTER_UTF8|5.025005|5.003007|p
2553 report_evil_fh|5.006001||Viu
2554 report_redefined_cv|5.015006||Viu
2555 report_uninit|5.006000||cVi
2556 report_wrongway_fh|5.013009||Viu
2557 re_printf|5.023009||vViu
2558 require_pv|5.006000|5.006000|
2559 require_tie_mod|5.009005||Viu
2560 RESTORE_ERRNO|||i
2561 RESTORE_LC_NUMERIC|5.021010|5.021010|
2562 restore_magic|5.009003||Viu
2563 restore_switched_locale|5.027009||Viu
2564 RETVAL|5.003007|5.003007|V
2565 rninstr|5.003007|5.003007|n
2566 rpeep|5.013005||Viu
2567 rsignal|5.004000|5.004000|
2568 rsignal_restore|5.004000||Viu
2569 rsignal_save|5.004000||Viu
2570 rsignal_state|5.004000|5.004000|u
2571 run_body|5.006000||Viu
2572 runops_debug|5.005000|5.005000|u
2573 runops_standard|5.005000|5.005000|u
2574 run_user_filter|5.009003||Viu
2575 rv2cv_op_cv|5.013006|5.013006|
2576 rvpv_dup|5.007003|5.007003|u
2577 rxres_free|5.004000||Viu
2578 rxres_restore|5.004000||Viu
2579 rxres_save|5.004000||Viu
2580 Safefree|5.003007|5.003007|
2581 safesyscalloc|5.006000|5.006000|nu
2582 safesysfree|5.006000|5.006000|nu
2583 safesysmalloc|5.006000|5.006000|nu
2584 safesysrealloc|5.006000|5.006000|nu
2585 same_dirent|5.003007||Viu
2586 SANE_ERRSV|5.031003|5.031003|
2587 save_adelete|5.011000|5.011000|u
2588 save_aelem|5.004005|5.004005|u
2589 save_aelem_flags|5.011000|5.011000|u
2590 save_alloc|5.006000|5.006000|u
2591 save_aptr|5.003007|5.003007|
2592 save_ary|5.003007|5.003007|
2593 save_bool|5.008001|5.008001|u
2594 save_clearsv|5.003007|5.003007|u
2595 SAVECLEARSV|||i
2596 SAVECOMPPAD|||i
2597 SAVE_DEFSV|5.004005|5.003007|poVu
2598 save_delete|5.003007|5.003007|u
2599 save_destructor|5.006000|5.006000|u
2600 save_destructor_x|5.006000|5.006000|u
2601 SAVE_ERRNO|||i
2602 save_freeop|5.010001|5.010001|u
2603 save_freepv|5.003007|5.003007|u
2604 save_freesv|5.003007|5.003007|u
2605 save_generic_pvref|5.006001|5.006001|u
2606 save_generic_svref|5.005003|5.005003|u
2607 save_gp|5.004000|5.004000|
2608 save_hash|5.003007|5.003007|
2609 save_hdelete|5.011000|5.011000|u
2610 save_hek_flags|5.008000||nViu
2611 save_helem|5.004005|5.004005|u
2612 save_helem_flags|5.011000|5.011000|u
2613 save_hints|5.010001|5.010001|u
2614 save_hptr|5.003007|5.003007|
2615 save_I16|5.004000|5.004000|u
2616 save_I32|5.003007|5.003007|u
2617 save_I8|5.006000|5.006000|u
2618 save_int|5.003007|5.003007|u
2619 save_item|5.003007|5.003007|
2620 save_iv|5.005000|5.005000|u
2621 save_lines|5.005000||Viu
2622 save_list|5.003007|5.003007|d
2623 save_long|5.003007|5.003007|du
2624 save_magic_flags|5.019002||Viu
2625 save_mortalizesv|5.007001|5.007001|u
2626 save_nogv|5.003007|5.003007|du
2627 save_op|5.010001|5.010001|u
2628 save_padsv_and_mortalize|5.010001|5.010001|u
2629 SAVEPADSV|||i
2630 save_pptr|5.003007|5.003007|u
2631 save_pushi32ptr|5.010001|5.010001|u
2632 save_pushptr|5.010001|5.010001|u
2633 save_pushptri32ptr|5.010001||Viu
2634 save_pushptrptr|5.010001|5.010001|u
2635 savepv|5.003007|5.003007|
2636 savepvn|5.003007|5.003007|
2637 savepvs|5.009003|5.009003|
2638 save_re_context|5.006000|5.006000|u
2639 save_scalar|5.003007|5.003007|
2640 save_scalar_at|5.005000||Viu
2641 save_set_svflags|5.009000|5.009000|u
2642 savesharedpv|5.007003|5.007003|
2643 savesharedpvn|5.009005|5.009005|
2644 save_shared_pvref|5.007003|5.007003|u
2645 savesharedpvs|5.013006|5.013006|
2646 savesharedsvpv|5.013006|5.013006|
2647 save_sptr|5.003007|5.003007|u
2648 savestack_grow|5.003007|5.003007|u
2649 savestack_grow_cnt|5.008001|5.008001|u
2650 save_strlen|5.019004||cViu
2651 savesvpv|5.009002|5.009002|
2652 save_svref|5.003007|5.003007|
2653 SAVETMPS|5.003007|5.003007|
2654 savetmps|5.023008|5.023008|xu
2655 save_to_buffer|5.027004||nViu
2656 save_vptr|5.006000|5.006000|u
2657 sawparens|5.003007||Viu
2658 scalar|5.003007||Viu
2659 scalarboolean|5.005000||Viu
2660 scalarkids|5.003007||Viu
2661 scalar_mod_type|5.006000||nViu
2662 scalarseq|5.003007||Viu
2663 scalarvoid|5.003007||Viu
2664 scan_bin|5.006000|5.006000|
2665 scan_commit|5.005000||Viu
2666 scan_const|5.003007||Viu
2667 scan_formline|5.003007||Viu
2668 scan_heredoc|5.003007||Viu
2669 scan_hex|5.006000|5.003007|
2670 scan_ident|5.003007||Viu
2671 scan_inputsymbol|5.003007||Viu
2672 scan_num|5.007001|5.007001|u
2673 scan_oct|5.006000|5.003007|
2674 scan_pat|5.003007||Viu
2675 scan_str|5.003007||xcViu
2676 scan_subst|5.003007||Viu
2677 scan_trans|5.003007||Viu
2678 scan_version|5.009001|5.009001|
2679 scan_vstring|5.009005|5.009005|u
2680 scan_word|5.003007||xcViu
2681 search_const|5.010001||Viu
2682 seed|5.008001|5.008001|u
2683 sequence_num|5.009003||Viu
2684 set_ANYOF_arg|5.019005||Viu
2685 set_caret_X|5.019006||Viu
2686 set_context|5.006000|5.006000|nu
2687 setdefout|5.003007|5.003007|
2688 SETERRNO|||i
2689 setfd_cloexec|5.027008||nViu
2690 setfd_cloexec_for_nonsysfd|5.027008||Viu
2691 setfd_cloexec_or_inhexec_by_sysfdness|5.027008||Viu
2692 setfd_inhexec|5.027008||nViu
2693 setfd_inhexec_for_sysfd|5.027008||Viu
2694 setlocale_debug_string|5.027002||nViu
2695 set_numeric_radix|5.006000||Viu
2696 set_numeric_standard|5.006000||cViu
2697 set_numeric_underlying|5.027006||cViu
2698 set_padlist|5.021006||ncViu
2699 set_regex_pv|5.029004||Viu
2700 _setup_canned_invlist|5.019008||cViu
2701 share_hek|5.004000|5.004000|u
2702 share_hek_flags|5.008000||Viu
2703 SHORTSIZE|5.004000|5.004000|
2704 should_warn_nl|5.021001||nViu
2705 si_dup|5.007003|5.007003|u
2706 sighandler|5.003007||nViu
2707 simplify_sort|5.006000||Viu
2708 SITELIB|5.003007|5.003007|
2709 skipspace_flags|5.019002||xcViu
2710 skip_to_be_ignored_text|5.023004||Viu
2711 Slab_Alloc|5.006000||cViu
2712 Slab_Free|5.007003||cViu
2713 Slab_to_ro|5.017002||Viu
2714 Slab_to_rw|5.009005||Viu
2715 softref2xv|||iu
2716 sortcv|5.009003||Viu
2717 sortcv_stacked|5.009003||Viu
2718 sortcv_xsub|5.009003||Viu
2719 sortsv|5.007003|5.007003|
2720 sortsv_flags|5.009003|5.009003|
2721 SP|5.003007|5.003007|
2722 space_join_names_mortal|5.009004||Viu
2723 SPAGAIN|5.003007|5.003007|
2724 ssc_add_range|5.019005||Viu
2725 ssc_and|5.019005||Viu
2726 ssc_anything|5.019005||Viu
2727 ssc_clear_locale|5.019005||nViu
2728 ssc_cp_and|5.019005||Viu
2729 ssc_finalize|5.019005||Viu
2730 ssc_init|5.019005||Viu
2731 ssc_intersection|5.019005||Viu
2732 ssc_is_anything|5.019005||nViu
2733 ssc_is_cp_posixl_init|5.019005||nViu
2734 ssc_or|5.019005||Viu
2735 ssc_union|5.019005||Viu
2736 ss_dup|5.007003|5.007003|u
2737 ST|5.003007|5.003007|
2738 stack_grow|5.003007|5.003007|u
2739 START_EXTERN_C|5.005000|5.003007|poVu
2740 start_glob|||xi
2741 START_MY_CXT|5.010000|5.010000|p
2742 STARTPERL|5.003007|5.003007|
2743 start_subparse|5.004000|5.003007|pu
2744 STDCHAR|5.003007|5.003007|
2745 stdize_locale|5.007001||Viu
2746 STMT_END|5.003007|5.003007|pV
2747 STMT_START|5.003007|5.003007|pV
2748 STORE_LC_NUMERIC_FORCE_TO_UNDERLYING|5.021010|5.021010|
2749 STORE_LC_NUMERIC_SET_TO_NEEDED|5.021010|5.021010|
2750 STORE_LC_NUMERIC_SET_TO_NEEDED_IN|5.031003|5.031003|
2751 strEQ|5.003007|5.003007|
2752 strGE|5.003007|5.003007|
2753 strGT|5.003007|5.003007|
2754 strip_return|5.009003||Viu
2755 strLE|5.003007|5.003007|
2756 strLT|5.003007|5.003007|
2757 strNE|5.003007|5.003007|
2758 strnEQ|5.003007|5.003007|
2759 strnNE|5.003007|5.003007|
2760 Strtod|5.029010|5.029010|n
2761 Strtol|5.006000|5.006000|n
2762 Strtoul|5.006000|5.006000|n
2763 str_to_version|5.006000|5.006000|u
2764 StructCopy|5.003007|5.003007|V
2765 STR_WITH_LEN|5.009003|5.003007|pV
2766 study_chunk|5.005000||Viu
2767 sub_crush_depth|5.004000||Viu
2768 sublex_done|5.005000||Viu
2769 sublex_push|5.005000||Viu
2770 sublex_start|5.005000||Viu
2771 sv_2bool|5.003007|5.003007|
2772 sv_2bool_flags|5.013006|5.013006|
2773 sv_2cv|5.003007|5.003007|
2774 sv_2io|5.003007|5.003007|
2775 sv_2iuv_common|5.009004||Viu
2776 sv_2iuv_non_preserve|5.007001||Viu
2777 sv_2iv|5.003007|5.003007|u
2778 sv_2iv_flags|5.009001|5.009001|
2779 sv_2mortal|5.003007|5.003007|
2780 sv_2num|5.010000||xVi
2781 sv_2nv_flags|5.013001|5.013001|
2782 sv_2pv|5.003007|5.003007|u
2783 sv_2pvbyte|5.006000|5.003007|p
2784 sv_2pvbyte_flags|5.031004|5.031004|u
2785 sv_2pvbyte_nolen|5.006000|5.003007|p
2786 sv_2pv_flags|5.007002|5.003007|p
2787 sv_2pv_nolen|5.006000|5.003007|p
2788 sv_2pvutf8|5.006000|5.006000|
2789 sv_2pvutf8_flags|5.031004|5.031004|u
2790 sv_2pvutf8_nolen|5.006000|5.006000|
2791 sv_2uv|5.004000|5.003007|pu
2792 sv_2uv_flags|5.009001|5.009001|
2793 sv_add_arena|5.003007||Vi
2794 sv_add_backref|||iu
2795 SvAMAGIC_off|5.031004|5.031004|nu
2796 SvAMAGIC_on|5.031004|5.031004|nu
2797 sv_backoff|5.003007|5.003007|n
2798 sv_bless|5.003007|5.003007|
2799 sv_buf_to_ro|5.019008||Viu
2800 sv_buf_to_rw|5.019008||Viu
2801 sv_cat_decode|5.008001|5.008001|
2802 sv_catpv|5.003007|5.003007|
2803 sv_catpvf|5.006000|5.004000|v
2804 sv_catpv_flags|5.013006|5.013006|
2805 sv_catpvf_mg|5.006000|5.004000|pv
2806 sv_catpvf_mg_nocontext|5.006000||pvnVu
2807 sv_catpvf_nocontext|5.006000||vnVu
2808 sv_catpv_mg|5.004005|5.003007|p
2809 sv_catpvn|5.003007|5.003007|
2810 sv_catpvn_flags|5.007002|5.007002|
2811 sv_catpvn_mg|5.004005|5.003007|p
2812 sv_catpvn_nomg|5.007002|5.003007|p
2813 sv_catpv_nomg|5.013006|5.013006|
2814 sv_catpvs|5.009003|5.003007|p
2815 sv_catpvs_flags|5.013006|5.013006|
2816 sv_catpvs_mg|5.013006|5.013006|
2817 sv_catpvs_nomg|5.013006|5.013006|
2818 sv_catsv|5.003007|5.003007|
2819 sv_catsv_flags|5.007002|5.007002|
2820 sv_catsv_mg|5.004005|5.003007|p
2821 sv_catsv_nomg|5.007002|5.003007|p
2822 sv_chop|5.003007|5.003007|
2823 sv_clean_all|5.003007||Vi
2824 sv_clean_objs|5.003007||Vi
2825 sv_clear|5.003007|5.003007|
2826 sv_cmp|5.003007|5.003007|
2827 sv_cmp_flags|5.013006|5.013006|
2828 sv_cmp_locale|5.004000|5.004000|
2829 sv_cmp_locale_flags|5.013006|5.013006|
2830 sv_collxfrm|||
2831 sv_collxfrm_flags|5.013006|5.013006|
2832 SV_CONST_RETURN|5.009003|5.003007|poVu
2833 sv_copypv|5.007003|5.007003|
2834 sv_copypv_flags|5.017002|5.017002|
2835 sv_copypv_nomg|5.017002|5.017002|
2836 SV_COW_DROP_PV|5.008001|5.003007|p
2837 SV_COW_SHARED_HASH_KEYS|5.009005|5.003007|poVu
2838 SvCUR|5.003007|5.003007|
2839 SvCUR_set|5.003007|5.003007|
2840 sv_dec|5.003007|5.003007|
2841 sv_dec_nomg|5.013002|5.013002|
2842 sv_del_backref|5.006000||cViu
2843 sv_derived_from|5.004000|5.004000|
2844 sv_derived_from_pv|5.015004|5.015004|
2845 sv_derived_from_pvn|5.015004|5.015004|
2846 sv_derived_from_sv|5.015004|5.015004|
2847 sv_destroyable|5.010000|5.010000|
2848 sv_display|5.021002||Viu
2849 sv_does|5.009004|5.009004|
2850 sv_does_pv|5.015004|5.015004|
2851 sv_does_pvn|5.015004|5.015004|
2852 sv_does_sv|5.015004|5.015004|
2853 sv_dump|5.003007|5.003007|
2854 sv_dup|5.007003|5.007003|u
2855 sv_dup_common|5.013002||Viu
2856 sv_dup_inc|5.013002|5.013002|u
2857 sv_dup_inc_multiple|5.011000||Viu
2858 SvEND|5.003007|5.003007|
2859 sv_eq|5.003007|5.003007|
2860 sv_eq_flags|5.013006|5.013006|
2861 sv_exp_grow|5.009003||Viu
2862 SVf|5.006000|5.003007|poVu
2863 SVfARG|5.009005||pVu
2864 sv_force_normal|5.006000|5.006000|
2865 sv_force_normal_flags|5.007001|5.007001|
2866 sv_free2|||xciu
2867 sv_free|5.003007|5.003007|
2868 sv_free_arenas|5.003007||Vi
2869 SVf_UTF8|5.006000|5.003007|p
2870 SvGAMAGIC|5.006001|5.006001|
2871 sv_get_backrefs|5.021008|5.021008|nx
2872 SvGETMAGIC|5.004005|5.003007|p
2873 sv_gets|5.003007|5.003007|
2874 SV_GMAGIC|5.007002|5.003007|p
2875 sv_grow|5.003007|5.003007|
2876 SvGROW|5.003007|5.003007|
2877 SV_HAS_TRAILING_NUL|5.009004|5.003007|p
2878 SV_IMMEDIATE_UNREF|5.007001|5.003007|p
2879 sv_inc|5.003007|5.003007|
2880 sv_i_ncmp|5.009003||Viu
2881 sv_inc_nomg|5.013002|5.013002|
2882 sv_insert|5.003007|5.003007|
2883 sv_insert_flags|5.010001|5.010001|
2884 SvIOK|5.003007|5.003007|
2885 SvIOK_notUV|5.006000|5.006000|
2886 SvIOK_off|5.003007|5.003007|
2887 SvIOK_on|5.003007|5.003007|
2888 SvIOK_only|5.003007|5.003007|
2889 SvIOK_only_UV|5.006000|5.006000|
2890 SvIOKp|5.003007|5.003007|
2891 SvIOK_UV|5.006000|5.006000|
2892 sv_isa|5.003007|5.003007|
2893 SvIsCOW|5.008003|5.008003|
2894 SvIsCOW_shared_hash|5.008003|5.008003|
2895 sv_isobject|5.003007|5.003007|
2896 SvIV|5.003007|5.003007|
2897 sv_iv|5.005000|5.005000|d
2898 SvIV_nomg|5.009001|5.007003|p
2899 SvIV_set|5.003007|5.003007|
2900 SvIVX|5.003007|5.003007|
2901 SvIVx|5.003007|5.003007|
2902 sv_kill_backrefs|||xiu
2903 sv_len|5.003007|5.003007|
2904 SvLEN|5.003007|5.003007|
2905 SvLEN_set|5.003007|5.003007|
2906 sv_len_utf8|5.006000|5.006000|p
2907 sv_len_utf8_nomg|5.017004||pViu
2908 SvLOCK|5.007003|5.007003|
2909 sv_magic|5.003007|5.003007|
2910 sv_magicext|5.007003|5.007003|
2911 sv_magicext_mglob|5.019002||cViu
2912 sv_magic_portable||5.004000|pou
2913 SvMAGIC_set|5.009003|5.003007|p
2914 sv_mortalcopy|5.003007|5.003007|
2915 sv_mortalcopy_flags|5.017005|5.007002|p
2916 SV_MUTABLE_RETURN|5.009003|5.003007|poVu
2917 sv_ncmp|5.009003||Viu
2918 sv_newmortal|5.003007|5.003007|
2919 sv_newref|5.003007|5.003007|
2920 SvNIOK|5.003007|5.003007|
2921 SvNIOK_off|5.003007|5.003007|
2922 SvNIOKp|5.003007|5.003007|
2923 SvNOK|5.003007|5.003007|
2924 SvNOK_off|5.003007|5.003007|
2925 SvNOK_on|5.003007|5.003007|
2926 SvNOK_only|5.003007|5.003007|
2927 SvNOKp|5.003007|5.003007|
2928 sv_nolocking|5.007003|5.007003|d
2929 sv_nosharing|5.007003|5.007003|
2930 SV_NOSTEAL|5.009002|5.007003|p
2931 sv_nounlocking|5.007003|5.007003|d
2932 SvNV|5.006000|5.003007|
2933 sv_nv|5.006000|5.005000|d
2934 SvNV_nomg|5.013002|5.007003|p
2935 SvNV_set|5.006000|5.003007|
2936 SvNVX|5.006000|5.003007|
2937 SvNVx|5.006000|5.003007|
2938 SvOK|5.003007|5.003007|
2939 sv_only_taint_gmagic|5.021010||nViu
2940 SvOOK|5.003007|5.003007|
2941 SvOOK_offset|5.011000|5.011000|
2942 sv_or_pv_pos_u2b|5.019004||Viu
2943 sv_peek|5.005000|5.005000|u
2944 SvPOK|5.003007|5.003007|
2945 SvPOK_off|5.003007|5.003007|
2946 SvPOK_on|5.003007|5.003007|
2947 SvPOK_only|5.003007|5.003007|
2948 SvPOK_only_UTF8|5.006000|5.006000|
2949 SvPOKp|5.003007|5.003007|
2950 sv_pos_b2u|5.006000|5.006000|
2951 sv_pos_b2u_flags|5.019003|5.019003|
2952 sv_pos_b2u_midway|5.009004||Viu
2953 sv_pos_u2b|5.006000|5.006000|
2954 sv_pos_u2b_cached|5.009004||Viu
2955 sv_pos_u2b_flags|5.011005|5.011005|
2956 sv_pos_u2b_forwards|5.009004||nViu
2957 sv_pos_u2b_midway|5.009004||nViu
2958 SvPV|5.003007|5.003007|
2959 sv_pv|5.006000|5.006000|
2960 SvPVbyte|5.006000|5.003007|p
2961 sv_pvbyte|5.006000|5.006000|
2962 SvPVbyte_force|5.009002|5.009002|
2963 sv_pvbyten|5.006000|5.006000|d
2964 sv_pvbyten_force|5.006000|5.006000|
2965 SvPVbyte_nolen|5.006000|5.006000|
2966 SvPVbyte_nomg|5.031004|5.031004|
2967 SvPVbyte_or_null|5.031004|5.031004|
2968 SvPVbyte_or_null_nomg|5.031004|5.031004|
2969 SvPVbytex|5.006000|5.006000|
2970 SvPVbytex_force|5.006000|5.006000|
2971 SvPVCLEAR|5.025006|5.025006|
2972 SvPV_const|5.009003||pVu
2973 SvPV_flags|5.007002||pVu
2974 SvPV_flags_const|5.009003||pVu
2975 SvPV_flags_const_nolen|5.009003||pVu
2976 SvPV_flags_mutable|5.009003||pVu
2977 SvPV_force|5.003007|5.003007|p
2978 SvPV_force_flags|5.007002||pVu
2979 SvPV_force_flags_mutable|5.009003||pVu
2980 SvPV_force_flags_nolen|5.009003||pVu
2981 SvPV_force_mutable|5.009003||pVu
2982 SvPV_force_nolen|5.009003||pVu
2983 SvPV_force_nomg|5.007002|5.003007|p
2984 SvPV_force_nomg_nolen|5.009003||pVu
2985 SvPV_mutable|5.009003||pVu
2986 sv_pvn|5.005000|5.005000|d
2987 sv_pvn_force|5.003007|5.003007|
2988 sv_pvn_force_flags|5.007002|5.003007|p
2989 sv_pvn_nomg|5.007003|5.005000|pdu
2990 SvPV_nolen|5.006000|5.003007|p
2991 SvPV_nolen_const|5.009003||pVu
2992 SvPV_nomg|5.007002|5.003007|p
2993 SvPV_nomg_const|5.009003||pVu
2994 SvPV_nomg_const_nolen|5.009003||pVu
2995 SvPV_nomg_nolen|5.013007|5.003007|p
2996 SvPV_renew|5.009003||pVu
2997 SvPV_set|5.003007|5.003007|
2998 sv_pvutf8|5.006000|5.006000|
2999 SvPVutf8|5.006000|5.006000|
3000 SvPVutf8_force|5.006000|5.006000|
3001 sv_pvutf8n|5.006000|5.006000|d
3002 sv_pvutf8n_force|5.006000|5.006000|
3003 SvPVutf8_nolen|5.006000|5.006000|
3004 SvPVutf8_nomg|5.031004|5.031004|
3005 SvPVutf8_or_null|5.031004|5.031004|
3006 SvPVutf8_or_null_nomg|5.031004|5.031004|
3007 SvPVutf8x|5.006000|5.006000|
3008 SvPVutf8x_force|5.006000|5.006000|
3009 SvPVX|5.003007|5.003007|
3010 SvPVx|5.003007|5.003007|
3011 SvPVX_const|5.009003||pVu
3012 SvPVX_mutable|5.009003||pVu
3013 SvREADONLY|5.003007|5.003007|
3014 SvREADONLY_off|5.003007|5.003007|
3015 SvREADONLY_on|5.003007|5.003007|
3016 sv_recode_to_utf8|5.007003|5.007003|
3017 sv_ref|5.015004|5.015004|
3018 SvREFCNT|5.003007|5.003007|
3019 SvREFCNT_dec|5.003007|5.003007|
3020 SvREFCNT_dec_NN|5.017007|5.017007|
3021 SvREFCNT_inc|5.003007|5.003007|pn
3022 SvREFCNT_inc_NN|5.009004|5.003007|pn
3023 SvREFCNT_inc_simple|5.009004|5.003007|p
3024 SvREFCNT_inc_simple_NN|5.009004|5.003007|p
3025 SvREFCNT_inc_simple_void|5.009004|5.003007|p
3026 SvREFCNT_inc_simple_void_NN|5.009004|5.003007|p
3027 SvREFCNT_inc_void|5.009004|5.003007|pn
3028 SvREFCNT_inc_void_NN|5.009004|5.003007|p
3029 sv_reftype|5.003007|5.003007|
3030 sv_replace|5.003007|5.003007|
3031 sv_report_used|5.003007|5.003007|
3032 sv_reset|5.003007|5.003007|
3033 sv_resetpvn|5.017005||Viu
3034 SvROK|5.003007|5.003007|
3035 SvROK_off|5.003007|5.003007|
3036 SvROK_on|5.003007|5.003007|
3037 SvRV|5.003007|5.003007|
3038 SvRV_set|5.009003|5.003007|p
3039 sv_rvunweaken|5.027004|5.027004|
3040 sv_rvweaken|5.006000|5.006000|
3041 SvRX|5.009005|5.003007|p
3042 SvRXOK|5.009005|5.003007|p
3043 sv_sethek|5.015004||cViu
3044 sv_setiv|5.003007|5.003007|
3045 sv_setiv_mg|5.004005|5.003007|p
3046 SvSETMAGIC|5.003007|5.003007|
3047 SvSetMagicSV|5.004000|5.004000|
3048 SvSetMagicSV_nosteal|5.004000|5.004000|
3049 sv_setnv|5.006000|5.003007|
3050 sv_setnv_mg|5.006000|5.003007|p
3051 sv_setpv|5.003007|5.003007|
3052 sv_setpv_bufsize|5.025006|5.025006|
3053 sv_setpvf|5.006000|5.004000|v
3054 sv_setpvf_mg|5.006000|5.004000|pv
3055 sv_setpvf_mg_nocontext|5.006000||pvnVu
3056 sv_setpvf_nocontext|5.006000||vnVu
3057 sv_setpviv|5.008001|5.008001|d
3058 sv_setpviv_mg|5.008001|5.008001|d
3059 sv_setpv_mg|5.004005|5.003007|p
3060 sv_setpvn|5.003007|5.003007|
3061 sv_setpvn_mg|5.004005|5.003007|p
3062 sv_setpvs|5.009004|5.003007|p
3063 sv_setpvs_mg|5.013006|5.013006|
3064 sv_setref_iv|5.003007|5.003007|
3065 sv_setref_nv|5.006000|5.003007|
3066 sv_setref_pv|5.003007|5.003007|
3067 sv_setref_pvn|5.003007|5.003007|
3068 sv_setref_pvs|5.013006|5.013006|
3069 sv_setref_uv|5.007001|5.007001|
3070 sv_setsv|5.003007|5.003007|
3071 SvSetSV|5.003007|5.003007|
3072 sv_setsv_cow|5.009000||xcViu
3073 sv_setsv_flags|5.007002|5.007002|p
3074 sv_setsv_mg|5.004005|5.003007|p
3075 sv_setsv_nomg|5.007002|5.003007|p
3076 SvSetSV_nosteal|5.004000|5.004000|
3077 sv_set_undef|5.025008|5.025008|
3078 sv_setuv|5.004000|5.003007|p
3079 sv_setuv_mg|5.004005|5.003007|p
3080 SvSHARE|5.007003|5.007003|
3081 SvSHARED_HASH|5.009003||pVu
3082 SV_SMAGIC|5.009003|5.003007|p
3083 SvSTASH|5.003007|5.003007|
3084 SvSTASH_set|5.009003|5.003007|p
3085 SVs_TEMP|5.003007|5.003007|
3086 sv_string_from_errnum|5.027003|5.027003|
3087 SvTAINT|5.003007|5.003007|
3088 sv_taint|5.004000|5.004000|
3089 sv_tainted|5.004000|5.004000|
3090 SvTAINTED|5.004000|5.004000|
3091 SvTAINTED_off|5.004000|5.004000|
3092 SvTAINTED_on|5.004000|5.004000|
3093 SvTHINKFIRST|||i
3094 SVt_INVLIST|||c
3095 SVt_IV|5.003007|5.003007|
3096 SVt_NULL|5.003007|5.003007|
3097 SVt_NV|5.003007|5.003007|
3098 SVt_PV|5.003007|5.003007|
3099 SVt_PVAV|5.003007|5.003007|
3100 SVt_PVCV|5.003007|5.003007|
3101 SVt_PVFM|5.003007|5.003007|
3102 SVt_PVGV|5.003007|5.003007|
3103 SVt_PVHV|5.003007|5.003007|
3104 SVt_PVIO|5.003007|5.003007|
3105 SVt_PVIV|5.003007|5.003007|
3106 SVt_PVLV|5.003007|5.003007|
3107 SVt_PVMG|5.003007|5.003007|
3108 SVt_PVNV|5.003007|5.003007|
3109 SVt_REGEXP|5.011000|5.011000|
3110 SvTRUE|5.003007|5.003007|
3111 sv_true|5.005000|5.005000|
3112 SvTRUE_nomg|5.013006|5.007003|p
3113 SvTRUEx|5.003007|5.003007|
3114 SvTYPE|5.003007|5.003007|
3115 svtype|5.003007|5.003007|V
3116 sv_unglob|5.005000||Viu
3117 sv_uni_display|5.007003|5.007003|
3118 SvUNLOCK|5.007003|5.007003|
3119 sv_unmagic|5.003007|5.003007|
3120 sv_unmagicext|5.013008|5.003007|p
3121 sv_unref|5.003007|5.003007|
3122 sv_unref_flags|5.007001|5.007001|
3123 sv_untaint|5.004000|5.004000|
3124 SvUOK|5.007001|5.006000|p
3125 sv_upgrade|5.003007|5.003007|
3126 SvUPGRADE|5.003007|5.003007|
3127 sv_usepvn|5.003007|5.003007|
3128 sv_usepvn_flags|5.009004|5.009004|
3129 sv_usepvn_mg|5.004005|5.003007|p
3130 SvUTF8|5.006000|5.006000|
3131 sv_utf8_decode|5.006000|5.006000|
3132 sv_utf8_downgrade|5.006000|5.006000|
3133 sv_utf8_downgrade_flags|5.031004|5.031004|
3134 sv_utf8_downgrade_nomg|5.031004|5.031004|
3135 sv_utf8_encode|5.006000|5.006000|
3136 SV_UTF8_NO_ENCODING|5.008001|5.003007|poVu
3137 SvUTF8_off|5.006000|5.006000|
3138 SvUTF8_on|5.006000|5.006000|
3139 sv_utf8_upgrade|5.007001|5.007001|
3140 sv_utf8_upgrade_flags|5.007002|5.007002|
3141 sv_utf8_upgrade_flags_grow|5.011000|5.011000|
3142 sv_utf8_upgrade_nomg|5.007002|5.007002|
3143 SvUV|5.004000|5.003007|p
3144 sv_uv|5.005000|5.003007|pd
3145 SvUV_nomg|5.009001|5.007003|p
3146 SvUV_set|5.009003|5.003007|p
3147 SvUVX|5.004000|5.003007|p
3148 SvUVx|5.004000|5.003007|p
3149 SvUVXx|5.004000|5.003007|pd
3150 sv_vcatpvf|5.006000|5.004000|p
3151 sv_vcatpvf_mg|5.006000|5.004000|p
3152 sv_vcatpvfn|5.004000|5.004000|
3153 sv_vcatpvfn_flags|5.017002|5.017002|
3154 SvVOK|5.008001|5.008001|
3155 sv_vsetpvf|5.006000|5.004000|p
3156 sv_vsetpvf_mg|5.006000|5.004000|p
3157 sv_vsetpvfn|5.004000|5.004000|
3158 SvVSTRING_mg|5.009004||pVu
3159 swallow_bom|5.006001||Viu
3160 swash_fetch|5.006000||cViu
3161 swash_init|5.006000||cViu
3162 swash_scan_list_line|5.021001||Viu
3163 swatch_get|5.015007||Viu
3164 switch_category_locale_to_template|5.027009||Viu
3165 switch_to_global_locale|5.027009|5.003007|pn
3166 sync_locale|5.027009|5.003007|pn
3167 sys_init3|5.010000|5.010000|nu
3168 sys_init|5.010000|5.010000|nu
3169 sys_intern_clear|5.006001||Vu
3170 sys_intern_dup|5.006000||Vu
3171 sys_intern_init|5.006001||Vu
3172 sys_term|5.010000|5.010000|nu
3173 taint_env|5.003007|5.003007|u
3174 taint_proper|5.003007|5.003007|u
3175 THIS|5.003007|5.003007|V
3176 thread_locale_init|5.027009|5.027009|nxu
3177 thread_locale_term|5.027009|5.027009|nxu
3178 tied_method|5.013009||vViu
3179 tmps_grow_p|5.021005||cViu
3180 to_byte_substr|5.008000||Viu
3181 toFOLD|5.019001|5.019001|
3182 _to_fold_latin1|5.015005||ncViu
3183 toFOLD_utf8|5.019001|5.019001|
3184 toFOLD_utf8_safe|5.025009|5.025009|
3185 toFOLD_uvchr|5.023009|5.023009|
3186 tokenize_use|5.009003||Viu
3187 tokeq|5.005000||Viu
3188 tokereport|5.007001||Viu
3189 toLOWER|5.003007|5.003007|
3190 toLOWER_L1|5.019001|5.019001|
3191 to_lower_latin1|5.015005||nViu
3192 toLOWER_LC|5.004000|5.004000|
3193 toLOWER_utf8|5.015007|5.015007|
3194 toLOWER_utf8_safe|5.025009|5.025009|
3195 toLOWER_uvchr|5.023009|5.023009|
3196 too_few_arguments_pv|5.016000||Viu
3197 too_many_arguments_pv|5.016000||Viu
3198 TOPMARK|||ciu
3199 toTITLE|5.019001|5.019001|
3200 toTITLE_utf8|5.015007|5.015007|
3201 toTITLE_utf8_safe|5.025009|5.025009|
3202 toTITLE_uvchr|5.023009|5.023009|
3203 to_uni_fold|5.031004||cVu
3204 _to_uni_fold_flags|5.014000||cVu
3205 to_uni_lower|5.006000||cVu
3206 to_uni_lower_lc|5.006000||dcVu
3207 to_uni_title|5.006000||cVu
3208 to_uni_title_lc|5.006000||dcVu
3209 to_uni_upper|5.006000||cVu
3210 to_uni_upper_lc|5.006000||dcVu
3211 toUPPER|5.003007|5.003007|
3212 _to_upper_title_latin1|5.015005||Viu
3213 toUPPER_utf8|5.015007|5.015007|
3214 toUPPER_utf8_safe|5.025009|5.025009|
3215 toUPPER_uvchr|5.023009|5.023009|
3216 _to_utf8_case|5.023006||Viu
3217 to_utf8_fold|5.015007|5.015007|d
3218 _to_utf8_fold_flags|5.014000||cVu
3219 to_utf8_lower|5.015007|5.015007|d
3220 _to_utf8_lower_flags|5.015006||cVu
3221 to_utf8_substr|5.008000||Viu
3222 to_utf8_title|5.015007|5.015007|d
3223 _to_utf8_title_flags|5.015006||cVu
3224 to_utf8_upper|5.015007|5.015007|d
3225 _to_utf8_upper_flags|5.015006||cVu
3226 translate_substr_offsets|5.015006||nViu
3227 traverse_op_tree|5.029008||Vi
3228 try_amagic_bin|||ciu
3229 try_amagic_un|||ciu
3230 turkic_fc|5.029008||Viu
3231 turkic_lc|5.029008||Viu
3232 turkic_uc|5.029008||Viu
3233 U16SIZE|5.006000|5.006000|
3234 U16TYPE|5.006000|5.006000|
3235 U32SIZE|5.006000|5.006000|
3236 U32TYPE|5.006000|5.006000|
3237 U8SIZE|5.006000|5.006000|
3238 U8TYPE|5.006000|5.006000|
3239 uiv_2buf|5.009003||nViu
3240 UNDERBAR|5.009002|5.003007|p
3241 unexpected_non_continuation_text|5.025006||Viu
3242 UNICODE_REPLACEMENT|5.007001|5.003007|p
3243 UNI_TO_NATIVE|5.007001|5.007001|
3244 UNLIKELY|5.009004|5.003007|p
3245 unlnk|5.003007||Vu
3246 unpack_rec|5.008001||Viu
3247 unpack_str|5.007003|5.007003|d
3248 unpackstring|5.008001|5.008001|
3249 unreferenced_to_tmp_stack|5.013002||Viu
3250 unshare_hek|5.004000||Viu
3251 unshare_hek_or_pvn|5.008000||Viu
3252 unsharepvn|5.003007|5.003007|u
3253 unwind_handler_stack|5.009003||Viu
3254 update_debugger_info|5.009005||Viu
3255 upg_version|5.009005|5.009005|
3256 usage|5.005000||Viu
3257 utf16_textfilter|5.011001||Viu
3258 utf16_to_utf8|5.006000||cViu
3259 utf16_to_utf8_reversed|5.006000||cViu
3260 utf8_distance|5.006000|5.006000|
3261 utf8_hop|5.006000|5.006000|n
3262 utf8_hop_back|5.025007|5.025007|n
3263 utf8_hop_forward|5.025007|5.025007|n
3264 utf8_hop_safe|5.025007|5.025007|n
3265 UTF8_IS_INVARIANT|5.007001|5.003007|p
3266 UTF8_IS_NONCHAR|5.023002|5.023002|
3267 UTF8_IS_SUPER|5.023002|5.023002|
3268 UTF8_IS_SURROGATE|5.023002|5.023002|
3269 utf8_length|5.007001|5.007001|
3270 UTF8_MAXBYTES|5.009002|5.006000|p
3271 utf8_mg_len_cache_update|5.013003||Viu
3272 utf8_mg_pos_cache_update|5.009004||Viu
3273 utf8n_to_uvchr|5.007001|5.007001|n
3274 utf8n_to_uvchr_error|5.025006|5.025006|n
3275 utf8n_to_uvchr_msgs|5.027009|5.027009|nx
3276 _utf8n_to_uvchr_msgs_helper|5.029001||ncVu
3277 utf8n_to_uvuni|5.007001||cV
3278 UTF8_SAFE_SKIP|5.029009|5.006000|p
3279 UTF8SKIP|5.006000|5.006000|
3280 utf8_to_bytes|5.006001|5.006001|x
3281 utf8_to_uvchr|5.007001|5.006001|pd
3282 utf8_to_uvchr_buf|5.015009|5.006001|p
3283 utf8_to_uvchr_buf_helper|5.031004||cVu
3284 utf8_to_uvuni|5.007001||dcV
3285 utf8_to_uvuni_buf|5.015009||dcV
3286 utilize|5.003007||Viu
3287 UVCHR_IS_INVARIANT|5.019004|5.003007|p
3288 UVCHR_SKIP|5.022000|5.003007|p
3289 uvchr_to_utf8|5.007001|5.007001|
3290 uvchr_to_utf8_flags|5.007003|5.007003|
3291 uvchr_to_utf8_flags_msgs|5.027009|5.027009|x
3292 UVof|5.006000|5.003007|p
3293 uvoffuni_to_utf8_flags|||c
3294 uvoffuni_to_utf8_flags_msgs|5.027009||cVu
3295 UVSIZE|5.006000|5.003007|p
3296 UVTYPE|5.006000|5.003007|p
3297 UVuf|5.006000|5.003007|p
3298 uvuni_to_utf8|5.019004||cVu
3299 uvuni_to_utf8_flags|5.007003||cV
3300 UVxf|5.006000|5.003007|p
3301 UVXf|5.007001|5.007001|p
3302 validate_proto|5.019002||xcVi
3303 validate_suid|||iu
3304 valid_utf8_to_uvchr|5.015009||ncV
3305 valid_utf8_to_uvuni|5.015009||dcVu
3306 variant_byte_number|5.031004||ncVu
3307 variant_under_utf8_count|5.027007||nVi
3308 varname|5.009003||Viu
3309 vcmp|5.009000|5.009000|
3310 vcroak|5.006000|5.006000|
3311 vdeb|5.007003|5.007003|u
3312 vform|5.006000|5.006000|u
3313 visit|5.005000||Viu
3314 vivify_defelem|5.004000||cViu
3315 vivify_ref|5.004000||Viu
3316 vload_module|5.006000|5.003007|pu
3317 vmess|5.006000|5.004000|p
3318 vnewSVpvf|5.006000|5.004000|pu
3319 vnormal|5.009002|5.009002|
3320 vnumify|5.009000|5.009000|
3321 vstringify|5.009000|5.009000|
3322 vverify|5.009003|5.009003|
3323 vwarn|5.006000|5.006000|
3324 vwarner|5.006000|5.006000|u
3325 wait4pid|5.003007||Viu
3326 warn|5.006000|5.003007|v
3327 WARN_ALL|5.006000|5.003007|p
3328 WARN_AMBIGUOUS|5.006000|5.003007|p
3329 WARN_ASSERTIONS||5.003007|pou
3330 WARN_BAREWORD|5.006000|5.003007|p
3331 WARN_CLOSED|5.006000|5.003007|p
3332 WARN_CLOSURE|5.006000|5.003007|p
3333 WARN_DEBUGGING|5.006000|5.003007|p
3334 WARN_DEPRECATED|5.006000|5.003007|p
3335 WARN_DIGIT|5.006000|5.003007|p
3336 warner|5.006000|5.004000|pvu
3337 warner_nocontext|5.006000||vnVu
3338 WARN_EXEC|5.006000|5.003007|p
3339 WARN_EXITING|5.006000|5.003007|p
3340 WARN_EXPERIMENTAL|5.017004|5.017004|
3341 WARN_EXPERIMENTAL__ALPHA_ASSERTIONS|5.027009|5.027009|
3342 WARN_EXPERIMENTAL__BITWISE|5.021009|5.021009|
3343 WARN_EXPERIMENTAL__CONST_ATTR|5.021008|5.021008|
3344 WARN_EXPERIMENTAL__DECLARED_REFS|5.025003|5.025003|
3345 WARN_EXPERIMENTAL__LEXICAL_SUBS|5.017005|5.017005|
3346 WARN_EXPERIMENTAL__POSTDEREF|5.019005|5.019005|
3347 WARN_EXPERIMENTAL__PRIVATE_USE|5.029009|5.029009|
3348 WARN_EXPERIMENTAL__REFALIASING|5.021005|5.021005|
3349 WARN_EXPERIMENTAL__REGEX_SETS|5.017008|5.017008|
3350 WARN_EXPERIMENTAL__RE_STRICT|5.021008|5.021008|
3351 WARN_EXPERIMENTAL__SCRIPT_RUN|5.027008|5.027008|
3352 WARN_EXPERIMENTAL__SIGNATURES|5.019009|5.019009|
3353 WARN_EXPERIMENTAL__SMARTMATCH|5.017011|5.017011|
3354 WARN_EXPERIMENTAL__UNIPROP_WILDCARDS|5.029009|5.029009|
3355 WARN_EXPERIMENTAL__VLB|5.029009|5.029009|
3356 WARN_EXPERIMENTAL__WIN32_PERLIO|5.021001|5.021001|
3357 WARN_GLOB|5.006000|5.003007|p
3358 WARN_ILLEGALPROTO|5.011004|5.011004|
3359 WARN_IMPRECISION|5.011000|5.011000|
3360 WARN_INPLACE|5.006000|5.003007|p
3361 WARN_INTERNAL|5.006000|5.003007|p
3362 WARN_IO|5.006000|5.003007|p
3363 WARN_LAYER|5.008000|5.003007|p
3364 WARN_LOCALE|5.021006|5.021006|
3365 WARN_MALLOC|5.006000|5.003007|p
3366 WARN_MISC|5.006000|5.003007|p
3367 WARN_MISSING|5.021002|5.021002|
3368 WARN_NEWLINE|5.006000|5.003007|p
3369 warn_nocontext|5.006000||pvnVu
3370 WARN_NONCHAR|5.013010|5.013010|
3371 WARN_NON_UNICODE|5.013010|5.013010|
3372 WARN_NUMERIC|5.006000|5.003007|p
3373 WARN_ONCE|5.006000|5.003007|p
3374 warn_on_first_deprecated_use|5.025009||Viu
3375 WARN_OVERFLOW|5.006000|5.003007|p
3376 WARN_PACK|5.006000|5.003007|p
3377 WARN_PARENTHESIS|5.006000|5.003007|p
3378 WARN_PIPE|5.006000|5.003007|p
3379 WARN_PORTABLE|5.006000|5.003007|p
3380 WARN_PRECEDENCE|5.006000|5.003007|p
3381 WARN_PRINTF|5.006000|5.003007|p
3382 _warn_problematic_locale|5.021008||ncViu
3383 WARN_PROTOTYPE|5.006000|5.003007|p
3384 WARN_QW|5.006000|5.003007|p
3385 WARN_RECURSION|5.006000|5.003007|p
3386 WARN_REDEFINE|5.006000|5.003007|p
3387 WARN_REDUNDANT|5.021002|5.021002|
3388 WARN_REGEXP|5.006000|5.003007|p
3389 WARN_RESERVED|5.006000|5.003007|p
3390 WARN_SEMICOLON|5.006000|5.003007|p
3391 WARN_SEVERE|5.006000|5.003007|p
3392 WARN_SHADOW|5.027007|5.027007|
3393 WARN_SIGNAL|5.006000|5.003007|p
3394 WARN_SUBSTR|5.006000|5.003007|p
3395 WARN_SURROGATE|5.013010|5.013010|
3396 warn_sv|5.013001|5.003007|p
3397 WARN_SYNTAX|5.006000|5.003007|p
3398 WARN_SYSCALLS|5.019004|5.019004|
3399 WARN_TAINT|5.006000|5.003007|p
3400 WARN_THREADS|5.008000|5.003007|p
3401 WARN_UNINITIALIZED|5.006000|5.003007|p
3402 WARN_UNOPENED|5.006000|5.003007|p
3403 WARN_UNPACK|5.006000|5.003007|p
3404 WARN_UNTIE|5.006000|5.003007|p
3405 WARN_UTF8|5.006000|5.003007|p
3406 WARN_VOID|5.006000|5.003007|p
3407 was_lvalue_sub|||ciu
3408 watch|5.003007||Viu
3409 whichsig|5.003007|5.003007|u
3410 whichsig_pv|5.015004|5.015004|u
3411 whichsig_pvn|5.015004|5.015004|u
3412 whichsig_sv|5.015004|5.015004|u
3413 WIDEST_UTYPE|5.015004|5.003007|p
3414 win32_croak_not_implemented|5.017006||nViu
3415 win32_setlocale|5.027006||Viu
3416 WITH_LC_NUMERIC_SET_TO_NEEDED|5.031003|5.031003|
3417 WITH_LC_NUMERIC_SET_TO_NEEDED_IN|5.031003|5.031003|
3418 with_queued_errors|5.013001||Viu
3419 wrap_keyword_plugin|5.027006|5.027006|x
3420 wrap_op_checker|5.015008|5.015008|
3421 write_to_stderr|5.008001||Viu
3422 XCPT_CATCH|5.009002|5.003007|p
3423 XCPT_RETHROW|5.009002|5.003007|p
3424 XCPT_TRY_END|5.009002|5.003007|p
3425 XCPT_TRY_START|5.009002|5.003007|p
3426 XopDISABLE|5.013007|5.013007|V
3427 XopENABLE|5.013007|5.013007|V
3428 XopENTRY|5.013007|5.013007|V
3429 XopENTRYCUSTOM|5.019006|5.013007|V
3430 XopENTRY_set|5.013007|5.013007|V
3431 XopFLAGS|5.013007|5.013007|
3432 XPUSHi|5.003007|5.003007|
3433 XPUSHmortal|5.009002|5.003007|p
3434 XPUSHn|5.006000|5.003007|
3435 XPUSHp|5.003007|5.003007|
3436 XPUSHs|5.003007|5.003007|
3437 XPUSHu|5.004000|5.003007|p
3438 XS|5.003007|5.003007|V
3439 XS_APIVERSION_BOOTCHECK|5.013004|5.013004|
3440 xs_boot_epilog|5.021006||cViu
3441 XS_EXTERNAL|5.015002|5.015002|V
3442 xs_handshake|||vnciu
3443 XS_INTERNAL|5.015002|5.015002|V
3444 XSprePUSH|5.006000|5.003007|poVu
3445 XSPROTO|5.010000||pVu
3446 XSRETURN|5.003007|5.003007|p
3447 XSRETURN_EMPTY|5.003007|5.003007|
3448 XSRETURN_IV|5.003007|5.003007|
3449 XSRETURN_NO|5.003007|5.003007|
3450 XSRETURN_NV|5.006000|5.003007|
3451 XSRETURN_PV|5.003007|5.003007|
3452 XSRETURN_UNDEF|5.003007|5.003007|
3453 XSRETURN_UV|5.008001|5.003007|p
3454 XSRETURN_YES|5.003007|5.003007|
3455 XST_mIV|5.003007|5.003007|
3456 XST_mNO|5.003007|5.003007|
3457 XST_mNV|5.006000|5.003007|
3458 XST_mPV|5.003007|5.003007|
3459 XST_mUNDEF|5.003007|5.003007|
3460 XST_mUV|5.008001|5.003007|p
3461 XST_mYES|5.003007|5.003007|
3462 XS_VERSION|5.003007|5.003007|
3463 XS_VERSION_BOOTCHECK|5.003007|5.003007|
3464 xs_version_bootcheck|||iu
3465 yyerror|5.003007||Viu
3466 yyerror_pv|5.016000||Viu
3467 yyerror_pvn|5.016000||Viu
3468 yylex|5.003007||cViu
3469 yyparse|5.003007||Viu
3470 yyquit|5.025010||Viu
3471 yyunlex|5.013005||Viu
3472 yywarn|5.003007||Viu
3473 Zero|5.003007|5.003007|
3474 ZeroD|5.009002|5.003007|p
3475 );
3476
3477 if (exists $opt{'list-unsupported'}) {
3478 my $f;
3479 for $f (sort dictionary_order keys %API) {
3480 next if $API{$f}{core_only};
3481 next if $API{$f}{beyond_depr};
3482 next if $API{$f}{inaccessible};
3483 next if $API{$f}{experimental};
3484 next unless $API{$f}{todo};
3485 next if int_parse_version($API{$f}{todo}) <= $int_min_perl;
3486 print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
3487 }
3488 exit 0;
3489 }
3490
3491 # Scan for hints, possible replacement candidates, etc.
3492
3493 my(%replace, %need, %hints, %warnings, %depends);
3494 my $replace = 0;
3495 my($hint, $define, $function);
3496
3497 sub find_api
3498 {
3499 my $code = shift;
3500 no warnings 'uninitialized';
3501 $code =~ s{
3502 / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
3503 | "[^"\\]*(?:\\.[^"\\]*)*"
3504 | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
3505 grep { exists $API{$_} } $code =~ /(\w+)/mg;
3506 }
3507
3508 while (<DATA>) {
3509 if ($hint) {
3510
3511 # Here, we are in the middle of accumulating a hint or warning.
3512 my $end_of_hint = 0;
3513
3514 # A line containing a comment end marker closes the hint. Remove that
3515 # marker for processing below.
3516 if (s/\s*$rcce(.*?)\s*$//) {
3517 die "Nothing can follow the end of comment in '$_'\n" if length $1 > 0;
3518 $end_of_hint = 1;
3519 }
3520
3521 # Set $h to the hash of which type.
3522 my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
3523
3524 # Ignore any leading and trailing white space, and an optional star comment
3525 # continuation marker, then place the meat of the line into $1
3526 m/^\s*(?:\*\s*)?(.*?)\s*$/;
3527
3528 # Add the meat of this line to the hash value of each API element it
3529 # applies to
3530 for (@{$hint->[1]}) {
3531 $h->{$_} ||= ''; # avoid the warning older perls generate
3532 $h->{$_} .= "$1\n";
3533 }
3534
3535 # If the line had a comment close, we are through with this hint
3536 undef $hint if $end_of_hint;
3537
3538 next;
3539 }
3540
3541 # Set up $hint if this is the beginning of a Hint: or Warning:
3542 # These are from a multi-line C comment in the file, with the first line
3543 # looking like (a space has been inserted because this file can't have C
3544 # comment markers in it):
3545 # / * Warning: PL_expect, PL_copline, PL_rsfp
3546 #
3547 # $hint becomes
3548 # [
3549 # 'Warning',
3550 # [
3551 # 'PL_expect',
3552 # 'PL_copline',
3553 # 'PL_rsfp',
3554 # ],
3555 # ]
3556 if (m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}) {
3557 $hint = [$1, [split /,?\s+/, $2]];
3558 next;
3559 }
3560
3561 if ($define) { # If in the middle of a definition...
3562
3563 # append a continuation line ending with backslash.
3564 if ($define->[1] =~ /\\$/) {
3565 $define->[1] .= $_;
3566 }
3567 else { # Otherwise this line ends the definition, make foo depend on bar
3568 # (and what bar depends on) if its not one of ppp's own constructs
3569 if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
3570 my @n = find_api($define->[1]);
3571 push @{$depends{$define->[0]}}, @n if @n
3572 }
3573 undef $define;
3574 }
3575 }
3576
3577 # For '#define foo bar' or '#define foo(a,b,c) bar', $define becomes a
3578 # reference to [ foo, bar ]
3579 $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
3580
3581 if ($function) {
3582 if (/^}/) {
3583 if (exists $API{$function->[0]}) {
3584 my @n = find_api($function->[1]);
3585 push @{$depends{$function->[0]}}, @n if @n
3586 }
3587 undef $function;
3588 }
3589 else {
3590 $function->[1] .= $_;
3591 }
3592 }
3593
3594 $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
3595
3596 # Set $replace to the number given for lines that look like
3597 # / * Replace: \d+ * /
3598 # (blanks added to keep real C comments from appearing in this file)
3599 # Thus setting it to 1 starts a region where replacements are automatically
3600 # done, and setting it to 0 ends that region.
3601 $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
3602
3603 # Add bar => foo to %replace for lines like '#define foo bar in a region
3604 # where $replace is non-zero
3605 $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
3606
3607 # Add bar => foo to %replace for lines like '#define foo bar / * Replace * /
3608 # (blanks added to keep real C comments from appearing in this file)
3609 $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
3610
3611 # Add foo => bar to %replace for lines like / * Replace foo with bar * /
3612 # (blanks added to keep real C comments from appearing in this file)
3613 $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
3614
3615 # For lines like / * foo, bar depends on baz, bat * /
3616 # create a list of the elements on the rhs, and make that list apply to each
3617 # element in the lhs, which becomes a key in \%depends.
3618 # (blanks added to keep real C comments from appearing in this file)
3619 if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
3620 my @deps = map { s/\s+//g; $_ } split /,/, $3;
3621 my $d;
3622 for $d (map { s/\s+//g; $_ } split /,/, $1) {
3623 push @{$depends{$d}}, @deps;
3624 }
3625 }
3626
3627 $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
3628 }
3629
3630 for (values %depends) {
3631 my %seen;
3632 $_ = [sort dictionary_order grep !$seen{$_}++, @$_];
3633 }
3634
3635 if (exists $opt{'api-info'}) {
3636 my $f;
3637 my $count = 0;
3638 my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
3639 for $f (sort dictionary_order keys %API) {
3640 next unless $f =~ /$match/;
3641 print "\n=== $f ===\n";
3642 my $info = 0;
3643 my $base;
3644 $base = int_parse_version($API{$f}{base}) if $API{$f}{base};
3645 my $todo;
3646 $todo = int_parse_version($API{$f}{todo}) if $API{$f}{todo};
3647
3648 # Output information if it is generally publicly usable
3649 if ($base && ! $API{$f}{inaccessible} && ! $API{$f}{core_only}) {
3650 my $with_or= "";
3651 if ( $base <= $int_min_perl
3652 || ( (! $API{$f}{provided} && ! $todo)
3653 || ($todo && $todo >= $base)))
3654 {
3655 $with_or= " with or";
3656 }
3657 print "\nSupported at least since perl-",
3658 format_version($base), ",$with_or without $ppport.";
3659 if ($API{$f}{unverified}) {
3660 print "\nThis information is based on inspection of the source code",
3661 " and has not been\n",
3662 "verified by successful compilation.";
3663 }
3664 print "\n";
3665 $info++;
3666 }
3667 if ($API{$f}{provided} || $todo) {
3668 print "\nThis is only supported by $ppport, and NOT by perl versions going forward.\n" unless $base;
3669 if ($todo) {
3670 if (! $base || $todo < $base) {
3671 my $additionally = "";
3672 $additionally .= " additionally" if $base;
3673 print "$ppport$additionally provides support at least back to perl-",
3674 format_version($todo),
3675 ".\n";
3676 }
3677 }
3678 elsif (! $base || $base > $int_min_perl) {
3679 if (exists $depends{$f}) {
3680 my $max = 0;
3681 for (@{$depends{$f}}) {
3682 $max = int_parse_version($API{$_}{todo}) if $API{$_}{todo} && $API{$_}{todo} > $max;
3683 # XXX What to assume unspecified values are? This effectively makes them MIN_PERL
3684 }
3685 $todo = $max if $max;
3686 }
3687 print "\n$ppport provides support for this, but ironically, does not",
3688 " currently know,\n",
3689 "for this report, the minimum version it supports for this";
3690 if ($API{$f}{undocumented}) {
3691 print " and many things\n",
3692 "it provides that are implemented as macros and aren't",
3693 " documented. You can\n",
3694 "help by submitting a documentation patch";
3695 }
3696 print ".\n";
3697 if ($todo) {
3698 if ($todo <= $int_min_perl) {
3699 print "It may very well be supported all the way back to ",
3700 format_version(5.003_07), ".\n";
3701 }
3702 else {
3703 print "But given the things $f depends on, it's a good",
3704 " guess that it isn't\n",
3705 "supported prior to ", format_version($todo), ".\n";
3706 }
3707 }
3708 }
3709 }
3710 if ($API{$f}{provided}) {
3711 print "Support needs to be explicitly requested by #define NEED_$f\n",
3712 "(or #define NEED_${f}_GLOBAL).\n" if exists $need{$f};
3713 $info++;
3714 }
3715
3716 if ($base || ! $API{$f}{ppport_fnc}) {
3717 my $email = "Send email to perl5-porters\@perl.org if you need to have this functionality.\n";
3718 if ($API{$f}{inaccessible}) {
3719 print "\nThis is not part of the public API, and may not even be accessible to XS code.\n";
3720 $info++;
3721 }
3722 elsif ($API{$f}{core_only}) {
3723 print "\nThis is not part of the public API, and should not be used by XS code.\n";
3724 $info++;
3725 }
3726 elsif ($API{$f}{deprecated}) {
3727 print "\nThis is deprecated and should not be used. Convert existing uses.\n";
3728 $info++;
3729 }
3730 elsif ($API{$f}{experimental}) {
3731 print "\nThe API for this is unstable and should not be used by XS code.\n", $email;
3732 $info++;
3733 }
3734 elsif ($API{$f}{undocumented}) {
3735 print "\nSince this is undocumented, the API should be considered unstable.\n";
3736 if ($API{$f}{provided}) {
3737 print "Consider bringing this up on the list: perl5-porters\@perl.org.\n";
3738 }
3739 else {
3740 print "It may be that this is not intended for XS use, or it may just be\n",
3741 "that no one has gotten around to documenting it.\n", $email;
3742 }
3743 $info++;
3744 }
3745 unless ($info) {
3746 print "No portability information available. Check your spelling; or",
3747 " this could be\na bug in Devel::PPPort. To report an issue:\n",
3748 "https://github.com/Dual-Life/Devel-PPPort/issues/new\n";
3749 }
3750 }
3751
3752 print "\nDepends on: ", join(', ', @{$depends{$f}}), ".\n"
3753 if exists $depends{$f};
3754 if (exists $hints{$f} || exists $warnings{$f}) {
3755 print "\n$hints{$f}" if exists $hints{$f};
3756 print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
3757 $info++;
3758 }
3759 $count++;
3760 }
3761
3762 $count or print "\nFound no API matching '$opt{'api-info'}'.";
3763 print "\n";
3764 exit 0;
3765 }
3766
3767 if (exists $opt{'list-provided'}) {
3768 my $f;
3769 for $f (sort dictionary_order keys %API) {
3770 next unless $API{$f}{provided};
3771 my @flags;
3772 push @flags, 'explicit' if exists $need{$f};
3773 push @flags, 'depend' if exists $depends{$f};
3774 push @flags, 'hint' if exists $hints{$f};
3775 push @flags, 'warning' if exists $warnings{$f};
3776 my $flags = @flags ? ' ['.join(', ', @flags).']' : '';
3777 print "$f$flags\n";
3778 }
3779 exit 0;
3780 }
3781
3782 my @files;
3783 my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
3784 my $srcext = join '|', map { quotemeta $_ } @srcext;
3785
3786 if (@ARGV) {
3787 my %seen;
3788 for (@ARGV) {
3789 if (-e) {
3790 if (-f) {
3791 push @files, $_ unless $seen{$_}++;
3792 }
3793 else { warn "'$_' is not a file.\n" }
3794 }
3795 else {
3796 my @new = grep { -f } glob $_
3797 or warn "'$_' does not exist.\n";
3798 push @files, grep { !$seen{$_}++ } @new;
3799 }
3800 }
3801 }
3802 else {
3803 eval {
3804 require File::Find;
3805 File::Find::find(sub {
3806 $File::Find::name =~ /($srcext)$/i
3807 and push @files, $File::Find::name;
3808 }, '.');
3809 };
3810 if ($@) {
3811 @files = map { glob "*$_" } @srcext;
3812 }
3813 }
3814
3815 if (!@ARGV || $opt{filter}) {
3816 my(@in, @out);
3817 my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files;
3818 for (@files) {
3819 my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
3820 push @{ $out ? \@out : \@in }, $_;
3821 }
3822 if (@ARGV && @out) {
3823 warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
3824 }
3825 @files = @in;
3826 }
3827
3828 die "No input files given!\n" unless @files;
3829
3830 my(%files, %global, %revreplace);
3831 %revreplace = reverse %replace;
3832 my $filename;
3833 my $patch_opened = 0;
3834
3835 for $filename (@files) {
3836 unless (open IN, "<$filename") {
3837 warn "Unable to read from $filename: $!\n";
3838 next;
3839 }
3840
3841 info("Scanning $filename ...");
3842
3843 my $c = do { local $/; <IN> };
3844 close IN;
3845
3846 my %file = (orig => $c, changes => 0);
3847
3848 # Temporarily remove C/XS comments and strings from the code
3849 my @ccom;
3850
3851 $c =~ s{
3852 ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
3853 | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
3854 | ( ^$HS*\#[^\r\n]*
3855 | "[^"\\]*(?:\\.[^"\\]*)*"
3856 | '[^'\\]*(?:\\.[^'\\]*)*'
3857 | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
3858 }{ defined $2 and push @ccom, $2;
3859 defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
3860
3861 $file{ccom} = \@ccom;
3862 $file{code} = $c;
3863 $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
3864
3865 my $func;
3866
3867 for $func (keys %API) {
3868 my $match = $func;
3869 $match .= "|$revreplace{$func}" if exists $revreplace{$func};
3870 if ($c =~ /\b(?:Perl_)?($match)\b/) {
3871 $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
3872 $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
3873 if (exists $API{$func}{provided}) {
3874 $file{uses_provided}{$func}++;
3875 if ( ! exists $API{$func}{base}
3876 || int_parse_version($API{$func}{base}) > $opt{'compat-version'})
3877 {
3878 $file{uses}{$func}++;
3879 my @deps = rec_depend($func);
3880 if (@deps) {
3881 $file{uses_deps}{$func} = \@deps;
3882 for (@deps) {
3883 $file{uses}{$_} = 0 unless exists $file{uses}{$_};
3884 }
3885 }
3886 for ($func, @deps) {
3887 $file{needs}{$_} = 'static' if exists $need{$_};
3888 }
3889 }
3890 }
3891 if ( exists $API{$func}{todo}
3892 && int_parse_version($API{$func}{todo}) > $opt{'compat-version'})
3893 {
3894 if ($c =~ /\b$func\b/) {
3895 $file{uses_todo}{$func}++;
3896 }
3897 }
3898 }
3899 }
3900
3901 while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
3902 if (exists $need{$2}) {
3903 $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
3904 }
3905 else { warning("Possibly wrong #define $1 in $filename") }
3906 }
3907
3908 for (qw(uses needs uses_todo needed_global needed_static)) {
3909 for $func (keys %{$file{$_}}) {
3910 push @{$global{$_}{$func}}, $filename;
3911 }
3912 }
3913
3914 $files{$filename} = \%file;
3915 }
3916
3917 # Globally resolve NEED_'s
3918 my $need;
3919 for $need (keys %{$global{needs}}) {
3920 if (@{$global{needs}{$need}} > 1) {
3921 my @targets = @{$global{needs}{$need}};
3922 my @t = grep $files{$_}{needed_global}{$need}, @targets;
3923 @targets = @t if @t;
3924 @t = grep /\.xs$/i, @targets;
3925 @targets = @t if @t;
3926 my $target = shift @targets;
3927 $files{$target}{needs}{$need} = 'global';
3928 for (@{$global{needs}{$need}}) {
3929 $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
3930 }
3931 }
3932 }
3933
3934 for $filename (@files) {
3935 exists $files{$filename} or next;
3936
3937 info("=== Analyzing $filename ===");
3938
3939 my %file = %{$files{$filename}};
3940 my $func;
3941 my $c = $file{code};
3942 my $warnings = 0;
3943
3944 for $func (sort dictionary_order keys %{$file{uses_Perl}}) {
3945 if ($API{$func}{varargs}) {
3946 unless ($API{$func}{noTHXarg}) {
3947 my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
3948 { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
3949 if ($changes) {
3950 warning("Doesn't pass interpreter argument aTHX to Perl_$func");
3951 $file{changes} += $changes;
3952 }
3953 }
3954 }
3955 else {
3956 warning("Uses Perl_$func instead of $func");
3957 $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
3958 {$func$1(}g);
3959 }
3960 }
3961
3962 for $func (sort dictionary_order keys %{$file{uses_replace}}) {
3963 warning("Uses $func instead of $replace{$func}");
3964 $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
3965 }
3966
3967 for $func (sort dictionary_order keys %{$file{uses_provided}}) {
3968 if ($file{uses}{$func}) {
3969 if (exists $file{uses_deps}{$func}) {
3970 diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
3971 }
3972 else {
3973 diag("Uses $func");
3974 }
3975 }
3976 $warnings += hint($func);
3977 }
3978
3979 unless ($opt{quiet}) {
3980 for $func (sort dictionary_order keys %{$file{uses_todo}}) {
3981 next if int_parse_version($API{$func}{todo}) <= $int_min_perl;
3982 print "*** WARNING: Uses $func, which may not be portable below perl ",
3983 format_version($API{$func}{todo}), ", even with '$ppport'\n";
3984 $warnings++;
3985 }
3986 }
3987
3988 for $func (sort dictionary_order keys %{$file{needed_static}}) {
3989 my $message = '';
3990 if (not exists $file{uses}{$func}) {
3991 $message = "No need to define NEED_$func if $func is never used";
3992 }
3993 elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
3994 $message = "No need to define NEED_$func when already needed globally";
3995 }
3996 if ($message) {
3997 diag($message);
3998 $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
3999 }
4000 }
4001
4002 for $func (sort dictionary_order keys %{$file{needed_global}}) {
4003 my $message = '';
4004 if (not exists $global{uses}{$func}) {
4005 $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
4006 }
4007 elsif (exists $file{needs}{$func}) {
4008 if ($file{needs}{$func} eq 'extern') {
4009 $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
4010 }
4011 elsif ($file{needs}{$func} eq 'static') {
4012 $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
4013 }
4014 }
4015 if ($message) {
4016 diag($message);
4017 $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
4018 }
4019 }
4020
4021 $file{needs_inc_ppport} = keys %{$file{uses}};
4022
4023 if ($file{needs_inc_ppport}) {
4024 my $pp = '';
4025
4026 for $func (sort dictionary_order keys %{$file{needs}}) {
4027 my $type = $file{needs}{$func};
4028 next if $type eq 'extern';
4029 my $suffix = $type eq 'global' ? '_GLOBAL' : '';
4030 unless (exists $file{"needed_$type"}{$func}) {
4031 if ($type eq 'global') {
4032 diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
4033 }
4034 else {
4035 diag("File needs $func, adding static request");
4036 }
4037 $pp .= "#define NEED_$func$suffix\n";
4038 }
4039 }
4040
4041 if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
4042 $pp = '';
4043 $file{changes}++;
4044 }
4045
4046 unless ($file{has_inc_ppport}) {
4047 diag("Needs to include '$ppport'");
4048 $pp .= qq(#include "$ppport"\n)
4049 }
4050
4051 if ($pp) {
4052 $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
4053 || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
4054 || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
4055 || ($c =~ s/^/$pp/);
4056 }
4057 }
4058 else {
4059 if ($file{has_inc_ppport}) {
4060 diag("No need to include '$ppport'");
4061 $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
4062 }
4063 }
4064
4065 # put back in our C comments
4066 my $ix;
4067 my $cppc = 0;
4068 my @ccom = @{$file{ccom}};
4069 for $ix (0 .. $#ccom) {
4070 if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
4071 $cppc++;
4072 $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
4073 }
4074 else {
4075 $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
4076 }
4077 }
4078
4079 if ($cppc) {
4080 my $s = $cppc != 1 ? 's' : '';
4081 warning("Uses $cppc C++ style comment$s, which is not portable");
4082 }
4083
4084 my $s = $warnings != 1 ? 's' : '';
4085 my $warn = $warnings ? " ($warnings warning$s)" : '';
4086 info("Analysis completed$warn");
4087
4088 if ($file{changes}) {
4089 if (exists $opt{copy}) {
4090 my $newfile = "$filename$opt{copy}";
4091 if (-e $newfile) {
4092 error("'$newfile' already exists, refusing to write copy of '$filename'");
4093 }
4094 else {
4095 local *F;
4096 if (open F, ">$newfile") {
4097 info("Writing copy of '$filename' with changes to '$newfile'");
4098 print F $c;
4099 close F;
4100 }
4101 else {
4102 error("Cannot open '$newfile' for writing: $!");
4103 }
4104 }
4105 }
4106 elsif (exists $opt{patch} || $opt{changes}) {
4107 if (exists $opt{patch}) {
4108 unless ($patch_opened) {
4109 if (open PATCH, ">$opt{patch}") {
4110 $patch_opened = 1;
4111 }
4112 else {
4113 error("Cannot open '$opt{patch}' for writing: $!");
4114 delete $opt{patch};
4115 $opt{changes} = 1;
4116 goto fallback;
4117 }
4118 }
4119 mydiff(\*PATCH, $filename, $c);
4120 }
4121 else {
4122 fallback:
4123 info("Suggested changes:");
4124 mydiff(\*STDOUT, $filename, $c);
4125 }
4126 }
4127 else {
4128 my $s = $file{changes} == 1 ? '' : 's';
4129 info("$file{changes} potentially required change$s detected");
4130 }
4131 }
4132 else {
4133 info("Looks good");
4134 }
4135 }
4136
4137 close PATCH if $patch_opened;
4138
4139 exit 0;
4140
4141
4142 sub try_use { eval "use @_;"; return $@ eq '' }
4143
4144 sub mydiff
4145 {
4146 local *F = shift;
4147 my($file, $str) = @_;
4148 my $diff;
4149
4150 if (exists $opt{diff}) {
4151 $diff = run_diff($opt{diff}, $file, $str);
4152 }
4153
4154 if (!defined $diff and try_use('Text::Diff')) {
4155 $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
4156 $diff = <<HEADER . $diff;
4157 --- $file
4158 +++ $file.patched
4159 HEADER
4160 }
4161
4162 if (!defined $diff) {
4163 $diff = run_diff('diff -u', $file, $str);
4164 }
4165
4166 if (!defined $diff) {
4167 $diff = run_diff('diff', $file, $str);
4168 }
4169
4170 if (!defined $diff) {
4171 error("Cannot generate a diff. Please install Text::Diff or use --copy.");
4172 return;
4173 }
4174
4175 print F $diff;
4176 }
4177
4178 sub run_diff
4179 {
4180 my($prog, $file, $str) = @_;
4181 my $tmp = 'dppptemp';
4182 my $suf = 'aaa';
4183 my $diff = '';
4184 local *F;
4185
4186 while (-e "$tmp.$suf") { $suf++ }
4187 $tmp = "$tmp.$suf";
4188
4189 if (open F, ">$tmp") {
4190 print F $str;
4191 close F;
4192
4193 if (open F, "$prog $file $tmp |") {
4194 while (<F>) {
4195 s/\Q$tmp\E/$file.patched/;
4196 $diff .= $_;
4197 }
4198 close F;
4199 unlink $tmp;
4200 return $diff;
4201 }
4202
4203 unlink $tmp;
4204 }
4205 else {
4206 error("Cannot open '$tmp' for writing: $!");
4207 }
4208
4209 return undef;
4210 }
4211
4212 sub rec_depend
4213 {
4214 my($func, $seen) = @_;
4215 return () unless exists $depends{$func};
4216 $seen = {%{$seen||{}}};
4217 return () if $seen->{$func}++;
4218 my %s;
4219 grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
4220 }
4221
4222 sub info
4223 {
4224 $opt{quiet} and return;
4225 print @_, "\n";
4226 }
4227
4228 sub diag
4229 {
4230 $opt{quiet} and return;
4231 $opt{diag} and print @_, "\n";
4232 }
4233
4234 sub warning
4235 {
4236 $opt{quiet} and return;
4237 print "*** ", @_, "\n";
4238 }
4239
4240 sub error
4241 {
4242 print "*** ERROR: ", @_, "\n";
4243 }
4244
4245 my %given_hints;
4246 my %given_warnings;
4247 sub hint
4248 {
4249 $opt{quiet} and return;
4250 my $func = shift;
4251 my $rv = 0;
4252 if (exists $warnings{$func} && !$given_warnings{$func}++) {
4253 my $warn = $warnings{$func};
4254 $warn =~ s!^!*** !mg;
4255 print "*** WARNING: $func\n", $warn;
4256 $rv++;
4257 }
4258 if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
4259 my $hint = $hints{$func};
4260 $hint =~ s/^/ /mg;
4261 print " --- hint for $func ---\n", $hint;
4262 }
4263 $rv;
4264 }
4265
4266 sub usage
4267 {
4268 my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
4269 my %M = ( 'I' => '*' );
4270 $usage =~ s/^\s*perl\s+\S+/$^X $0/;
4271 $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
4272
4273 print <<ENDUSAGE;
4274
4275 Usage: $usage
4276
4277 See perldoc $0 for details.
4278
4279 ENDUSAGE
4280
4281 exit 2;
4282 }
4283
4284 sub strip
4285 {
4286 my $self = do { local(@ARGV,$/)=($0); <> };
4287 my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
4288 $copy =~ s/^(?=\S+)/ /gms;
4289 $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
4290 $self =~ s/^SKIP.*(?=^__DATA__)/SKIP
4291 if (\@ARGV && \$ARGV[0] eq '--unstrip') {
4292 eval { require Devel::PPPort };
4293 \$@ and die "Cannot require Devel::PPPort, please install.\\n";
4294 if (eval \$Devel::PPPort::VERSION < $VERSION) {
4295 die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
4296 . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
4297 . "Please install a newer version, or --unstrip will not work.\\n";
4298 }
4299 Devel::PPPort::WriteFile(\$0);
4300 exit 0;
4301 }
4302 print <<END;
4303
4304 Sorry, but this is a stripped version of \$0.
4305
4306 To be able to use its original script and doc functionality,
4307 please try to regenerate this file using:
4308
4309 \$^X \$0 --unstrip
4310
4311 END
4312 /ms;
4313 my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
4314 $c =~ s{
4315 / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
4316 | ( "[^"\\]*(?:\\.[^"\\]*)*"
4317 | '[^'\\]*(?:\\.[^'\\]*)*' )
4318 | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
4319 $c =~ s!\s+$!!mg;
4320 $c =~ s!^$LF!!mg;
4321 $c =~ s!^\s*#\s*!#!mg;
4322 $c =~ s!^\s+!!mg;
4323
4324 open OUT, ">$0" or die "cannot strip $0: $!\n";
4325 print OUT "$pl$c\n";
4326
4327 exit 0;
4328 }
4329
4330 __DATA__
4331 */
4332
4333 #ifndef _P_P_PORTABILITY_H_
4334 #define _P_P_PORTABILITY_H_
4335
4336 #ifndef DPPP_NAMESPACE
4337 # define DPPP_NAMESPACE DPPP_
4338 #endif
4339
4340 #define DPPP_CAT2(x,y) CAT2(x,y)
4341 #define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
4342
4343 #ifndef PERL_REVISION
4344 # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
4345 # define PERL_PATCHLEVEL_H_IMPLICIT
4346 # include <patchlevel.h>
4347 # endif
4348 # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
4349 # include <could_not_find_Perl_patchlevel.h>
4350 # endif
4351 # ifndef PERL_REVISION
4352 # define PERL_REVISION (5)
4353 /* Replace: 1 */
4354 # define PERL_VERSION PATCHLEVEL
4355 # define PERL_SUBVERSION SUBVERSION
4356 /* Replace PERL_PATCHLEVEL with PERL_VERSION */
4357 /* Replace: 0 */
4358 # endif
4359 #endif
4360
4361 #define D_PPP_DEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
4362 #define PERL_BCDVERSION ((D_PPP_DEC2BCD(PERL_REVISION)<<24)|(D_PPP_DEC2BCD(PERL_VERSION)<<12)|D_PPP_DEC2BCD(PERL_SUBVERSION))
4363
4364 /* It is very unlikely that anyone will try to use this with Perl 6
4365 (or greater), but who knows.
4366 */
4367 #if PERL_REVISION != 5
4368 # error ppport.h only works with Perl version 5
4369 #endif /* PERL_REVISION != 5 */
4370 #ifndef dTHR
4371 # define dTHR dNOOP
4372 #endif
4373 #ifndef dTHX
4374 # define dTHX dNOOP
4375 #endif
4376
4377 /* Hint: dTHX
4378
4379 For pre-5.6.0 thread compatibility, instead use dTHXR, available only through
4380 ppport.h */
4381 #ifndef dTHXa
4382 # define dTHXa(x) dNOOP
4383 #endif
4384 #ifndef pTHX
4385 # define pTHX void
4386 #endif
4387
4388 #ifndef pTHX_
4389 # define pTHX_
4390 #endif
4391
4392 #ifndef aTHX
4393 # define aTHX
4394 #endif
4395
4396 /* Hint: aTHX
4397
4398 For pre-5.6.0 thread compatibility, instead use aTHXR, available only through
4399 ppport.h */
4400 #ifndef aTHX_
4401 # define aTHX_
4402 #endif
4403
4404 /* Hint: aTHX_
4405
4406 For pre-5.6.0 thread compatibility, instead use aTHXR_, available only
4407 through ppport.h */
4408
4409 #if (PERL_BCDVERSION < 0x5006000)
4410 # ifdef USE_THREADS
4411 # define aTHXR thr
4412 # define aTHXR_ thr,
4413 # else
4414 # define aTHXR
4415 # define aTHXR_
4416 # endif
4417 # define dTHXR dTHR
4418 #else
4419 # define aTHXR aTHX
4420 # define aTHXR_ aTHX_
4421 # define dTHXR dTHX
4422 #endif
4423 #ifndef dTHXoa
4424 # define dTHXoa(x) dTHXa(x)
4425 #endif
4426
4427 #ifdef I_LIMITS
4428 # include <limits.h>
4429 #endif
4430
4431 #ifndef PERL_UCHAR_MIN
4432 # define PERL_UCHAR_MIN ((unsigned char)0)
4433 #endif
4434
4435 #ifndef PERL_UCHAR_MAX
4436 # ifdef UCHAR_MAX
4437 # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
4438 # else
4439 # ifdef MAXUCHAR
4440 # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
4441 # else
4442 # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
4443 # endif
4444 # endif
4445 #endif
4446
4447 #ifndef PERL_USHORT_MIN
4448 # define PERL_USHORT_MIN ((unsigned short)0)
4449 #endif
4450
4451 #ifndef PERL_USHORT_MAX
4452 # ifdef USHORT_MAX
4453 # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
4454 # else
4455 # ifdef MAXUSHORT
4456 # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
4457 # else
4458 # ifdef USHRT_MAX
4459 # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
4460 # else
4461 # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
4462 # endif
4463 # endif
4464 # endif
4465 #endif
4466
4467 #ifndef PERL_SHORT_MAX
4468 # ifdef SHORT_MAX
4469 # define PERL_SHORT_MAX ((short)SHORT_MAX)
4470 # else
4471 # ifdef MAXSHORT /* Often used in <values.h> */
4472 # define PERL_SHORT_MAX ((short)MAXSHORT)
4473 # else
4474 # ifdef SHRT_MAX
4475 # define PERL_SHORT_MAX ((short)SHRT_MAX)
4476 # else
4477 # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
4478 # endif
4479 # endif
4480 # endif
4481 #endif
4482
4483 #ifndef PERL_SHORT_MIN
4484 # ifdef SHORT_MIN
4485 # define PERL_SHORT_MIN ((short)SHORT_MIN)
4486 # else
4487 # ifdef MINSHORT
4488 # define PERL_SHORT_MIN ((short)MINSHORT)
4489 # else
4490 # ifdef SHRT_MIN
4491 # define PERL_SHORT_MIN ((short)SHRT_MIN)
4492 # else
4493 # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
4494 # endif
4495 # endif
4496 # endif
4497 #endif
4498
4499 #ifndef PERL_UINT_MAX
4500 # ifdef UINT_MAX
4501 # define PERL_UINT_MAX ((unsigned int)UINT_MAX)
4502 # else
4503 # ifdef MAXUINT
4504 # define PERL_UINT_MAX ((unsigned int)MAXUINT)
4505 # else
4506 # define PERL_UINT_MAX (~(unsigned int)0)
4507 # endif
4508 # endif
4509 #endif
4510
4511 #ifndef PERL_UINT_MIN
4512 # define PERL_UINT_MIN ((unsigned int)0)
4513 #endif
4514
4515 #ifndef PERL_INT_MAX
4516 # ifdef INT_MAX
4517 # define PERL_INT_MAX ((int)INT_MAX)
4518 # else
4519 # ifdef MAXINT /* Often used in <values.h> */
4520 # define PERL_INT_MAX ((int)MAXINT)
4521 # else
4522 # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
4523 # endif
4524 # endif
4525 #endif
4526
4527 #ifndef PERL_INT_MIN
4528 # ifdef INT_MIN
4529 # define PERL_INT_MIN ((int)INT_MIN)
4530 # else
4531 # ifdef MININT
4532 # define PERL_INT_MIN ((int)MININT)
4533 # else
4534 # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
4535 # endif
4536 # endif
4537 #endif
4538
4539 #ifndef PERL_ULONG_MAX
4540 # ifdef ULONG_MAX
4541 # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
4542 # else
4543 # ifdef MAXULONG
4544 # define PERL_ULONG_MAX ((unsigned long)MAXULONG)
4545 # else
4546 # define PERL_ULONG_MAX (~(unsigned long)0)
4547 # endif
4548 # endif
4549 #endif
4550
4551 #ifndef PERL_ULONG_MIN
4552 # define PERL_ULONG_MIN ((unsigned long)0L)
4553 #endif
4554
4555 #ifndef PERL_LONG_MAX
4556 # ifdef LONG_MAX
4557 # define PERL_LONG_MAX ((long)LONG_MAX)
4558 # else
4559 # ifdef MAXLONG
4560 # define PERL_LONG_MAX ((long)MAXLONG)
4561 # else
4562 # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
4563 # endif
4564 # endif
4565 #endif
4566
4567 #ifndef PERL_LONG_MIN
4568 # ifdef LONG_MIN
4569 # define PERL_LONG_MIN ((long)LONG_MIN)
4570 # else
4571 # ifdef MINLONG
4572 # define PERL_LONG_MIN ((long)MINLONG)
4573 # else
4574 # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
4575 # endif
4576 # endif
4577 #endif
4578
4579 #if defined(HAS_QUAD) && (defined(convex) || defined(uts))
4580 # ifndef PERL_UQUAD_MAX
4581 # ifdef ULONGLONG_MAX
4582 # define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX)
4583 # else
4584 # ifdef MAXULONGLONG
4585 # define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG)
4586 # else
4587 # define PERL_UQUAD_MAX (~(unsigned long long)0)
4588 # endif
4589 # endif
4590 # endif
4591
4592 # ifndef PERL_UQUAD_MIN
4593 # define PERL_UQUAD_MIN ((unsigned long long)0L)
4594 # endif
4595
4596 # ifndef PERL_QUAD_MAX
4597 # ifdef LONGLONG_MAX
4598 # define PERL_QUAD_MAX ((long long)LONGLONG_MAX)
4599 # else
4600 # ifdef MAXLONGLONG
4601 # define PERL_QUAD_MAX ((long long)MAXLONGLONG)
4602 # else
4603 # define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1))
4604 # endif
4605 # endif
4606 # endif
4607
4608 # ifndef PERL_QUAD_MIN
4609 # ifdef LONGLONG_MIN
4610 # define PERL_QUAD_MIN ((long long)LONGLONG_MIN)
4611 # else
4612 # ifdef MINLONGLONG
4613 # define PERL_QUAD_MIN ((long long)MINLONGLONG)
4614 # else
4615 # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
4616 # endif
4617 # endif
4618 # endif
4619 #endif
4620
4621 /* This is based on code from 5.003 perl.h */
4622 #ifdef HAS_QUAD
4623 # ifdef cray
4624 #ifndef IVTYPE
4625 # define IVTYPE int
4626 #endif
4627
4628 #ifndef IV_MIN
4629 # define IV_MIN PERL_INT_MIN
4630 #endif
4631
4632 #ifndef IV_MAX
4633 # define IV_MAX PERL_INT_MAX
4634 #endif
4635
4636 #ifndef UV_MIN
4637 # define UV_MIN PERL_UINT_MIN
4638 #endif
4639
4640 #ifndef UV_MAX
4641 # define UV_MAX PERL_UINT_MAX
4642 #endif
4643
4644 # ifdef INTSIZE
4645 #ifndef IVSIZE
4646 # define IVSIZE INTSIZE
4647 #endif
4648
4649 # endif
4650 # else
4651 # if defined(convex) || defined(uts)
4652 #ifndef IVTYPE
4653 # define IVTYPE long long
4654 #endif
4655
4656 #ifndef IV_MIN
4657 # define IV_MIN PERL_QUAD_MIN
4658 #endif
4659
4660 #ifndef IV_MAX
4661 # define IV_MAX PERL_QUAD_MAX
4662 #endif
4663
4664 #ifndef UV_MIN
4665 # define UV_MIN PERL_UQUAD_MIN
4666 #endif
4667
4668 #ifndef UV_MAX
4669 # define UV_MAX PERL_UQUAD_MAX
4670 #endif
4671
4672 # ifdef LONGLONGSIZE
4673 #ifndef IVSIZE
4674 # define IVSIZE LONGLONGSIZE
4675 #endif
4676
4677 # endif
4678 # else
4679 #ifndef IVTYPE
4680 # define IVTYPE long
4681 #endif
4682
4683 #ifndef IV_MIN
4684 # define IV_MIN PERL_LONG_MIN
4685 #endif
4686
4687 #ifndef IV_MAX
4688 # define IV_MAX PERL_LONG_MAX
4689 #endif
4690
4691 #ifndef UV_MIN
4692 # define UV_MIN PERL_ULONG_MIN
4693 #endif
4694
4695 #ifndef UV_MAX
4696 # define UV_MAX PERL_ULONG_MAX
4697 #endif
4698
4699 # ifdef LONGSIZE
4700 #ifndef IVSIZE
4701 # define IVSIZE LONGSIZE
4702 #endif
4703
4704 # endif
4705 # endif
4706 # endif
4707 #ifndef IVSIZE
4708 # define IVSIZE 8
4709 #endif
4710
4711 #ifndef LONGSIZE
4712 # define LONGSIZE 8
4713 #endif
4714
4715 #ifndef PERL_QUAD_MIN
4716 # define PERL_QUAD_MIN IV_MIN
4717 #endif
4718
4719 #ifndef PERL_QUAD_MAX
4720 # define PERL_QUAD_MAX IV_MAX
4721 #endif
4722
4723 #ifndef PERL_UQUAD_MIN
4724 # define PERL_UQUAD_MIN UV_MIN
4725 #endif
4726
4727 #ifndef PERL_UQUAD_MAX
4728 # define PERL_UQUAD_MAX UV_MAX
4729 #endif
4730
4731 #else
4732 #ifndef IVTYPE
4733 # define IVTYPE long
4734 #endif
4735
4736 #ifndef LONGSIZE
4737 # define LONGSIZE 4
4738 #endif
4739
4740 #ifndef IV_MIN
4741 # define IV_MIN PERL_LONG_MIN
4742 #endif
4743
4744 #ifndef IV_MAX
4745 # define IV_MAX PERL_LONG_MAX
4746 #endif
4747
4748 #ifndef UV_MIN
4749 # define UV_MIN PERL_ULONG_MIN
4750 #endif
4751
4752 #ifndef UV_MAX
4753 # define UV_MAX PERL_ULONG_MAX
4754 #endif
4755
4756 #endif
4757
4758 #ifndef IVSIZE
4759 # ifdef LONGSIZE
4760 # define IVSIZE LONGSIZE
4761 # else
4762 # define IVSIZE 4 /* A bold guess, but the best we can make. */
4763 # endif
4764 #endif
4765 #ifndef UVTYPE
4766 # define UVTYPE unsigned IVTYPE
4767 #endif
4768
4769 #ifndef UVSIZE
4770 # define UVSIZE IVSIZE
4771 #endif
4772
4773 #ifndef PERL_SIGNALS_UNSAFE_FLAG
4774
4775 #define PERL_SIGNALS_UNSAFE_FLAG 0x0001
4776
4777 #if (PERL_BCDVERSION < 0x5008000)
4778 # define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG
4779 #else
4780 # define D_PPP_PERL_SIGNALS_INIT 0
4781 #endif
4782
4783 #if defined(NEED_PL_signals)
4784 static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
4785 #elif defined(NEED_PL_signals_GLOBAL)
4786 U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
4787 #else
4788 extern U32 DPPP_(my_PL_signals);
4789 #endif
4790 #define PL_signals DPPP_(my_PL_signals)
4791
4792 #endif
4793
4794 /* Hint: PL_ppaddr
4795 * Calling an op via PL_ppaddr requires passing a context argument
4796 * for threaded builds. Since the context argument is different for
4797 * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will
4798 * automatically be defined as the correct argument.
4799 */
4800
4801 #if (PERL_BCDVERSION <= 0x5005005)
4802 /* Replace: 1 */
4803 # define PL_ppaddr ppaddr
4804 # define PL_no_modify no_modify
4805 /* Replace: 0 */
4806 #endif
4807
4808 #if (PERL_BCDVERSION <= 0x5004005)
4809 /* Replace: 1 */
4810 # define PL_DBsignal DBsignal
4811 # define PL_DBsingle DBsingle
4812 # define PL_DBsub DBsub
4813 # define PL_DBtrace DBtrace
4814 # define PL_Sv Sv
4815 # define PL_bufend bufend
4816 # define PL_bufptr bufptr
4817 # define PL_compiling compiling
4818 # define PL_copline copline
4819 # define PL_curcop curcop
4820 # define PL_curstash curstash
4821 # define PL_debstash debstash
4822 # define PL_defgv defgv
4823 # define PL_diehook diehook
4824 # define PL_dirty dirty
4825 # define PL_dowarn dowarn
4826 # define PL_errgv errgv
4827 # define PL_error_count error_count
4828 # define PL_expect expect
4829 # define PL_hexdigit hexdigit
4830 # define PL_hints hints
4831 # define PL_in_my in_my
4832 # define PL_laststatval laststatval
4833 # define PL_lex_state lex_state
4834 # define PL_lex_stuff lex_stuff
4835 # define PL_linestr linestr
4836 # define PL_na na
4837 # define PL_perl_destruct_level perl_destruct_level
4838 # define PL_perldb perldb
4839 # define PL_rsfp_filters rsfp_filters
4840 # define PL_rsfp rsfp
4841 # define PL_stack_base stack_base
4842 # define PL_stack_sp stack_sp
4843 # define PL_statcache statcache
4844 # define PL_stdingv stdingv
4845 # define PL_sv_arenaroot sv_arenaroot
4846 # define PL_sv_no sv_no
4847 # define PL_sv_undef sv_undef
4848 # define PL_sv_yes sv_yes
4849 # define PL_tainted tainted
4850 # define PL_tainting tainting
4851 # define PL_tokenbuf tokenbuf
4852 # define PL_mess_sv mess_sv
4853 /* Replace: 0 */
4854 #endif
4855
4856 /* Warning: PL_parser
4857 * For perl versions earlier than 5.9.5, this is an always
4858 * non-NULL dummy. Also, it cannot be dereferenced. Don't
4859 * use it if you can avoid it, and unless you absolutely know
4860 * what you're doing.
4861 * If you always check that PL_parser is non-NULL, you can
4862 * define DPPP_PL_parser_NO_DUMMY to avoid the creation of
4863 * a dummy parser structure.
4864 */
4865
4866 #if (PERL_BCDVERSION >= 0x5009005)
4867 # ifdef DPPP_PL_parser_NO_DUMMY
4868 # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
4869 (croak("panic: PL_parser == NULL in %s:%d", \
4870 __FILE__, __LINE__), (yy_parser *) NULL))->var)
4871 # else
4872 # ifdef DPPP_PL_parser_NO_DUMMY_WARNING
4873 # define D_PPP_parser_dummy_warning(var)
4874 # else
4875 # define D_PPP_parser_dummy_warning(var) \
4876 warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__),
4877 # endif
4878 # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
4879 (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var)
4880 #if defined(NEED_PL_parser)
4881 static yy_parser DPPP_(dummy_PL_parser);
4882 #elif defined(NEED_PL_parser_GLOBAL)
4883 yy_parser DPPP_(dummy_PL_parser);
4884 #else
4885 extern yy_parser DPPP_(dummy_PL_parser);
4886 #endif
4887
4888 # endif
4889
4890 /* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */
4891 /* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf
4892 * Do not use this variable unless you know exactly what you're
4893 * doing. It is internal to the perl parser and may change or even
4894 * be removed in the future. As of perl 5.9.5, you have to check
4895 * for (PL_parser != NULL) for this variable to have any effect.
4896 * An always non-NULL PL_parser dummy is provided for earlier
4897 * perl versions.
4898 * If PL_parser is NULL when you try to access this variable, a
4899 * dummy is being accessed instead and a warning is issued unless
4900 * you define DPPP_PL_parser_NO_DUMMY_WARNING.
4901 * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access
4902 * this variable will croak with a panic message.
4903 */
4904
4905 # define PL_expect D_PPP_my_PL_parser_var(expect)
4906 # define PL_copline D_PPP_my_PL_parser_var(copline)
4907 # define PL_rsfp D_PPP_my_PL_parser_var(rsfp)
4908 # define PL_rsfp_filters D_PPP_my_PL_parser_var(rsfp_filters)
4909 # define PL_linestr D_PPP_my_PL_parser_var(linestr)
4910 # define PL_bufptr D_PPP_my_PL_parser_var(bufptr)
4911 # define PL_bufend D_PPP_my_PL_parser_var(bufend)
4912 # define PL_lex_state D_PPP_my_PL_parser_var(lex_state)
4913 # define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff)
4914 # define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf)
4915 # define PL_in_my D_PPP_my_PL_parser_var(in_my)
4916 # define PL_in_my_stash D_PPP_my_PL_parser_var(in_my_stash)
4917 # define PL_error_count D_PPP_my_PL_parser_var(error_count)
4918
4919
4920 #else
4921
4922 /* ensure that PL_parser != NULL and cannot be dereferenced */
4923 # define PL_parser ((void *) 1)
4924
4925 #endif
4926
4927 #if (PERL_BCDVERSION <= 0x5003022)
4928 # undef start_subparse
4929 # if (PERL_BCDVERSION < 0x5003022)
4930 #ifndef start_subparse
4931 # define start_subparse(a, b) Perl_start_subparse()
4932 #endif
4933
4934 # else
4935 #ifndef start_subparse
4936 # define start_subparse(a, b) Perl_start_subparse(b)
4937 #endif
4938
4939 # endif
4940
4941 #if (PERL_BCDVERSION < 0x5003007)
4942 foo
4943 #endif
4944 #endif
4945
4946 /* Hint: newCONSTSUB
4947 * Returns a CV* as of perl-5.7.1. This return value is not supported
4948 * by Devel::PPPort.
4949 */
4950
4951 /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
4952 #if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005)
4953
4954 /* And before that, we need to make sure this gets compiled for the functions
4955 * that rely on it */
4956 #define NEED_newCONSTSUB
4957
4958 #if defined(NEED_newCONSTSUB)
4959 static void DPPP_(my_newCONSTSUB)(HV * stash, const char * name, SV * sv);
4960 static
4961 #else
4962 extern void DPPP_(my_newCONSTSUB)(HV * stash, const char * name, SV * sv);
4963 #endif
4964
4965 #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
4966
4967 #ifdef newCONSTSUB
4968 # undef newCONSTSUB
4969 #endif
4970 #define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c)
4971 #define Perl_newCONSTSUB DPPP_(my_newCONSTSUB)
4972
4973
4974 /* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */
4975 /* (There's no PL_parser in perl < 5.005, so this is completely safe) */
4976 #define D_PPP_PL_copline PL_copline
4977
4978 void
DPPP_(my_newCONSTSUB)4979 DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv)
4980 {
4981 U32 oldhints = PL_hints;
4982 HV *old_cop_stash = PL_curcop->cop_stash;
4983 HV *old_curstash = PL_curstash;
4984 line_t oldline = PL_curcop->cop_line;
4985 PL_curcop->cop_line = D_PPP_PL_copline;
4986
4987 PL_hints &= ~HINT_BLOCK_SCOPE;
4988 if (stash)
4989 PL_curstash = PL_curcop->cop_stash = stash;
4990
4991 newSUB(
4992
4993 start_subparse(FALSE, 0),
4994
4995 newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)),
4996 newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */
4997 newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
4998 );
4999
5000 PL_hints = oldhints;
5001 PL_curcop->cop_stash = old_cop_stash;
5002 PL_curstash = old_curstash;
5003 PL_curcop->cop_line = oldline;
5004 }
5005 #endif
5006 #endif
5007 #ifndef PERL_MAGIC_sv
5008 # define PERL_MAGIC_sv '\0'
5009 #endif
5010
5011 #ifndef PERL_MAGIC_overload
5012 # define PERL_MAGIC_overload 'A'
5013 #endif
5014
5015 #ifndef PERL_MAGIC_overload_elem
5016 # define PERL_MAGIC_overload_elem 'a'
5017 #endif
5018
5019 #ifndef PERL_MAGIC_overload_table
5020 # define PERL_MAGIC_overload_table 'c'
5021 #endif
5022
5023 #ifndef PERL_MAGIC_bm
5024 # define PERL_MAGIC_bm 'B'
5025 #endif
5026
5027 #ifndef PERL_MAGIC_regdata
5028 # define PERL_MAGIC_regdata 'D'
5029 #endif
5030
5031 #ifndef PERL_MAGIC_regdatum
5032 # define PERL_MAGIC_regdatum 'd'
5033 #endif
5034
5035 #ifndef PERL_MAGIC_env
5036 # define PERL_MAGIC_env 'E'
5037 #endif
5038
5039 #ifndef PERL_MAGIC_envelem
5040 # define PERL_MAGIC_envelem 'e'
5041 #endif
5042
5043 #ifndef PERL_MAGIC_fm
5044 # define PERL_MAGIC_fm 'f'
5045 #endif
5046
5047 #ifndef PERL_MAGIC_regex_global
5048 # define PERL_MAGIC_regex_global 'g'
5049 #endif
5050
5051 #ifndef PERL_MAGIC_isa
5052 # define PERL_MAGIC_isa 'I'
5053 #endif
5054
5055 #ifndef PERL_MAGIC_isaelem
5056 # define PERL_MAGIC_isaelem 'i'
5057 #endif
5058
5059 #ifndef PERL_MAGIC_nkeys
5060 # define PERL_MAGIC_nkeys 'k'
5061 #endif
5062
5063 #ifndef PERL_MAGIC_dbfile
5064 # define PERL_MAGIC_dbfile 'L'
5065 #endif
5066
5067 #ifndef PERL_MAGIC_dbline
5068 # define PERL_MAGIC_dbline 'l'
5069 #endif
5070
5071 #ifndef PERL_MAGIC_mutex
5072 # define PERL_MAGIC_mutex 'm'
5073 #endif
5074
5075 #ifndef PERL_MAGIC_shared
5076 # define PERL_MAGIC_shared 'N'
5077 #endif
5078
5079 #ifndef PERL_MAGIC_shared_scalar
5080 # define PERL_MAGIC_shared_scalar 'n'
5081 #endif
5082
5083 #ifndef PERL_MAGIC_collxfrm
5084 # define PERL_MAGIC_collxfrm 'o'
5085 #endif
5086
5087 #ifndef PERL_MAGIC_tied
5088 # define PERL_MAGIC_tied 'P'
5089 #endif
5090
5091 #ifndef PERL_MAGIC_tiedelem
5092 # define PERL_MAGIC_tiedelem 'p'
5093 #endif
5094
5095 #ifndef PERL_MAGIC_tiedscalar
5096 # define PERL_MAGIC_tiedscalar 'q'
5097 #endif
5098
5099 #ifndef PERL_MAGIC_qr
5100 # define PERL_MAGIC_qr 'r'
5101 #endif
5102
5103 #ifndef PERL_MAGIC_sig
5104 # define PERL_MAGIC_sig 'S'
5105 #endif
5106
5107 #ifndef PERL_MAGIC_sigelem
5108 # define PERL_MAGIC_sigelem 's'
5109 #endif
5110
5111 #ifndef PERL_MAGIC_taint
5112 # define PERL_MAGIC_taint 't'
5113 #endif
5114
5115 #ifndef PERL_MAGIC_uvar
5116 # define PERL_MAGIC_uvar 'U'
5117 #endif
5118
5119 #ifndef PERL_MAGIC_uvar_elem
5120 # define PERL_MAGIC_uvar_elem 'u'
5121 #endif
5122
5123 #ifndef PERL_MAGIC_vstring
5124 # define PERL_MAGIC_vstring 'V'
5125 #endif
5126
5127 #ifndef PERL_MAGIC_vec
5128 # define PERL_MAGIC_vec 'v'
5129 #endif
5130
5131 #ifndef PERL_MAGIC_utf8
5132 # define PERL_MAGIC_utf8 'w'
5133 #endif
5134
5135 #ifndef PERL_MAGIC_substr
5136 # define PERL_MAGIC_substr 'x'
5137 #endif
5138
5139 #ifndef PERL_MAGIC_defelem
5140 # define PERL_MAGIC_defelem 'y'
5141 #endif
5142
5143 #ifndef PERL_MAGIC_glob
5144 # define PERL_MAGIC_glob '*'
5145 #endif
5146
5147 #ifndef PERL_MAGIC_arylen
5148 # define PERL_MAGIC_arylen '#'
5149 #endif
5150
5151 #ifndef PERL_MAGIC_pos
5152 # define PERL_MAGIC_pos '.'
5153 #endif
5154
5155 #ifndef PERL_MAGIC_backref
5156 # define PERL_MAGIC_backref '<'
5157 #endif
5158
5159 #ifndef PERL_MAGIC_ext
5160 # define PERL_MAGIC_ext '~'
5161 #endif
5162 #ifndef cBOOL
5163 # define cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0)
5164 #endif
5165
5166 #ifndef OpHAS_SIBLING
5167 # define OpHAS_SIBLING(o) (cBOOL((o)->op_sibling))
5168 #endif
5169
5170 #ifndef OpSIBLING
5171 # define OpSIBLING(o) (0 + (o)->op_sibling)
5172 #endif
5173
5174 #ifndef OpMORESIB_set
5175 # define OpMORESIB_set(o, sib) ((o)->op_sibling = (sib))
5176 #endif
5177
5178 #ifndef OpLASTSIB_set
5179 # define OpLASTSIB_set(o, parent) ((o)->op_sibling = NULL)
5180 #endif
5181
5182 #ifndef OpMAYBESIB_set
5183 # define OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib))
5184 #endif
5185
5186 #ifndef HEf_SVKEY
5187 # define HEf_SVKEY -2
5188 #endif
5189
5190 #if defined(DEBUGGING) && !defined(__COVERITY__)
5191 #ifndef __ASSERT_
5192 # define __ASSERT_(statement) assert(statement),
5193 #endif
5194
5195 #else
5196 #ifndef __ASSERT_
5197 # define __ASSERT_(statement)
5198 #endif
5199
5200 #endif
5201 #ifndef SvRX
5202 # define SvRX(rv) (SvROK((rv)) ? (SvMAGICAL(SvRV((rv))) ? (mg_find(SvRV((rv)), PERL_MAGIC_qr) ? mg_find(SvRV((rv)), PERL_MAGIC_qr)->mg_obj : NULL) : NULL) : NULL)
5203 #endif
5204
5205 #ifndef SvRXOK
5206 # define SvRXOK(sv) (!!SvRX(sv))
5207 #endif
5208
5209 #ifndef PERL_UNUSED_DECL
5210 # ifdef HASATTRIBUTE
5211 # if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER)
5212 # define PERL_UNUSED_DECL
5213 # else
5214 # define PERL_UNUSED_DECL __attribute__((unused))
5215 # endif
5216 # else
5217 # define PERL_UNUSED_DECL
5218 # endif
5219 #endif
5220
5221 #ifndef PERL_UNUSED_ARG
5222 # if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
5223 # include <note.h>
5224 # define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
5225 # else
5226 # define PERL_UNUSED_ARG(x) ((void)x)
5227 # endif
5228 #endif
5229
5230 #ifndef PERL_UNUSED_VAR
5231 # define PERL_UNUSED_VAR(x) ((void)x)
5232 #endif
5233
5234 #ifndef PERL_UNUSED_CONTEXT
5235 # ifdef USE_ITHREADS
5236 # define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
5237 # else
5238 # define PERL_UNUSED_CONTEXT
5239 # endif
5240 #endif
5241
5242 #ifndef PERL_UNUSED_RESULT
5243 # if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT)
5244 # define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END
5245 # else
5246 # define PERL_UNUSED_RESULT(v) ((void)(v))
5247 # endif
5248 #endif
5249 #ifndef NOOP
5250 # define NOOP /*EMPTY*/(void)0
5251 #endif
5252
5253 #ifndef dNOOP
5254 # define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL
5255 #endif
5256
5257 #ifndef NVTYPE
5258 # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
5259 # define NVTYPE long double
5260 # else
5261 # define NVTYPE double
5262 # endif
5263 typedef NVTYPE NV;
5264 #endif
5265
5266 #ifndef INT2PTR
5267 # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
5268 # define PTRV UV
5269 # define INT2PTR(any,d) (any)(d)
5270 # else
5271 # if PTRSIZE == LONGSIZE
5272 # define PTRV unsigned long
5273 # else
5274 # define PTRV unsigned
5275 # endif
5276 # define INT2PTR(any,d) (any)(PTRV)(d)
5277 # endif
5278 #endif
5279
5280 #ifndef PTR2ul
5281 # if PTRSIZE == LONGSIZE
5282 # define PTR2ul(p) (unsigned long)(p)
5283 # else
5284 # define PTR2ul(p) INT2PTR(unsigned long,p)
5285 # endif
5286 #endif
5287 #ifndef PTR2nat
5288 # define PTR2nat(p) (PTRV)(p)
5289 #endif
5290
5291 #ifndef NUM2PTR
5292 # define NUM2PTR(any,d) (any)PTR2nat(d)
5293 #endif
5294
5295 #ifndef PTR2IV
5296 # define PTR2IV(p) INT2PTR(IV,p)
5297 #endif
5298
5299 #ifndef PTR2UV
5300 # define PTR2UV(p) INT2PTR(UV,p)
5301 #endif
5302
5303 #ifndef PTR2NV
5304 # define PTR2NV(p) NUM2PTR(NV,p)
5305 #endif
5306
5307 #undef START_EXTERN_C
5308 #undef END_EXTERN_C
5309 #undef EXTERN_C
5310 #ifdef __cplusplus
5311 # define START_EXTERN_C extern "C" {
5312 # define END_EXTERN_C }
5313 # define EXTERN_C extern "C"
5314 #else
5315 # define START_EXTERN_C
5316 # define END_EXTERN_C
5317 # define EXTERN_C extern
5318 #endif
5319
5320 #if (PERL_BCDVERSION < 0x5004000) || defined(PERL_GCC_PEDANTIC)
5321 # ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
5322 #ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
5323 # define PERL_GCC_BRACE_GROUPS_FORBIDDEN
5324 #endif
5325
5326 # endif
5327 #endif
5328
5329 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
5330 # ifndef PERL_USE_GCC_BRACE_GROUPS
5331 # define PERL_USE_GCC_BRACE_GROUPS
5332 # endif
5333 #endif
5334
5335 #undef STMT_START
5336 #undef STMT_END
5337 #ifdef PERL_USE_GCC_BRACE_GROUPS
5338 # define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
5339 # define STMT_END )
5340 #else
5341 # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
5342 # define STMT_START if (1)
5343 # define STMT_END else (void)0
5344 # else
5345 # define STMT_START do
5346 # define STMT_END while (0)
5347 # endif
5348 #endif
5349 #ifndef boolSV
5350 # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
5351 #endif
5352
5353 /* DEFSV appears first in 5.004_56 */
5354 #ifndef DEFSV
5355 # define DEFSV GvSV(PL_defgv)
5356 #endif
5357
5358 #ifndef SAVE_DEFSV
5359 # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
5360 #endif
5361
5362 #ifndef DEFSV_set
5363 # define DEFSV_set(sv) (DEFSV = (sv))
5364 #endif
5365
5366 /* Older perls (<=5.003) lack AvFILLp */
5367 #ifndef AvFILLp
5368 # define AvFILLp AvFILL
5369 #endif
5370 #ifndef av_tindex
5371 # define av_tindex AvFILL
5372 #endif
5373
5374 #ifndef av_top_index
5375 # define av_top_index AvFILL
5376 #endif
5377 #ifndef ERRSV
5378 # define ERRSV get_sv("@",FALSE)
5379 #endif
5380
5381 /* Hint: gv_stashpvn
5382 * This function's backport doesn't support the length parameter, but
5383 * rather ignores it. Portability can only be ensured if the length
5384 * parameter is used for speed reasons, but the length can always be
5385 * correctly computed from the string argument.
5386 */
5387 #ifndef gv_stashpvn
5388 # define gv_stashpvn(str,len,create) gv_stashpv(str,create)
5389 #endif
5390
5391 /* Replace: 1 */
5392 #ifndef get_cv
5393 # define get_cv perl_get_cv
5394 #endif
5395
5396 #ifndef get_sv
5397 # define get_sv perl_get_sv
5398 #endif
5399
5400 #ifndef get_av
5401 # define get_av perl_get_av
5402 #endif
5403
5404 #ifndef get_hv
5405 # define get_hv perl_get_hv
5406 #endif
5407
5408 /* Replace: 0 */
5409 #ifndef dUNDERBAR
5410 # define dUNDERBAR dNOOP
5411 #endif
5412
5413 #ifndef UNDERBAR
5414 # define UNDERBAR DEFSV
5415 #endif
5416 #ifndef dAX
5417 # define dAX I32 ax = MARK - PL_stack_base + 1
5418 #endif
5419
5420 #ifndef dITEMS
5421 # define dITEMS I32 items = SP - MARK
5422 #endif
5423 #ifndef dXSTARG
5424 # define dXSTARG SV * targ = sv_newmortal()
5425 #endif
5426 #ifndef dAXMARK
5427 # define dAXMARK I32 ax = POPMARK; \
5428 register SV ** const mark = PL_stack_base + ax++
5429 #endif
5430 #ifndef XSprePUSH
5431 # define XSprePUSH (sp = PL_stack_base + ax - 1)
5432 #endif
5433
5434 #if (PERL_BCDVERSION < 0x5005000)
5435 # undef XSRETURN
5436 # define XSRETURN(off) \
5437 STMT_START { \
5438 PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
5439 return; \
5440 } STMT_END
5441 #endif
5442 #ifndef XSPROTO
5443 # define XSPROTO(name) void name(pTHX_ CV* cv)
5444 #endif
5445
5446 #ifndef SVfARG
5447 # define SVfARG(p) ((void*)(p))
5448 #endif
5449 #ifndef PERL_ABS
5450 # define PERL_ABS(x) ((x) < 0 ? -(x) : (x))
5451 #endif
5452 #ifndef dVAR
5453 # define dVAR dNOOP
5454 #endif
5455 #ifndef SVf
5456 # define SVf "_"
5457 #endif
5458 #ifndef CPERLscope
5459 # define CPERLscope(x) x
5460 #endif
5461 #ifndef PERL_HASH
5462 # define PERL_HASH(hash,str,len) \
5463 STMT_START { \
5464 const char *s_PeRlHaSh = str; \
5465 I32 i_PeRlHaSh = len; \
5466 U32 hash_PeRlHaSh = 0; \
5467 while (i_PeRlHaSh--) \
5468 hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \
5469 (hash) = hash_PeRlHaSh; \
5470 } STMT_END
5471 #endif
5472
5473 #ifndef PERLIO_FUNCS_DECL
5474 # ifdef PERLIO_FUNCS_CONST
5475 # define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
5476 # define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
5477 # else
5478 # define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
5479 # define PERLIO_FUNCS_CAST(funcs) (funcs)
5480 # endif
5481 #endif
5482
5483 /* provide these typedefs for older perls */
5484 #if (PERL_BCDVERSION < 0x5009003)
5485
5486 # ifdef ARGSproto
5487 typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto);
5488 # else
5489 typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX);
5490 # endif
5491
5492 typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
5493
5494 #endif
5495
5496 #ifndef WIDEST_UTYPE
5497 # ifdef QUADKIND
5498 # ifdef U64TYPE
5499 # define WIDEST_UTYPE U64TYPE
5500 # else
5501 # define WIDEST_UTYPE Quad_t
5502 # endif
5503 # else
5504 # define WIDEST_UTYPE U32
5505 # endif
5506 #endif
5507
5508 /* On versions without this, only ASCII is supported */
5509 #ifdef NATIVE_TO_ASCII
5510 #ifndef NATIVE_TO_LATIN1
5511 # define NATIVE_TO_LATIN1(c) NATIVE_TO_ASCII(c)
5512 #endif
5513
5514 #else
5515 #ifndef NATIVE_TO_LATIN1
5516 # define NATIVE_TO_LATIN1(c) (c)
5517 #endif
5518
5519 #endif
5520
5521 #ifdef ASCII_TO_NATIVE
5522 #ifndef LATIN1_TO_NATIVE
5523 # define LATIN1_TO_NATIVE(c) ASCII_TO_NATIVE(c)
5524 #endif
5525
5526 #else
5527 #ifndef LATIN1_TO_NATIVE
5528 # define LATIN1_TO_NATIVE(c) (c)
5529 #endif
5530
5531 #endif
5532
5533 /* Warning: LATIN1_TO_NATIVE, NATIVE_TO_LATIN1
5534 EBCDIC is not supported on versions earlier than 5.7.1
5535 */
5536
5537 #ifdef EBCDIC
5538
5539 /* This is the first version where these macros are fully correct on EBCDIC
5540 * platforms. Relying on * the C library functions, as earlier releases did,
5541 * causes problems with * locales */
5542 # if (PERL_BCDVERSION < 0x5022000)
5543 # undef isALNUM
5544 # undef isALNUM_A
5545 # undef isALNUM_L1
5546 # undef isALNUMC
5547 # undef isALNUMC_A
5548 # undef isALNUMC_L1
5549 # undef isALPHA
5550 # undef isALPHA_A
5551 # undef isALPHA_L1
5552 # undef isALPHANUMERIC
5553 # undef isALPHANUMERIC_A
5554 # undef isALPHANUMERIC_L1
5555 # undef isASCII
5556 # undef isASCII_A
5557 # undef isASCII_L1
5558 # undef isBLANK
5559 # undef isBLANK_A
5560 # undef isBLANK_L1
5561 # undef isCNTRL
5562 # undef isCNTRL_A
5563 # undef isCNTRL_L1
5564 # undef isDIGIT
5565 # undef isDIGIT_A
5566 # undef isDIGIT_L1
5567 # undef isGRAPH
5568 # undef isGRAPH_A
5569 # undef isGRAPH_L1
5570 # undef isIDCONT
5571 # undef isIDCONT_A
5572 # undef isIDCONT_L1
5573 # undef isIDFIRST
5574 # undef isIDFIRST_A
5575 # undef isIDFIRST_L1
5576 # undef isLOWER
5577 # undef isLOWER_A
5578 # undef isLOWER_L1
5579 # undef isOCTAL
5580 # undef isOCTAL_A
5581 # undef isOCTAL_L1
5582 # undef isPRINT
5583 # undef isPRINT_A
5584 # undef isPRINT_L1
5585 # undef isPSXSPC
5586 # undef isPSXSPC_A
5587 # undef isPSXSPC_L1
5588 # undef isPUNCT
5589 # undef isPUNCT_A
5590 # undef isPUNCT_L1
5591 # undef isSPACE
5592 # undef isSPACE_A
5593 # undef isSPACE_L1
5594 # undef isUPPER
5595 # undef isUPPER_A
5596 # undef isUPPER_L1
5597 # undef isWORDCHAR
5598 # undef isWORDCHAR_A
5599 # undef isWORDCHAR_L1
5600 # undef isXDIGIT
5601 # undef isXDIGIT_A
5602 # undef isXDIGIT_L1
5603 # endif
5604 #ifndef isASCII
5605 # define isASCII(c) (isCNTRL(c) || isPRINT(c))
5606 #endif
5607
5608 /* The below is accurate for all EBCDIC code pages supported by
5609 * all the versions of Perl overridden by this */
5610 #ifndef isCNTRL
5611 # define isCNTRL(c) ( (c) == '\0' || (c) == '\a' || (c) == '\b' \
5612 || (c) == '\f' || (c) == '\n' || (c) == '\r' \
5613 || (c) == '\t' || (c) == '\v' \
5614 || ((c) <= 3 && (c) >= 1) /* SOH, STX, ETX */ \
5615 || (c) == 7 /* U+7F DEL */ \
5616 || ((c) <= 0x13 && (c) >= 0x0E) /* SO, SI */ \
5617 /* DLE, DC[1-3] */ \
5618 || (c) == 0x18 /* U+18 CAN */ \
5619 || (c) == 0x19 /* U+19 EOM */ \
5620 || ((c) <= 0x1F && (c) >= 0x1C) /* [FGRU]S */ \
5621 || (c) == 0x26 /* U+17 ETB */ \
5622 || (c) == 0x27 /* U+1B ESC */ \
5623 || (c) == 0x2D /* U+05 ENQ */ \
5624 || (c) == 0x2E /* U+06 ACK */ \
5625 || (c) == 0x32 /* U+16 SYN */ \
5626 || (c) == 0x37 /* U+04 EOT */ \
5627 || (c) == 0x3C /* U+14 DC4 */ \
5628 || (c) == 0x3D /* U+15 NAK */ \
5629 || (c) == 0x3F /* U+1A SUB */ \
5630 )
5631 #endif
5632
5633 #if '^' == 106 /* EBCDIC POSIX-BC */
5634 # define D_PPP_OUTLIER_CONTROL 0x5F
5635 #else /* EBCDIC 1047 037 */
5636 # define D_PPP_OUTLIER_CONTROL 0xFF
5637 #endif
5638
5639 /* The controls are everything below blank, plus one outlier */
5640 #ifndef isCNTRL_L1
5641 # define isCNTRL_L1(c) ((WIDEST_UTYPE) (c) < ' ' \
5642 || (WIDEST_UTYPE) (c) == D_PPP_OUTLIER_CONTROL)
5643 #endif
5644
5645 )
5646 /* The ordering of the tests in this and isUPPER are to exclude most characters
5647 * early */
5648 #ifndef isLOWER
5649 # define isLOWER(c) ( (c) >= 'a' && (c) <= 'z' \
5650 && ( (c) <= 'i' \
5651 || ((c) >= 'j' && (c) <= 'r') \
5652 || (c) >= 's'))
5653 #endif
5654
5655 #ifndef isUPPER
5656 # define isUPPER(c) ( (c) >= 'A' && (c) <= 'Z' \
5657 && ( (c) <= 'I' \
5658 || ((c) >= 'J' && (c) <= 'R') \
5659 || (c) >= 'S'))
5660 #endif
5661
5662 #else /* Above is EBCDIC; below is ASCII */
5663
5664 # if (PERL_BCDVERSION < 0x5004000)
5665 /* The implementation of these in older perl versions can give wrong results if
5666 * the C program locale is set to other than the C locale */
5667 # undef isALNUM
5668 # undef isALNUM_A
5669 # undef isALPHA
5670 # undef isALPHA_A
5671 # undef isDIGIT
5672 # undef isDIGIT_A
5673 # undef isIDFIRST
5674 # undef isIDFIRST_A
5675 # undef isLOWER
5676 # undef isLOWER_A
5677 # undef isUPPER
5678 # undef isUPPER_A
5679 # endif
5680
5681 # if (PERL_BCDVERSION < 0x5008000) /* earlier perls omitted DEL */
5682 # undef isCNTRL
5683 # endif
5684
5685 # if (PERL_BCDVERSION < 0x5010000)
5686 /* earlier perls included all of the isSPACE() characters, which is wrong. The
5687 * version provided by Devel::PPPort always overrides an existing buggy
5688 * version. */
5689 # undef isPRINT
5690 # undef isPRINT_A
5691 # endif
5692
5693 # if (PERL_BCDVERSION < 0x5014000)
5694 /* earlier perls always returned true if the parameter was a signed char */
5695 # undef isASCII
5696 # undef isASCII_A
5697 # endif
5698
5699 # if (PERL_BCDVERSION < 0x5017008) /* earlier perls didn't include PILCROW, SECTION SIGN */
5700 # undef isPUNCT_L1
5701 # endif
5702
5703 # if (PERL_BCDVERSION < 0x5013007) /* khw didn't investigate why this failed */
5704 # undef isALNUMC_L1
5705 #endif
5706
5707 # if (PERL_BCDVERSION < 0x5020000) /* earlier perls didn't include \v */
5708 # undef isSPACE
5709 # undef isSPACE_A
5710 # undef isSPACE_L1
5711
5712 # endif
5713 #ifndef isASCII
5714 # define isASCII(c) ((WIDEST_UTYPE) (c) <= 127)
5715 #endif
5716
5717 #ifndef isCNTRL
5718 # define isCNTRL(c) ((WIDEST_UTYPE) (c) < ' ' || (c) == 127)
5719 #endif
5720
5721 #ifndef isCNTRL_L1
5722 # define isCNTRL_L1(c) (isCNTRL(c) || ( (WIDEST_UTYPE) (c) <= 0x9F \
5723 && (WIDEST_UTYPE) (c) >= 0x80))
5724 #endif
5725
5726 #ifndef isLOWER
5727 # define isLOWER(c) ((c) >= 'a' && (c) <= 'z')
5728 #endif
5729
5730 #ifndef isUPPER
5731 # define isUPPER(c) ((c) <= 'Z' && (c) >= 'A')
5732 #endif
5733
5734 #endif /* Below are definitions common to EBCDIC and ASCII */
5735 #ifndef isASCII_L1
5736 # define isASCII_L1(c) isASCII(c)
5737 #endif
5738
5739 #ifndef isALNUM
5740 # define isALNUM(c) isWORDCHAR(c)
5741 #endif
5742
5743 #ifndef isALNUMC
5744 # define isALNUMC(c) isALPHANUMERIC(c)
5745 #endif
5746
5747 #ifndef isALNUMC_L1
5748 # define isALNUMC_L1(c) isALPHANUMERIC_L1(c)
5749 #endif
5750
5751 #ifndef isALPHA
5752 # define isALPHA(c) (isUPPER(c) || isLOWER(c))
5753 #endif
5754
5755 #ifndef isALPHA_L1
5756 # define isALPHA_L1(c) (isUPPER_L1(c) || isLOWER_L1(c))
5757 #endif
5758
5759 #ifndef isALPHANUMERIC
5760 # define isALPHANUMERIC(c) (isALPHA(c) || isDIGIT(c))
5761 #endif
5762
5763 #ifndef isALPHANUMERIC_L1
5764 # define isALPHANUMERIC_L1(c) (isALPHA_L1(c) || isDIGIT(c))
5765 #endif
5766
5767 #ifndef isBLANK
5768 # define isBLANK(c) ((c) == ' ' || (c) == '\t')
5769 #endif
5770
5771 #ifndef isBLANK_L1
5772 # define isBLANK_L1(c) ( isBLANK(c) \
5773 || ( (WIDEST_UTYPE) (c) < 256 \
5774 && NATIVE_TO_LATIN1((U8) c) == 0xA0))
5775 #endif
5776
5777 #ifndef isDIGIT
5778 # define isDIGIT(c) ((c) <= '9' && (c) >= '0')
5779 #endif
5780
5781 #ifndef isDIGIT_L1
5782 # define isDIGIT_L1(c) isDIGIT(c)
5783 #endif
5784
5785 #ifndef isGRAPH
5786 # define isGRAPH(c) (isWORDCHAR(c) || isPUNCT(c))
5787 #endif
5788
5789 #ifndef isGRAPH_L1
5790 # define isGRAPH_L1(c) (isPRINT_L1(c) && (c) != ' ')
5791 #endif
5792
5793 #ifndef isIDCONT
5794 # define isIDCONT(c) isWORDCHAR(c)
5795 #endif
5796
5797 #ifndef isIDCONT_L1
5798 # define isIDCONT_L1(c) isWORDCHAR_L1(c)
5799 #endif
5800
5801 #ifndef isIDFIRST
5802 # define isIDFIRST(c) (isALPHA(c) || (c) == '_')
5803 #endif
5804
5805 #ifndef isIDFIRST_L1
5806 # define isIDFIRST_L1(c) (isALPHA_L1(c) || NATIVE_TO_LATIN1(c) == '_')
5807 #endif
5808
5809 #ifndef isLOWER_L1
5810 # define isLOWER_L1(c) ( isLOWER(c) \
5811 || ( (WIDEST_UTYPE) (c) < 256 \
5812 && ( ( NATIVE_TO_LATIN1((U8) c) >= 0xDF \
5813 && NATIVE_TO_LATIN1((U8) c) != 0xF7) \
5814 || NATIVE_TO_LATIN1((U8) c) == 0xAA \
5815 || NATIVE_TO_LATIN1((U8) c) == 0xBA \
5816 || NATIVE_TO_LATIN1((U8) c) == 0xB5)))
5817 #endif
5818
5819 #ifndef isOCTAL
5820 # define isOCTAL(c) (((WIDEST_UTYPE)((c)) & ~7) == '0')
5821 #endif
5822
5823 #ifndef isOCTAL_L1
5824 # define isOCTAL_L1(c) isOCTAL(c)
5825 #endif
5826
5827 #ifndef isPRINT
5828 # define isPRINT(c) (isGRAPH(c) || (c) == ' ')
5829 #endif
5830
5831 #ifndef isPRINT_L1
5832 # define isPRINT_L1(c) ((WIDEST_UTYPE) (c) < 256 && ! isCNTRL_L1(c))
5833 #endif
5834
5835 #ifndef isPSXSPC
5836 # define isPSXSPC(c) isSPACE(c)
5837 #endif
5838
5839 #ifndef isPSXSPC_L1
5840 # define isPSXSPC_L1(c) isSPACE_L1(c)
5841 #endif
5842
5843 #ifndef isPUNCT
5844 # define isPUNCT(c) ( (c) == '-' || (c) == '!' || (c) == '"' \
5845 || (c) == '#' || (c) == '$' || (c) == '%' \
5846 || (c) == '&' || (c) == '\'' || (c) == '(' \
5847 || (c) == ')' || (c) == '*' || (c) == '+' \
5848 || (c) == ',' || (c) == '.' || (c) == '/' \
5849 || (c) == ':' || (c) == ';' || (c) == '<' \
5850 || (c) == '=' || (c) == '>' || (c) == '?' \
5851 || (c) == '@' || (c) == '[' || (c) == '\\' \
5852 || (c) == ']' || (c) == '^' || (c) == '_' \
5853 || (c) == '`' || (c) == '{' || (c) == '|' \
5854 || (c) == '}' || (c) == '~')
5855 #endif
5856
5857 #ifndef isPUNCT_L1
5858 # define isPUNCT_L1(c) ( isPUNCT(c) \
5859 || ( (WIDEST_UTYPE) (c) < 256 \
5860 && ( NATIVE_TO_LATIN1((U8) c) == 0xA1 \
5861 || NATIVE_TO_LATIN1((U8) c) == 0xA7 \
5862 || NATIVE_TO_LATIN1((U8) c) == 0xAB \
5863 || NATIVE_TO_LATIN1((U8) c) == 0xB6 \
5864 || NATIVE_TO_LATIN1((U8) c) == 0xB7 \
5865 || NATIVE_TO_LATIN1((U8) c) == 0xBB \
5866 || NATIVE_TO_LATIN1((U8) c) == 0xBF)))
5867 #endif
5868
5869 #ifndef isSPACE
5870 # define isSPACE(c) ( isBLANK(c) || (c) == '\n' || (c) == '\r' \
5871 || (c) == '\v' || (c) == '\f')
5872 #endif
5873
5874 #ifndef isSPACE_L1
5875 # define isSPACE_L1(c) ( isSPACE(c) \
5876 || ( (WIDEST_UTYPE) (c) < 256 \
5877 && ( NATIVE_TO_LATIN1((U8) c) == 0x85 \
5878 || NATIVE_TO_LATIN1((U8) c) == 0xA0)))
5879 #endif
5880
5881 #ifndef isUPPER_L1
5882 # define isUPPER_L1(c) ( isUPPER(c) \
5883 || ( (WIDEST_UTYPE) (c) < 256 \
5884 && ( NATIVE_TO_LATIN1((U8) c) >= 0xC0 \
5885 && NATIVE_TO_LATIN1((U8) c) <= 0xDE \
5886 && NATIVE_TO_LATIN1((U8) c) != 0xD7)))
5887 #endif
5888
5889 #ifndef isWORDCHAR
5890 # define isWORDCHAR(c) (isALPHANUMERIC(c) || (c) == '_')
5891 #endif
5892
5893 #ifndef isWORDCHAR_L1
5894 # define isWORDCHAR_L1(c) (isIDFIRST_L1(c) || isDIGIT(c))
5895 #endif
5896
5897 #ifndef isXDIGIT
5898 # define isXDIGIT(c) ( isDIGIT(c) \
5899 || ((c) >= 'a' && (c) <= 'f') \
5900 || ((c) >= 'A' && (c) <= 'F'))
5901 #endif
5902
5903 #ifndef isXDIGIT_L1
5904 # define isXDIGIT_L1(c) isXDIGIT(c)
5905 #endif
5906 #ifndef isALNUM_A
5907 # define isALNUM_A(c) isALNUM(c)
5908 #endif
5909
5910 #ifndef isALNUMC_A
5911 # define isALNUMC_A(c) isALNUMC(c)
5912 #endif
5913
5914 #ifndef isALPHA_A
5915 # define isALPHA_A(c) isALPHA(c)
5916 #endif
5917
5918 #ifndef isALPHANUMERIC_A
5919 # define isALPHANUMERIC_A(c) isALPHANUMERIC(c)
5920 #endif
5921
5922 #ifndef isASCII_A
5923 # define isASCII_A(c) isASCII(c)
5924 #endif
5925
5926 #ifndef isBLANK_A
5927 # define isBLANK_A(c) isBLANK(c)
5928 #endif
5929
5930 #ifndef isCNTRL_A
5931 # define isCNTRL_A(c) isCNTRL(c)
5932 #endif
5933
5934 #ifndef isDIGIT_A
5935 # define isDIGIT_A(c) isDIGIT(c)
5936 #endif
5937
5938 #ifndef isGRAPH_A
5939 # define isGRAPH_A(c) isGRAPH(c)
5940 #endif
5941
5942 #ifndef isIDCONT_A
5943 # define isIDCONT_A(c) isIDCONT(c)
5944 #endif
5945
5946 #ifndef isIDFIRST_A
5947 # define isIDFIRST_A(c) isIDFIRST(c)
5948 #endif
5949
5950 #ifndef isLOWER_A
5951 # define isLOWER_A(c) isLOWER(c)
5952 #endif
5953
5954 #ifndef isOCTAL_A
5955 # define isOCTAL_A(c) isOCTAL(c)
5956 #endif
5957
5958 #ifndef isPRINT_A
5959 # define isPRINT_A(c) isPRINT(c)
5960 #endif
5961
5962 #ifndef isPSXSPC_A
5963 # define isPSXSPC_A(c) isPSXSPC(c)
5964 #endif
5965
5966 #ifndef isPUNCT_A
5967 # define isPUNCT_A(c) isPUNCT(c)
5968 #endif
5969
5970 #ifndef isSPACE_A
5971 # define isSPACE_A(c) isSPACE(c)
5972 #endif
5973
5974 #ifndef isUPPER_A
5975 # define isUPPER_A(c) isUPPER(c)
5976 #endif
5977
5978 #ifndef isWORDCHAR_A
5979 # define isWORDCHAR_A(c) isWORDCHAR(c)
5980 #endif
5981
5982 #ifndef isXDIGIT_A
5983 # define isXDIGIT_A(c) isXDIGIT(c)
5984 #endif
5985
5986 /* Until we figure out how to support this in older perls... */
5987 #if (PERL_BCDVERSION >= 0x5008000)
5988 #ifndef HeUTF8
5989 # define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \
5990 SvUTF8(HeKEY_sv(he)) : \
5991 (U32)HeKUTF8(he))
5992 #endif
5993
5994 #endif
5995 #ifndef C_ARRAY_LENGTH
5996 # define C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0]))
5997 #endif
5998
5999 #ifndef C_ARRAY_END
6000 # define C_ARRAY_END(a) ((a) + C_ARRAY_LENGTH(a))
6001 #endif
6002 #ifndef LIKELY
6003 # define LIKELY(x) (x)
6004 #endif
6005
6006 #ifndef UNLIKELY
6007 # define UNLIKELY(x) (x)
6008 #endif
6009
6010 #ifndef MUTABLE_PTR
6011 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
6012 # define MUTABLE_PTR(p) ({ void *_p = (p); _p; })
6013 #else
6014 # define MUTABLE_PTR(p) ((void *) (p))
6015 #endif
6016 #endif
6017 #ifndef MUTABLE_SV
6018 # define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p))
6019 #endif
6020
6021 #if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf)
6022 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
6023 # define vnewSVpvf(pat, args) ({ SV *_sv = newSV(0); sv_vsetpvfn(_sv, (pat), strlen((pat)), (args), Null(SV**), 0, Null(bool*)); _sv; })
6024 #else
6025 # define vnewSVpvf(pat, args) ((PL_Sv = newSV(0)), sv_vsetpvfn(PL_Sv, (pat), strlen((pat)), (args), Null(SV**), 0, Null(bool*)), PL_Sv)
6026 #endif
6027 #endif
6028
6029 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf)
6030 # define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
6031 #endif
6032
6033 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf)
6034 # define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
6035 #endif
6036
6037 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg)
6038 #if defined(NEED_sv_catpvf_mg)
6039 static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * const sv, const char * const pat, ...);
6040 static
6041 #else
6042 extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV * const sv, const char * const pat, ...);
6043 #endif
6044
6045 #if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL)
6046
6047 #define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg)
6048
6049
6050 void
DPPP_(my_sv_catpvf_mg)6051 DPPP_(my_sv_catpvf_mg)(pTHX_ SV * const sv, const char * const pat, ...)
6052 {
6053 va_list args;
6054 va_start(args, pat);
6055 sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
6056 SvSETMAGIC(sv);
6057 va_end(args);
6058 }
6059
6060 #endif
6061 #endif
6062
6063 #ifdef PERL_IMPLICIT_CONTEXT
6064 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext)
6065 #if defined(NEED_sv_catpvf_mg_nocontext)
6066 static void DPPP_(my_sv_catpvf_mg_nocontext)(SV * const sv, const char * const pat, ...);
6067 static
6068 #else
6069 extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV * const sv, const char * const pat, ...);
6070 #endif
6071
6072 #if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL)
6073
6074 #define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
6075 #define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
6076
6077
6078 void
DPPP_(my_sv_catpvf_mg_nocontext)6079 DPPP_(my_sv_catpvf_mg_nocontext)(SV * const sv, const char * const pat, ...)
6080 {
6081 dTHX;
6082 va_list args;
6083 va_start(args, pat);
6084 sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
6085 SvSETMAGIC(sv);
6086 va_end(args);
6087 }
6088
6089 #endif
6090 #endif
6091 #endif
6092
6093 /* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */
6094 #ifndef sv_catpvf_mg
6095 # ifdef PERL_IMPLICIT_CONTEXT
6096 # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
6097 # else
6098 # define sv_catpvf_mg Perl_sv_catpvf_mg
6099 # endif
6100 #endif
6101
6102 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg)
6103 # define sv_vcatpvf_mg(sv, pat, args) \
6104 STMT_START { \
6105 sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \
6106 SvSETMAGIC(sv); \
6107 } STMT_END
6108 #endif
6109
6110 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg)
6111 #if defined(NEED_sv_setpvf_mg)
6112 static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * const sv, const char * const pat, ...);
6113 static
6114 #else
6115 extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV * const sv, const char * const pat, ...);
6116 #endif
6117
6118 #if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL)
6119
6120 #define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg)
6121
6122
6123 void
DPPP_(my_sv_setpvf_mg)6124 DPPP_(my_sv_setpvf_mg)(pTHX_ SV * const sv, const char * const pat, ...)
6125 {
6126 va_list args;
6127 va_start(args, pat);
6128 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
6129 SvSETMAGIC(sv);
6130 va_end(args);
6131 }
6132
6133 #endif
6134 #endif
6135
6136 #ifdef PERL_IMPLICIT_CONTEXT
6137 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext)
6138 #if defined(NEED_sv_setpvf_mg_nocontext)
6139 static void DPPP_(my_sv_setpvf_mg_nocontext)(SV * const sv, const char * const pat, ...);
6140 static
6141 #else
6142 extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV * const sv, const char * const pat, ...);
6143 #endif
6144
6145 #if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL)
6146
6147 #define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
6148 #define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
6149
6150
6151 void
DPPP_(my_sv_setpvf_mg_nocontext)6152 DPPP_(my_sv_setpvf_mg_nocontext)(SV * const sv, const char * const pat, ...)
6153 {
6154 dTHX;
6155 va_list args;
6156 va_start(args, pat);
6157 sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
6158 SvSETMAGIC(sv);
6159 va_end(args);
6160 }
6161
6162 #endif
6163 #endif
6164 #endif
6165
6166 /* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */
6167 #ifndef sv_setpvf_mg
6168 # ifdef PERL_IMPLICIT_CONTEXT
6169 # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
6170 # else
6171 # define sv_setpvf_mg Perl_sv_setpvf_mg
6172 # endif
6173 #endif
6174
6175 #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg)
6176 # define sv_vsetpvf_mg(sv, pat, args) \
6177 STMT_START { \
6178 sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \
6179 SvSETMAGIC(sv); \
6180 } STMT_END
6181 #endif
6182
6183 /* Hint: sv_2pv_nolen
6184 * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen().
6185 */
6186 #ifndef sv_2pv_nolen
6187 # define sv_2pv_nolen(sv) SvPV_nolen(sv)
6188 #endif
6189
6190 #ifdef SvPVbyte
6191
6192 /* Hint: SvPVbyte
6193 * Does not work in perl-5.6.1, ppport.h implements a version
6194 * borrowed from perl-5.7.3.
6195 */
6196
6197 #if (PERL_BCDVERSION < 0x5007000)
6198 #ifndef sv_2pvbyte
6199 # define sv_2pvbyte(sv, lp) (sv_utf8_downgrade((sv), 0), SvPV((sv), *(lp)))
6200 #endif
6201
6202 /* Hint: sv_2pvbyte
6203 * Use the SvPVbyte() macro instead of sv_2pvbyte().
6204 */
6205
6206 /* Replace sv_2pvbyte with SvPVbyte */
6207
6208 #undef SvPVbyte
6209
6210 #define SvPVbyte(sv, lp) \
6211 ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \
6212 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
6213
6214 #endif
6215
6216 #else
6217
6218 # define SvPVbyte SvPV
6219 # define sv_2pvbyte sv_2pv
6220
6221 #endif
6222 #ifndef sv_2pvbyte_nolen
6223 # define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv)
6224 #endif
6225
6226 /* Hint: sv_pvn
6227 * Always use the SvPV() macro instead of sv_pvn().
6228 */
6229
6230 /* Replace sv_pvn with SvPV */
6231
6232 /* Hint: sv_pvn_force
6233 * Always use the SvPV_force() macro instead of sv_pvn_force().
6234 */
6235
6236 /* Replace sv_pvn_force with SvPV_force */
6237
6238 /* If these are undefined, they're not handled by the core anyway */
6239 #ifndef SV_IMMEDIATE_UNREF
6240 # define SV_IMMEDIATE_UNREF 0
6241 #endif
6242
6243 #ifndef SV_GMAGIC
6244 # define SV_GMAGIC 0
6245 #endif
6246
6247 #ifndef SV_COW_DROP_PV
6248 # define SV_COW_DROP_PV 0
6249 #endif
6250
6251 #ifndef SV_UTF8_NO_ENCODING
6252 # define SV_UTF8_NO_ENCODING 0
6253 #endif
6254
6255 #ifndef SV_CONST_RETURN
6256 # define SV_CONST_RETURN 0
6257 #endif
6258
6259 #ifndef SV_MUTABLE_RETURN
6260 # define SV_MUTABLE_RETURN 0
6261 #endif
6262
6263 #ifndef SV_SMAGIC
6264 # define SV_SMAGIC 0
6265 #endif
6266
6267 #ifndef SV_HAS_TRAILING_NUL
6268 # define SV_HAS_TRAILING_NUL 0
6269 #endif
6270
6271 #ifndef SV_COW_SHARED_HASH_KEYS
6272 # define SV_COW_SHARED_HASH_KEYS 0
6273 #endif
6274
6275 #if (PERL_BCDVERSION < 0x5007002)
6276 #ifndef sv_2pv_flags
6277 # define sv_2pv_flags(sv, lp, flags) sv_2pv((sv), (lp) ? (lp) : &PL_na)
6278 #endif
6279
6280 #ifndef sv_pvn_force_flags
6281 # define sv_pvn_force_flags(sv, lp, flags) sv_pvn_force((sv), (lp) ? (lp) : &PL_na)
6282 #endif
6283
6284 #endif
6285
6286 #if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) )
6287 # define D_PPP_SVPV_NOLEN_LP_ARG &PL_na
6288 #else
6289 # define D_PPP_SVPV_NOLEN_LP_ARG 0
6290 #endif
6291 #ifndef SvPV_const
6292 # define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC)
6293 #endif
6294
6295 #ifndef SvPV_mutable
6296 # define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC)
6297 #endif
6298 #ifndef SvPV_flags
6299 # define SvPV_flags(sv, lp, flags) \
6300 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
6301 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
6302 #endif
6303 #ifndef SvPV_flags_const
6304 # define SvPV_flags_const(sv, lp, flags) \
6305 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
6306 ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
6307 (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN))
6308 #endif
6309 #ifndef SvPV_flags_const_nolen
6310 # define SvPV_flags_const_nolen(sv, flags) \
6311 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
6312 ? SvPVX_const(sv) : \
6313 (const char*) sv_2pv_flags(sv, D_PPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN))
6314 #endif
6315 #ifndef SvPV_flags_mutable
6316 # define SvPV_flags_mutable(sv, lp, flags) \
6317 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
6318 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
6319 sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
6320 #endif
6321 #ifndef SvPV_force
6322 # define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC)
6323 #endif
6324
6325 #ifndef SvPV_force_nolen
6326 # define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
6327 #endif
6328
6329 #ifndef SvPV_force_mutable
6330 # define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
6331 #endif
6332
6333 #ifndef SvPV_force_nomg
6334 # define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0)
6335 #endif
6336
6337 #ifndef SvPV_force_nomg_nolen
6338 # define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0)
6339 #endif
6340 #ifndef SvPV_force_flags
6341 # define SvPV_force_flags(sv, lp, flags) \
6342 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
6343 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
6344 #endif
6345 #ifndef SvPV_force_flags_nolen
6346 # define SvPV_force_flags_nolen(sv, flags) \
6347 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
6348 ? SvPVX(sv) : sv_pvn_force_flags(sv, D_PPP_SVPV_NOLEN_LP_ARG, flags))
6349 #endif
6350 #ifndef SvPV_force_flags_mutable
6351 # define SvPV_force_flags_mutable(sv, lp, flags) \
6352 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
6353 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
6354 : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
6355 #endif
6356 #ifndef SvPV_nolen
6357 # define SvPV_nolen(sv) \
6358 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
6359 ? SvPVX(sv) : sv_2pv_flags(sv, D_PPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC))
6360 #endif
6361 #ifndef SvPV_nolen_const
6362 # define SvPV_nolen_const(sv) \
6363 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
6364 ? SvPVX_const(sv) : sv_2pv_flags(sv, D_PPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN))
6365 #endif
6366 #ifndef SvPV_nomg
6367 # define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0)
6368 #endif
6369
6370 #ifndef SvPV_nomg_const
6371 # define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0)
6372 #endif
6373
6374 #ifndef SvPV_nomg_const_nolen
6375 # define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0)
6376 #endif
6377
6378 #ifndef SvPV_nomg_nolen
6379 # define SvPV_nomg_nolen(sv) ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
6380 ? SvPVX(sv) : sv_2pv_flags(sv, D_PPP_SVPV_NOLEN_LP_ARG, 0))
6381 #endif
6382 #ifndef SvPV_renew
6383 # define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \
6384 SvPV_set((sv), (char *) saferealloc( \
6385 (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \
6386 } STMT_END
6387 #endif
6388 #ifndef WARN_ALL
6389 # define WARN_ALL 0
6390 #endif
6391
6392 #ifndef WARN_CLOSURE
6393 # define WARN_CLOSURE 1
6394 #endif
6395
6396 #ifndef WARN_DEPRECATED
6397 # define WARN_DEPRECATED 2
6398 #endif
6399
6400 #ifndef WARN_EXITING
6401 # define WARN_EXITING 3
6402 #endif
6403
6404 #ifndef WARN_GLOB
6405 # define WARN_GLOB 4
6406 #endif
6407
6408 #ifndef WARN_IO
6409 # define WARN_IO 5
6410 #endif
6411
6412 #ifndef WARN_CLOSED
6413 # define WARN_CLOSED 6
6414 #endif
6415
6416 #ifndef WARN_EXEC
6417 # define WARN_EXEC 7
6418 #endif
6419
6420 #ifndef WARN_LAYER
6421 # define WARN_LAYER 8
6422 #endif
6423
6424 #ifndef WARN_NEWLINE
6425 # define WARN_NEWLINE 9
6426 #endif
6427
6428 #ifndef WARN_PIPE
6429 # define WARN_PIPE 10
6430 #endif
6431
6432 #ifndef WARN_UNOPENED
6433 # define WARN_UNOPENED 11
6434 #endif
6435
6436 #ifndef WARN_MISC
6437 # define WARN_MISC 12
6438 #endif
6439
6440 #ifndef WARN_NUMERIC
6441 # define WARN_NUMERIC 13
6442 #endif
6443
6444 #ifndef WARN_ONCE
6445 # define WARN_ONCE 14
6446 #endif
6447
6448 #ifndef WARN_OVERFLOW
6449 # define WARN_OVERFLOW 15
6450 #endif
6451
6452 #ifndef WARN_PACK
6453 # define WARN_PACK 16
6454 #endif
6455
6456 #ifndef WARN_PORTABLE
6457 # define WARN_PORTABLE 17
6458 #endif
6459
6460 #ifndef WARN_RECURSION
6461 # define WARN_RECURSION 18
6462 #endif
6463
6464 #ifndef WARN_REDEFINE
6465 # define WARN_REDEFINE 19
6466 #endif
6467
6468 #ifndef WARN_REGEXP
6469 # define WARN_REGEXP 20
6470 #endif
6471
6472 #ifndef WARN_SEVERE
6473 # define WARN_SEVERE 21
6474 #endif
6475
6476 #ifndef WARN_DEBUGGING
6477 # define WARN_DEBUGGING 22
6478 #endif
6479
6480 #ifndef WARN_INPLACE
6481 # define WARN_INPLACE 23
6482 #endif
6483
6484 #ifndef WARN_INTERNAL
6485 # define WARN_INTERNAL 24
6486 #endif
6487
6488 #ifndef WARN_MALLOC
6489 # define WARN_MALLOC 25
6490 #endif
6491
6492 #ifndef WARN_SIGNAL
6493 # define WARN_SIGNAL 26
6494 #endif
6495
6496 #ifndef WARN_SUBSTR
6497 # define WARN_SUBSTR 27
6498 #endif
6499
6500 #ifndef WARN_SYNTAX
6501 # define WARN_SYNTAX 28
6502 #endif
6503
6504 #ifndef WARN_AMBIGUOUS
6505 # define WARN_AMBIGUOUS 29
6506 #endif
6507
6508 #ifndef WARN_BAREWORD
6509 # define WARN_BAREWORD 30
6510 #endif
6511
6512 #ifndef WARN_DIGIT
6513 # define WARN_DIGIT 31
6514 #endif
6515
6516 #ifndef WARN_PARENTHESIS
6517 # define WARN_PARENTHESIS 32
6518 #endif
6519
6520 #ifndef WARN_PRECEDENCE
6521 # define WARN_PRECEDENCE 33
6522 #endif
6523
6524 #ifndef WARN_PRINTF
6525 # define WARN_PRINTF 34
6526 #endif
6527
6528 #ifndef WARN_PROTOTYPE
6529 # define WARN_PROTOTYPE 35
6530 #endif
6531
6532 #ifndef WARN_QW
6533 # define WARN_QW 36
6534 #endif
6535
6536 #ifndef WARN_RESERVED
6537 # define WARN_RESERVED 37
6538 #endif
6539
6540 #ifndef WARN_SEMICOLON
6541 # define WARN_SEMICOLON 38
6542 #endif
6543
6544 #ifndef WARN_TAINT
6545 # define WARN_TAINT 39
6546 #endif
6547
6548 #ifndef WARN_THREADS
6549 # define WARN_THREADS 40
6550 #endif
6551
6552 #ifndef WARN_UNINITIALIZED
6553 # define WARN_UNINITIALIZED 41
6554 #endif
6555
6556 #ifndef WARN_UNPACK
6557 # define WARN_UNPACK 42
6558 #endif
6559
6560 #ifndef WARN_UNTIE
6561 # define WARN_UNTIE 43
6562 #endif
6563
6564 #ifndef WARN_UTF8
6565 # define WARN_UTF8 44
6566 #endif
6567
6568 #ifndef WARN_VOID
6569 # define WARN_VOID 45
6570 #endif
6571
6572 #ifndef WARN_ASSERTIONS
6573 # define WARN_ASSERTIONS 46
6574 #endif
6575 #ifndef packWARN
6576 # define packWARN(a) (a)
6577 #endif
6578
6579 #ifndef ckWARN
6580 # ifdef G_WARN_ON
6581 # define ckWARN(a) (PL_dowarn & G_WARN_ON)
6582 # else
6583 # define ckWARN(a) PL_dowarn
6584 # endif
6585 #endif
6586
6587 #if (PERL_BCDVERSION >= 0x5004000) && !defined(warner)
6588 #if defined(NEED_warner)
6589 static void DPPP_(my_warner)(U32 err, const char * pat, ...);
6590 static
6591 #else
6592 extern void DPPP_(my_warner)(U32 err, const char * pat, ...);
6593 #endif
6594
6595 #if defined(NEED_warner) || defined(NEED_warner_GLOBAL)
6596
6597 #define Perl_warner DPPP_(my_warner)
6598
6599
6600 void
DPPP_(my_warner)6601 DPPP_(my_warner)(U32 err, const char *pat, ...)
6602 {
6603 SV *sv;
6604 va_list args;
6605
6606 PERL_UNUSED_ARG(err);
6607
6608 va_start(args, pat);
6609 sv = vnewSVpvf(pat, &args);
6610 va_end(args);
6611 sv_2mortal(sv);
6612 warn("%s", SvPV_nolen(sv));
6613 }
6614
6615 #define warner Perl_warner
6616
6617 #define Perl_warner_nocontext Perl_warner
6618
6619 #endif
6620 #endif
6621
6622 #ifndef IVdf
6623 # if IVSIZE == LONGSIZE
6624 # define IVdf "ld"
6625 # define UVuf "lu"
6626 # define UVof "lo"
6627 # define UVxf "lx"
6628 # define UVXf "lX"
6629 # elif IVSIZE == INTSIZE
6630 # define IVdf "d"
6631 # define UVuf "u"
6632 # define UVof "o"
6633 # define UVxf "x"
6634 # define UVXf "X"
6635 # else
6636 # error "cannot define IV/UV formats"
6637 # endif
6638 #endif
6639
6640 #ifndef NVef
6641 # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
6642 defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000)
6643 /* Not very likely, but let's try anyway. */
6644 # define NVef PERL_PRIeldbl
6645 # define NVff PERL_PRIfldbl
6646 # define NVgf PERL_PRIgldbl
6647 # else
6648 # define NVef "e"
6649 # define NVff "f"
6650 # define NVgf "g"
6651 # endif
6652 #endif
6653 #ifndef sv_setuv
6654 # define sv_setuv(sv, uv) \
6655 STMT_START { \
6656 UV TeMpUv = uv; \
6657 if (TeMpUv <= IV_MAX) \
6658 sv_setiv(sv, TeMpUv); \
6659 else \
6660 sv_setnv(sv, (double)TeMpUv); \
6661 } STMT_END
6662 #endif
6663 #ifndef newSVuv
6664 # define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
6665 #endif
6666
6667 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
6668 #ifndef sv_2uv
6669 # define sv_2uv(sv) ({ SV *_sv = (sv); (UV) (SvNOK(_sv) ? SvNV(_sv) : sv_2nv(_sv)); })
6670 #endif
6671
6672 #else
6673 #ifndef sv_2uv
6674 # define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
6675 #endif
6676
6677 #endif
6678 #ifndef SvUVX
6679 # define SvUVX(sv) ((UV)SvIVX(sv))
6680 #endif
6681
6682 #ifndef SvUVXx
6683 # define SvUVXx(sv) SvUVX(sv)
6684 #endif
6685
6686 #ifndef SvUV
6687 # define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
6688 #endif
6689
6690 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
6691 #ifndef SvUVx
6692 # define SvUVx(sv) ({ SV *_sv = (sv)); SvUV(_sv); })
6693 #endif
6694
6695 #else
6696 #ifndef SvUVx
6697 # define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
6698 #endif
6699
6700 #endif
6701
6702 /* Hint: sv_uv
6703 * Always use the SvUVx() macro instead of sv_uv().
6704 */
6705 /* Replace sv_uv with SvUVx */
6706 #ifndef sv_uv
6707 # define sv_uv(sv) SvUVx(sv)
6708 #endif
6709
6710 #if !defined(SvUOK) && defined(SvIOK_UV)
6711 # define SvUOK(sv) SvIOK_UV(sv)
6712 #endif
6713 #ifndef XST_mUV
6714 # define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) )
6715 #endif
6716
6717 #ifndef XSRETURN_UV
6718 # define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END
6719 #endif
6720 #ifndef PUSHu
6721 # define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
6722 #endif
6723
6724 #ifndef XPUSHu
6725 # define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
6726 #endif
6727
6728 #if !defined(my_strnlen)
6729 #if defined(NEED_my_strnlen)
6730 static Size_t DPPP_(my_my_strnlen)(const char * str, Size_t maxlen);
6731 static
6732 #else
6733 extern Size_t DPPP_(my_my_strnlen)(const char * str, Size_t maxlen);
6734 #endif
6735
6736 #if defined(NEED_my_strnlen) || defined(NEED_my_strnlen_GLOBAL)
6737
6738 #define my_strnlen DPPP_(my_my_strnlen)
6739 #define Perl_my_strnlen DPPP_(my_my_strnlen)
6740
6741
6742 Size_t
DPPP_(my_my_strnlen)6743 DPPP_(my_my_strnlen)(const char *str, Size_t maxlen)
6744 {
6745 const char *p = str;
6746
6747 while(maxlen-- && *p)
6748 p++;
6749
6750 return p - str;
6751 }
6752
6753 #endif
6754 #endif
6755
6756 #ifdef HAS_MEMCMP
6757 #ifndef memNE
6758 # define memNE(s1,s2,l) (memcmp(s1,s2,l))
6759 #endif
6760
6761 #ifndef memEQ
6762 # define memEQ(s1,s2,l) (!memcmp(s1,s2,l))
6763 #endif
6764
6765 #else
6766 #ifndef memNE
6767 # define memNE(s1,s2,l) (bcmp(s1,s2,l))
6768 #endif
6769
6770 #ifndef memEQ
6771 # define memEQ(s1,s2,l) (!bcmp(s1,s2,l))
6772 #endif
6773
6774 #endif
6775 #ifndef memEQs
6776 # define memEQs(s1, l, s2) \
6777 (sizeof(s2)-1 == l && memEQ(s1, (s2 ""), (sizeof(s2)-1)))
6778 #endif
6779
6780 #ifndef memNEs
6781 # define memNEs(s1, l, s2) !memEQs(s1, l, s2)
6782 #endif
6783 #ifndef MoveD
6784 # define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t))
6785 #endif
6786
6787 #ifndef CopyD
6788 # define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
6789 #endif
6790
6791 #ifdef HAS_MEMSET
6792 #ifndef ZeroD
6793 # define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t))
6794 #endif
6795
6796 #else
6797 #ifndef ZeroD
6798 # define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d)
6799 #endif
6800
6801 #endif
6802 #ifndef PoisonWith
6803 # define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t))
6804 #endif
6805
6806 #ifndef PoisonNew
6807 # define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB)
6808 #endif
6809
6810 #ifndef PoisonFree
6811 # define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF)
6812 #endif
6813
6814 #ifndef Poison
6815 # define Poison(d,n,t) PoisonFree(d,n,t)
6816 #endif
6817 #ifndef Newx
6818 # define Newx(v,n,t) New(0,v,n,t)
6819 #endif
6820
6821 #ifndef Newxc
6822 # define Newxc(v,n,t,c) Newc(0,v,n,t,c)
6823 #endif
6824
6825 #ifndef Newxz
6826 # define Newxz(v,n,t) Newz(0,v,n,t)
6827 #endif
6828
6829 #ifdef NEED_mess_sv
6830 #define NEED_mess
6831 #endif
6832
6833 #ifdef NEED_mess
6834 #define NEED_mess_nocontext
6835 #define NEED_vmess
6836 #endif
6837
6838 #ifndef croak_sv
6839 #if (PERL_BCDVERSION >= 0x5007003) || ( (PERL_BCDVERSION >= 0x5006001) && (PERL_BCDVERSION < 0x5007000) )
6840 # if ( (PERL_BCDVERSION >= 0x5008000) && (PERL_BCDVERSION < 0x5008009) ) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5010001) )
6841 # define D_PPP_FIX_UTF8_ERRSV_FOR_SV(sv) \
6842 STMT_START { \
6843 SV *_errsv = ERRSV; \
6844 SvFLAGS(_errsv) = (SvFLAGS(_errsv) & ~SVf_UTF8) | \
6845 (SvFLAGS(sv) & SVf_UTF8); \
6846 } STMT_END
6847 # else
6848 # define D_PPP_FIX_UTF8_ERRSV_FOR_SV(sv) STMT_START {} STMT_END
6849 # endif
6850 # define croak_sv(sv) \
6851 STMT_START { \
6852 SV *_sv = (sv); \
6853 if (SvROK(_sv)) { \
6854 sv_setsv(ERRSV, _sv); \
6855 croak(NULL); \
6856 } else { \
6857 D_PPP_FIX_UTF8_ERRSV_FOR_SV(_sv); \
6858 croak("%" SVf, SVfARG(_sv)); \
6859 } \
6860 } STMT_END
6861 #elif (PERL_BCDVERSION >= 0x5004000)
6862 # define croak_sv(sv) croak("%" SVf, SVfARG(sv))
6863 #else
6864 # define croak_sv(sv) croak("%s", SvPV_nolen(sv))
6865 #endif
6866 #endif
6867
6868 #ifndef die_sv
6869 #if defined(NEED_die_sv)
6870 static OP * DPPP_(my_die_sv)(pTHX_ SV * baseex);
6871 static
6872 #else
6873 extern OP * DPPP_(my_die_sv)(pTHX_ SV * baseex);
6874 #endif
6875
6876 #if defined(NEED_die_sv) || defined(NEED_die_sv_GLOBAL)
6877
6878 #ifdef die_sv
6879 # undef die_sv
6880 #endif
6881 #define die_sv(a) DPPP_(my_die_sv)(aTHX_ a)
6882 #define Perl_die_sv DPPP_(my_die_sv)
6883
6884 OP *
DPPP_(my_die_sv)6885 DPPP_(my_die_sv)(pTHX_ SV *baseex)
6886 {
6887 croak_sv(baseex);
6888 return (OP *)NULL;
6889 }
6890 #endif
6891 #endif
6892
6893 #ifndef warn_sv
6894 #if (PERL_BCDVERSION >= 0x5004000)
6895 # define warn_sv(sv) warn("%" SVf, SVfARG(sv))
6896 #else
6897 # define warn_sv(sv) warn("%s", SvPV_nolen(sv))
6898 #endif
6899 #endif
6900
6901 #if ! defined vmess && (PERL_BCDVERSION >= 0x5004000)
6902 # if defined(NEED_vmess)
6903 static SV * DPPP_(my_vmess)(pTHX_ const char * pat, va_list * args);
6904 static
6905 #else
6906 extern SV * DPPP_(my_vmess)(pTHX_ const char * pat, va_list * args);
6907 #endif
6908
6909 #if defined(NEED_vmess) || defined(NEED_vmess_GLOBAL)
6910
6911 #ifdef vmess
6912 # undef vmess
6913 #endif
6914 #define vmess(a,b) DPPP_(my_vmess)(aTHX_ a,b)
6915 #define Perl_vmess DPPP_(my_vmess)
6916
6917
6918 SV*
DPPP_(my_vmess)6919 DPPP_(my_vmess)(pTHX_ const char* pat, va_list* args)
6920 {
6921 mess(pat, args);
6922 return PL_mess_sv;
6923 }
6924 # endif
6925 #endif
6926
6927 #if (PERL_BCDVERSION < 0x5006000) && (PERL_BCDVERSION >= 0x5004000)
6928 #undef mess
6929 #endif
6930
6931 #if !defined(mess_nocontext) && !defined(Perl_mess_nocontext) && (PERL_BCDVERSION >= 0x5004000)
6932 #if defined(NEED_mess_nocontext)
6933 static SV * DPPP_(my_mess_nocontext)(const char * pat, ...);
6934 static
6935 #else
6936 extern SV * DPPP_(my_mess_nocontext)(const char * pat, ...);
6937 #endif
6938
6939 #if defined(NEED_mess_nocontext) || defined(NEED_mess_nocontext_GLOBAL)
6940
6941 #define mess_nocontext DPPP_(my_mess_nocontext)
6942 #define Perl_mess_nocontext DPPP_(my_mess_nocontext)
6943
6944 SV*
DPPP_(my_mess_nocontext)6945 DPPP_(my_mess_nocontext)(const char* pat, ...)
6946 {
6947 dTHX;
6948 SV *sv;
6949 va_list args;
6950 va_start(args, pat);
6951 sv = vmess(pat, &args);
6952 va_end(args);
6953 return sv;
6954 }
6955 #endif
6956 #endif
6957
6958 #ifndef mess
6959 #if defined(NEED_mess)
6960 static SV * DPPP_(my_mess)(pTHX_ const char * pat, ...);
6961 static
6962 #else
6963 extern SV * DPPP_(my_mess)(pTHX_ const char * pat, ...);
6964 #endif
6965
6966 #if defined(NEED_mess) || defined(NEED_mess_GLOBAL)
6967
6968 #define Perl_mess DPPP_(my_mess)
6969
6970 SV*
DPPP_(my_mess)6971 DPPP_(my_mess)(pTHX_ const char* pat, ...)
6972 {
6973 SV *sv;
6974 va_list args;
6975 va_start(args, pat);
6976 sv = vmess(pat, &args);
6977 va_end(args);
6978 return sv;
6979 }
6980 #ifdef mess_nocontext
6981 #define mess mess_nocontext
6982 #else
6983 #define mess Perl_mess_nocontext
6984 #endif
6985 #endif
6986 #endif
6987
6988 #if ! defined mess_sv && (PERL_BCDVERSION >= 0x5004000)
6989 #if defined(NEED_mess_sv)
6990 static SV * DPPP_(my_mess_sv)(pTHX_ SV * basemsg, bool consume);
6991 static
6992 #else
6993 extern SV * DPPP_(my_mess_sv)(pTHX_ SV * basemsg, bool consume);
6994 #endif
6995
6996 #if defined(NEED_mess_sv) || defined(NEED_mess_sv_GLOBAL)
6997
6998 #ifdef mess_sv
6999 # undef mess_sv
7000 #endif
7001 #define mess_sv(a,b) DPPP_(my_mess_sv)(aTHX_ a,b)
7002 #define Perl_mess_sv DPPP_(my_mess_sv)
7003
7004 SV *
DPPP_(my_mess_sv)7005 DPPP_(my_mess_sv)(pTHX_ SV *basemsg, bool consume)
7006 {
7007 SV *tmp;
7008 SV *ret;
7009
7010 if (SvPOK(basemsg) && SvCUR(basemsg) && *(SvEND(basemsg)-1) == '\n') {
7011 if (consume)
7012 return basemsg;
7013 ret = mess("");
7014 SvSetSV_nosteal(ret, basemsg);
7015 return ret;
7016 }
7017
7018 if (consume) {
7019 sv_catsv(basemsg, mess(""));
7020 return basemsg;
7021 }
7022
7023 ret = mess("");
7024 tmp = newSVsv(ret);
7025 SvSetSV_nosteal(ret, basemsg);
7026 sv_catsv(ret, tmp);
7027 sv_dec(tmp);
7028 return ret;
7029 }
7030 #endif
7031 #endif
7032
7033 #ifndef warn_nocontext
7034 #define warn_nocontext warn
7035 #endif
7036
7037 #ifndef croak_nocontext
7038 #define croak_nocontext croak
7039 #endif
7040
7041 #ifndef croak_no_modify
7042 #define croak_no_modify() croak_nocontext("%s", PL_no_modify)
7043 #define Perl_croak_no_modify() croak_no_modify()
7044 #endif
7045
7046 #ifndef croak_memory_wrap
7047 #if (PERL_BCDVERSION >= 0x5009002) || ( (PERL_BCDVERSION >= 0x5008006) && (PERL_BCDVERSION < 0x5009000) )
7048 # define croak_memory_wrap() croak_nocontext("%s", PL_memory_wrap)
7049 #else
7050 # define croak_memory_wrap() croak_nocontext("panic: memory wrap")
7051 #endif
7052 #endif
7053
7054 #ifndef croak_xs_usage
7055 #if defined(NEED_croak_xs_usage)
7056 static void DPPP_(my_croak_xs_usage)(const CV * const cv, const char * const params);
7057 static
7058 #else
7059 extern void DPPP_(my_croak_xs_usage)(const CV * const cv, const char * const params);
7060 #endif
7061
7062 #if defined(NEED_croak_xs_usage) || defined(NEED_croak_xs_usage_GLOBAL)
7063
7064 #define croak_xs_usage DPPP_(my_croak_xs_usage)
7065 #define Perl_croak_xs_usage DPPP_(my_croak_xs_usage)
7066
7067
7068
7069 void
DPPP_(my_croak_xs_usage)7070 DPPP_(my_croak_xs_usage)(const CV *const cv, const char *const params)
7071 {
7072 dTHX;
7073 const GV *const gv = CvGV(cv);
7074
7075 #ifdef PERL_ARGS_ASSERT_CROAK_XS_USAGE
7076 PERL_ARGS_ASSERT_CROAK_XS_USAGE;
7077 #else
7078 assert(cv); assert(params);
7079 #endif
7080
7081 if (gv) {
7082 const char *const gvname = GvNAME(gv);
7083 const HV *const stash = GvSTASH(gv);
7084 const char *const hvname = stash ? HvNAME(stash) : NULL;
7085
7086 if (hvname)
7087 croak("Usage: %s::%s(%s)", hvname, gvname, params);
7088 else
7089 croak("Usage: %s(%s)", gvname, params);
7090 } else {
7091 /* Pants. I don't think that it should be possible to get here. */
7092 croak("Usage: CODE(0x%" UVxf ")(%s)", PTR2UV(cv), params);
7093 }
7094 }
7095 #endif
7096 #endif
7097 #ifndef mPUSHs
7098 # define mPUSHs(s) PUSHs(sv_2mortal(s))
7099 #endif
7100
7101 #ifndef PUSHmortal
7102 # define PUSHmortal PUSHs(sv_newmortal())
7103 #endif
7104
7105 #ifndef mPUSHp
7106 # define mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l))
7107 #endif
7108
7109 #ifndef mPUSHn
7110 # define mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n))
7111 #endif
7112
7113 #ifndef mPUSHi
7114 # define mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i))
7115 #endif
7116
7117 #ifndef mPUSHu
7118 # define mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u))
7119 #endif
7120 #ifndef mXPUSHs
7121 # define mXPUSHs(s) XPUSHs(sv_2mortal(s))
7122 #endif
7123
7124 #ifndef XPUSHmortal
7125 # define XPUSHmortal XPUSHs(sv_newmortal())
7126 #endif
7127
7128 #ifndef mXPUSHp
7129 # define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END
7130 #endif
7131
7132 #ifndef mXPUSHn
7133 # define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END
7134 #endif
7135
7136 #ifndef mXPUSHi
7137 # define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END
7138 #endif
7139
7140 #ifndef mXPUSHu
7141 # define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END
7142 #endif
7143
7144 /* Replace: 1 */
7145 #ifndef call_sv
7146 # define call_sv perl_call_sv
7147 #endif
7148
7149 #ifndef call_pv
7150 # define call_pv perl_call_pv
7151 #endif
7152
7153 #ifndef call_argv
7154 # define call_argv perl_call_argv
7155 #endif
7156
7157 #ifndef call_method
7158 # define call_method perl_call_method
7159 #endif
7160 #ifndef eval_sv
7161 # define eval_sv perl_eval_sv
7162 #endif
7163
7164 /* Replace: 0 */
7165 #ifndef PERL_LOADMOD_DENY
7166 # define PERL_LOADMOD_DENY 0x1
7167 #endif
7168
7169 #ifndef PERL_LOADMOD_NOIMPORT
7170 # define PERL_LOADMOD_NOIMPORT 0x2
7171 #endif
7172
7173 #ifndef PERL_LOADMOD_IMPORT_OPS
7174 # define PERL_LOADMOD_IMPORT_OPS 0x4
7175 #endif
7176
7177 #ifndef G_METHOD
7178 # define G_METHOD 64
7179 # ifdef call_sv
7180 # undef call_sv
7181 # endif
7182 # if (PERL_BCDVERSION < 0x5006000)
7183 # define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \
7184 (flags) & ~G_METHOD) : perl_call_sv(sv, flags))
7185 # else
7186 # define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \
7187 (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags))
7188 # endif
7189 #endif
7190
7191 /* Older Perl versions have broken croak_on_error=1 */
7192 #if (PERL_BCDVERSION < 0x5031002)
7193 # ifdef eval_pv
7194 # undef eval_pv
7195 # if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
7196 # define eval_pv(p, croak_on_error) ({ SV *_sv = Perl_eval_pv(aTHX_ p, 0); SV *_errsv = ERRSV; (croak_on_error && (SvROK(_errsv) || SvTRUE(_errsv)) && (croak_sv(_errsv), 1)); _sv; })
7197 # else
7198 # define eval_pv(p, croak_on_error) ((PL_Sv = Perl_eval_pv(aTHX_ p, 0)), (croak_on_error && (SvROK(ERRSV) || SvTRUE(ERRSV)) && (croak_sv(ERRSV), 1)), PL_Sv)
7199 # endif
7200 # endif
7201 #endif
7202
7203 /* Replace perl_eval_pv with eval_pv */
7204
7205 #ifndef eval_pv
7206 #if defined(NEED_eval_pv)
7207 static SV * DPPP_(my_eval_pv)(const char * p, I32 croak_on_error);
7208 static
7209 #else
7210 extern SV * DPPP_(my_eval_pv)(const char * p, I32 croak_on_error);
7211 #endif
7212
7213 #if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL)
7214
7215 #ifdef eval_pv
7216 # undef eval_pv
7217 #endif
7218 #define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b)
7219 #define Perl_eval_pv DPPP_(my_eval_pv)
7220
7221
7222 SV*
DPPP_(my_eval_pv)7223 DPPP_(my_eval_pv)(const char *p, I32 croak_on_error)
7224 {
7225 dSP;
7226 SV* errsv;
7227 SV* sv = newSVpv(p, 0);
7228
7229 PUSHMARK(sp);
7230 eval_sv(sv, G_SCALAR);
7231 SvREFCNT_dec(sv);
7232
7233 SPAGAIN;
7234 sv = POPs;
7235 PUTBACK;
7236
7237 if (croak_on_error) {
7238 errsv = ERRSV;
7239 if (SvROK(errsv) || SvTRUE(errsv))
7240 croak_sv(errsv);
7241 }
7242
7243 return sv;
7244 }
7245
7246 #endif
7247 #endif
7248
7249 #if ! defined(vload_module) && defined(start_subparse)
7250 #if defined(NEED_vload_module)
7251 static void DPPP_(my_vload_module)(U32 flags, SV * name, SV * ver, va_list * args);
7252 static
7253 #else
7254 extern void DPPP_(my_vload_module)(U32 flags, SV * name, SV * ver, va_list * args);
7255 #endif
7256
7257 #if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL)
7258
7259 #ifdef vload_module
7260 # undef vload_module
7261 #endif
7262 #define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d)
7263 #define Perl_vload_module DPPP_(my_vload_module)
7264
7265
7266 void
DPPP_(my_vload_module)7267 DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args)
7268 {
7269 dTHR;
7270 dVAR;
7271 OP *veop, *imop;
7272
7273 OP * const modname = newSVOP(OP_CONST, 0, name);
7274 /* 5.005 has a somewhat hacky force_normal that doesn't croak on
7275 SvREADONLY() if PL_compling is true. Current perls take care in
7276 ck_require() to correctly turn off SvREADONLY before calling
7277 force_normal_flags(). This seems a better fix than fudging PL_compling
7278 */
7279 SvREADONLY_off(((SVOP*)modname)->op_sv);
7280 modname->op_private |= OPpCONST_BARE;
7281 if (ver) {
7282 veop = newSVOP(OP_CONST, 0, ver);
7283 }
7284 else
7285 veop = NULL;
7286 if (flags & PERL_LOADMOD_NOIMPORT) {
7287 imop = sawparens(newNULLLIST());
7288 }
7289 else if (flags & PERL_LOADMOD_IMPORT_OPS) {
7290 imop = va_arg(*args, OP*);
7291 }
7292 else {
7293 SV *sv;
7294 imop = NULL;
7295 sv = va_arg(*args, SV*);
7296 while (sv) {
7297 imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
7298 sv = va_arg(*args, SV*);
7299 }
7300 }
7301 {
7302 const line_t ocopline = PL_copline;
7303 COP * const ocurcop = PL_curcop;
7304 const int oexpect = PL_expect;
7305
7306 utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
7307 #if (PERL_BCDVERSION > 0x5003000)
7308 veop,
7309 #endif
7310 modname, imop);
7311 PL_expect = oexpect;
7312 PL_copline = ocopline;
7313 PL_curcop = ocurcop;
7314 }
7315 }
7316
7317 #endif
7318 #endif
7319
7320 #ifndef load_module
7321 #if defined(NEED_load_module)
7322 static void DPPP_(my_load_module)(U32 flags, SV * name, SV * ver, ...);
7323 static
7324 #else
7325 extern void DPPP_(my_load_module)(U32 flags, SV * name, SV * ver, ...);
7326 #endif
7327
7328 #if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL)
7329
7330 #ifdef load_module
7331 # undef load_module
7332 #endif
7333 #define load_module DPPP_(my_load_module)
7334 #define Perl_load_module DPPP_(my_load_module)
7335
7336
7337 void
DPPP_(my_load_module)7338 DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...)
7339 {
7340 va_list args;
7341 va_start(args, ver);
7342 vload_module(flags, name, ver, &args);
7343 va_end(args);
7344 }
7345
7346 #endif
7347 #endif
7348 #ifndef newRV_inc
7349 # define newRV_inc(sv) newRV(sv) /* Replace */
7350 #endif
7351
7352 #ifndef newRV_noinc
7353 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
7354 # define newRV_noinc(sv) ({ SV *_sv = (SV *)newRV((sv)); SvREFCNT_dec((sv)); _sv; })
7355 #else
7356 # define newRV_noinc(sv) ((PL_Sv = (SV *)newRV((sv))), SvREFCNT_dec((sv)), PL_Sv)
7357 #endif
7358 #endif
7359
7360 /*
7361 * Boilerplate macros for initializing and accessing interpreter-local
7362 * data from C. All statics in extensions should be reworked to use
7363 * this, if you want to make the extension thread-safe. See ext/re/re.xs
7364 * for an example of the use of these macros.
7365 *
7366 * Code that uses these macros is responsible for the following:
7367 * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
7368 * 2. Declare a typedef named my_cxt_t that is a structure that contains
7369 * all the data that needs to be interpreter-local.
7370 * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
7371 * 4. Use the MY_CXT_INIT macro such that it is called exactly once
7372 * (typically put in the BOOT: section).
7373 * 5. Use the members of the my_cxt_t structure everywhere as
7374 * MY_CXT.member.
7375 * 6. Use the dMY_CXT macro (a declaration) in all the functions that
7376 * access MY_CXT.
7377 */
7378
7379 #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \
7380 defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT)
7381
7382 #ifndef START_MY_CXT
7383
7384 /* This must appear in all extensions that define a my_cxt_t structure,
7385 * right after the definition (i.e. at file scope). The non-threads
7386 * case below uses it to declare the data as static. */
7387 #define START_MY_CXT
7388
7389 #if (PERL_BCDVERSION < 0x5004068)
7390 /* Fetches the SV that keeps the per-interpreter data. */
7391 #define dMY_CXT_SV \
7392 SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
7393 #else /* >= perl5.004_68 */
7394 #define dMY_CXT_SV \
7395 SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \
7396 sizeof(MY_CXT_KEY)-1, TRUE)
7397 #endif /* < perl5.004_68 */
7398
7399 /* This declaration should be used within all functions that use the
7400 * interpreter-local data. */
7401 #define dMY_CXT \
7402 dMY_CXT_SV; \
7403 my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
7404
7405 /* Creates and zeroes the per-interpreter data.
7406 * (We allocate my_cxtp in a Perl SV so that it will be released when
7407 * the interpreter goes away.) */
7408 #define MY_CXT_INIT \
7409 dMY_CXT_SV; \
7410 /* newSV() allocates one more than needed */ \
7411 my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
7412 Zero(my_cxtp, 1, my_cxt_t); \
7413 sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
7414
7415 /* This macro must be used to access members of the my_cxt_t structure.
7416 * e.g. MYCXT.some_data */
7417 #define MY_CXT (*my_cxtp)
7418
7419 /* Judicious use of these macros can reduce the number of times dMY_CXT
7420 * is used. Use is similar to pTHX, aTHX etc. */
7421 #define pMY_CXT my_cxt_t *my_cxtp
7422 #define pMY_CXT_ pMY_CXT,
7423 #define _pMY_CXT ,pMY_CXT
7424 #define aMY_CXT my_cxtp
7425 #define aMY_CXT_ aMY_CXT,
7426 #define _aMY_CXT ,aMY_CXT
7427
7428 #endif /* START_MY_CXT */
7429
7430 #ifndef MY_CXT_CLONE
7431 /* Clones the per-interpreter data. */
7432 #define MY_CXT_CLONE \
7433 dMY_CXT_SV; \
7434 my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
7435 Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
7436 sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
7437 #endif
7438
7439 #else /* single interpreter */
7440
7441 #ifndef START_MY_CXT
7442
7443 #define START_MY_CXT static my_cxt_t my_cxt;
7444 #define dMY_CXT_SV dNOOP
7445 #define dMY_CXT dNOOP
7446 #define MY_CXT_INIT NOOP
7447 #define MY_CXT my_cxt
7448
7449 #define pMY_CXT void
7450 #define pMY_CXT_
7451 #define _pMY_CXT
7452 #define aMY_CXT
7453 #define aMY_CXT_
7454 #define _aMY_CXT
7455
7456 #endif /* START_MY_CXT */
7457
7458 #ifndef MY_CXT_CLONE
7459 #define MY_CXT_CLONE NOOP
7460 #endif
7461
7462 #endif
7463
7464 #ifndef SvREFCNT_inc
7465 # ifdef PERL_USE_GCC_BRACE_GROUPS
7466 # define SvREFCNT_inc(sv) \
7467 ({ \
7468 SV * const _sv = (SV*)(sv); \
7469 if (_sv) \
7470 (SvREFCNT(_sv))++; \
7471 _sv; \
7472 })
7473 # else
7474 # define SvREFCNT_inc(sv) \
7475 ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
7476 # endif
7477 #endif
7478
7479 #ifndef SvREFCNT_inc_simple
7480 # ifdef PERL_USE_GCC_BRACE_GROUPS
7481 # define SvREFCNT_inc_simple(sv) \
7482 ({ \
7483 if (sv) \
7484 (SvREFCNT(sv))++; \
7485 (SV *)(sv); \
7486 })
7487 # else
7488 # define SvREFCNT_inc_simple(sv) \
7489 ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
7490 # endif
7491 #endif
7492
7493 #ifndef SvREFCNT_inc_NN
7494 # ifdef PERL_USE_GCC_BRACE_GROUPS
7495 # define SvREFCNT_inc_NN(sv) \
7496 ({ \
7497 SV * const _sv = (SV*)(sv); \
7498 SvREFCNT(_sv)++; \
7499 _sv; \
7500 })
7501 # else
7502 # define SvREFCNT_inc_NN(sv) \
7503 (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
7504 # endif
7505 #endif
7506
7507 #ifndef SvREFCNT_inc_void
7508 # ifdef PERL_USE_GCC_BRACE_GROUPS
7509 # define SvREFCNT_inc_void(sv) \
7510 ({ \
7511 SV * const _sv = (SV*)(sv); \
7512 if (_sv) \
7513 (void)(SvREFCNT(_sv)++); \
7514 })
7515 # else
7516 # define SvREFCNT_inc_void(sv) \
7517 (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
7518 # endif
7519 #endif
7520 #ifndef SvREFCNT_inc_simple_void
7521 # define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
7522 #endif
7523
7524 #ifndef SvREFCNT_inc_simple_NN
7525 # define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv))
7526 #endif
7527
7528 #ifndef SvREFCNT_inc_void_NN
7529 # define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
7530 #endif
7531
7532 #ifndef SvREFCNT_inc_simple_void_NN
7533 # define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
7534 #endif
7535
7536 #ifndef newSV_type
7537 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
7538 # define newSV_type(t) ({ SV *_sv = newSV(0); sv_upgrade(_sv, (t)); _sv; })
7539 #else
7540 # define newSV_type(t) ((PL_Sv = newSV(0)), sv_upgrade(PL_Sv, (t)), PL_Sv)
7541 #endif
7542 #endif
7543
7544 #if (PERL_BCDVERSION < 0x5006000)
7545 # define D_PPP_CONSTPV_ARG(x) ((char *) (x))
7546 #else
7547 # define D_PPP_CONSTPV_ARG(x) (x)
7548 #endif
7549 #ifndef newSVpvn
7550 # define newSVpvn(data,len) ((data) \
7551 ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
7552 : newSV(0))
7553 #endif
7554 #ifndef newSVpvn_utf8
7555 # define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
7556 #endif
7557 #ifndef SVf_UTF8
7558 # define SVf_UTF8 0
7559 #endif
7560
7561 #ifndef newSVpvn_flags
7562 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
7563 # define newSVpvn_flags(s, len, flags) ({ SV *_sv = newSVpvn(D_PPP_CONSTPV_ARG((s)), (len)); SvFLAGS(_sv) |= ((flags) & SVf_UTF8); ((flags) & SVs_TEMP) ? sv_2mortal(_sv) : _sv; })
7564 #else
7565 # define newSVpvn_flags(s, len, flags) ((PL_Sv = newSVpvn(D_PPP_CONSTPV_ARG((s)), (len))), SvFLAGS(PL_Sv) |= ((flags) & SVf_UTF8), (((flags) & SVs_TEMP) ? sv_2mortal(PL_Sv) : PL_Sv))
7566 #endif
7567 #endif
7568
7569 #if ( (PERL_BCDVERSION >= 0x5007003) && (PERL_BCDVERSION < 0x5008007) ) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009002) )
7570 #undef sv_setsv_flags
7571 #define SV_NOSTEAL 16
7572 #define sv_setsv_flags(dstr, sstr, flags) \
7573 STMT_START { \
7574 if (((flags) & SV_NOSTEAL) && (SvFLAGS((sstr)) & SVs_TEMP)) { \
7575 SvTEMP_off((sstr)); \
7576 Perl_sv_setsv_flags(aTHX_ (dstr), (sstr), (flags) & ~SV_NOSTEAL); \
7577 SvTEMP_on((sstr)); \
7578 } else { \
7579 Perl_sv_setsv_flags(aTHX_ (dstr), (sstr), (flags) & ~SV_NOSTEAL); \
7580 } \
7581 } STMT_END
7582 #endif
7583
7584 #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
7585 #ifndef newSVsv_flags
7586 # define newSVsv_flags(sv, flags) ({ SV *_sv = newSV(0); sv_setsv_flags(_sv, (sv), (flags)); _sv; })
7587 #endif
7588
7589 #else
7590 #ifndef newSVsv_flags
7591 # define newSVsv_flags(sv, flags) ((PL_Sv = newSV(0)), sv_setsv_flags(PL_Sv, (sv), (flags)), PL_Sv)
7592 #endif
7593
7594 #endif
7595
7596 #ifdef SV_NOSTEAL
7597 #ifndef newSVsv_nomg
7598 # define newSVsv_nomg(sv) newSVsv_flags((sv), SV_NOSTEAL)
7599 #endif
7600
7601 #endif
7602
7603 #if (PERL_BCDVERSION >= 0x5017005)
7604 #ifndef sv_mortalcopy_flags
7605 # define sv_mortalcopy_flags(sv, flags) Perl_sv_mortalcopy_flags(aTHX_ (sv), (flags))
7606 #endif
7607
7608 #else
7609 #ifndef sv_mortalcopy_flags
7610 # define sv_mortalcopy_flags(sv, flags) sv_2mortal(newSVsv_flags((sv), (flags)))
7611 #endif
7612
7613 #endif
7614 #ifndef SvMAGIC_set
7615 # define SvMAGIC_set(sv, val) \
7616 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
7617 (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
7618 #endif
7619
7620 #if (PERL_BCDVERSION < 0x5009003)
7621 #ifndef SvPVX_const
7622 # define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv)))
7623 #endif
7624
7625 #ifndef SvPVX_mutable
7626 # define SvPVX_mutable(sv) (0 + SvPVX(sv))
7627 #endif
7628 #ifndef SvRV_set
7629 # define SvRV_set(sv, val) \
7630 STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
7631 (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END
7632 #endif
7633
7634 #else
7635 #ifndef SvPVX_const
7636 # define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv))
7637 #endif
7638
7639 #ifndef SvPVX_mutable
7640 # define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv)
7641 #endif
7642 #ifndef SvRV_set
7643 # define SvRV_set(sv, val) \
7644 STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
7645 ((sv)->sv_u.svu_rv = (val)); } STMT_END
7646 #endif
7647
7648 #endif
7649 #ifndef SvSTASH_set
7650 # define SvSTASH_set(sv, val) \
7651 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
7652 (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
7653 #endif
7654
7655 #if (PERL_BCDVERSION < 0x5004000)
7656 #ifndef SvUV_set
7657 # define SvUV_set(sv, val) \
7658 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
7659 (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END
7660 #endif
7661
7662 #else
7663 #ifndef SvUV_set
7664 # define SvUV_set(sv, val) \
7665 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
7666 (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END
7667 #endif
7668
7669 #endif
7670
7671 /* Hint: newSVpvn_share
7672 * The SVs created by this function only mimic the behaviour of
7673 * shared PVs without really being shared. Only use if you know
7674 * what you're doing.
7675 */
7676
7677 #ifndef newSVpvn_share
7678
7679 #if defined(NEED_newSVpvn_share)
7680 static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char * s, I32 len, U32 hash);
7681 static
7682 #else
7683 extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char * s, I32 len, U32 hash);
7684 #endif
7685
7686 #if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL)
7687
7688 #ifdef newSVpvn_share
7689 # undef newSVpvn_share
7690 #endif
7691 #define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c)
7692 #define Perl_newSVpvn_share DPPP_(my_newSVpvn_share)
7693
7694
7695 SV *
DPPP_(my_newSVpvn_share)7696 DPPP_(my_newSVpvn_share)(pTHX_ const char *s, I32 len, U32 hash)
7697 {
7698 SV *sv;
7699 if (len < 0)
7700 len = -len;
7701 if (!hash)
7702 PERL_HASH(hash, (char*) s, len);
7703 sv = newSVpvn((char *) s, len);
7704 sv_upgrade(sv, SVt_PVIV);
7705 SvIVX(sv) = hash;
7706 SvREADONLY_on(sv);
7707 SvPOK_on(sv);
7708 return sv;
7709 }
7710
7711 #endif
7712
7713 #endif
7714 #ifndef SvSHARED_HASH
7715 # define SvSHARED_HASH(sv) (0 + SvUVX(sv))
7716 #endif
7717 #ifndef HvNAME_get
7718 # define HvNAME_get(hv) HvNAME(hv)
7719 #endif
7720 #ifndef HvNAMELEN_get
7721 # define HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0)
7722 #endif
7723
7724 #if (PERL_BCDVERSION >= 0x5009002) && (PERL_BCDVERSION <= 0x5009003) /* 5.9.2 and 5.9.3 ignore the length param */
7725 #undef gv_fetchpvn_flags
7726 #endif
7727 #ifndef GV_NOADD_MASK
7728 # define GV_NOADD_MASK 0xE0
7729 #endif
7730
7731 #ifndef gv_fetchpvn_flags
7732 # define gv_fetchpvn_flags(name, len, flags, sv_type) gv_fetchpv(SvPVX(sv_2mortal(newSVpvn((name), (len)))), ((flags) & GV_NOADD_MASK) ? FALSE : TRUE, (I32)(sv_type))
7733 #endif
7734 #ifndef GvSVn
7735 # define GvSVn(gv) GvSV(gv)
7736 #endif
7737
7738 #ifndef isGV_with_GP
7739 # define isGV_with_GP(gv) isGV(gv)
7740 #endif
7741
7742 #ifndef gv_fetchsv
7743 # define gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt)
7744 #endif
7745 #ifndef get_cvn_flags
7746 # define get_cvn_flags(name, namelen, flags) get_cv(name, flags)
7747 #endif
7748
7749 #ifndef gv_init_pvn
7750 # define gv_init_pvn(gv, stash, ptr, len, flags) gv_init(gv, stash, ptr, len, flags & GV_ADDMULTI ? TRUE : FALSE)
7751 #endif
7752
7753 /* concatenating with "" ensures that only literal strings are accepted as argument
7754 * note that STR_WITH_LEN() can't be used as argument to macros or functions that
7755 * under some configurations might be macros
7756 */
7757 #ifndef STR_WITH_LEN
7758 # define STR_WITH_LEN(s) (s ""), (sizeof(s)-1)
7759 #endif
7760 #ifndef newSVpvs
7761 # define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1)
7762 #endif
7763
7764 #ifndef newSVpvs_flags
7765 # define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags)
7766 #endif
7767
7768 #ifndef newSVpvs_share
7769 # define newSVpvs_share(str) newSVpvn_share(str "", sizeof(str) - 1, 0)
7770 #endif
7771
7772 #ifndef sv_catpvs
7773 # define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1)
7774 #endif
7775
7776 #ifndef sv_setpvs
7777 # define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1)
7778 #endif
7779
7780 #ifndef hv_fetchs
7781 # define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval)
7782 #endif
7783
7784 #ifndef hv_stores
7785 # define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0)
7786 #endif
7787 #ifndef gv_fetchpvs
7788 # define gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt)
7789 #endif
7790
7791 #ifndef gv_stashpvs
7792 # define gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags)
7793 #endif
7794 #ifndef get_cvs
7795 # define get_cvs(name, flags) get_cvn_flags(name "", sizeof(name)-1, flags)
7796 #endif
7797 #ifndef SvGETMAGIC
7798 # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
7799 #endif
7800
7801 /* That's the best we can do... */
7802 #ifndef sv_catpvn_nomg
7803 # define sv_catpvn_nomg sv_catpvn
7804 #endif
7805
7806 #ifndef sv_catsv_nomg
7807 # define sv_catsv_nomg sv_catsv
7808 #endif
7809
7810 #ifndef sv_setsv_nomg
7811 # define sv_setsv_nomg sv_setsv
7812 #endif
7813
7814 #ifndef sv_pvn_nomg
7815 # define sv_pvn_nomg sv_pvn
7816 #endif
7817
7818 #ifdef SV_NOSTEAL
7819 #ifndef SvIV_nomg
7820 # define SvIV_nomg(sv) (!SvGMAGICAL((sv)) ? SvIV((sv)) : SvIVx(sv_mortalcopy_flags((sv), SV_NOSTEAL)))
7821 #endif
7822
7823 #ifndef SvUV_nomg
7824 # define SvUV_nomg(sv) (!SvGMAGICAL((sv)) ? SvUV((sv)) : SvUVx(sv_mortalcopy_flags((sv), SV_NOSTEAL)))
7825 #endif
7826
7827 #ifndef SvNV_nomg
7828 # define SvNV_nomg(sv) (!SvGMAGICAL((sv)) ? SvNV((sv)) : SvNVx(sv_mortalcopy_flags((sv), SV_NOSTEAL)))
7829 #endif
7830
7831 #ifndef SvTRUE_nomg
7832 # define SvTRUE_nomg(sv) (!SvGMAGICAL((sv)) ? SvTRUE((sv)) : SvTRUEx(sv_mortalcopy_flags((sv), SV_NOSTEAL)))
7833 #endif
7834
7835 #endif
7836
7837 #ifndef sv_catpv_mg
7838 # define sv_catpv_mg(sv, ptr) \
7839 STMT_START { \
7840 SV *TeMpSv = sv; \
7841 sv_catpv(TeMpSv,ptr); \
7842 SvSETMAGIC(TeMpSv); \
7843 } STMT_END
7844 #endif
7845
7846 #ifndef sv_catpvn_mg
7847 # define sv_catpvn_mg(sv, ptr, len) \
7848 STMT_START { \
7849 SV *TeMpSv = sv; \
7850 sv_catpvn(TeMpSv,ptr,len); \
7851 SvSETMAGIC(TeMpSv); \
7852 } STMT_END
7853 #endif
7854
7855 #ifndef sv_catsv_mg
7856 # define sv_catsv_mg(dsv, ssv) \
7857 STMT_START { \
7858 SV *TeMpSv = dsv; \
7859 sv_catsv(TeMpSv,ssv); \
7860 SvSETMAGIC(TeMpSv); \
7861 } STMT_END
7862 #endif
7863
7864 #ifndef sv_setiv_mg
7865 # define sv_setiv_mg(sv, i) \
7866 STMT_START { \
7867 SV *TeMpSv = sv; \
7868 sv_setiv(TeMpSv,i); \
7869 SvSETMAGIC(TeMpSv); \
7870 } STMT_END
7871 #endif
7872
7873 #ifndef sv_setnv_mg
7874 # define sv_setnv_mg(sv, num) \
7875 STMT_START { \
7876 SV *TeMpSv = sv; \
7877 sv_setnv(TeMpSv,num); \
7878 SvSETMAGIC(TeMpSv); \
7879 } STMT_END
7880 #endif
7881
7882 #ifndef sv_setpv_mg
7883 # define sv_setpv_mg(sv, ptr) \
7884 STMT_START { \
7885 SV *TeMpSv = sv; \
7886 sv_setpv(TeMpSv,ptr); \
7887 SvSETMAGIC(TeMpSv); \
7888 } STMT_END
7889 #endif
7890
7891 #ifndef sv_setpvn_mg
7892 # define sv_setpvn_mg(sv, ptr, len) \
7893 STMT_START { \
7894 SV *TeMpSv = sv; \
7895 sv_setpvn(TeMpSv,ptr,len); \
7896 SvSETMAGIC(TeMpSv); \
7897 } STMT_END
7898 #endif
7899
7900 #ifndef sv_setsv_mg
7901 # define sv_setsv_mg(dsv, ssv) \
7902 STMT_START { \
7903 SV *TeMpSv = dsv; \
7904 sv_setsv(TeMpSv,ssv); \
7905 SvSETMAGIC(TeMpSv); \
7906 } STMT_END
7907 #endif
7908
7909 #ifndef sv_setuv_mg
7910 # define sv_setuv_mg(sv, i) \
7911 STMT_START { \
7912 SV *TeMpSv = sv; \
7913 sv_setuv(TeMpSv,i); \
7914 SvSETMAGIC(TeMpSv); \
7915 } STMT_END
7916 #endif
7917
7918 #ifndef sv_usepvn_mg
7919 # define sv_usepvn_mg(sv, ptr, len) \
7920 STMT_START { \
7921 SV *TeMpSv = sv; \
7922 sv_usepvn(TeMpSv,ptr,len); \
7923 SvSETMAGIC(TeMpSv); \
7924 } STMT_END
7925 #endif
7926 #ifndef SvVSTRING_mg
7927 # define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL)
7928 #endif
7929
7930 /* Hint: sv_magic_portable
7931 * This is a compatibility function that is only available with
7932 * Devel::PPPort. It is NOT in the perl core.
7933 * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when
7934 * it is being passed a name pointer with namlen == 0. In that
7935 * case, perl 5.8.0 and later store the pointer, not a copy of it.
7936 * The compatibility can be provided back to perl 5.004. With
7937 * earlier versions, the code will not compile.
7938 */
7939
7940 #if (PERL_BCDVERSION < 0x5004000)
7941
7942 /* code that uses sv_magic_portable will not compile */
7943
7944 #elif (PERL_BCDVERSION < 0x5008000)
7945
7946 # define sv_magic_portable(sv, obj, how, name, namlen) \
7947 STMT_START { \
7948 SV *SvMp_sv = (sv); \
7949 char *SvMp_name = (char *) (name); \
7950 I32 SvMp_namlen = (namlen); \
7951 if (SvMp_name && SvMp_namlen == 0) \
7952 { \
7953 MAGIC *mg; \
7954 sv_magic(SvMp_sv, obj, how, 0, 0); \
7955 mg = SvMAGIC(SvMp_sv); \
7956 mg->mg_len = -42; /* XXX: this is the tricky part */ \
7957 mg->mg_ptr = SvMp_name; \
7958 } \
7959 else \
7960 { \
7961 sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \
7962 } \
7963 } STMT_END
7964
7965 #else
7966
7967 # define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e)
7968
7969 #endif
7970
7971 #if !defined(mg_findext)
7972 #if defined(NEED_mg_findext)
7973 static MAGIC * DPPP_(my_mg_findext)(const SV * sv, int type, const MGVTBL * vtbl);
7974 static
7975 #else
7976 extern MAGIC * DPPP_(my_mg_findext)(const SV * sv, int type, const MGVTBL * vtbl);
7977 #endif
7978
7979 #if defined(NEED_mg_findext) || defined(NEED_mg_findext_GLOBAL)
7980
7981 #define mg_findext DPPP_(my_mg_findext)
7982 #define Perl_mg_findext DPPP_(my_mg_findext)
7983
7984
7985 MAGIC *
DPPP_(my_mg_findext)7986 DPPP_(my_mg_findext)(const SV * sv, int type, const MGVTBL *vtbl) {
7987 if (sv) {
7988 MAGIC *mg;
7989
7990 #ifdef AvPAD_NAMELIST
7991 assert(!(SvTYPE(sv) == SVt_PVAV && AvPAD_NAMELIST(sv)));
7992 #endif
7993
7994 for (mg = SvMAGIC (sv); mg; mg = mg->mg_moremagic) {
7995 if (mg->mg_type == type && mg->mg_virtual == vtbl)
7996 return mg;
7997 }
7998 }
7999
8000 return NULL;
8001 }
8002
8003 #endif
8004 #endif
8005
8006 #if !defined(sv_unmagicext)
8007 #if defined(NEED_sv_unmagicext)
8008 static int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl);
8009 static
8010 #else
8011 extern int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl);
8012 #endif
8013
8014 #if defined(NEED_sv_unmagicext) || defined(NEED_sv_unmagicext_GLOBAL)
8015
8016 #ifdef sv_unmagicext
8017 # undef sv_unmagicext
8018 #endif
8019 #define sv_unmagicext(a,b,c) DPPP_(my_sv_unmagicext)(aTHX_ a,b,c)
8020 #define Perl_sv_unmagicext DPPP_(my_sv_unmagicext)
8021
8022
8023 int
DPPP_(my_sv_unmagicext)8024 DPPP_(my_sv_unmagicext)(pTHX_ SV *const sv, const int type, MGVTBL *vtbl)
8025 {
8026 MAGIC* mg;
8027 MAGIC** mgp;
8028
8029 if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv))
8030 return 0;
8031 mgp = &(SvMAGIC(sv));
8032 for (mg = *mgp; mg; mg = *mgp) {
8033 const MGVTBL* const virt = mg->mg_virtual;
8034 if (mg->mg_type == type && virt == vtbl) {
8035 *mgp = mg->mg_moremagic;
8036 if (virt && virt->svt_free)
8037 virt->svt_free(aTHX_ sv, mg);
8038 if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) {
8039 if (mg->mg_len > 0)
8040 Safefree(mg->mg_ptr);
8041 else if (mg->mg_len == HEf_SVKEY) /* Questionable on older perls... */
8042 SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr));
8043 else if (mg->mg_type == PERL_MAGIC_utf8)
8044 Safefree(mg->mg_ptr);
8045 }
8046 if (mg->mg_flags & MGf_REFCOUNTED)
8047 SvREFCNT_dec(mg->mg_obj);
8048 Safefree(mg);
8049 }
8050 else
8051 mgp = &mg->mg_moremagic;
8052 }
8053 if (SvMAGIC(sv)) {
8054 if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */
8055 mg_magical(sv); /* else fix the flags now */
8056 }
8057 else {
8058 SvMAGICAL_off(sv);
8059 SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT;
8060 }
8061 return 0;
8062 }
8063
8064 #endif
8065 #endif
8066
8067 #ifdef USE_ITHREADS
8068 #ifndef CopFILE
8069 # define CopFILE(c) ((c)->cop_file)
8070 #endif
8071
8072 #ifndef CopFILEGV
8073 # define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv)
8074 #endif
8075
8076 #ifndef CopFILE_set
8077 # define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv))
8078 #endif
8079
8080 #ifndef CopFILESV
8081 # define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv)
8082 #endif
8083
8084 #ifndef CopFILEAV
8085 # define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav)
8086 #endif
8087
8088 #ifndef CopSTASHPV
8089 # define CopSTASHPV(c) ((c)->cop_stashpv)
8090 #endif
8091
8092 #ifndef CopSTASHPV_set
8093 # define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch))
8094 #endif
8095
8096 #ifndef CopSTASH
8097 # define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv)
8098 #endif
8099
8100 #ifndef CopSTASH_set
8101 # define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch)
8102 #endif
8103
8104 #ifndef CopSTASH_eq
8105 # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \
8106 || (CopSTASHPV(c) && HvNAME(hv) \
8107 && strEQ(CopSTASHPV(c), HvNAME(hv)))))
8108 #endif
8109
8110 #else
8111 #ifndef CopFILEGV
8112 # define CopFILEGV(c) ((c)->cop_filegv)
8113 #endif
8114
8115 #ifndef CopFILEGV_set
8116 # define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
8117 #endif
8118
8119 #ifndef CopFILE_set
8120 # define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv))
8121 #endif
8122
8123 #ifndef CopFILESV
8124 # define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv)
8125 #endif
8126
8127 #ifndef CopFILEAV
8128 # define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav)
8129 #endif
8130
8131 #ifndef CopFILE
8132 # define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch)
8133 #endif
8134
8135 #ifndef CopSTASH
8136 # define CopSTASH(c) ((c)->cop_stash)
8137 #endif
8138
8139 #ifndef CopSTASH_set
8140 # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv))
8141 #endif
8142
8143 #ifndef CopSTASHPV
8144 # define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch)
8145 #endif
8146
8147 #ifndef CopSTASHPV_set
8148 # define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
8149 #endif
8150
8151 #ifndef CopSTASH_eq
8152 # define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv))
8153 #endif
8154
8155 #endif /* USE_ITHREADS */
8156
8157 #if (PERL_BCDVERSION >= 0x5006000)
8158 #ifndef caller_cx
8159
8160 # if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL)
8161 static I32
DPPP_dopoptosub_at(const PERL_CONTEXT * cxstk,I32 startingblock)8162 DPPP_dopoptosub_at(const PERL_CONTEXT *cxstk, I32 startingblock)
8163 {
8164 I32 i;
8165
8166 for (i = startingblock; i >= 0; i--) {
8167 register const PERL_CONTEXT * const cx = &cxstk[i];
8168 switch (CxTYPE(cx)) {
8169 default:
8170 continue;
8171 case CXt_EVAL:
8172 case CXt_SUB:
8173 case CXt_FORMAT:
8174 return i;
8175 }
8176 }
8177 return i;
8178 }
8179 # endif
8180
8181 # if defined(NEED_caller_cx)
8182 static const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 level, const PERL_CONTEXT * * dbcxp);
8183 static
8184 #else
8185 extern const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 level, const PERL_CONTEXT * * dbcxp);
8186 #endif
8187
8188 #if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL)
8189
8190 #ifdef caller_cx
8191 # undef caller_cx
8192 #endif
8193 #define caller_cx(a,b) DPPP_(my_caller_cx)(aTHX_ a,b)
8194 #define Perl_caller_cx DPPP_(my_caller_cx)
8195
8196
8197 const PERL_CONTEXT *
DPPP_(my_caller_cx)8198 DPPP_(my_caller_cx)(pTHX_ I32 level, const PERL_CONTEXT **dbcxp)
8199 {
8200 register I32 cxix = DPPP_dopoptosub_at(cxstack, cxstack_ix);
8201 register const PERL_CONTEXT *cx;
8202 register const PERL_CONTEXT *ccstack = cxstack;
8203 const PERL_SI *top_si = PL_curstackinfo;
8204
8205 for (;;) {
8206 /* we may be in a higher stacklevel, so dig down deeper */
8207 while (cxix < 0 && top_si->si_type != PERLSI_MAIN) {
8208 top_si = top_si->si_prev;
8209 ccstack = top_si->si_cxstack;
8210 cxix = DPPP_dopoptosub_at(ccstack, top_si->si_cxix);
8211 }
8212 if (cxix < 0)
8213 return NULL;
8214 /* caller() should not report the automatic calls to &DB::sub */
8215 if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 &&
8216 ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub))
8217 level++;
8218 if (!level--)
8219 break;
8220 cxix = DPPP_dopoptosub_at(ccstack, cxix - 1);
8221 }
8222
8223 cx = &ccstack[cxix];
8224 if (dbcxp) *dbcxp = cx;
8225
8226 if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) {
8227 const I32 dbcxix = DPPP_dopoptosub_at(ccstack, cxix - 1);
8228 /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the
8229 field below is defined for any cx. */
8230 /* caller() should not report the automatic calls to &DB::sub */
8231 if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub))
8232 cx = &ccstack[dbcxix];
8233 }
8234
8235 return cx;
8236 }
8237
8238 # endif
8239 #endif /* caller_cx */
8240 #endif /* 5.6.0 */
8241 #ifndef IN_PERL_COMPILETIME
8242 # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling)
8243 #endif
8244
8245 #ifndef IN_LOCALE_RUNTIME
8246 # define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE)
8247 #endif
8248
8249 #ifndef IN_LOCALE_COMPILETIME
8250 # define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE)
8251 #endif
8252
8253 #ifndef IN_LOCALE
8254 # define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
8255 #endif
8256 #ifndef IS_NUMBER_IN_UV
8257 # define IS_NUMBER_IN_UV 0x01
8258 #endif
8259
8260 #ifndef IS_NUMBER_GREATER_THAN_UV_MAX
8261 # define IS_NUMBER_GREATER_THAN_UV_MAX 0x02
8262 #endif
8263
8264 #ifndef IS_NUMBER_NOT_INT
8265 # define IS_NUMBER_NOT_INT 0x04
8266 #endif
8267
8268 #ifndef IS_NUMBER_NEG
8269 # define IS_NUMBER_NEG 0x08
8270 #endif
8271
8272 #ifndef IS_NUMBER_INFINITY
8273 # define IS_NUMBER_INFINITY 0x10
8274 #endif
8275
8276 #ifndef IS_NUMBER_NAN
8277 # define IS_NUMBER_NAN 0x20
8278 #endif
8279 #ifndef GROK_NUMERIC_RADIX
8280 # define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
8281 #endif
8282 #ifndef PERL_SCAN_GREATER_THAN_UV_MAX
8283 # define PERL_SCAN_GREATER_THAN_UV_MAX 0x02
8284 #endif
8285
8286 #ifndef PERL_SCAN_SILENT_ILLDIGIT
8287 # define PERL_SCAN_SILENT_ILLDIGIT 0x04
8288 #endif
8289
8290 #ifndef PERL_SCAN_ALLOW_UNDERSCORES
8291 # define PERL_SCAN_ALLOW_UNDERSCORES 0x01
8292 #endif
8293
8294 #ifndef PERL_SCAN_DISALLOW_PREFIX
8295 # define PERL_SCAN_DISALLOW_PREFIX 0x02
8296 #endif
8297
8298 #ifndef grok_numeric_radix
8299 #if defined(NEED_grok_numeric_radix)
8300 static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char * * sp, const char * send);
8301 static
8302 #else
8303 extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char * * sp, const char * send);
8304 #endif
8305
8306 #if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL)
8307
8308 #ifdef grok_numeric_radix
8309 # undef grok_numeric_radix
8310 #endif
8311 #define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b)
8312 #define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix)
8313
8314 bool
DPPP_(my_grok_numeric_radix)8315 DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
8316 {
8317 #ifdef USE_LOCALE_NUMERIC
8318 #ifdef PL_numeric_radix_sv
8319 if (PL_numeric_radix_sv && IN_LOCALE) {
8320 STRLEN len;
8321 char* radix = SvPV(PL_numeric_radix_sv, len);
8322 if (*sp + len <= send && memEQ(*sp, radix, len)) {
8323 *sp += len;
8324 return TRUE;
8325 }
8326 }
8327 #else
8328 /* older perls don't have PL_numeric_radix_sv so the radix
8329 * must manually be requested from locale.h
8330 */
8331 #include <locale.h>
8332 dTHR; /* needed for older threaded perls */
8333 struct lconv *lc = localeconv();
8334 char *radix = lc->decimal_point;
8335 if (radix && IN_LOCALE) {
8336 STRLEN len = strlen(radix);
8337 if (*sp + len <= send && memEQ(*sp, radix, len)) {
8338 *sp += len;
8339 return TRUE;
8340 }
8341 }
8342 #endif
8343 #endif /* USE_LOCALE_NUMERIC */
8344 /* always try "." if numeric radix didn't match because
8345 * we may have data from different locales mixed */
8346 if (*sp < send && **sp == '.') {
8347 ++*sp;
8348 return TRUE;
8349 }
8350 return FALSE;
8351 }
8352 #endif
8353 #endif
8354
8355 #ifndef grok_number
8356 #if defined(NEED_grok_number)
8357 static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
8358 static
8359 #else
8360 extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
8361 #endif
8362
8363 #if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL)
8364
8365 #ifdef grok_number
8366 # undef grok_number
8367 #endif
8368 #define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c)
8369 #define Perl_grok_number DPPP_(my_grok_number)
8370
8371 int
DPPP_(my_grok_number)8372 DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
8373 {
8374 const char *s = pv;
8375 const char *send = pv + len;
8376 const UV max_div_10 = UV_MAX / 10;
8377 const char max_mod_10 = UV_MAX % 10;
8378 int numtype = 0;
8379 int sawinf = 0;
8380 int sawnan = 0;
8381
8382 while (s < send && isSPACE(*s))
8383 s++;
8384 if (s == send) {
8385 return 0;
8386 } else if (*s == '-') {
8387 s++;
8388 numtype = IS_NUMBER_NEG;
8389 }
8390 else if (*s == '+')
8391 s++;
8392
8393 if (s == send)
8394 return 0;
8395
8396 /* next must be digit or the radix separator or beginning of infinity */
8397 if (isDIGIT(*s)) {
8398 /* UVs are at least 32 bits, so the first 9 decimal digits cannot
8399 overflow. */
8400 UV value = *s - '0';
8401 /* This construction seems to be more optimiser friendly.
8402 (without it gcc does the isDIGIT test and the *s - '0' separately)
8403 With it gcc on arm is managing 6 instructions (6 cycles) per digit.
8404 In theory the optimiser could deduce how far to unroll the loop
8405 before checking for overflow. */
8406 if (++s < send) {
8407 int digit = *s - '0';
8408 if (digit >= 0 && digit <= 9) {
8409 value = value * 10 + digit;
8410 if (++s < send) {
8411 digit = *s - '0';
8412 if (digit >= 0 && digit <= 9) {
8413 value = value * 10 + digit;
8414 if (++s < send) {
8415 digit = *s - '0';
8416 if (digit >= 0 && digit <= 9) {
8417 value = value * 10 + digit;
8418 if (++s < send) {
8419 digit = *s - '0';
8420 if (digit >= 0 && digit <= 9) {
8421 value = value * 10 + digit;
8422 if (++s < send) {
8423 digit = *s - '0';
8424 if (digit >= 0 && digit <= 9) {
8425 value = value * 10 + digit;
8426 if (++s < send) {
8427 digit = *s - '0';
8428 if (digit >= 0 && digit <= 9) {
8429 value = value * 10 + digit;
8430 if (++s < send) {
8431 digit = *s - '0';
8432 if (digit >= 0 && digit <= 9) {
8433 value = value * 10 + digit;
8434 if (++s < send) {
8435 digit = *s - '0';
8436 if (digit >= 0 && digit <= 9) {
8437 value = value * 10 + digit;
8438 if (++s < send) {
8439 /* Now got 9 digits, so need to check
8440 each time for overflow. */
8441 digit = *s - '0';
8442 while (digit >= 0 && digit <= 9
8443 && (value < max_div_10
8444 || (value == max_div_10
8445 && digit <= max_mod_10))) {
8446 value = value * 10 + digit;
8447 if (++s < send)
8448 digit = *s - '0';
8449 else
8450 break;
8451 }
8452 if (digit >= 0 && digit <= 9
8453 && (s < send)) {
8454 /* value overflowed.
8455 skip the remaining digits, don't
8456 worry about setting *valuep. */
8457 do {
8458 s++;
8459 } while (s < send && isDIGIT(*s));
8460 numtype |=
8461 IS_NUMBER_GREATER_THAN_UV_MAX;
8462 goto skip_value;
8463 }
8464 }
8465 }
8466 }
8467 }
8468 }
8469 }
8470 }
8471 }
8472 }
8473 }
8474 }
8475 }
8476 }
8477 }
8478 }
8479 }
8480 }
8481 numtype |= IS_NUMBER_IN_UV;
8482 if (valuep)
8483 *valuep = value;
8484
8485 skip_value:
8486 if (GROK_NUMERIC_RADIX(&s, send)) {
8487 numtype |= IS_NUMBER_NOT_INT;
8488 while (s < send && isDIGIT(*s)) /* optional digits after the radix */
8489 s++;
8490 }
8491 }
8492 else if (GROK_NUMERIC_RADIX(&s, send)) {
8493 numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */
8494 /* no digits before the radix means we need digits after it */
8495 if (s < send && isDIGIT(*s)) {
8496 do {
8497 s++;
8498 } while (s < send && isDIGIT(*s));
8499 if (valuep) {
8500 /* integer approximation is valid - it's 0. */
8501 *valuep = 0;
8502 }
8503 }
8504 else
8505 return 0;
8506 } else if (*s == 'I' || *s == 'i') {
8507 s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
8508 s++; if (s == send || (*s != 'F' && *s != 'f')) return 0;
8509 s++; if (s < send && (*s == 'I' || *s == 'i')) {
8510 s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
8511 s++; if (s == send || (*s != 'I' && *s != 'i')) return 0;
8512 s++; if (s == send || (*s != 'T' && *s != 't')) return 0;
8513 s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0;
8514 s++;
8515 }
8516 sawinf = 1;
8517 } else if (*s == 'N' || *s == 'n') {
8518 /* XXX TODO: There are signaling NaNs and quiet NaNs. */
8519 s++; if (s == send || (*s != 'A' && *s != 'a')) return 0;
8520 s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
8521 s++;
8522 sawnan = 1;
8523 } else
8524 return 0;
8525
8526 if (sawinf) {
8527 numtype &= IS_NUMBER_NEG; /* Keep track of sign */
8528 numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
8529 } else if (sawnan) {
8530 numtype &= IS_NUMBER_NEG; /* Keep track of sign */
8531 numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;
8532 } else if (s < send) {
8533 /* we can have an optional exponent part */
8534 if (*s == 'e' || *s == 'E') {
8535 /* The only flag we keep is sign. Blow away any "it's UV" */
8536 numtype &= IS_NUMBER_NEG;
8537 numtype |= IS_NUMBER_NOT_INT;
8538 s++;
8539 if (s < send && (*s == '-' || *s == '+'))
8540 s++;
8541 if (s < send && isDIGIT(*s)) {
8542 do {
8543 s++;
8544 } while (s < send && isDIGIT(*s));
8545 }
8546 else
8547 return 0;
8548 }
8549 }
8550 while (s < send && isSPACE(*s))
8551 s++;
8552 if (s >= send)
8553 return numtype;
8554 if (len == 10 && memEQ(pv, "0 but true", 10)) {
8555 if (valuep)
8556 *valuep = 0;
8557 return IS_NUMBER_IN_UV;
8558 }
8559 return 0;
8560 }
8561 #endif
8562 #endif
8563
8564 /*
8565 * The grok_* routines have been modified to use warn() instead of
8566 * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit,
8567 * which is why the stack variable has been renamed to 'xdigit'.
8568 */
8569
8570 #ifndef grok_bin
8571 #if defined(NEED_grok_bin)
8572 static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
8573 static
8574 #else
8575 extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
8576 #endif
8577
8578 #if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL)
8579
8580 #ifdef grok_bin
8581 # undef grok_bin
8582 #endif
8583 #define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d)
8584 #define Perl_grok_bin DPPP_(my_grok_bin)
8585
8586 UV
DPPP_(my_grok_bin)8587 DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
8588 {
8589 const char *s = start;
8590 STRLEN len = *len_p;
8591 UV value = 0;
8592 NV value_nv = 0;
8593
8594 const UV max_div_2 = UV_MAX / 2;
8595 bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
8596 bool overflowed = FALSE;
8597
8598 if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
8599 /* strip off leading b or 0b.
8600 for compatibility silently suffer "b" and "0b" as valid binary
8601 numbers. */
8602 if (len >= 1) {
8603 if (s[0] == 'b') {
8604 s++;
8605 len--;
8606 }
8607 else if (len >= 2 && s[0] == '0' && s[1] == 'b') {
8608 s+=2;
8609 len-=2;
8610 }
8611 }
8612 }
8613
8614 for (; len-- && *s; s++) {
8615 char bit = *s;
8616 if (bit == '0' || bit == '1') {
8617 /* Write it in this wonky order with a goto to attempt to get the
8618 compiler to make the common case integer-only loop pretty tight.
8619 With gcc seems to be much straighter code than old scan_bin. */
8620 redo:
8621 if (!overflowed) {
8622 if (value <= max_div_2) {
8623 value = (value << 1) | (bit - '0');
8624 continue;
8625 }
8626 /* Bah. We're just overflowed. */
8627 warn("Integer overflow in binary number");
8628 overflowed = TRUE;
8629 value_nv = (NV) value;
8630 }
8631 value_nv *= 2.0;
8632 /* If an NV has not enough bits in its mantissa to
8633 * represent a UV this summing of small low-order numbers
8634 * is a waste of time (because the NV cannot preserve
8635 * the low-order bits anyway): we could just remember when
8636 * did we overflow and in the end just multiply value_nv by the
8637 * right amount. */
8638 value_nv += (NV)(bit - '0');
8639 continue;
8640 }
8641 if (bit == '_' && len && allow_underscores && (bit = s[1])
8642 && (bit == '0' || bit == '1'))
8643 {
8644 --len;
8645 ++s;
8646 goto redo;
8647 }
8648 if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
8649 warn("Illegal binary digit '%c' ignored", *s);
8650 break;
8651 }
8652
8653 if ( ( overflowed && value_nv > 4294967295.0)
8654 #if UVSIZE > 4
8655 || (!overflowed && value > 0xffffffff )
8656 #endif
8657 ) {
8658 warn("Binary number > 0b11111111111111111111111111111111 non-portable");
8659 }
8660 *len_p = s - start;
8661 if (!overflowed) {
8662 *flags = 0;
8663 return value;
8664 }
8665 *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
8666 if (result)
8667 *result = value_nv;
8668 return UV_MAX;
8669 }
8670 #endif
8671 #endif
8672
8673 #ifndef grok_hex
8674 #if defined(NEED_grok_hex)
8675 static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
8676 static
8677 #else
8678 extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
8679 #endif
8680
8681 #if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL)
8682
8683 #ifdef grok_hex
8684 # undef grok_hex
8685 #endif
8686 #define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d)
8687 #define Perl_grok_hex DPPP_(my_grok_hex)
8688
8689 UV
DPPP_(my_grok_hex)8690 DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
8691 {
8692 const char *s = start;
8693 STRLEN len = *len_p;
8694 UV value = 0;
8695 NV value_nv = 0;
8696
8697 const UV max_div_16 = UV_MAX / 16;
8698 bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
8699 bool overflowed = FALSE;
8700 const char *xdigit;
8701
8702 if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
8703 /* strip off leading x or 0x.
8704 for compatibility silently suffer "x" and "0x" as valid hex numbers.
8705 */
8706 if (len >= 1) {
8707 if (s[0] == 'x') {
8708 s++;
8709 len--;
8710 }
8711 else if (len >= 2 && s[0] == '0' && s[1] == 'x') {
8712 s+=2;
8713 len-=2;
8714 }
8715 }
8716 }
8717
8718 for (; len-- && *s; s++) {
8719 xdigit = strchr((char *) PL_hexdigit, *s);
8720 if (xdigit) {
8721 /* Write it in this wonky order with a goto to attempt to get the
8722 compiler to make the common case integer-only loop pretty tight.
8723 With gcc seems to be much straighter code than old scan_hex. */
8724 redo:
8725 if (!overflowed) {
8726 if (value <= max_div_16) {
8727 value = (value << 4) | ((xdigit - PL_hexdigit) & 15);
8728 continue;
8729 }
8730 warn("Integer overflow in hexadecimal number");
8731 overflowed = TRUE;
8732 value_nv = (NV) value;
8733 }
8734 value_nv *= 16.0;
8735 /* If an NV has not enough bits in its mantissa to
8736 * represent a UV this summing of small low-order numbers
8737 * is a waste of time (because the NV cannot preserve
8738 * the low-order bits anyway): we could just remember when
8739 * did we overflow and in the end just multiply value_nv by the
8740 * right amount of 16-tuples. */
8741 value_nv += (NV)((xdigit - PL_hexdigit) & 15);
8742 continue;
8743 }
8744 if (*s == '_' && len && allow_underscores && s[1]
8745 && (xdigit = strchr((char *) PL_hexdigit, s[1])))
8746 {
8747 --len;
8748 ++s;
8749 goto redo;
8750 }
8751 if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
8752 warn("Illegal hexadecimal digit '%c' ignored", *s);
8753 break;
8754 }
8755
8756 if ( ( overflowed && value_nv > 4294967295.0)
8757 #if UVSIZE > 4
8758 || (!overflowed && value > 0xffffffff )
8759 #endif
8760 ) {
8761 warn("Hexadecimal number > 0xffffffff non-portable");
8762 }
8763 *len_p = s - start;
8764 if (!overflowed) {
8765 *flags = 0;
8766 return value;
8767 }
8768 *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
8769 if (result)
8770 *result = value_nv;
8771 return UV_MAX;
8772 }
8773 #endif
8774 #endif
8775
8776 #ifndef grok_oct
8777 #if defined(NEED_grok_oct)
8778 static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
8779 static
8780 #else
8781 extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
8782 #endif
8783
8784 #if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL)
8785
8786 #ifdef grok_oct
8787 # undef grok_oct
8788 #endif
8789 #define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d)
8790 #define Perl_grok_oct DPPP_(my_grok_oct)
8791
8792 UV
DPPP_(my_grok_oct)8793 DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
8794 {
8795 const char *s = start;
8796 STRLEN len = *len_p;
8797 UV value = 0;
8798 NV value_nv = 0;
8799
8800 const UV max_div_8 = UV_MAX / 8;
8801 bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
8802 bool overflowed = FALSE;
8803
8804 for (; len-- && *s; s++) {
8805 /* gcc 2.95 optimiser not smart enough to figure that this subtraction
8806 out front allows slicker code. */
8807 int digit = *s - '0';
8808 if (digit >= 0 && digit <= 7) {
8809 /* Write it in this wonky order with a goto to attempt to get the
8810 compiler to make the common case integer-only loop pretty tight.
8811 */
8812 redo:
8813 if (!overflowed) {
8814 if (value <= max_div_8) {
8815 value = (value << 3) | digit;
8816 continue;
8817 }
8818 /* Bah. We're just overflowed. */
8819 warn("Integer overflow in octal number");
8820 overflowed = TRUE;
8821 value_nv = (NV) value;
8822 }
8823 value_nv *= 8.0;
8824 /* If an NV has not enough bits in its mantissa to
8825 * represent a UV this summing of small low-order numbers
8826 * is a waste of time (because the NV cannot preserve
8827 * the low-order bits anyway): we could just remember when
8828 * did we overflow and in the end just multiply value_nv by the
8829 * right amount of 8-tuples. */
8830 value_nv += (NV)digit;
8831 continue;
8832 }
8833 if (digit == ('_' - '0') && len && allow_underscores
8834 && (digit = s[1] - '0') && (digit >= 0 && digit <= 7))
8835 {
8836 --len;
8837 ++s;
8838 goto redo;
8839 }
8840 /* Allow \octal to work the DWIM way (that is, stop scanning
8841 * as soon as non-octal characters are seen, complain only iff
8842 * someone seems to want to use the digits eight and nine). */
8843 if (digit == 8 || digit == 9) {
8844 if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
8845 warn("Illegal octal digit '%c' ignored", *s);
8846 }
8847 break;
8848 }
8849
8850 if ( ( overflowed && value_nv > 4294967295.0)
8851 #if UVSIZE > 4
8852 || (!overflowed && value > 0xffffffff )
8853 #endif
8854 ) {
8855 warn("Octal number > 037777777777 non-portable");
8856 }
8857 *len_p = s - start;
8858 if (!overflowed) {
8859 *flags = 0;
8860 return value;
8861 }
8862 *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
8863 if (result)
8864 *result = value_nv;
8865 return UV_MAX;
8866 }
8867 #endif
8868 #endif
8869
8870 #if !defined(my_snprintf)
8871 #if defined(NEED_my_snprintf)
8872 static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
8873 static
8874 #else
8875 extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
8876 #endif
8877
8878 #if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL)
8879
8880 #define my_snprintf DPPP_(my_my_snprintf)
8881 #define Perl_my_snprintf DPPP_(my_my_snprintf)
8882
8883
8884 int
DPPP_(my_my_snprintf)8885 DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...)
8886 {
8887 dTHX;
8888 int retval;
8889 va_list ap;
8890 va_start(ap, format);
8891 #ifdef HAS_VSNPRINTF
8892 retval = vsnprintf(buffer, len, format, ap);
8893 #else
8894 retval = vsprintf(buffer, format, ap);
8895 #endif
8896 va_end(ap);
8897 if (retval < 0 || (len > 0 && (Size_t)retval >= len))
8898 Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
8899 return retval;
8900 }
8901
8902 #endif
8903 #endif
8904
8905 #if !defined(my_sprintf)
8906 #if defined(NEED_my_sprintf)
8907 static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
8908 static
8909 #else
8910 extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
8911 #endif
8912
8913 #if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL)
8914
8915 #define my_sprintf DPPP_(my_my_sprintf)
8916
8917
8918 /* Warning: my_sprintf
8919 It's safer to use my_snprintf instead
8920 */
8921
8922 /* Replace my_sprintf with my_snprintf */
8923
8924 int
DPPP_(my_my_sprintf)8925 DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...)
8926 {
8927 va_list args;
8928 va_start(args, pat);
8929 vsprintf(buffer, pat, args);
8930 va_end(args);
8931 return strlen(buffer);
8932 }
8933
8934 #endif
8935 #endif
8936
8937 #ifdef NO_XSLOCKS
8938 # ifdef dJMPENV
8939 # define dXCPT dJMPENV; int rEtV = 0
8940 # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0)
8941 # define XCPT_TRY_END JMPENV_POP;
8942 # define XCPT_CATCH if (rEtV != 0)
8943 # define XCPT_RETHROW JMPENV_JUMP(rEtV)
8944 # else
8945 # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0
8946 # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
8947 # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf);
8948 # define XCPT_CATCH if (rEtV != 0)
8949 # define XCPT_RETHROW Siglongjmp(top_env, rEtV)
8950 # endif
8951 #endif
8952
8953 #if !defined(my_strlcat)
8954 #if defined(NEED_my_strlcat)
8955 static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
8956 static
8957 #else
8958 extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
8959 #endif
8960
8961 #if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL)
8962
8963 #define my_strlcat DPPP_(my_my_strlcat)
8964 #define Perl_my_strlcat DPPP_(my_my_strlcat)
8965
8966
8967 Size_t
DPPP_(my_my_strlcat)8968 DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size)
8969 {
8970 Size_t used, length, copy;
8971
8972 used = strlen(dst);
8973 length = strlen(src);
8974 if (size > 0 && used < size - 1) {
8975 copy = (length >= size - used) ? size - used - 1 : length;
8976 memcpy(dst + used, src, copy);
8977 dst[used + copy] = '\0';
8978 }
8979 return used + length;
8980 }
8981 #endif
8982 #endif
8983
8984 #if !defined(my_strlcpy)
8985 #if defined(NEED_my_strlcpy)
8986 static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
8987 static
8988 #else
8989 extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
8990 #endif
8991
8992 #if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL)
8993
8994 #define my_strlcpy DPPP_(my_my_strlcpy)
8995 #define Perl_my_strlcpy DPPP_(my_my_strlcpy)
8996
8997
8998 Size_t
DPPP_(my_my_strlcpy)8999 DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size)
9000 {
9001 Size_t length, copy;
9002
9003 length = strlen(src);
9004 if (size > 0) {
9005 copy = (length >= size) ? size - 1 : length;
9006 memcpy(dst, src, copy);
9007 dst[copy] = '\0';
9008 }
9009 return length;
9010 }
9011
9012 #endif
9013 #endif
9014
9015 #define D_PPP_MIN(a,b) (((a) <= (b)) ? (a) : (b))
9016 #ifndef UNICODE_REPLACEMENT
9017 # define UNICODE_REPLACEMENT 0xFFFD
9018 #endif
9019
9020 #ifdef UTF8_MAXLEN
9021 #ifndef UTF8_MAXBYTES
9022 # define UTF8_MAXBYTES UTF8_MAXLEN
9023 #endif
9024
9025 #endif
9026 #ifndef UTF8_ALLOW_ANYUV
9027 # define UTF8_ALLOW_ANYUV 0
9028 #endif
9029
9030 #ifndef UTF8_ALLOW_EMPTY
9031 # define UTF8_ALLOW_EMPTY 0x0001
9032 #endif
9033
9034 #ifndef UTF8_ALLOW_CONTINUATION
9035 # define UTF8_ALLOW_CONTINUATION 0x0002
9036 #endif
9037
9038 #ifndef UTF8_ALLOW_NON_CONTINUATION
9039 # define UTF8_ALLOW_NON_CONTINUATION 0x0004
9040 #endif
9041
9042 #ifndef UTF8_ALLOW_SHORT
9043 # define UTF8_ALLOW_SHORT 0x0008
9044 #endif
9045
9046 #ifndef UTF8_ALLOW_LONG
9047 # define UTF8_ALLOW_LONG 0x0010
9048 #endif
9049
9050 #ifndef UTF8_ALLOW_OVERFLOW
9051 # define UTF8_ALLOW_OVERFLOW 0x0080
9052 #endif
9053
9054 #ifndef UTF8_ALLOW_ANY
9055 # define UTF8_ALLOW_ANY ( UTF8_ALLOW_CONTINUATION \
9056 |UTF8_ALLOW_NON_CONTINUATION \
9057 |UTF8_ALLOW_SHORT \
9058 |UTF8_ALLOW_LONG \
9059 |UTF8_ALLOW_OVERFLOW)
9060 #endif
9061
9062 #if defined UTF8SKIP
9063
9064 /* Don't use official version because it uses MIN, which may not be available */
9065 #undef UTF8_SAFE_SKIP
9066 #ifndef UTF8_SAFE_SKIP
9067 # define UTF8_SAFE_SKIP(s, e) ( \
9068 ((((e) - (s)) <= 0) \
9069 ? 0 \
9070 : D_PPP_MIN(((e) - (s)), UTF8SKIP(s))))
9071 #endif
9072
9073 #endif
9074
9075 #if 'A' == 65
9076 #ifndef UTF8_IS_INVARIANT
9077 # define UTF8_IS_INVARIANT(c) isASCII(c)
9078 #endif
9079
9080 #else
9081 #ifndef UTF8_IS_INVARIANT
9082 # define UTF8_IS_INVARIANT(c) (isASCII(c) || isCNTRL_L1(c))
9083 #endif
9084
9085 #endif
9086 #ifndef UVCHR_IS_INVARIANT
9087 # define UVCHR_IS_INVARIANT(c) UTF8_IS_INVARIANT(c)
9088 #endif
9089
9090 #ifdef UVCHR_IS_INVARIANT
9091 # if 'A' == 65
9092 # define D_PPP_BYTE_INFO_BITS 6 /* 6 bits meaningful in continuation bytes */
9093 # ifdef QUADKIND
9094 # define D_PPP_UVCHR_SKIP_UPPER(c) \
9095 (WIDEST_UTYPE) (c) < \
9096 (((WIDEST_UTYPE) 1) << (6 * D_PPP_BYTE_INFO_BITS)) ? 7 : 13
9097 # else
9098 # define D_PPP_UVCHR_SKIP_UPPER(c) 7 /* 32 bit platform */
9099 # endif
9100 # else
9101 # define D_PPP_BYTE_INFO_BITS 5 /* EBCDIC has only 5 meaningful bits */
9102
9103 /* In the releases this is backported to, UTF-EBCDIC had a max of 2**31-1 */
9104 # define D_PPP_UVCHR_SKIP_UPPER(c) 7
9105 # endif
9106 #ifndef UVCHR_SKIP
9107 # define UVCHR_SKIP(c) \
9108 UVCHR_IS_INVARIANT(c) ? 1 : \
9109 (WIDEST_UTYPE) (c) < (32 * (1U << ( D_PPP_BYTE_INFO_BITS))) ? 2 : \
9110 (WIDEST_UTYPE) (c) < (16 * (1U << (2 * D_PPP_BYTE_INFO_BITS))) ? 3 : \
9111 (WIDEST_UTYPE) (c) < ( 8 * (1U << (3 * D_PPP_BYTE_INFO_BITS))) ? 4 : \
9112 (WIDEST_UTYPE) (c) < ( 4 * (1U << (4 * D_PPP_BYTE_INFO_BITS))) ? 5 : \
9113 (WIDEST_UTYPE) (c) < ( 2 * (1U << (5 * D_PPP_BYTE_INFO_BITS))) ? 6 : \
9114 D_PPP_UVCHR_SKIP_UPPER(c)
9115 #endif
9116
9117 #endif
9118
9119 #ifdef is_ascii_string
9120 #ifndef is_invariant_string
9121 # define is_invariant_string(s,l) is_ascii_string(s,l)
9122 #endif
9123
9124 #ifndef is_utf8_invariant_string
9125 # define is_utf8_invariant_string(s,l) is_ascii_string(s,l)
9126 #endif
9127
9128 /* Hint: is_ascii_string, is_invariant_string
9129 is_utf8_invariant_string() does the same thing and is preferred because its
9130 name is more accurate as to what it does */
9131 #endif
9132
9133 #ifdef ibcmp_utf8
9134 #ifndef foldEQ_utf8
9135 # define foldEQ_utf8(s1,pe1,l1,u1,s2,pe2,l2,u2) \
9136 cBOOL(! ibcmp_utf8(s1,pe1,l1,u1,s2,pe2,l2,u2))
9137 #endif
9138
9139 #endif
9140
9141 #if defined(is_utf8_string) && defined(UTF8SKIP)
9142 #ifndef isUTF8_CHAR
9143 # define isUTF8_CHAR(s0, e) ( \
9144 (e) <= (s0) || ! is_utf8_string(s0, D_PPP_MIN(UTF8SKIP(s0), (e) - (s0))) \
9145 ? 0 \
9146 : UTF8SKIP(s0))
9147 #endif
9148
9149 #endif
9150
9151 #if 'A' == 65
9152 #ifndef BOM_UTF8
9153 # define BOM_UTF8 "\xEF\xBB\xBF"
9154 #endif
9155
9156 #ifndef REPLACEMENT_CHARACTER_UTF8
9157 # define REPLACEMENT_CHARACTER_UTF8 "\xEF\xBF\xBD"
9158 #endif
9159
9160 #elif '^' == 95
9161 #ifndef BOM_UTF8
9162 # define BOM_UTF8 "\xDD\x73\x66\x73"
9163 #endif
9164
9165 #ifndef REPLACEMENT_CHARACTER_UTF8
9166 # define REPLACEMENT_CHARACTER_UTF8 "\xDD\x73\x73\x71"
9167 #endif
9168
9169 #elif '^' == 176
9170 #ifndef BOM_UTF8
9171 # define BOM_UTF8 "\xDD\x72\x65\x72"
9172 #endif
9173
9174 #ifndef REPLACEMENT_CHARACTER_UTF8
9175 # define REPLACEMENT_CHARACTER_UTF8 "\xDD\x72\x72\x70"
9176 #endif
9177
9178 #else
9179 # error Unknown character set
9180 #endif
9181
9182 #if (PERL_BCDVERSION < 0x5031004)
9183 /* Versions prior to this accepted things that are now considered
9184 * malformations, and didn't return -1 on error with warnings enabled
9185 * */
9186 # undef utf8_to_uvchr_buf
9187 #endif
9188
9189 /* This implementation brings modern, generally more restricted standards to
9190 * utf8_to_uvchr_buf. Some of these are security related, and clearly must
9191 * be done. But its arguable that the others need not, and hence should not.
9192 * The reason they're here is that a module that intends to play with the
9193 * latest perls should be able to work the same in all releases. An example is
9194 * that perl no longer accepts any UV for a code point, but limits them to
9195 * IV_MAX or below. This is for future internal use of the larger code points.
9196 * If it turns out that some of these changes are breaking code that isn't
9197 * intended to work with modern perls, the tighter restrictions could be
9198 * relaxed. khw thinks this is unlikely, but has been wrong in the past. */
9199
9200 /* 5.6.0 is the first release with UTF-8, and we don't implement this function
9201 * there due to its likely lack of still being in use, and the underlying
9202 * implementation is very different from later ones, without the later
9203 * safeguards, so would require extra work to deal with */
9204 #if (PERL_BCDVERSION >= 0x5006001) && ! defined(utf8_to_uvchr_buf)
9205 /* Choose which underlying implementation to use. At least one must be
9206 * present or the perl is too early to handle this function */
9207 # if defined(utf8n_to_uvchr) || defined(utf8_to_uvchr) || defined(utf8_to_uv)
9208 # if defined(utf8n_to_uvchr) /* This is the preferred implementation */
9209 # define D_PPP_utf8_to_uvchr_buf_callee utf8n_to_uvchr
9210 # elif /* Must be at least 5.6.1 from #if above; \
9211 If have both regular and _simple, regular has all args */ \
9212 defined(utf8_to_uv) && defined(utf8_to_uv_simple)
9213 # define D_PPP_utf8_to_uvchr_buf_callee utf8_to_uv
9214 # elif defined(utf8_to_uvchr) /* The below won't work well on error input */
9215 # define D_PPP_utf8_to_uvchr_buf_callee(s, curlen, retlen, flags) \
9216 utf8_to_uvchr((U8 *)(s), (retlen))
9217 # else
9218 # define D_PPP_utf8_to_uvchr_buf_callee(s, curlen, retlen, flags) \
9219 utf8_to_uv((U8 *)(s), (retlen))
9220 # endif
9221 # endif
9222
9223 # if defined(NEED_utf8_to_uvchr_buf)
9224 static UV DPPP_(my_utf8_to_uvchr_buf)(pTHX_ const U8 * s, const U8 * send, STRLEN * retlen);
9225 static
9226 #else
9227 extern UV DPPP_(my_utf8_to_uvchr_buf)(pTHX_ const U8 * s, const U8 * send, STRLEN * retlen);
9228 #endif
9229
9230 #if defined(NEED_utf8_to_uvchr_buf) || defined(NEED_utf8_to_uvchr_buf_GLOBAL)
9231
9232 #ifdef utf8_to_uvchr_buf
9233 # undef utf8_to_uvchr_buf
9234 #endif
9235 #define utf8_to_uvchr_buf(a,b,c) DPPP_(my_utf8_to_uvchr_buf)(aTHX_ a,b,c)
9236 #define Perl_utf8_to_uvchr_buf DPPP_(my_utf8_to_uvchr_buf)
9237
9238
9239 UV
DPPP_(my_utf8_to_uvchr_buf)9240 DPPP_(my_utf8_to_uvchr_buf)(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
9241 {
9242 UV ret;
9243 STRLEN curlen;
9244 bool overflows = 0;
9245 const U8 *cur_s = s;
9246 const bool do_warnings = ckWARN_d(WARN_UTF8);
9247 # if (PERL_BCDVERSION < 0x5026000) && ! defined(EBCDIC)
9248 STRLEN overflow_length = 0;
9249 # endif
9250
9251 if (send > s) {
9252 curlen = send - s;
9253 }
9254 else {
9255 assert(0); /* Modern perls die under this circumstance */
9256 curlen = 0;
9257 if (! do_warnings) { /* Handle empty here if no warnings needed */
9258 if (retlen) *retlen = 0;
9259 return UNICODE_REPLACEMENT;
9260 }
9261 }
9262
9263 # if (PERL_BCDVERSION < 0x5026000) && ! defined(EBCDIC)
9264
9265 /* Perl did not properly detect overflow for much of its history on
9266 * non-EBCDIC platforms, often returning an overlong value which may or may
9267 * not have been tolerated in the call. Also, earlier versions, when they
9268 * did detect overflow, may have disallowed it completely. Modern ones can
9269 * replace it with the REPLACEMENT CHARACTER, depending on calling
9270 * parameters. Therefore detect it ourselves in releases it was
9271 * problematic in. */
9272
9273 if (curlen > 0 && UNLIKELY(*s >= 0xFE)) {
9274
9275 /* First, on a 32-bit machine the first byte being at least \xFE
9276 * automatically is overflow, as it indicates something requiring more
9277 * than 31 bits */
9278 if (sizeof(ret) < 8) {
9279 overflows = 1;
9280 overflow_length = 7;
9281 }
9282 else {
9283 const U8 highest[] = /* 2*63-1 */
9284 "\xFF\x80\x87\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF\xBF";
9285 const U8 *cur_h = highest;
9286
9287 for (cur_s = s; cur_s < send; cur_s++, cur_h++) {
9288 if (UNLIKELY(*cur_s == *cur_h)) {
9289 continue;
9290 }
9291
9292 /* If this byte is larger than the corresponding highest UTF-8
9293 * byte, the sequence overflows; otherwise the byte is less
9294 * than (as we handled the equality case above), and so the
9295 * sequence doesn't overflow */
9296 overflows = *cur_s > *cur_h;
9297 break;
9298
9299 }
9300
9301 /* Here, either we set the bool and broke out of the loop, or got
9302 * to the end and all bytes are the same which indicates it doesn't
9303 * overflow. If it did overflow, it would be this number of bytes
9304 * */
9305 overflow_length = 13;
9306 }
9307 }
9308
9309 if (UNLIKELY(overflows)) {
9310 ret = 0;
9311
9312 if (! do_warnings && retlen) {
9313 *retlen = overflow_length;
9314 }
9315 }
9316 else
9317
9318 # endif /* < 5.26 */
9319
9320 /* Here, we are either in a release that properly detects overflow, or
9321 * we have checked for overflow and the next statement is executing as
9322 * part of the above conditional where we know we don't have overflow.
9323 *
9324 * The modern versions allow anything that evaluates to a legal UV, but
9325 * not overlongs nor an empty input */
9326 ret = D_PPP_utf8_to_uvchr_buf_callee(
9327 s, curlen, retlen, (UTF8_ALLOW_ANYUV
9328 & ~(UTF8_ALLOW_LONG|UTF8_ALLOW_EMPTY)));
9329
9330 # if (PERL_BCDVERSION >= 0x5026000) && (PERL_BCDVERSION < 0x5028000)
9331
9332 /* But actually, more modern versions restrict the UV to being no more than
9333 * what an IV can hold, so it could still have gotten it wrong about
9334 * overflowing. */
9335 if (UNLIKELY(ret > IV_MAX)) {
9336 overflows = 1;
9337 }
9338
9339 # endif
9340
9341 if (UNLIKELY(overflows)) {
9342 if (! do_warnings) {
9343 if (retlen) {
9344 *retlen = D_PPP_MIN(*retlen, UTF8SKIP(s));
9345 *retlen = D_PPP_MIN(*retlen, curlen);
9346 }
9347 return UNICODE_REPLACEMENT;
9348 }
9349 else {
9350
9351 /* We use the error message in use from 5.8-5.26 */
9352 Perl_warner(aTHX_ packWARN(WARN_UTF8),
9353 "Malformed UTF-8 character (overflow at 0x%" UVxf
9354 ", byte 0x%02x, after start byte 0x%02x)",
9355 ret, *cur_s, *s);
9356 if (retlen) {
9357 *retlen = (STRLEN) -1;
9358 }
9359 return 0;
9360 }
9361 }
9362
9363 /* Here, did not overflow, but if it failed for some other reason, and
9364 * warnings are off, to emulate the behavior of the real utf8_to_uvchr(),
9365 * try again, allowing anything. (Note a return of 0 is ok if the input
9366 * was '\0') */
9367 if (UNLIKELY(ret == 0 && (curlen == 0 || *s != '\0'))) {
9368
9369 /* If curlen is 0, we already handled the case where warnings are
9370 * disabled, so this 'if' will be true, and so later on, we know that
9371 * 's' is dereferencible */
9372 if (do_warnings) {
9373 *retlen = (STRLEN) -1;
9374 }
9375 else {
9376 ret = D_PPP_utf8_to_uvchr_buf_callee(
9377 s, curlen, retlen, UTF8_ALLOW_ANY);
9378 /* Override with the REPLACEMENT character, as that is what the
9379 * modern version of this function returns */
9380 ret = UNICODE_REPLACEMENT;
9381
9382 # if (PERL_BCDVERSION < 0x5016000)
9383
9384 /* Versions earlier than this don't necessarily return the proper
9385 * length. It should not extend past the end of string, nor past
9386 * what the first byte indicates the length is, nor past the
9387 * continuation characters */
9388 if (retlen && *retlen >= 0) {
9389 unsigned int i = 1;
9390
9391 *retlen = D_PPP_MIN(*retlen, curlen);
9392 *retlen = D_PPP_MIN(*retlen, UTF8SKIP(s));
9393 do {
9394 if (s[i] < 0x80 || s[i] > 0xBF) {
9395 *retlen = i;
9396 break;
9397 }
9398 } while (++i < *retlen);
9399 }
9400
9401 # endif
9402
9403 }
9404 }
9405
9406 return ret;
9407 }
9408
9409 # endif
9410 #endif
9411
9412 #if defined(UTF8SKIP) && defined(utf8_to_uvchr_buf)
9413 #undef utf8_to_uvchr /* Always redefine this unsafe function so that it refuses
9414 to read past a NUL, making it much less likely to read
9415 off the end of the buffer. A NUL indicates the start
9416 of the next character anyway. If the input isn't
9417 NUL-terminated, the function remains unsafe, as it
9418 always has been. */
9419 #ifndef utf8_to_uvchr
9420 # define utf8_to_uvchr(s, lp) \
9421 ((*(s) == '\0') \
9422 ? utf8_to_uvchr_buf(s,((s)+1), lp) /* Handle single NUL specially */ \
9423 : utf8_to_uvchr_buf(s, (s) + my_strnlen((char *) (s), UTF8SKIP(s)), (lp)))
9424 #endif
9425
9426 #endif
9427
9428 /* Hint: utf8_to_uvchr
9429 Use utf8_to_uvchr_buf() instead. But ONLY if you KNOW the upper bound
9430 of the input string (not resorting to using UTF8SKIP, etc., to infer it).
9431 The backported utf8_to_uvchr() will do a better job to prevent most cases
9432 of trying to read beyond the end of the buffer */
9433
9434 /* Replace utf8_to_uvchr with utf8_to_uvchr_buf */
9435
9436 #ifdef SV_NOSTEAL
9437 /* Older Perl versions have broken sv_len_utf8() when passed sv does not have SVf_UTF8 flag set */
9438 /* Also note that SvGETMAGIC() may change presence of SVf_UTF8 flag */
9439 # if (PERL_BCDVERSION < 0x5017005)
9440 # undef sv_len_utf8
9441 # if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
9442 # define sv_len_utf8_nomg(sv) ({ SV *_sv2 = (sv); (SvUTF8(_sv2) ? Perl_sv_len_utf8(aTHX_ (!SvGMAGICAL(_sv2) ? _sv2 : sv_mortalcopy_flags(_sv2, SV_NOSTEAL))) : ({ STRLEN _len; SvPV_nomg(_sv2, _len); _len; })); })
9443 # define sv_len_utf8(sv) ({ SV *_sv1 = (sv); SvGETMAGIC(_sv1); sv_len_utf8_nomg(_sv1); })
9444 # else
9445 # define sv_len_utf8_nomg(sv) (PL_Sv = (sv), (SvUTF8(PL_Sv) ? Perl_sv_len_utf8(aTHX_ (!SvGMAGICAL(PL_Sv) ? PL_Sv : sv_mortalcopy_flags(PL_Sv, SV_NOSTEAL))) : (SvPV_nomg(PL_Sv, PL_na), PL_na)))
9446 # define sv_len_utf8(sv) (PL_Sv = (sv), SvGETMAGIC(PL_Sv), sv_len_utf8_nomg(PL_Sv))
9447 # endif
9448 # endif
9449 # if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
9450 #ifndef sv_len_utf8_nomg
9451 # define sv_len_utf8_nomg(sv) ({ SV *_sv = (sv); sv_len_utf8(!SvGMAGICAL(_sv) ? _sv : sv_mortalcopy_flags(_sv, SV_NOSTEAL)); })
9452 #endif
9453
9454 # else
9455 #ifndef sv_len_utf8_nomg
9456 # define sv_len_utf8_nomg(sv) ((PL_Sv = (sv)), sv_len_utf8(!SvGMAGICAL(PL_Sv) ? PL_Sv : sv_mortalcopy_flags(PL_Sv, SV_NOSTEAL)))
9457 #endif
9458
9459 # endif
9460 #endif
9461 #ifndef PERL_PV_ESCAPE_QUOTE
9462 # define PERL_PV_ESCAPE_QUOTE 0x0001
9463 #endif
9464
9465 #ifndef PERL_PV_PRETTY_QUOTE
9466 # define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE
9467 #endif
9468
9469 #ifndef PERL_PV_PRETTY_ELLIPSES
9470 # define PERL_PV_PRETTY_ELLIPSES 0x0002
9471 #endif
9472
9473 #ifndef PERL_PV_PRETTY_LTGT
9474 # define PERL_PV_PRETTY_LTGT 0x0004
9475 #endif
9476
9477 #ifndef PERL_PV_ESCAPE_FIRSTCHAR
9478 # define PERL_PV_ESCAPE_FIRSTCHAR 0x0008
9479 #endif
9480
9481 #ifndef PERL_PV_ESCAPE_UNI
9482 # define PERL_PV_ESCAPE_UNI 0x0100
9483 #endif
9484
9485 #ifndef PERL_PV_ESCAPE_UNI_DETECT
9486 # define PERL_PV_ESCAPE_UNI_DETECT 0x0200
9487 #endif
9488
9489 #ifndef PERL_PV_ESCAPE_ALL
9490 # define PERL_PV_ESCAPE_ALL 0x1000
9491 #endif
9492
9493 #ifndef PERL_PV_ESCAPE_NOBACKSLASH
9494 # define PERL_PV_ESCAPE_NOBACKSLASH 0x2000
9495 #endif
9496
9497 #ifndef PERL_PV_ESCAPE_NOCLEAR
9498 # define PERL_PV_ESCAPE_NOCLEAR 0x4000
9499 #endif
9500
9501 #ifndef PERL_PV_ESCAPE_RE
9502 # define PERL_PV_ESCAPE_RE 0x8000
9503 #endif
9504
9505 #ifndef PERL_PV_PRETTY_NOCLEAR
9506 # define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR
9507 #endif
9508 #ifndef PERL_PV_PRETTY_DUMP
9509 # define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE
9510 #endif
9511
9512 #ifndef PERL_PV_PRETTY_REGPROP
9513 # define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE
9514 #endif
9515
9516 /* Hint: pv_escape
9517 * Note that unicode functionality is only backported to
9518 * those perl versions that support it. For older perl
9519 * versions, the implementation will fall back to bytes.
9520 */
9521
9522 #ifndef pv_escape
9523 #if defined(NEED_pv_escape)
9524 static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags);
9525 static
9526 #else
9527 extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags);
9528 #endif
9529
9530 #if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL)
9531
9532 #ifdef pv_escape
9533 # undef pv_escape
9534 #endif
9535 #define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f)
9536 #define Perl_pv_escape DPPP_(my_pv_escape)
9537
9538
9539 char *
DPPP_(my_pv_escape)9540 DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str,
9541 const STRLEN count, const STRLEN max,
9542 STRLEN * const escaped, const U32 flags)
9543 {
9544 const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\';
9545 const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc;
9546 char octbuf[32] = "%123456789ABCDF";
9547 STRLEN wrote = 0;
9548 STRLEN chsize = 0;
9549 STRLEN readsize = 1;
9550 #if defined(is_utf8_string) && defined(utf8_to_uvchr_buf)
9551 bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0;
9552 #endif
9553 const char *pv = str;
9554 const char * const end = pv + count;
9555 octbuf[0] = esc;
9556
9557 if (!(flags & PERL_PV_ESCAPE_NOCLEAR))
9558 sv_setpvs(dsv, "");
9559
9560 #if defined(is_utf8_string) && defined(utf8_to_uvchr_buf)
9561 if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count))
9562 isuni = 1;
9563 #endif
9564
9565 for (; pv < end && (!max || wrote < max) ; pv += readsize) {
9566 const UV u =
9567 #if defined(is_utf8_string) && defined(utf8_to_uvchr_buf)
9568 isuni ? utf8_to_uvchr_buf((U8*)pv, end, &readsize) :
9569 #endif
9570 (U8)*pv;
9571 const U8 c = (U8)u & 0xFF;
9572
9573 if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) {
9574 if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
9575 chsize = my_snprintf(octbuf, sizeof octbuf,
9576 "%" UVxf, u);
9577 else
9578 chsize = my_snprintf(octbuf, sizeof octbuf,
9579 "%cx{%" UVxf "}", esc, u);
9580 } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) {
9581 chsize = 1;
9582 } else {
9583 if (c == dq || c == esc || !isPRINT(c)) {
9584 chsize = 2;
9585 switch (c) {
9586 case '\\' : /* fallthrough */
9587 case '%' : if (c == esc)
9588 octbuf[1] = esc;
9589 else
9590 chsize = 1;
9591 break;
9592 case '\v' : octbuf[1] = 'v'; break;
9593 case '\t' : octbuf[1] = 't'; break;
9594 case '\r' : octbuf[1] = 'r'; break;
9595 case '\n' : octbuf[1] = 'n'; break;
9596 case '\f' : octbuf[1] = 'f'; break;
9597 case '"' : if (dq == '"')
9598 octbuf[1] = '"';
9599 else
9600 chsize = 1;
9601 break;
9602 default: chsize = my_snprintf(octbuf, sizeof octbuf,
9603 pv < end && isDIGIT((U8)*(pv+readsize))
9604 ? "%c%03o" : "%c%o", esc, c);
9605 }
9606 } else {
9607 chsize = 1;
9608 }
9609 }
9610 if (max && wrote + chsize > max) {
9611 break;
9612 } else if (chsize > 1) {
9613 sv_catpvn(dsv, octbuf, chsize);
9614 wrote += chsize;
9615 } else {
9616 char tmp[2];
9617 my_snprintf(tmp, sizeof tmp, "%c", c);
9618 sv_catpvn(dsv, tmp, 1);
9619 wrote++;
9620 }
9621 if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
9622 break;
9623 }
9624 if (escaped != NULL)
9625 *escaped= pv - str;
9626 return SvPVX(dsv);
9627 }
9628
9629 #endif
9630 #endif
9631
9632 #ifndef pv_pretty
9633 #if defined(NEED_pv_pretty)
9634 static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags);
9635 static
9636 #else
9637 extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags);
9638 #endif
9639
9640 #if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL)
9641
9642 #ifdef pv_pretty
9643 # undef pv_pretty
9644 #endif
9645 #define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g)
9646 #define Perl_pv_pretty DPPP_(my_pv_pretty)
9647
9648
9649 char *
DPPP_(my_pv_pretty)9650 DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count,
9651 const STRLEN max, char const * const start_color, char const * const end_color,
9652 const U32 flags)
9653 {
9654 const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%';
9655 STRLEN escaped;
9656
9657 if (!(flags & PERL_PV_PRETTY_NOCLEAR))
9658 sv_setpvs(dsv, "");
9659
9660 if (dq == '"')
9661 sv_catpvs(dsv, "\"");
9662 else if (flags & PERL_PV_PRETTY_LTGT)
9663 sv_catpvs(dsv, "<");
9664
9665 if (start_color != NULL)
9666 sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color));
9667
9668 pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR);
9669
9670 if (end_color != NULL)
9671 sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color));
9672
9673 if (dq == '"')
9674 sv_catpvs(dsv, "\"");
9675 else if (flags & PERL_PV_PRETTY_LTGT)
9676 sv_catpvs(dsv, ">");
9677
9678 if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count)
9679 sv_catpvs(dsv, "...");
9680
9681 return SvPVX(dsv);
9682 }
9683
9684 #endif
9685 #endif
9686
9687 #ifndef pv_display
9688 #if defined(NEED_pv_display)
9689 static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
9690 static
9691 #else
9692 extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
9693 #endif
9694
9695 #if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL)
9696
9697 #ifdef pv_display
9698 # undef pv_display
9699 #endif
9700 #define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e)
9701 #define Perl_pv_display DPPP_(my_pv_display)
9702
9703
9704 char *
DPPP_(my_pv_display)9705 DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
9706 {
9707 pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP);
9708 if (len > cur && pv[cur] == '\0')
9709 sv_catpvs(dsv, "\\0");
9710 return SvPVX(dsv);
9711 }
9712
9713 #endif
9714 #endif
9715
9716 /* If this doesn't exist, it's not needed, so noop */
9717 #ifndef switch_to_global_locale
9718 # define switch_to_global_locale()
9719 #endif
9720
9721 /* Originally, this didn't return a value, but in perls like that, the value
9722 * should always be TRUE. Add a return to Perl_sync_locale() when it's
9723 * available. And actually do a sync when its not, if locales are available on
9724 * this system. */
9725 #ifdef sync_locale
9726 # if (PERL_BCDVERSION < 0x5027009)
9727 # if (PERL_BCDVERSION >= 0x5021003)
9728 # undef sync_locale
9729 # define sync_locale() (Perl_sync_locale(aTHX), 1)
9730 # elif defined(new_ctype) && defined(LC_CTYPE)
9731 # define sync_locale() (new_ctype(setlocale(LC_CTYPE, NULL)), 1)
9732 # else
9733 # undef sync_locale
9734 # endif
9735 # endif
9736 #endif
9737 #ifndef sync_locale
9738 # define sync_locale() 1
9739 #endif
9740
9741 #endif /* _P_P_PORTABILITY_H_ */
9742
9743 /* End of File ppport.h */
9744