5 ----------------------------------------------------------------------
7 ppport.h -- Perl/Pollution/Portability Version 3.32
9 Automatically created by Devel::PPPort running under perl 5.024001.
11 Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
12 includes in parts/inc/ instead.
14 Use 'perldoc ppport.h' to view the documentation below.
16 ----------------------------------------------------------------------
24 ppport.h - Perl/Pollution/Portability version 3.32
28 perl ppport.h [options] [source files]
30 Searches current directory for files if no [source files] are given
32 --help show short help
34 --version show version
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
40 --compat-version=version provide compatibility with Perl version
41 --cplusplus accept C++ comments
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
49 --strip strip all script and doc functionality from
52 --list-provided list provided API
53 --list-unsupported list unsupported API
54 --api-info=name show Perl API portability information
58 This version of F<ppport.h> is designed to support operation with Perl
59 installations back to 5.003, and has been tested up to 5.20.
65 Display a brief usage summary.
69 Display the version of F<ppport.h>.
71 =head2 --patch=I<file>
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.
77 =head2 --copy=I<suffix>
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
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.
90 =head2 --diff=I<program>
92 Manually set the diff program and options to use. The default
93 is to use C<Text::Diff>, when installed, and output unified
96 =head2 --compat-version=I<version>
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. 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.
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++
113 Be quiet. Don't print anything except fatal errors.
117 Don't output any diagnostic messages. Only portability
118 alerts will be printed.
122 Don't output any hints. Hints often contain useful portability
123 notes. Warnings will still be displayed.
127 Don't suggest any changes. Only give diagnostic output and hints
128 unless these are also deactivated.
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.
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.
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>
146 =head2 --list-provided
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.
152 =head2 --list-unsupported
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.
158 =head2 --api-info=I<name>
160 Show portability information for API elements matching I<name>.
161 If I<name> is surrounded by slashes, it is interpreted as a regular
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.
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
177 perl ppport.h --list-provided
179 to see which API elements are provided by ppport.h.
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.
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>.
196 These functions or variables will be marked C<explicit> in the list shown
197 by C<--list-provided>.
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
203 For a C<static> function or variable (used only in a single source
206 #define NEED_function
207 #define NEED_variable
209 For a global function or variable (used in multiple source files),
212 #define NEED_function_GLOBAL
213 #define NEED_variable_GLOBAL
215 Note that you mustn't have more than one global request for the
216 same function or variable in your project.
218 Function / Variable Static Request Global Request
219 -----------------------------------------------------------------------------------------
220 PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL
221 PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL
222 caller_cx() NEED_caller_cx NEED_caller_cx_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 mg_findext() NEED_mg_findext NEED_mg_findext_GLOBAL
231 my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL
232 my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL
233 my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL
234 my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL
235 newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL
236 newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL
237 newSV_type() NEED_newSV_type NEED_newSV_type_GLOBAL
238 newSVpvn_flags() NEED_newSVpvn_flags NEED_newSVpvn_flags_GLOBAL
239 newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL
240 pv_display() NEED_pv_display NEED_pv_display_GLOBAL
241 pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL
242 pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL
243 sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL
244 sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL
245 sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL
246 sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL
247 sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_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 vload_module() NEED_vload_module NEED_vload_module_GLOBAL
252 vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL
253 warner() NEED_warner NEED_warner_GLOBAL
255 To avoid namespace conflicts, you can change the namespace of the
256 explicitly exported functions / variables using the C<DPPP_NAMESPACE>
257 macro. Just C<#define> the macro before including C<ppport.h>:
259 #define DPPP_NAMESPACE MyOwnNamespace_
262 The default namespace is C<DPPP_>.
266 The good thing is that most of the above can be checked by running
267 F<ppport.h> on your source code. See the next section for
272 To verify whether F<ppport.h> is needed for your module, whether you
273 should make any changes to your code, and whether any special defines
274 should be used, F<ppport.h> can be run as a Perl script to check your
275 source code. Simply say:
279 The result will usually be a list of patches suggesting changes
280 that should at least be acceptable, if not necessarily the most
281 efficient solution, or a fix for all possible problems.
283 If you know that your XS module uses features only available in
284 newer Perl releases, if you're aware that it uses C++ comments,
285 and if you want all suggestions as a single patch file, you could
286 use something like this:
288 perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
290 If you only want your code to be scanned without any suggestions
293 perl ppport.h --nochanges
295 You can specify a different C<diff> program or options, using
296 the C<--diff> option:
298 perl ppport.h --diff='diff -C 10'
300 This would output context diffs with 10 lines of context.
302 If you want to create patched copies of your files instead, use:
304 perl ppport.h --copy=.new
306 To display portability information for the C<newSVpvn> function,
309 perl ppport.h --api-info=newSVpvn
311 Since the argument to C<--api-info> can be a regular expression,
314 perl ppport.h --api-info=/_nomg$/
316 to display portability information for all C<_nomg> functions or
318 perl ppport.h --api-info=/./
320 to display information for all known API elements.
324 If this version of F<ppport.h> is causing failure during
325 the compilation of this module, please check if newer versions
326 of either this module or C<Devel::PPPort> are available on CPAN
327 before sending a bug report.
329 If F<ppport.h> was generated using the latest version of
330 C<Devel::PPPort> and is causing failure of this module, please
331 file a bug report here: L<https://github.com/mhx/Devel-PPPort/issues/>
333 Please include the following information:
339 The complete output from running "perl -V"
347 The name and version of the module you were trying to build.
351 A full log of the build that failed.
355 Any other information that you think could be relevant.
359 For the latest version of this code, please get the C<Devel::PPPort>
364 Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz.
366 Version 2.x, Copyright (C) 2001, Paul Marquess.
368 Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
370 This program is free software; you can redistribute it and/or
371 modify it under the same terms as Perl itself.
375 See L<Devel::PPPort>.
381 # Disable broken TRIE-optimization
382 BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 }
397 my($ppport) = $0 =~ /([\w.]+)$/;
398 my $LF = '(?:\r\n|[\r\n])'; # line feed
399 my $HS = "[ \t]"; # horizontal whitespace
401 # Never use C comments in this file!
404 my $rccs = quotemeta $ccs;
405 my $rcce = quotemeta $cce;
408 require Getopt::Long;
409 Getopt::Long::GetOptions(\%opt, qw(
410 help quiet diag! filter! hints! changes! cplusplus strip version
411 patch=s copy=s diff=s compat-version=s
412 list-provided list-unsupported api-info=s
416 if ($@ and grep /^-/, @ARGV) {
417 usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
418 die "Getopt::Long not found. Please don't use any options.\n";
422 print "This is $0 $VERSION.\n";
426 usage() if $opt{help};
427 strip() if $opt{strip};
429 if (exists $opt{'compat-version'}) {
430 my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
432 die "Invalid version number format: '$opt{'compat-version'}'\n";
434 die "Only Perl 5 is supported\n" if $r != 5;
435 die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
436 $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
439 $opt{'compat-version'} = 5;
442 my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
444 ($2 ? ( base => $2 ) : ()),
445 ($3 ? ( todo => $3 ) : ()),
446 (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()),
447 (index($4, 'p') >= 0 ? ( provided => 1 ) : ()),
448 (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()),
450 : die "invalid spec: $_" } qw(
451 ASCII_TO_NEED||5.007001|n
454 BhkDISABLE||5.021008|
456 BhkENTRY_set||5.021008|
461 CPERLscope|5.005000||p
464 CopFILEAV|5.006000||p
465 CopFILEGV_set|5.006000||p
466 CopFILEGV|5.006000||p
467 CopFILESV|5.006000||p
468 CopFILE_set|5.006000||p
470 CopSTASHPV_set|5.006000||p
471 CopSTASHPV|5.006000||p
472 CopSTASH_eq|5.006000||p
473 CopSTASH_set|5.006000||p
475 CopyD|5.009002|5.004050|p
480 DEFSV_set|5.010001||p
482 END_EXTERN_C|5.005000||p
491 GROK_NUMERIC_RADIX|5.007002||p
505 Gv_AMupdate||5.011000|
506 HEf_SVKEY|5.003070||p
511 HeSVKEY_force||5.003070|
512 HeSVKEY_set||5.004000|
514 HeUTF8|5.010001|5.008000|p
516 HvENAMELEN||5.015004|
517 HvENAMEUTF8||5.015004|
519 HvNAMELEN_get|5.009003||p
521 HvNAMEUTF8||5.015004|
522 HvNAME_get|5.009003||p
525 IN_LOCALE_COMPILETIME|5.007002||p
526 IN_LOCALE_RUNTIME|5.007002||p
527 IN_LOCALE|5.007002||p
528 IN_PERL_COMPILETIME|5.008001||p
529 IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p
530 IS_NUMBER_INFINITY|5.007002||p
531 IS_NUMBER_IN_UV|5.007002||p
532 IS_NUMBER_NAN|5.007003||p
533 IS_NUMBER_NEG|5.007002||p
534 IS_NUMBER_NOT_INT|5.007002||p
543 MUTABLE_PTR|5.010001||p
544 MUTABLE_SV|5.010001||p
545 MY_CXT_CLONE|5.009002||p
546 MY_CXT_INIT|5.007003||p
548 MoveD|5.009002|5.004050|p
550 NATIVE_TO_NEED||5.007001|n
568 OP_TYPE_IS_OR_WAS||5.019010|
569 OP_TYPE_IS||5.019007|
571 OpHAS_SIBLING||5.021007|
572 OpSIBLING_set||5.021007|
576 PAD_COMPNAME_FLAGS|||
577 PAD_COMPNAME_GEN_set|||
579 PAD_COMPNAME_OURSTASH|||
584 PAD_SAVE_SETNULLPAD|||
586 PAD_SET_CUR_NOSAVE|||
590 PERLIO_FUNCS_CAST|5.009003||p
591 PERLIO_FUNCS_DECL|5.009003||p
593 PERL_BCDVERSION|5.021008||p
594 PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
595 PERL_HASH|5.003070||p
596 PERL_INT_MAX|5.003070||p
597 PERL_INT_MIN|5.003070||p
598 PERL_LONG_MAX|5.003070||p
599 PERL_LONG_MIN|5.003070||p
600 PERL_MAGIC_arylen|5.007002||p
601 PERL_MAGIC_backref|5.007002||p
602 PERL_MAGIC_bm|5.007002||p
603 PERL_MAGIC_collxfrm|5.007002||p
604 PERL_MAGIC_dbfile|5.007002||p
605 PERL_MAGIC_dbline|5.007002||p
606 PERL_MAGIC_defelem|5.007002||p
607 PERL_MAGIC_envelem|5.007002||p
608 PERL_MAGIC_env|5.007002||p
609 PERL_MAGIC_ext|5.007002||p
610 PERL_MAGIC_fm|5.007002||p
611 PERL_MAGIC_glob|5.021008||p
612 PERL_MAGIC_isaelem|5.007002||p
613 PERL_MAGIC_isa|5.007002||p
614 PERL_MAGIC_mutex|5.021008||p
615 PERL_MAGIC_nkeys|5.007002||p
616 PERL_MAGIC_overload_elem|5.021008||p
617 PERL_MAGIC_overload_table|5.007002||p
618 PERL_MAGIC_overload|5.021008||p
619 PERL_MAGIC_pos|5.007002||p
620 PERL_MAGIC_qr|5.007002||p
621 PERL_MAGIC_regdata|5.007002||p
622 PERL_MAGIC_regdatum|5.007002||p
623 PERL_MAGIC_regex_global|5.007002||p
624 PERL_MAGIC_shared_scalar|5.007003||p
625 PERL_MAGIC_shared|5.007003||p
626 PERL_MAGIC_sigelem|5.007002||p
627 PERL_MAGIC_sig|5.007002||p
628 PERL_MAGIC_substr|5.007002||p
629 PERL_MAGIC_sv|5.007002||p
630 PERL_MAGIC_taint|5.007002||p
631 PERL_MAGIC_tiedelem|5.007002||p
632 PERL_MAGIC_tiedscalar|5.007002||p
633 PERL_MAGIC_tied|5.007002||p
634 PERL_MAGIC_utf8|5.008001||p
635 PERL_MAGIC_uvar_elem|5.007003||p
636 PERL_MAGIC_uvar|5.007002||p
637 PERL_MAGIC_vec|5.007002||p
638 PERL_MAGIC_vstring|5.008001||p
639 PERL_PV_ESCAPE_ALL|5.009004||p
640 PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p
641 PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p
642 PERL_PV_ESCAPE_NOCLEAR|5.009004||p
643 PERL_PV_ESCAPE_QUOTE|5.009004||p
644 PERL_PV_ESCAPE_RE|5.009005||p
645 PERL_PV_ESCAPE_UNI_DETECT|5.009004||p
646 PERL_PV_ESCAPE_UNI|5.009004||p
647 PERL_PV_PRETTY_DUMP|5.009004||p
648 PERL_PV_PRETTY_ELLIPSES|5.010000||p
649 PERL_PV_PRETTY_LTGT|5.009004||p
650 PERL_PV_PRETTY_NOCLEAR|5.010000||p
651 PERL_PV_PRETTY_QUOTE|5.009004||p
652 PERL_PV_PRETTY_REGPROP|5.009004||p
653 PERL_QUAD_MAX|5.003070||p
654 PERL_QUAD_MIN|5.003070||p
655 PERL_REVISION|5.006000||p
656 PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p
657 PERL_SCAN_DISALLOW_PREFIX|5.007003||p
658 PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p
659 PERL_SCAN_SILENT_ILLDIGIT|5.008001||p
660 PERL_SHORT_MAX|5.003070||p
661 PERL_SHORT_MIN|5.003070||p
662 PERL_SIGNALS_UNSAFE_FLAG|5.008001||p
663 PERL_SUBVERSION|5.006000||p
664 PERL_SYS_INIT3||5.006000|
666 PERL_SYS_TERM||5.021008|
667 PERL_UCHAR_MAX|5.003070||p
668 PERL_UCHAR_MIN|5.003070||p
669 PERL_UINT_MAX|5.003070||p
670 PERL_UINT_MIN|5.003070||p
671 PERL_ULONG_MAX|5.003070||p
672 PERL_ULONG_MIN|5.003070||p
673 PERL_UNUSED_ARG|5.009003||p
674 PERL_UNUSED_CONTEXT|5.009004||p
675 PERL_UNUSED_DECL|5.007002||p
676 PERL_UNUSED_VAR|5.007002||p
677 PERL_UQUAD_MAX|5.003070||p
678 PERL_UQUAD_MIN|5.003070||p
679 PERL_USE_GCC_BRACE_GROUPS|5.009004||p
680 PERL_USHORT_MAX|5.003070||p
681 PERL_USHORT_MIN|5.003070||p
682 PERL_VERSION|5.006000||p
683 PL_DBsignal|5.005000||p
688 PL_bufend|5.021008||p
689 PL_bufptr|5.021008||p
691 PL_compiling|5.004050||p
692 PL_comppad_name||5.017004|
693 PL_comppad||5.008001|
694 PL_copline|5.021008||p
695 PL_curcop|5.004050||p
697 PL_curstash|5.004050||p
698 PL_debstash|5.004050||p
700 PL_diehook|5.004050||p
704 PL_error_count|5.021008||p
705 PL_expect|5.021008||p
706 PL_hexdigit|5.005000||p
708 PL_in_my_stash|5.021008||p
710 PL_keyword_plugin||5.011002|
712 PL_laststatval|5.005000||p
713 PL_lex_state|5.021008||p
714 PL_lex_stuff|5.021008||p
715 PL_linestr|5.021008||p
716 PL_modglobal||5.005000|n
718 PL_no_modify|5.006000||p
720 PL_opfreehook||5.011000|n
721 PL_parser|5.009005||p
723 PL_perl_destruct_level|5.004050||p
724 PL_perldb|5.004050||p
725 PL_ppaddr|5.006000||p
726 PL_rpeepp||5.013005|n
727 PL_rsfp_filters|5.021008||p
730 PL_signals|5.008001||p
731 PL_stack_base|5.004050||p
732 PL_stack_sp|5.004050||p
733 PL_statcache|5.005000||p
734 PL_stdingv|5.004050||p
735 PL_sv_arenaroot|5.004050||p
736 PL_sv_no|5.004050||pn
737 PL_sv_undef|5.004050||pn
738 PL_sv_yes|5.004050||pn
739 PL_tainted|5.004050||p
740 PL_tainting|5.004050||p
741 PL_tokenbuf|5.021008||p
742 POP_MULTICALL||5.021008|
746 POPpbytex||5.007001|n
757 PUSH_MULTICALL||5.021008|
759 PUSHmortal|5.009002||p
767 PadlistARRAY||5.021008|
768 PadlistMAX||5.021008|
769 PadlistNAMESARRAY||5.021008|
770 PadlistNAMESMAX||5.021008|
771 PadlistNAMES||5.021008|
772 PadlistREFCNT||5.017004|
775 PadnameLEN||5.021008|
779 PadnameREFCNT_dec||5.021008|
780 PadnameREFCNT||5.021008|
783 PadnameUTF8||5.021007|
784 PadnamelistARRAY||5.021008|
785 PadnamelistMAX||5.021008|
786 PadnamelistREFCNT_dec||5.021008|
787 PadnamelistREFCNT||5.021008|
788 PerlIO_clearerr||5.007003|
789 PerlIO_close||5.007003|
790 PerlIO_context_layers||5.009004|
791 PerlIO_eof||5.007003|
792 PerlIO_error||5.007003|
793 PerlIO_fileno||5.007003|
794 PerlIO_fill||5.007003|
795 PerlIO_flush||5.007003|
796 PerlIO_get_base||5.007003|
797 PerlIO_get_bufsiz||5.007003|
798 PerlIO_get_cnt||5.007003|
799 PerlIO_get_ptr||5.007003|
800 PerlIO_read||5.007003|
801 PerlIO_restore_errno|||
803 PerlIO_seek||5.007003|
804 PerlIO_set_cnt||5.007003|
805 PerlIO_set_ptrcnt||5.007003|
806 PerlIO_setlinebuf||5.007003|
807 PerlIO_stderr||5.007003|
808 PerlIO_stdin||5.007003|
809 PerlIO_stdout||5.007003|
810 PerlIO_tell||5.007003|
811 PerlIO_unread||5.007003|
812 PerlIO_write||5.007003|
813 Perl_signbit||5.009005|n
814 PoisonFree|5.009004||p
815 PoisonNew|5.009004||p
816 PoisonWith|5.009004||p
818 READ_XDIGIT||5.017006|
826 SAVE_DEFSV|5.004050||p
829 START_EXTERN_C|5.005000||p
830 START_MY_CXT|5.007003||p
833 STR_WITH_LEN|5.009003||p
835 SV_CONST_RETURN|5.009003||p
836 SV_COW_DROP_PV|5.008001||p
837 SV_COW_SHARED_HASH_KEYS|5.009005||p
838 SV_GMAGIC|5.007002||p
839 SV_HAS_TRAILING_NUL|5.009004||p
840 SV_IMMEDIATE_UNREF|5.007001||p
841 SV_MUTABLE_RETURN|5.009003||p
842 SV_NOSTEAL|5.009002||p
843 SV_SMAGIC|5.009003||p
844 SV_UTF8_NO_ENCODING|5.008001||p
848 SVt_INVLIST||5.019002|
863 SVt_REGEXP||5.011000|
874 SvGETMAGIC|5.004050||p
877 SvIOK_notUV||5.006000|
879 SvIOK_only_UV||5.006000|
885 SvIV_nomg|5.009001||p
889 SvIsCOW_shared_hash||5.008003|
894 SvMAGIC_set|5.009003||p
909 SvOOK_offset||5.011000|
912 SvPOK_only_UTF8||5.006000|
917 SvPVX_const|5.009003||p
918 SvPVX_mutable|5.009003||p
920 SvPV_const|5.009003||p
921 SvPV_flags_const_nolen|5.009003||p
922 SvPV_flags_const|5.009003||p
923 SvPV_flags_mutable|5.009003||p
924 SvPV_flags|5.007002||p
925 SvPV_force_flags_mutable|5.009003||p
926 SvPV_force_flags_nolen|5.009003||p
927 SvPV_force_flags|5.007002||p
928 SvPV_force_mutable|5.009003||p
929 SvPV_force_nolen|5.009003||p
930 SvPV_force_nomg_nolen|5.009003||p
931 SvPV_force_nomg|5.007002||p
933 SvPV_mutable|5.009003||p
934 SvPV_nolen_const|5.009003||p
935 SvPV_nolen|5.006000||p
936 SvPV_nomg_const_nolen|5.009003||p
937 SvPV_nomg_const|5.009003||p
938 SvPV_nomg_nolen|5.013007||p
939 SvPV_nomg|5.007002||p
940 SvPV_renew|5.009003||p
942 SvPVbyte_force||5.009002|
943 SvPVbyte_nolen||5.006000|
944 SvPVbytex_force||5.006000|
947 SvPVutf8_force||5.006000|
948 SvPVutf8_nolen||5.006000|
949 SvPVutf8x_force||5.006000|
954 SvREFCNT_dec_NN||5.017007|
956 SvREFCNT_inc_NN|5.009004||p
957 SvREFCNT_inc_simple_NN|5.009004||p
958 SvREFCNT_inc_simple_void_NN|5.009004||p
959 SvREFCNT_inc_simple_void|5.009004||p
960 SvREFCNT_inc_simple|5.009004||p
961 SvREFCNT_inc_void_NN|5.009004||p
962 SvREFCNT_inc_void|5.009004||p
973 SvSHARED_HASH|5.009003||p
975 SvSTASH_set|5.009003||p
977 SvSetMagicSV_nosteal||5.004000|
978 SvSetMagicSV||5.004000|
979 SvSetSV_nosteal||5.004000|
981 SvTAINTED_off||5.004000|
982 SvTAINTED_on||5.004000|
986 SvTRUE_nomg||5.013006|
990 SvUOK|5.007001|5.006000|p
992 SvUTF8_off||5.006000|
997 SvUV_nomg|5.009001||p
1002 SvVSTRING_mg|5.009004||p
1004 UNDERBAR|5.009002||p
1005 UTF8_MAXBYTES|5.009002||p
1012 WARN_ALL|5.006000||p
1013 WARN_AMBIGUOUS|5.006000||p
1014 WARN_ASSERTIONS|5.021008||p
1015 WARN_BAREWORD|5.006000||p
1016 WARN_CLOSED|5.006000||p
1017 WARN_CLOSURE|5.006000||p
1018 WARN_DEBUGGING|5.006000||p
1019 WARN_DEPRECATED|5.006000||p
1020 WARN_DIGIT|5.006000||p
1021 WARN_EXEC|5.006000||p
1022 WARN_EXITING|5.006000||p
1023 WARN_GLOB|5.006000||p
1024 WARN_INPLACE|5.006000||p
1025 WARN_INTERNAL|5.006000||p
1027 WARN_LAYER|5.008000||p
1028 WARN_MALLOC|5.006000||p
1029 WARN_MISC|5.006000||p
1030 WARN_NEWLINE|5.006000||p
1031 WARN_NUMERIC|5.006000||p
1032 WARN_ONCE|5.006000||p
1033 WARN_OVERFLOW|5.006000||p
1034 WARN_PACK|5.006000||p
1035 WARN_PARENTHESIS|5.006000||p
1036 WARN_PIPE|5.006000||p
1037 WARN_PORTABLE|5.006000||p
1038 WARN_PRECEDENCE|5.006000||p
1039 WARN_PRINTF|5.006000||p
1040 WARN_PROTOTYPE|5.006000||p
1042 WARN_RECURSION|5.006000||p
1043 WARN_REDEFINE|5.006000||p
1044 WARN_REGEXP|5.006000||p
1045 WARN_RESERVED|5.006000||p
1046 WARN_SEMICOLON|5.006000||p
1047 WARN_SEVERE|5.006000||p
1048 WARN_SIGNAL|5.006000||p
1049 WARN_SUBSTR|5.006000||p
1050 WARN_SYNTAX|5.006000||p
1051 WARN_TAINT|5.006000||p
1052 WARN_THREADS|5.008000||p
1053 WARN_UNINITIALIZED|5.006000||p
1054 WARN_UNOPENED|5.006000||p
1055 WARN_UNPACK|5.006000||p
1056 WARN_UNTIE|5.006000||p
1057 WARN_UTF8|5.006000||p
1058 WARN_VOID|5.006000||p
1059 WIDEST_UTYPE|5.015004||p
1060 XCPT_CATCH|5.009002||p
1061 XCPT_RETHROW|5.009002||p
1062 XCPT_TRY_END|5.009002||p
1063 XCPT_TRY_START|5.009002||p
1065 XPUSHmortal|5.009002||p
1077 XSRETURN_UV|5.008001||p
1087 XS_APIVERSION_BOOTCHECK||5.021008|
1088 XS_EXTERNAL||5.021008|
1089 XS_INTERNAL||5.021008|
1090 XS_VERSION_BOOTCHECK||5.021008|
1092 XSprePUSH|5.006000||p
1094 XopDISABLE||5.021008|
1095 XopENABLE||5.021008|
1096 XopENTRYCUSTOM||5.021008|
1097 XopENTRY_set||5.021008|
1102 _aMY_CXT|5.007003||p
1103 _add_range_to_invlist|||
1104 _append_range_to_invlist|||
1107 _get_regclass_nonbitmap_data|||
1108 _get_swash_invlist|||
1109 _invlist_array_init|||n
1110 _invlist_contains_cp|||n
1111 _invlist_contents|||
1113 _invlist_intersection_maybe_complement_2nd|||
1114 _invlist_intersection|||
1117 _invlist_populate_swatch|||n
1119 _invlist_subtract|||
1120 _invlist_union_maybe_complement_2nd|||
1122 _is_cur_LC_category_utf8|||
1123 _is_in_locale_category||5.021001|
1124 _is_uni_FOO||5.017008|
1125 _is_uni_perl_idcont||5.017008|
1126 _is_uni_perl_idstart||5.017007|
1127 _is_utf8_FOO||5.017008|
1128 _is_utf8_char_slow||5.021001|n
1129 _is_utf8_idcont||5.021001|
1130 _is_utf8_idstart||5.021001|
1131 _is_utf8_mark||5.017008|
1132 _is_utf8_perl_idcont||5.017008|
1133 _is_utf8_perl_idstart||5.017007|
1134 _is_utf8_xidcont||5.021001|
1135 _is_utf8_xidstart||5.021001|
1136 _load_PL_utf8_foldclosures|||
1137 _make_exactf_invlist|||
1138 _new_invlist_C_array|||
1140 _pMY_CXT|5.007003||p
1141 _setup_canned_invlist|||
1142 _swash_inversion_hash|||
1143 _swash_to_invlist|||
1145 _to_uni_fold_flags||5.014000|
1146 _to_upper_title_latin1|||
1147 _to_utf8_fold_flags||5.019009|
1148 _to_utf8_lower_flags||5.019009|
1149 _to_utf8_title_flags||5.019009|
1150 _to_utf8_upper_flags||5.019009|
1151 _warn_problematic_locale|||n
1152 aMY_CXT_|5.007003||p
1158 aassign_common_vars|||
1159 add_above_Latin1_folds|||
1160 add_cp_to_invlist|||
1163 add_utf16_textfilter|||
1164 adjust_size_and_find_bucket|||n
1167 alloc_maybe_populate_EXACT|||
1171 amagic_cmp_locale|||
1173 amagic_deref_call||5.013007|
1175 amagic_is_enabled|||
1177 anonymise_cv_maybe|||
1180 append_utf8_from_native_byte||5.019004|n
1182 apply_attrs_string||5.006001|
1185 assert_uft8_cache_coherent|||
1187 atfork_lock||5.007003|n
1188 atfork_unlock||5.007003|n
1189 av_arylen_p||5.009003|
1191 av_create_and_push||5.009005|
1192 av_create_and_unshift_one||5.009005|
1193 av_delete||5.006000|
1194 av_exists||5.006000|
1199 av_iter_p||5.011000|
1207 av_tindex||5.017009|
1208 av_top_index||5.017009|
1217 block_end||5.004000|
1218 block_gimme||5.004000|
1219 block_start||5.004000|
1220 blockhook_register||5.013003|
1223 boot_core_UNIVERSAL|||
1225 bytes_cmp_utf8||5.013007|
1226 bytes_from_utf8||5.007001|
1227 bytes_to_utf8||5.006001|
1228 call_argv|5.006000||p
1229 call_atexit||5.006000|
1230 call_list||5.004000|
1231 call_method|5.006000||p
1234 caller_cx|5.013005|5.006000|p
1237 cast_i32||5.006000|n
1239 cast_ulong||5.006000|n
1241 check_locale_boundary_crossing|||
1242 check_type_and_open|||
1247 ck_entersub_args_core|||
1248 ck_entersub_args_list||5.013006|
1249 ck_entersub_args_proto_or_list||5.013006|
1250 ck_entersub_args_proto||5.013006|
1251 ck_warner_d||5.011001|v
1252 ck_warner||5.011001|v
1256 clear_placeholders|||
1257 clear_special_blocks|||
1258 clone_params_del|||n
1259 clone_params_new|||n
1261 cntrl_to_mnemonic|||n
1262 compute_EXACTish|||n
1263 construct_ahocorasick_from_trie|||
1264 cop_fetch_label||5.015001|
1266 cop_hints_2hv||5.013007|
1267 cop_hints_fetch_pvn||5.013007|
1268 cop_hints_fetch_pvs||5.013007|
1269 cop_hints_fetch_pv||5.013007|
1270 cop_hints_fetch_sv||5.013007|
1271 cop_store_label||5.015001|
1272 cophh_2hv||5.013007|
1273 cophh_copy||5.013007|
1274 cophh_delete_pvn||5.013007|
1275 cophh_delete_pvs||5.013007|
1276 cophh_delete_pv||5.013007|
1277 cophh_delete_sv||5.013007|
1278 cophh_fetch_pvn||5.013007|
1279 cophh_fetch_pvs||5.013007|
1280 cophh_fetch_pv||5.013007|
1281 cophh_fetch_sv||5.013007|
1282 cophh_free||5.013007|
1283 cophh_new_empty||5.021008|
1284 cophh_store_pvn||5.013007|
1285 cophh_store_pvs||5.013007|
1286 cophh_store_pv||5.013007|
1287 cophh_store_sv||5.013007|
1290 could_it_be_a_POSIX_class|||n
1292 create_eval_scope|||
1293 croak_memory_wrap||5.019003|n
1295 croak_no_modify||5.013003|n
1296 croak_nocontext|||vn
1299 croak_xs_usage||5.010001|n
1301 csighandler||5.009003|n
1302 current_re_engine|||
1304 custom_op_desc||5.007003|
1305 custom_op_get_field|||
1306 custom_op_name||5.007003|
1307 custom_op_register||5.013007|
1308 custom_op_xop||5.013007|
1309 cv_ckproto_len_flags|||
1312 cv_const_sv_or_av|||n
1313 cv_const_sv||5.003070|n
1316 cv_get_call_checker||5.013006|
1318 cv_set_call_checker_flags||5.021004|
1319 cv_set_call_checker||5.013006|
1332 dMULTICALL||5.009003|
1333 dMY_CXT_SV|5.007003||p
1343 dUNDERBAR|5.009002||p
1354 debprofdump||5.005000|
1356 debstackptrs||5.007003|
1358 debug_start_match|||
1362 delete_eval_scope|||
1363 delimcpy||5.004000|n
1364 deprecate_commaless_var_list|||
1365 despatch_signals||5.007001|
1377 do_binmode||5.004050|
1386 do_gv_dump||5.006000|
1387 do_gvgv_dump||5.006000|
1388 do_hv_dump||5.006000|
1392 do_magic_dump||5.006000|
1397 do_op_dump||5.006000|
1403 do_pmop_dump||5.006000|
1413 do_sv_dump||5.006000|
1416 do_trans_complex_utf8|||
1418 do_trans_count_utf8|||
1420 do_trans_simple_utf8|||
1431 doing_taint||5.008001|n
1449 dump_eval||5.006000|
1451 dump_form||5.006000|
1452 dump_indent||5.006000|v
1454 dump_packsubs_perl|||
1455 dump_packsubs||5.006000|
1459 dump_trie_interim_list|||
1460 dump_trie_interim_table|||
1462 dump_vindent||5.006000|
1470 fbm_compile||5.005000|
1471 fbm_instr||5.005000|
1472 feature_is_enabled|||
1479 find_and_forget_pmops|||
1480 find_array_subscript|||
1483 find_default_stash|||
1484 find_hash_subscript|||
1488 find_runcv||5.008001|
1490 find_rundefsvoffset||5.009002|
1491 find_rundefsv||5.013002|
1495 fixup_errno_string|||
1496 foldEQ_latin1||5.013008|n
1497 foldEQ_locale||5.013002|n
1498 foldEQ_utf8_flags||5.013010|
1499 foldEQ_utf8||5.013002|
1503 force_ident_maybe_lex|||
1507 force_strict_version|||
1512 form_short_octal_warning|||
1515 fprintf_nocontext|||vn
1517 free_global_struct|||
1518 free_tied_hv_pool|||
1520 gen_constant_list|||
1521 get_ANYOF_cp_list_for_ssc|||
1522 get_and_check_backslash_N_name|||
1525 get_c_backtrace_dump|||
1527 get_context||5.006000|n
1528 get_cvn_flags|5.009005||p
1535 get_invlist_iter_addr|||n
1536 get_invlist_offset_addr|||n
1537 get_invlist_previous_index_addr|||n
1541 get_op_descs||5.005000|
1542 get_op_names||5.005000|
1544 get_ppaddr||5.006000|
1548 getcwd_sv||5.007002|
1556 grok_bin|5.007003||p
1561 grok_hex|5.007003||p
1562 grok_infnan||5.021004|
1563 grok_number_flags||5.021002|
1564 grok_number|5.007002||p
1565 grok_numeric_radix|5.007002||p
1566 grok_oct|5.007003||p
1572 gv_add_by_type||5.011000|
1573 gv_autoload4||5.004000|
1574 gv_autoload_pvn||5.015004|
1575 gv_autoload_pv||5.015004|
1576 gv_autoload_sv||5.015004|
1578 gv_const_sv||5.009003|
1580 gv_efullname3||5.003070|
1581 gv_efullname4||5.006001|
1583 gv_fetchfile_flags||5.009005|
1585 gv_fetchmeth_autoload||5.007003|
1586 gv_fetchmeth_internal|||
1587 gv_fetchmeth_pv_autoload||5.015004|
1588 gv_fetchmeth_pvn_autoload||5.015004|
1589 gv_fetchmeth_pvn||5.015004|
1590 gv_fetchmeth_pv||5.015004|
1591 gv_fetchmeth_sv_autoload||5.015004|
1592 gv_fetchmeth_sv||5.015004|
1593 gv_fetchmethod_autoload||5.004000|
1594 gv_fetchmethod_pv_flags||5.015004|
1595 gv_fetchmethod_pvn_flags||5.015004|
1596 gv_fetchmethod_sv_flags||5.015004|
1599 gv_fetchpvn_flags|5.009002||p
1600 gv_fetchpvs|5.009004||p
1602 gv_fetchsv|5.009002||p
1603 gv_fullname3||5.003070|
1604 gv_fullname4||5.006001|
1606 gv_handler||5.007001|
1607 gv_init_pvn||5.015004|
1608 gv_init_pv||5.015004|
1610 gv_init_sv||5.015004|
1613 gv_magicalize_isa|||
1615 gv_name_set||5.009004|
1618 gv_stashpvn_internal|||
1619 gv_stashpvn|5.003070||p
1620 gv_stashpvs|5.009003||p
1622 gv_stashsvpvn_cached|||
1625 handle_regex_sets|||
1632 hv_auxinit_internal|||n
1634 hv_backreferences_p|||
1635 hv_clear_placeholders||5.009001|
1637 hv_common_key_len||5.010000|
1638 hv_common||5.010000|
1639 hv_copy_hints_hv||5.009004|
1640 hv_delayfree_ent||5.004000|
1642 hv_delete_ent||5.003070|
1644 hv_eiter_p||5.009003|
1645 hv_eiter_set||5.009003|
1648 hv_exists_ent||5.003070|
1650 hv_fetch_ent||5.003070|
1651 hv_fetchs|5.009003||p
1655 hv_free_ent||5.004000|
1657 hv_iterkeysv||5.003070|
1659 hv_iternext_flags||5.008000|
1664 hv_ksplit||5.003070|
1667 hv_name_set||5.009003|
1669 hv_placeholders_get||5.009003|
1670 hv_placeholders_p|||
1671 hv_placeholders_set||5.009003|
1672 hv_rand_set||5.018000|
1673 hv_riter_p||5.009003|
1674 hv_riter_set||5.009003|
1675 hv_scalar||5.009001|
1676 hv_store_ent||5.003070|
1677 hv_store_flags||5.008000|
1678 hv_stores|5.009004||p
1682 ibcmp_locale||5.004000|
1683 ibcmp_utf8||5.007003|
1686 incpush_if_exists|||
1690 init_argv_symbols|||
1694 init_global_struct|||
1695 init_i18nl10n||5.006000|
1696 init_i18nl14n||5.006000|
1701 init_postdump_symbols|||
1702 init_predump_symbols|||
1703 init_stacks||5.005000|
1715 invlist_is_iterating|||n
1716 invlist_iterfinish|||n
1717 invlist_iterinit|||n
1718 invlist_iternext|||n
1720 invlist_previous_index|||n
1722 invlist_set_previous_index|||n
1724 invoke_exception_hook|||
1726 isALNUMC|5.006000||p
1727 isALNUM_lazy||5.021001|
1728 isALPHANUMERIC||5.017008|
1738 isGV_with_GP|5.009004||p
1740 isIDFIRST_lazy||5.021001|
1745 isPSXSPC|5.006001||p
1750 isUTF8_CHAR||5.021001|
1752 isWORDCHAR||5.013006|
1753 isXDIGIT|5.006000||p
1755 is_ascii_string||5.011000|
1756 is_handle_constructor|||n
1757 is_invariant_string||5.021007|n
1758 is_lvalue_sub||5.007001|
1759 is_safe_syscall||5.019004|
1761 is_uni_alnum_lc||5.006000|
1762 is_uni_alnumc_lc||5.017007|
1763 is_uni_alnumc||5.017007|
1764 is_uni_alnum||5.006000|
1765 is_uni_alpha_lc||5.006000|
1766 is_uni_alpha||5.006000|
1767 is_uni_ascii_lc||5.006000|
1768 is_uni_ascii||5.006000|
1769 is_uni_blank_lc||5.017002|
1770 is_uni_blank||5.017002|
1771 is_uni_cntrl_lc||5.006000|
1772 is_uni_cntrl||5.006000|
1773 is_uni_digit_lc||5.006000|
1774 is_uni_digit||5.006000|
1775 is_uni_graph_lc||5.006000|
1776 is_uni_graph||5.006000|
1777 is_uni_idfirst_lc||5.006000|
1778 is_uni_idfirst||5.006000|
1779 is_uni_lower_lc||5.006000|
1780 is_uni_lower||5.006000|
1781 is_uni_print_lc||5.006000|
1782 is_uni_print||5.006000|
1783 is_uni_punct_lc||5.006000|
1784 is_uni_punct||5.006000|
1785 is_uni_space_lc||5.006000|
1786 is_uni_space||5.006000|
1787 is_uni_upper_lc||5.006000|
1788 is_uni_upper||5.006000|
1789 is_uni_xdigit_lc||5.006000|
1790 is_uni_xdigit||5.006000|
1791 is_utf8_alnumc||5.017007|
1792 is_utf8_alnum||5.006000|
1793 is_utf8_alpha||5.006000|
1794 is_utf8_ascii||5.006000|
1795 is_utf8_blank||5.017002|
1796 is_utf8_char_buf||5.015008|n
1797 is_utf8_char||5.006000|n
1798 is_utf8_cntrl||5.006000|
1800 is_utf8_digit||5.006000|
1801 is_utf8_graph||5.006000|
1802 is_utf8_idcont||5.008000|
1803 is_utf8_idfirst||5.006000|
1804 is_utf8_lower||5.006000|
1805 is_utf8_mark||5.006000|
1806 is_utf8_perl_space||5.011001|
1807 is_utf8_perl_word||5.011001|
1808 is_utf8_posix_digit||5.011001|
1809 is_utf8_print||5.006000|
1810 is_utf8_punct||5.006000|
1811 is_utf8_space||5.006000|
1812 is_utf8_string_loclen||5.009003|n
1813 is_utf8_string_loc||5.008001|n
1814 is_utf8_string||5.006001|n
1815 is_utf8_upper||5.006000|
1816 is_utf8_xdigit||5.006000|
1817 is_utf8_xidcont||5.013010|
1818 is_utf8_xidfirst||5.013010|
1821 isinfnan||5.021004|n
1826 keyword_plugin_standard|||
1830 lex_bufutf8||5.011002|
1831 lex_discard_to||5.011002|
1832 lex_grow_linestr||5.011002|
1833 lex_next_chunk||5.011002|
1834 lex_peek_unichar||5.011002|
1835 lex_read_space||5.011002|
1836 lex_read_to||5.011002|
1837 lex_read_unichar||5.011002|
1838 lex_start||5.009005|
1839 lex_stuff_pvn||5.011002|
1840 lex_stuff_pvs||5.013005|
1841 lex_stuff_pv||5.013006|
1842 lex_stuff_sv||5.011002|
1843 lex_unstuff||5.011002|
1846 load_module_nocontext|||vn
1847 load_module|5.006000||pv
1850 looks_like_number|||
1862 magic_clear_all_env|||
1863 magic_cleararylen_p|||
1870 magic_copycallchecker|||
1871 magic_dump||5.006000|
1873 magic_freearylen_p|||
1876 magic_getdebugvar|||
1887 magic_killbackrefs|||
1892 magic_regdata_cnt|||
1893 magic_regdatum_get|||
1894 magic_regdatum_set|||
1896 magic_set_all_env|||
1898 magic_setcollxfrm|||
1900 magic_setdebugvar|||
1922 malloc_good_size|||n
1925 markstack_grow||5.021001|
1926 matcher_matches_sv|||
1927 maybe_multimagic_gv|||
1945 mg_findext|5.013008||pn
1947 mg_free_type||5.013006|
1950 mg_length||5.005000|
1955 mini_mktime||5.007002|n
1958 mode_from_discipline|||
1965 mro_gather_and_rename|||
1966 mro_get_from_name||5.010001|
1967 mro_get_linear_isa_dfs|||
1968 mro_get_linear_isa||5.009005|
1969 mro_get_private_data||5.010001|
1970 mro_isa_changed_in|||
1973 mro_method_changed_in||5.009005|
1974 mro_package_moved|||
1975 mro_register||5.010001|
1976 mro_set_mro||5.010001|
1977 mro_set_private_data||5.010001|
1980 multideref_stringify|||
1985 my_bytes_to_utf8|||n
1991 my_dirfd||5.009005|n
1994 my_failure_exit||5.004000|
1995 my_fflush_all||5.006000|
2002 my_pclose||5.003070|
2003 my_popen_list||5.007001|
2007 my_snprintf|5.009004||pvn
2008 my_socketpair||5.007003|n
2009 my_sprintf|5.009003||pvn
2012 my_strerror||5.021001|
2013 my_strftime||5.007002|
2014 my_strlcat|5.009004||pn
2015 my_strlcpy|5.009004||pn
2017 my_vsnprintf||5.009004|n
2019 newANONATTRSUB||5.006000|
2025 newATTRSUB||5.006000|
2030 newCONSTSUB_flags||5.015006|
2031 newCONSTSUB|5.004050||p
2033 newDEFSVOP||5.021006|
2036 newGIVENOP||5.009003|
2041 newGVgen_flags||5.015004|
2051 newMETHOP_internal|||
2052 newMETHOP_named||5.021005|
2053 newMETHOP||5.021005|
2057 newPADNAMELIST||5.021007|n
2058 newPADNAMEouter||5.021007|n
2059 newPADNAMEpvn||5.021007|n
2065 newRV_inc|5.004000||p
2066 newRV_noinc|5.004000||p
2074 newSV_type|5.009005||p
2079 newSVpadname||5.017004|
2080 newSVpv_share||5.013006|
2081 newSVpvf_nocontext|||vn
2082 newSVpvf||5.004000|v
2083 newSVpvn_flags|5.010001||p
2084 newSVpvn_share|5.007001||p
2085 newSVpvn_utf8|5.010001||p
2086 newSVpvn|5.004050||p
2087 newSVpvs_flags|5.010001||p
2088 newSVpvs_share|5.009003||p
2089 newSVpvs|5.009003||p
2095 newUNOP_AUX||5.021007|
2097 newWHENOP||5.009003|
2098 newWHILEOP||5.013007|
2100 newXS_flags||5.009004|
2102 newXSproto||5.006000|
2104 new_collate||5.006000|
2106 new_ctype||5.006000|
2109 new_numeric||5.006000|
2110 new_stackinfo||5.005000|
2111 new_version||5.009000|
2112 new_warnings_bitfield|||
2117 no_bareword_allowed|||
2122 not_incrementable|||
2123 nothreadhook||5.008000|
2128 op_append_elem||5.013006|
2129 op_append_list||5.013006|
2131 op_contextualize||5.013006|
2132 op_convert_list||5.021006|
2136 op_linklist||5.013006|
2138 op_lvalue||5.013007|
2140 op_parent||5.021002|n
2141 op_prepend_elem||5.013006|
2144 op_refcnt_lock||5.009002|
2145 op_refcnt_unlock||5.009002|
2148 op_sibling_splice||5.021002|n
2155 opslab_force_free|||
2156 opslab_free_nopad|||
2158 pMY_CXT_|5.007003||p
2162 packWARN|5.007003||p
2168 pad_add_anon||5.008001|
2169 pad_add_name_pvn||5.015001|
2170 pad_add_name_pvs||5.015001|
2171 pad_add_name_pv||5.015001|
2172 pad_add_name_sv||5.015001|
2178 pad_compname_type||5.009003|
2180 pad_findmy_pvn||5.015001|
2181 pad_findmy_pvs||5.015001|
2182 pad_findmy_pv||5.015001|
2183 pad_findmy_sv||5.015001|
2184 pad_fixup_inner_anons|||
2199 padnamelist_fetch||5.021007|n
2201 padnamelist_store||5.021007|
2202 parse_arithexpr||5.013008|
2203 parse_barestmt||5.013007|
2204 parse_block||5.013007|
2206 parse_fullexpr||5.013008|
2207 parse_fullstmt||5.013005|
2208 parse_gv_stash_name|||
2210 parse_label||5.013007|
2211 parse_listexpr||5.013008|
2212 parse_lparen_question_flags|||
2213 parse_stmtseq||5.013006|
2214 parse_subsignature|||
2215 parse_termexpr||5.013008|
2216 parse_unicode_opts|||
2218 parser_free_nexttoke_ops|||
2220 path_is_searchable|||n
2223 perl_alloc_using|||n
2225 perl_clone_using|||n
2228 perl_destruct||5.007003|n
2230 perl_parse||5.006000|n
2234 pmop_dump||5.006000|
2238 populate_ANYOF_from_invlist|||
2242 pregfree2||5.011000|
2244 prescan_version||5.011004|
2246 printf_nocontext|||vn
2247 process_special_blocks|||
2249 ptr_table_clear||5.009005|
2250 ptr_table_fetch||5.009005|
2252 ptr_table_free||5.009005|
2253 ptr_table_new||5.009005|
2254 ptr_table_split||5.009005|
2255 ptr_table_store||5.009005|
2257 put_charclass_bitmap_innards|||
2260 pv_display|5.006000||p
2261 pv_escape|5.009004||p
2262 pv_pretty|5.009004||p
2263 pv_uni_display||5.007003|
2266 quadmath_format_needed|||n
2267 quadmath_format_single|||n
2268 re_compile||5.009005|
2271 re_intuit_start||5.019001|
2272 re_intuit_string||5.006000|
2275 reentrant_free||5.021008|
2276 reentrant_init||5.021008|
2277 reentrant_retry||5.021008|vn
2278 reentrant_size||5.021008|
2279 ref_array_or_hash|||
2280 refcounted_he_chain_2hv|||
2281 refcounted_he_fetch_pvn|||
2282 refcounted_he_fetch_pvs|||
2283 refcounted_he_fetch_pv|||
2284 refcounted_he_fetch_sv|||
2285 refcounted_he_free|||
2286 refcounted_he_inc|||
2287 refcounted_he_new_pvn|||
2288 refcounted_he_new_pvs|||
2289 refcounted_he_new_pv|||
2290 refcounted_he_new_sv|||
2291 refcounted_he_value|||
2296 reg_check_named_buff_matched|||n
2297 reg_named_buff_all||5.009005|
2298 reg_named_buff_exists||5.009005|
2299 reg_named_buff_fetch||5.009005|
2300 reg_named_buff_firstkey||5.009005|
2301 reg_named_buff_iter|||
2302 reg_named_buff_nextkey||5.009005|
2303 reg_named_buff_scalar||5.009005|
2306 reg_numbered_buff_fetch|||
2307 reg_numbered_buff_length|||
2308 reg_numbered_buff_store|||
2317 regclass_swash||5.009004|
2326 regexec_flags||5.005000|
2327 regfree_internal||5.009005|
2332 reginitcolors||5.006000|
2348 report_redefined_cv|||
2350 report_wrongway_fh|||
2351 require_pv||5.006000|
2358 rsignal_state||5.004000|
2362 runops_debug||5.005000|
2363 runops_standard||5.005000|
2364 rv2cv_op_cv||5.013006|
2369 safesyscalloc||5.006000|n
2370 safesysfree||5.006000|n
2371 safesysmalloc||5.006000|n
2372 safesysrealloc||5.006000|n
2377 save_adelete||5.011000|
2378 save_aelem_flags||5.011000|
2379 save_aelem||5.004050|
2381 save_alloc||5.006000|
2384 save_bool||5.008001|
2387 save_destructor_x||5.006000|
2388 save_destructor||5.006000|
2392 save_generic_pvref||5.006001|
2393 save_generic_svref||5.005030|
2396 save_hdelete||5.011000|
2398 save_helem_flags||5.011000|
2399 save_helem||5.004050|
2400 save_hints||5.010001|
2409 save_mortalizesv||5.007001|
2412 save_padsv_and_mortalize||5.010001|
2414 save_pushi32ptr||5.010001|
2415 save_pushptri32ptr|||
2416 save_pushptrptr||5.010001|
2417 save_pushptr||5.010001|
2418 save_re_context||5.006000|
2421 save_set_svflags||5.009000|
2422 save_shared_pvref||5.007003|
2426 save_vptr||5.006000|
2430 savesharedpvn||5.009005|
2431 savesharedpvs||5.013006|
2432 savesharedpv||5.007003|
2433 savesharedsvpv||5.013006|
2434 savestack_grow_cnt||5.008001|
2458 scan_version||5.009001|
2459 scan_vstring||5.009005|
2466 set_context||5.006000|n
2467 set_numeric_local||5.006000|
2468 set_numeric_radix||5.006000|
2469 set_numeric_standard||5.006000|
2473 share_hek||5.004000|
2483 sortsv_flags||5.009003|
2485 space_join_names_mortal|||
2490 ssc_clear_locale|||n
2496 ssc_is_cp_posixl_init|||n
2501 start_subparse||5.004000|
2509 str_to_version||5.006000|
2518 sv_2bool_flags||5.013006|
2523 sv_2iuv_non_preserve|||
2524 sv_2iv_flags||5.009001|
2528 sv_2nv_flags||5.013001|
2529 sv_2pv_flags|5.007002||p
2530 sv_2pv_nolen|5.006000||p
2531 sv_2pvbyte_nolen|5.006000||p
2532 sv_2pvbyte|5.006000||p
2533 sv_2pvutf8_nolen||5.006000|
2534 sv_2pvutf8||5.006000|
2536 sv_2uv_flags||5.009001|
2544 sv_cat_decode||5.008001|
2545 sv_catpv_flags||5.013006|
2546 sv_catpv_mg|5.004050||p
2547 sv_catpv_nomg||5.013006|
2548 sv_catpvf_mg_nocontext|||pvn
2549 sv_catpvf_mg|5.006000|5.004000|pv
2550 sv_catpvf_nocontext|||vn
2551 sv_catpvf||5.004000|v
2552 sv_catpvn_flags||5.007002|
2553 sv_catpvn_mg|5.004050||p
2554 sv_catpvn_nomg|5.007002||p
2556 sv_catpvs_flags||5.013006|
2557 sv_catpvs_mg||5.013006|
2558 sv_catpvs_nomg||5.013006|
2559 sv_catpvs|5.009003||p
2561 sv_catsv_flags||5.007002|
2562 sv_catsv_mg|5.004050||p
2563 sv_catsv_nomg|5.007002||p
2569 sv_cmp_flags||5.013006|
2570 sv_cmp_locale_flags||5.013006|
2571 sv_cmp_locale||5.004000|
2573 sv_collxfrm_flags||5.013006|
2575 sv_copypv_flags||5.017002|
2576 sv_copypv_nomg||5.017002|
2578 sv_dec_nomg||5.013002|
2581 sv_derived_from_pvn||5.015004|
2582 sv_derived_from_pv||5.015004|
2583 sv_derived_from_sv||5.015004|
2584 sv_derived_from||5.004000|
2585 sv_destroyable||5.010000|
2587 sv_does_pvn||5.015004|
2588 sv_does_pv||5.015004|
2589 sv_does_sv||5.015004|
2593 sv_dup_inc_multiple|||
2596 sv_eq_flags||5.013006|
2599 sv_force_normal_flags||5.007001|
2600 sv_force_normal||5.006000|
2604 sv_get_backrefs||5.021008|n
2608 sv_inc_nomg||5.013002|
2610 sv_insert_flags||5.010001|
2617 sv_len_utf8||5.006000|
2619 sv_magic_portable|5.021008|5.004000|p
2620 sv_magicext_mglob|||
2621 sv_magicext||5.007003|
2623 sv_mortalcopy_flags|||
2628 sv_nolocking||5.007003|
2629 sv_nosharing||5.007003|
2632 sv_only_taint_gmagic|||n
2635 sv_pos_b2u_flags||5.019003|
2636 sv_pos_b2u_midway|||
2637 sv_pos_b2u||5.006000|
2638 sv_pos_u2b_cached|||
2639 sv_pos_u2b_flags||5.011005|
2640 sv_pos_u2b_forwards|||n
2641 sv_pos_u2b_midway|||n
2642 sv_pos_u2b||5.006000|
2643 sv_pvbyten_force||5.006000|
2644 sv_pvbyten||5.006000|
2645 sv_pvbyte||5.006000|
2646 sv_pvn_force_flags|5.007002||p
2648 sv_pvn_nomg|5.007003|5.005000|p
2650 sv_pvutf8n_force||5.006000|
2651 sv_pvutf8n||5.006000|
2652 sv_pvutf8||5.006000|
2654 sv_recode_to_utf8||5.007003|
2662 sv_rvweaken||5.006000|
2664 sv_setiv_mg|5.004050||p
2666 sv_setnv_mg|5.006000||p
2668 sv_setpv_mg|5.004050||p
2669 sv_setpvf_mg_nocontext|||pvn
2670 sv_setpvf_mg|5.006000|5.004000|pv
2671 sv_setpvf_nocontext|||vn
2672 sv_setpvf||5.004000|v
2673 sv_setpviv_mg||5.008001|
2674 sv_setpviv||5.008001|
2675 sv_setpvn_mg|5.004050||p
2677 sv_setpvs_mg||5.013006|
2678 sv_setpvs|5.009004||p
2683 sv_setref_pvs||5.021008|
2685 sv_setref_uv||5.007001|
2687 sv_setsv_flags||5.007002|
2688 sv_setsv_mg|5.004050||p
2689 sv_setsv_nomg|5.007002||p
2691 sv_setuv_mg|5.004050||p
2692 sv_setuv|5.004000||p
2693 sv_tainted||5.004000|
2697 sv_uni_display||5.007003|
2698 sv_unmagicext|5.013008||p
2700 sv_unref_flags||5.007001|
2702 sv_untaint||5.004000|
2704 sv_usepvn_flags||5.009004|
2705 sv_usepvn_mg|5.004050||p
2707 sv_utf8_decode||5.006000|
2708 sv_utf8_downgrade||5.006000|
2709 sv_utf8_encode||5.006000|
2710 sv_utf8_upgrade_flags_grow||5.011000|
2711 sv_utf8_upgrade_flags||5.007002|
2712 sv_utf8_upgrade_nomg||5.007002|
2713 sv_utf8_upgrade||5.007001|
2715 sv_vcatpvf_mg|5.006000|5.004000|p
2716 sv_vcatpvfn_flags||5.017002|
2717 sv_vcatpvfn||5.004000|
2718 sv_vcatpvf|5.006000|5.004000|p
2719 sv_vsetpvf_mg|5.006000|5.004000|p
2720 sv_vsetpvfn||5.004000|
2721 sv_vsetpvf|5.006000|5.004000|p
2724 swash_fetch||5.007002|
2725 swash_init||5.006000|
2726 swash_scan_list_line|||
2728 sync_locale||5.021004|
2729 sys_init3||5.010000|n
2730 sys_init||5.010000|n
2734 sys_term||5.010000|n
2739 toFOLD_uni||5.007003|
2740 toFOLD_utf8||5.019001|
2742 toLOWER_L1||5.019001|
2743 toLOWER_LC||5.004000|
2744 toLOWER_uni||5.007003|
2745 toLOWER_utf8||5.015007|
2747 toTITLE_uni||5.007003|
2748 toTITLE_utf8||5.015007|
2750 toUPPER_uni||5.007003|
2751 toUPPER_utf8||5.015007|
2755 to_uni_fold||5.007003|
2756 to_uni_lower_lc||5.006000|
2757 to_uni_lower||5.007003|
2758 to_uni_title_lc||5.006000|
2759 to_uni_title||5.007003|
2760 to_uni_upper_lc||5.006000|
2761 to_uni_upper||5.007003|
2762 to_utf8_case||5.007003|
2763 to_utf8_fold||5.015007|
2764 to_utf8_lower||5.015007|
2766 to_utf8_title||5.015007|
2767 to_utf8_upper||5.015007|
2771 too_few_arguments_pv|||
2772 too_many_arguments_pv|||
2773 translate_substr_offsets|||n
2779 unpack_str||5.007003|
2780 unpackstring||5.008001|
2781 unreferenced_to_tmp_stack|||
2782 unshare_hek_or_pvn|||
2784 unsharepvn||5.003070|
2785 unwind_handler_stack|||
2786 update_debugger_info|||
2787 upg_version||5.009005|
2790 utf16_to_utf8_reversed||5.006001|
2791 utf16_to_utf8||5.006001|
2792 utf8_distance||5.006000|
2793 utf8_hop||5.006000|n
2794 utf8_length||5.007001|
2795 utf8_mg_len_cache_update|||
2796 utf8_mg_pos_cache_update|||
2797 utf8_to_bytes||5.006001|
2798 utf8_to_uvchr_buf||5.015009|
2799 utf8_to_uvchr||5.007001|
2800 utf8_to_uvuni_buf||5.015009|
2801 utf8_to_uvuni||5.007001|
2802 utf8n_to_uvchr||5.007001|
2803 utf8n_to_uvuni||5.007001|
2805 uvchr_to_utf8_flags||5.007003|
2806 uvchr_to_utf8||5.007001|
2807 uvoffuni_to_utf8_flags||5.019004|
2808 uvuni_to_utf8_flags||5.007003|
2809 uvuni_to_utf8||5.007001|
2810 valid_utf8_to_uvchr||5.015009|
2811 valid_utf8_to_uvuni||5.015009|
2822 vload_module|5.006000||p
2824 vnewSVpvf|5.006000|5.004000|p
2827 vstringify||5.009000|
2834 warner_nocontext|||vn
2835 warner|5.006000|5.004000|pv
2839 whichsig_pvn||5.015004|
2840 whichsig_pv||5.015004|
2841 whichsig_sv||5.015004|
2843 win32_croak_not_implemented|||n
2844 with_queued_errors|||
2845 wrap_op_checker||5.015008|
2849 xs_version_bootcheck|||
2859 if (exists $opt{'list-unsupported'}) {
2861 for $f (sort { lc $a cmp lc $b } keys %API) {
2862 next unless $API{$f}{todo};
2863 print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
2868 # Scan for possible replacement candidates
2870 my(%replace, %need, %hints, %warnings, %depends);
2872 my($hint, $define, $function);
2878 / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
2879 | "[^"\\]*(?:\\.[^"\\]*)*"
2880 | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
2881 grep { exists $API{$_} } $code =~ /(\w+)/mg;
2886 my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
2887 if (m{^\s*\*\s(.*?)\s*$}) {
2888 for (@{$hint->[1]}) {
2889 $h->{$_} ||= ''; # suppress warning with older perls
2893 else { undef $hint }
2896 $hint = [$1, [split /,?\s+/, $2]]
2897 if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
2900 if ($define->[1] =~ /\\$/) {
2904 if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
2905 my @n = find_api($define->[1]);
2906 push @{$depends{$define->[0]}}, @n if @n
2912 $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
2916 if (exists $API{$function->[0]}) {
2917 my @n = find_api($function->[1]);
2918 push @{$depends{$function->[0]}}, @n if @n
2923 $function->[1] .= $_;
2927 $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
2929 $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
2930 $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
2931 $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
2932 $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
2934 if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
2935 my @deps = map { s/\s+//g; $_ } split /,/, $3;
2937 for $d (map { s/\s+//g; $_ } split /,/, $1) {
2938 push @{$depends{$d}}, @deps;
2942 $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
2945 for (values %depends) {
2947 $_ = [sort grep !$s{$_}++, @$_];
2950 if (exists $opt{'api-info'}) {
2953 my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
2954 for $f (sort { lc $a cmp lc $b } keys %API) {
2955 next unless $f =~ /$match/;
2956 print "\n=== $f ===\n\n";
2958 if ($API{$f}{base} || $API{$f}{todo}) {
2959 my $base = format_version($API{$f}{base} || $API{$f}{todo});
2960 print "Supported at least starting from perl-$base.\n";
2963 if ($API{$f}{provided}) {
2964 my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
2965 print "Support by $ppport provided back to perl-$todo.\n";
2966 print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
2967 print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
2968 print "\n$hints{$f}" if exists $hints{$f};
2969 print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
2972 print "No portability information available.\n" unless $info;
2975 $count or print "Found no API matching '$opt{'api-info'}'.";
2980 if (exists $opt{'list-provided'}) {
2982 for $f (sort { lc $a cmp lc $b } keys %API) {
2983 next unless $API{$f}{provided};
2985 push @flags, 'explicit' if exists $need{$f};
2986 push @flags, 'depend' if exists $depends{$f};
2987 push @flags, 'hint' if exists $hints{$f};
2988 push @flags, 'warning' if exists $warnings{$f};
2989 my $flags = @flags ? ' ['.join(', ', @flags).']' : '';
2996 my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
2997 my $srcext = join '|', map { quotemeta $_ } @srcext;
3004 push @files, $_ unless $seen{$_}++;
3006 else { warn "'$_' is not a file.\n" }
3009 my @new = grep { -f } glob $_
3010 or warn "'$_' does not exist.\n";
3011 push @files, grep { !$seen{$_}++ } @new;
3018 File::Find::find(sub {
3019 $File::Find::name =~ /($srcext)$/i
3020 and push @files, $File::Find::name;
3024 @files = map { glob "*$_" } @srcext;
3028 if (!@ARGV || $opt{filter}) {
3030 my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files;
3032 my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
3033 push @{ $out ? \@out : \@in }, $_;
3035 if (@ARGV && @out) {
3036 warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
3041 die "No input files given!\n" unless @files;
3043 my(%files, %global, %revreplace);
3044 %revreplace = reverse %replace;
3046 my $patch_opened = 0;
3048 for $filename (@files) {
3049 unless (open IN, "<$filename") {
3050 warn "Unable to read from $filename: $!\n";
3054 info("Scanning $filename ...");
3056 my $c = do { local $/; <IN> };
3059 my %file = (orig => $c, changes => 0);
3061 # Temporarily remove C/XS comments and strings from the code
3065 ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
3066 | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
3068 | "[^"\\]*(?:\\.[^"\\]*)*"
3069 | '[^'\\]*(?:\\.[^'\\]*)*'
3070 | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
3071 }{ defined $2 and push @ccom, $2;
3072 defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
3074 $file{ccom} = \@ccom;
3076 $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
3080 for $func (keys %API) {
3082 $match .= "|$revreplace{$func}" if exists $revreplace{$func};
3083 if ($c =~ /\b(?:Perl_)?($match)\b/) {
3084 $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
3085 $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
3086 if (exists $API{$func}{provided}) {
3087 $file{uses_provided}{$func}++;
3088 if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
3089 $file{uses}{$func}++;
3090 my @deps = rec_depend($func);
3092 $file{uses_deps}{$func} = \@deps;
3094 $file{uses}{$_} = 0 unless exists $file{uses}{$_};
3097 for ($func, @deps) {
3098 $file{needs}{$_} = 'static' if exists $need{$_};
3102 if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
3103 if ($c =~ /\b$func\b/) {
3104 $file{uses_todo}{$func}++;
3110 while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
3111 if (exists $need{$2}) {
3112 $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
3114 else { warning("Possibly wrong #define $1 in $filename") }
3117 for (qw(uses needs uses_todo needed_global needed_static)) {
3118 for $func (keys %{$file{$_}}) {
3119 push @{$global{$_}{$func}}, $filename;
3123 $files{$filename} = \%file;
3126 # Globally resolve NEED_'s
3128 for $need (keys %{$global{needs}}) {
3129 if (@{$global{needs}{$need}} > 1) {
3130 my @targets = @{$global{needs}{$need}};
3131 my @t = grep $files{$_}{needed_global}{$need}, @targets;
3132 @targets = @t if @t;
3133 @t = grep /\.xs$/i, @targets;
3134 @targets = @t if @t;
3135 my $target = shift @targets;
3136 $files{$target}{needs}{$need} = 'global';
3137 for (@{$global{needs}{$need}}) {
3138 $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
3143 for $filename (@files) {
3144 exists $files{$filename} or next;
3146 info("=== Analyzing $filename ===");
3148 my %file = %{$files{$filename}};
3150 my $c = $file{code};
3153 for $func (sort keys %{$file{uses_Perl}}) {
3154 if ($API{$func}{varargs}) {
3155 unless ($API{$func}{nothxarg}) {
3156 my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
3157 { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
3159 warning("Doesn't pass interpreter argument aTHX to Perl_$func");
3160 $file{changes} += $changes;
3165 warning("Uses Perl_$func instead of $func");
3166 $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
3171 for $func (sort keys %{$file{uses_replace}}) {
3172 warning("Uses $func instead of $replace{$func}");
3173 $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
3176 for $func (sort keys %{$file{uses_provided}}) {
3177 if ($file{uses}{$func}) {
3178 if (exists $file{uses_deps}{$func}) {
3179 diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
3185 $warnings += hint($func);
3188 unless ($opt{quiet}) {
3189 for $func (sort keys %{$file{uses_todo}}) {
3190 print "*** WARNING: Uses $func, which may not be portable below perl ",
3191 format_version($API{$func}{todo}), ", even with '$ppport'\n";
3196 for $func (sort keys %{$file{needed_static}}) {
3198 if (not exists $file{uses}{$func}) {
3199 $message = "No need to define NEED_$func if $func is never used";
3201 elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
3202 $message = "No need to define NEED_$func when already needed globally";
3206 $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
3210 for $func (sort keys %{$file{needed_global}}) {
3212 if (not exists $global{uses}{$func}) {
3213 $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
3215 elsif (exists $file{needs}{$func}) {
3216 if ($file{needs}{$func} eq 'extern') {
3217 $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
3219 elsif ($file{needs}{$func} eq 'static') {
3220 $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
3225 $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
3229 $file{needs_inc_ppport} = keys %{$file{uses}};
3231 if ($file{needs_inc_ppport}) {
3234 for $func (sort keys %{$file{needs}}) {
3235 my $type = $file{needs}{$func};
3236 next if $type eq 'extern';
3237 my $suffix = $type eq 'global' ? '_GLOBAL' : '';
3238 unless (exists $file{"needed_$type"}{$func}) {
3239 if ($type eq 'global') {
3240 diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
3243 diag("File needs $func, adding static request");
3245 $pp .= "#define NEED_$func$suffix\n";
3249 if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
3254 unless ($file{has_inc_ppport}) {
3255 diag("Needs to include '$ppport'");
3256 $pp .= qq(#include "$ppport"\n)
3260 $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
3261 || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
3262 || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
3263 || ($c =~ s/^/$pp/);
3267 if ($file{has_inc_ppport}) {
3268 diag("No need to include '$ppport'");
3269 $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
3273 # put back in our C comments
3276 my @ccom = @{$file{ccom}};
3277 for $ix (0 .. $#ccom) {
3278 if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
3280 $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
3283 $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
3288 my $s = $cppc != 1 ? 's' : '';
3289 warning("Uses $cppc C++ style comment$s, which is not portable");
3292 my $s = $warnings != 1 ? 's' : '';
3293 my $warn = $warnings ? " ($warnings warning$s)" : '';
3294 info("Analysis completed$warn");
3296 if ($file{changes}) {
3297 if (exists $opt{copy}) {
3298 my $newfile = "$filename$opt{copy}";
3300 error("'$newfile' already exists, refusing to write copy of '$filename'");
3304 if (open F, ">$newfile") {
3305 info("Writing copy of '$filename' with changes to '$newfile'");
3310 error("Cannot open '$newfile' for writing: $!");
3314 elsif (exists $opt{patch} || $opt{changes}) {
3315 if (exists $opt{patch}) {
3316 unless ($patch_opened) {
3317 if (open PATCH, ">$opt{patch}") {
3321 error("Cannot open '$opt{patch}' for writing: $!");
3327 mydiff(\*PATCH, $filename, $c);
3331 info("Suggested changes:");
3332 mydiff(\*STDOUT, $filename, $c);
3336 my $s = $file{changes} == 1 ? '' : 's';
3337 info("$file{changes} potentially required change$s detected");
3345 close PATCH if $patch_opened;
3350 sub try_use { eval "use @_;"; return $@ eq '' }
3355 my($file, $str) = @_;
3358 if (exists $opt{diff}) {
3359 $diff = run_diff($opt{diff}, $file, $str);
3362 if (!defined $diff and try_use('Text::Diff')) {
3363 $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
3364 $diff = <<HEADER . $diff;
3370 if (!defined $diff) {
3371 $diff = run_diff('diff -u', $file, $str);
3374 if (!defined $diff) {
3375 $diff = run_diff('diff', $file, $str);
3378 if (!defined $diff) {
3379 error("Cannot generate a diff. Please install Text::Diff or use --copy.");
3388 my($prog, $file, $str) = @_;
3389 my $tmp = 'dppptemp';
3394 while (-e "$tmp.$suf") { $suf++ }
3397 if (open F, ">$tmp") {
3401 if (open F, "$prog $file $tmp |") {
3403 s/\Q$tmp\E/$file.patched/;
3414 error("Cannot open '$tmp' for writing: $!");
3422 my($func, $seen) = @_;
3423 return () unless exists $depends{$func};
3424 $seen = {%{$seen||{}}};
3425 return () if $seen->{$func}++;
3427 grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
3434 if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
3435 return ($1, $2, $3);
3437 elsif ($ver !~ /^\d+\.[\d_]+$/) {
3438 die "cannot parse version '$ver'\n";
3442 $ver =~ s/$/000000/;
3444 my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
3449 if ($r < 5 || ($r == 5 && $v < 6)) {
3451 die "cannot parse version '$ver'\n";
3455 return ($r, $v, $s);
3462 $ver =~ s/$/000000/;
3463 my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
3468 if ($r < 5 || ($r == 5 && $v < 6)) {
3470 die "invalid version '$ver'\n";
3474 $ver = sprintf "%d.%03d", $r, $v;
3475 $s > 0 and $ver .= sprintf "_%02d", $s;
3480 return sprintf "%d.%d.%d", $r, $v, $s;
3485 $opt{quiet} and return;
3491 $opt{quiet} and return;
3492 $opt{diag} and print @_, "\n";
3497 $opt{quiet} and return;
3498 print "*** ", @_, "\n";
3503 print "*** ERROR: ", @_, "\n";
3510 $opt{quiet} and return;
3513 if (exists $warnings{$func} && !$given_warnings{$func}++) {
3514 my $warn = $warnings{$func};
3515 $warn =~ s!^!*** !mg;
3516 print "*** WARNING: $func\n", $warn;
3519 if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
3520 my $hint = $hints{$func};
3522 print " --- hint for $func ---\n", $hint;
3529 my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
3530 my %M = ( 'I' => '*' );
3531 $usage =~ s/^\s*perl\s+\S+/$^X $0/;
3532 $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
3538 See perldoc $0 for details.
3547 my $self = do { local(@ARGV,$/)=($0); <> };
3548 my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
3549 $copy =~ s/^(?=\S+)/ /gms;
3550 $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
3551 $self =~ s/^SKIP.*(?=^__DATA__)/SKIP
3552 if (\@ARGV && \$ARGV[0] eq '--unstrip') {
3553 eval { require Devel::PPPort };
3554 \$@ and die "Cannot require Devel::PPPort, please install.\\n";
3555 if (eval \$Devel::PPPort::VERSION < $VERSION) {
3556 die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
3557 . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
3558 . "Please install a newer version, or --unstrip will not work.\\n";
3560 Devel::PPPort::WriteFile(\$0);
3565 Sorry, but this is a stripped version of \$0.
3567 To be able to use its original script and doc functionality,
3568 please try to regenerate this file using:
3574 my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
3576 / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
3577 | ( "[^"\\]*(?:\\.[^"\\]*)*"
3578 | '[^'\\]*(?:\\.[^'\\]*)*' )
3579 | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
3582 $c =~ s!^\s*#\s*!#!mg;
3585 open OUT, ">$0" or die "cannot strip $0: $!\n";
3586 print OUT "$pl$c\n";
3594 #ifndef _P_P_PORTABILITY_H_
3595 #define _P_P_PORTABILITY_H_
3597 #ifndef DPPP_NAMESPACE
3598 # define DPPP_NAMESPACE DPPP_
3601 #define DPPP_CAT2(x,y) CAT2(x,y)
3602 #define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
3604 #ifndef PERL_REVISION
3605 # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
3606 # define PERL_PATCHLEVEL_H_IMPLICIT
3607 # include <patchlevel.h>
3609 # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
3610 # include <could_not_find_Perl_patchlevel.h>
3612 # ifndef PERL_REVISION
3613 # define PERL_REVISION (5)
3615 # define PERL_VERSION PATCHLEVEL
3616 # define PERL_SUBVERSION SUBVERSION
3617 /* Replace PERL_PATCHLEVEL with PERL_VERSION */
3622 #define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
3623 #define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION))
3625 /* It is very unlikely that anyone will try to use this with Perl 6
3626 (or greater), but who knows.
3628 #if PERL_REVISION != 5
3629 # error ppport.h only works with Perl version 5
3630 #endif /* PERL_REVISION != 5 */
3639 # define dTHXa(x) dNOOP
3657 #if (PERL_BCDVERSION < 0x5006000)
3660 # define aTHXR_ thr,
3668 # define aTHXR_ aTHX_
3672 # define dTHXoa(x) dTHXa(x)
3676 # include <limits.h>
3679 #ifndef PERL_UCHAR_MIN
3680 # define PERL_UCHAR_MIN ((unsigned char)0)
3683 #ifndef PERL_UCHAR_MAX
3685 # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
3688 # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
3690 # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
3695 #ifndef PERL_USHORT_MIN
3696 # define PERL_USHORT_MIN ((unsigned short)0)
3699 #ifndef PERL_USHORT_MAX
3701 # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
3704 # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
3707 # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
3709 # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
3715 #ifndef PERL_SHORT_MAX
3717 # define PERL_SHORT_MAX ((short)SHORT_MAX)
3719 # ifdef MAXSHORT /* Often used in <values.h> */
3720 # define PERL_SHORT_MAX ((short)MAXSHORT)
3723 # define PERL_SHORT_MAX ((short)SHRT_MAX)
3725 # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
3731 #ifndef PERL_SHORT_MIN
3733 # define PERL_SHORT_MIN ((short)SHORT_MIN)
3736 # define PERL_SHORT_MIN ((short)MINSHORT)
3739 # define PERL_SHORT_MIN ((short)SHRT_MIN)
3741 # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
3747 #ifndef PERL_UINT_MAX
3749 # define PERL_UINT_MAX ((unsigned int)UINT_MAX)
3752 # define PERL_UINT_MAX ((unsigned int)MAXUINT)
3754 # define PERL_UINT_MAX (~(unsigned int)0)
3759 #ifndef PERL_UINT_MIN
3760 # define PERL_UINT_MIN ((unsigned int)0)
3763 #ifndef PERL_INT_MAX
3765 # define PERL_INT_MAX ((int)INT_MAX)
3767 # ifdef MAXINT /* Often used in <values.h> */
3768 # define PERL_INT_MAX ((int)MAXINT)
3770 # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
3775 #ifndef PERL_INT_MIN
3777 # define PERL_INT_MIN ((int)INT_MIN)
3780 # define PERL_INT_MIN ((int)MININT)
3782 # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
3787 #ifndef PERL_ULONG_MAX
3789 # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
3792 # define PERL_ULONG_MAX ((unsigned long)MAXULONG)
3794 # define PERL_ULONG_MAX (~(unsigned long)0)
3799 #ifndef PERL_ULONG_MIN
3800 # define PERL_ULONG_MIN ((unsigned long)0L)
3803 #ifndef PERL_LONG_MAX
3805 # define PERL_LONG_MAX ((long)LONG_MAX)
3808 # define PERL_LONG_MAX ((long)MAXLONG)
3810 # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
3815 #ifndef PERL_LONG_MIN
3817 # define PERL_LONG_MIN ((long)LONG_MIN)
3820 # define PERL_LONG_MIN ((long)MINLONG)
3822 # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
3827 #if defined(HAS_QUAD) && (defined(convex) || defined(uts))
3828 # ifndef PERL_UQUAD_MAX
3829 # ifdef ULONGLONG_MAX
3830 # define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX)
3832 # ifdef MAXULONGLONG
3833 # define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG)
3835 # define PERL_UQUAD_MAX (~(unsigned long long)0)
3840 # ifndef PERL_UQUAD_MIN
3841 # define PERL_UQUAD_MIN ((unsigned long long)0L)
3844 # ifndef PERL_QUAD_MAX
3845 # ifdef LONGLONG_MAX
3846 # define PERL_QUAD_MAX ((long long)LONGLONG_MAX)
3849 # define PERL_QUAD_MAX ((long long)MAXLONGLONG)
3851 # define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1))
3856 # ifndef PERL_QUAD_MIN
3857 # ifdef LONGLONG_MIN
3858 # define PERL_QUAD_MIN ((long long)LONGLONG_MIN)
3861 # define PERL_QUAD_MIN ((long long)MINLONGLONG)
3863 # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
3869 /* This is based on code from 5.003 perl.h */
3877 # define IV_MIN PERL_INT_MIN
3881 # define IV_MAX PERL_INT_MAX
3885 # define UV_MIN PERL_UINT_MIN
3889 # define UV_MAX PERL_UINT_MAX
3894 # define IVSIZE INTSIZE
3899 # if defined(convex) || defined(uts)
3901 # define IVTYPE long long
3905 # define IV_MIN PERL_QUAD_MIN
3909 # define IV_MAX PERL_QUAD_MAX
3913 # define UV_MIN PERL_UQUAD_MIN
3917 # define UV_MAX PERL_UQUAD_MAX
3920 # ifdef LONGLONGSIZE
3922 # define IVSIZE LONGLONGSIZE
3928 # define IVTYPE long
3932 # define IV_MIN PERL_LONG_MIN
3936 # define IV_MAX PERL_LONG_MAX
3940 # define UV_MIN PERL_ULONG_MIN
3944 # define UV_MAX PERL_ULONG_MAX
3949 # define IVSIZE LONGSIZE
3963 #ifndef PERL_QUAD_MIN
3964 # define PERL_QUAD_MIN IV_MIN
3967 #ifndef PERL_QUAD_MAX
3968 # define PERL_QUAD_MAX IV_MAX
3971 #ifndef PERL_UQUAD_MIN
3972 # define PERL_UQUAD_MIN UV_MIN
3975 #ifndef PERL_UQUAD_MAX