Download | Plain Text | No Line Numbers


  1. #if 0
  2. <<'SKIP';
  3. #endif
  4. /*
  5. ----------------------------------------------------------------------
  6.  
  7.   ppport.h -- Perl/Pollution/Portability Version 3.19
  8.  
  9.   Automatically created by Devel::PPPort running under perl 5.012004.
  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.19
  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 from
  50.   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, and has been tested up to 5.10.0.
  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. automagially 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. 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.   PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL
  221.   PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL
  222.   eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL
  223.   grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL
  224.   grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL
  225.   grok_number() NEED_grok_number NEED_grok_number_GLOBAL
  226.   grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL
  227.   grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL
  228.   load_module() NEED_load_module NEED_load_module_GLOBAL
  229.   my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL
  230.   my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL
  231.   my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL
  232.   my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL
  233.   newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL
  234.   newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL
  235.   newSV_type() NEED_newSV_type NEED_newSV_type_GLOBAL
  236.   newSVpvn_flags() NEED_newSVpvn_flags NEED_newSVpvn_flags_GLOBAL
  237.   newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL
  238.   pv_display() NEED_pv_display NEED_pv_display_GLOBAL
  239.   pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL
  240.   pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL
  241.   sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL
  242.   sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL
  243.   sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL
  244.   sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL
  245.   sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL
  246.   sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL
  247.   sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL
  248.   vload_module() NEED_vload_module NEED_vload_module_GLOBAL
  249.   vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL
  250.   warner() NEED_warner NEED_warner_GLOBAL
  251.  
  252. To avoid namespace conflicts, you can change the namespace of the
  253. explicitly exported functions / variables using the C<DPPP_NAMESPACE>
  254. macro. Just C<#define> the macro before including C<ppport.h>:
  255.  
  256.   #define DPPP_NAMESPACE MyOwnNamespace_
  257.   #include "ppport.h"
  258.  
  259. The default namespace is C<DPPP_>.
  260.  
  261. =back
  262.  
  263. The good thing is that most of the above can be checked by running
  264. F<ppport.h> on your source code. See the next section for
  265. details.
  266.  
  267. =head1 EXAMPLES
  268.  
  269. To verify whether F<ppport.h> is needed for your module, whether you
  270. should make any changes to your code, and whether any special defines
  271. should be used, F<ppport.h> can be run as a Perl script to check your
  272. source code. Simply say:
  273.  
  274.   perl ppport.h
  275.  
  276. The result will usually be a list of patches suggesting changes
  277. that should at least be acceptable, if not necessarily the most
  278. efficient solution, or a fix for all possible problems.
  279.  
  280. If you know that your XS module uses features only available in
  281. newer Perl releases, if you're aware that it uses C++ comments,
  282. and if you want all suggestions as a single patch file, you could
  283. use something like this:
  284.  
  285.   perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
  286.  
  287. If you only want your code to be scanned without any suggestions
  288. for changes, use:
  289.  
  290.   perl ppport.h --nochanges
  291.  
  292. You can specify a different C<diff> program or options, using
  293. the C<--diff> option:
  294.  
  295.   perl ppport.h --diff='diff -C 10'
  296.  
  297. This would output context diffs with 10 lines of context.
  298.  
  299. If you want to create patched copies of your files instead, use:
  300.  
  301.   perl ppport.h --copy=.new
  302.  
  303. To display portability information for the C<newSVpvn> function,
  304. use:
  305.  
  306.   perl ppport.h --api-info=newSVpvn
  307.  
  308. Since the argument to C<--api-info> can be a regular expression,
  309. you can use
  310.  
  311.   perl ppport.h --api-info=/_nomg$/
  312.  
  313. to display portability information for all C<_nomg> functions or
  314.  
  315.   perl ppport.h --api-info=/./
  316.  
  317. to display information for all known API elements.
  318.  
  319. =head1 BUGS
  320.  
  321. If this version of F<ppport.h> is causing failure during
  322. the compilation of this module, please check if newer versions
  323. of either this module or C<Devel::PPPort> are available on CPAN
  324. before sending a bug report.
  325.  
  326. If F<ppport.h> was generated using the latest version of
  327. C<Devel::PPPort> and is causing failure of this module, please
  328. file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
  329.  
  330. Please include the following information:
  331.  
  332. =over 4
  333.  
  334. =item 1.
  335.  
  336. The complete output from running "perl -V"
  337.  
  338. =item 2.
  339.  
  340. This file.
  341.  
  342. =item 3.
  343.  
  344. The name and version of the module you were trying to build.
  345.  
  346. =item 4.
  347.  
  348. A full log of the build that failed.
  349.  
  350. =item 5.
  351.  
  352. Any other information that you think could be relevant.
  353.  
  354. =back
  355.  
  356. For the latest version of this code, please get the C<Devel::PPPort>
  357. module from CPAN.
  358.  
  359. =head1 COPYRIGHT
  360.  
  361. Version 3.x, Copyright (c) 2004-2009, Marcus Holland-Moritz.
  362.  
  363. Version 2.x, Copyright (C) 2001, Paul Marquess.
  364.  
  365. Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
  366.  
  367. This program is free software; you can redistribute it and/or
  368. modify it under the same terms as Perl itself.
  369.  
  370. =head1 SEE ALSO
  371.  
  372. See L<Devel::PPPort>.
  373.  
  374. =cut
  375.  
  376. use strict;
  377.  
  378. # Disable broken TRIE-optimization
  379. BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 }
  380.  
  381. my $VERSION = 3.19;
  382.  
  383. my %opt = (
  384.   quiet => 0,
  385.   diag => 1,
  386.   hints => 1,
  387.   changes => 1,
  388.   cplusplus => 0,
  389.   filter => 1,
  390.   strip => 0,
  391.   version => 0,
  392. );
  393.  
  394. my($ppport) = $0 =~ /([\w.]+)$/;
  395. my $LF = '(?:\r\n|[\r\n])'; # line feed
  396. my $HS = "[ \t]"; # horizontal whitespace
  397.  
  398. # Never use C comments in this file!
  399. my $ccs = '/'.'*';
  400. my $cce = '*'.'/';
  401. my $rccs = quotemeta $ccs;
  402. my $rcce = quotemeta $cce;
  403.  
  404. eval {
  405.   require Getopt::Long;
  406.   Getopt::Long::GetOptions(\%opt, qw(
  407.   help quiet diag! filter! hints! changes! cplusplus strip version
  408.   patch=s copy=s diff=s compat-version=s
  409.   list-provided list-unsupported api-info=s
  410.   )) or usage();
  411. };
  412.  
  413. if ($@ and grep /^-/, @ARGV) {
  414.   usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
  415.   die "Getopt::Long not found. Please don't use any options.\n";
  416. }
  417.  
  418. if ($opt{version}) {
  419.   print "This is $0 $VERSION.\n";
  420.   exit 0;
  421. }
  422.  
  423. usage() if $opt{help};
  424. strip() if $opt{strip};
  425.  
  426. if (exists $opt{'compat-version'}) {
  427.   my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
  428.   if ($@) {
  429.   die "Invalid version number format: '$opt{'compat-version'}'\n";
  430.   }
  431.   die "Only Perl 5 is supported\n" if $r != 5;
  432.   die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
  433.   $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
  434. }
  435. else {
  436.   $opt{'compat-version'} = 5;
  437. }
  438.  
  439. my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
  440.   ? ( $1 => {
  441.   ($2 ? ( base => $2 ) : ()),
  442.   ($3 ? ( todo => $3 ) : ()),
  443.   (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()),
  444.   (index($4, 'p') >= 0 ? ( provided => 1 ) : ()),
  445.   (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()),
  446.   } )
  447.   : die "invalid spec: $_" } qw(
  448. AvFILLp|5.004050||p
  449. AvFILL|||
  450. CLASS|||n
  451. CPERLscope|5.005000||p
  452. CX_CURPAD_SAVE|||
  453. CX_CURPAD_SV|||
  454. CopFILEAV|5.006000||p
  455. CopFILEGV_set|5.006000||p
  456. CopFILEGV|5.006000||p
  457. CopFILESV|5.006000||p
  458. CopFILE_set|5.006000||p
  459. CopFILE|5.006000||p
  460. CopSTASHPV_set|5.006000||p
  461. CopSTASHPV|5.006000||p
  462. CopSTASH_eq|5.006000||p
  463. CopSTASH_set|5.006000||p
  464. CopSTASH|5.006000||p
  465. CopyD|5.009002||p
  466. Copy|||
  467. CvPADLIST|||
  468. CvSTASH|||
  469. CvWEAKOUTSIDE|||
  470. DEFSV_set|5.011000||p
  471. DEFSV|5.004050||p
  472. END_EXTERN_C|5.005000||p
  473. ENTER|||
  474. ERRSV|5.004050||p
  475. EXTEND|||
  476. EXTERN_C|5.005000||p
  477. F0convert|||n
  478. FREETMPS|||
  479. GIMME_V||5.004000|n
  480. GIMME|||n
  481. GROK_NUMERIC_RADIX|5.007002||p
  482. G_ARRAY|||
  483. G_DISCARD|||
  484. G_EVAL|||
  485. G_METHOD|5.006001||p
  486. G_NOARGS|||
  487. G_SCALAR|||
  488. G_VOID||5.004000|
  489. GetVars|||
  490. GvSVn|5.009003||p
  491. GvSV|||
  492. Gv_AMupdate|||
  493. HEf_SVKEY||5.004000|
  494. HeHASH||5.004000|
  495. HeKEY||5.004000|
  496. HeKLEN||5.004000|
  497. HePV||5.004000|
  498. HeSVKEY_force||5.004000|
  499. HeSVKEY_set||5.004000|
  500. HeSVKEY||5.004000|
  501. HeUTF8||5.011000|
  502. HeVAL||5.004000|
  503. HvNAMELEN_get|5.009003||p
  504. HvNAME_get|5.009003||p
  505. HvNAME|||
  506. INT2PTR|5.006000||p
  507. IN_LOCALE_COMPILETIME|5.007002||p
  508. IN_LOCALE_RUNTIME|5.007002||p
  509. IN_LOCALE|5.007002||p
  510. IN_PERL_COMPILETIME|5.008001||p
  511. IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p
  512. IS_NUMBER_INFINITY|5.007002||p
  513. IS_NUMBER_IN_UV|5.007002||p
  514. IS_NUMBER_NAN|5.007003||p
  515. IS_NUMBER_NEG|5.007002||p
  516. IS_NUMBER_NOT_INT|5.007002||p
  517. IVSIZE|5.006000||p
  518. IVTYPE|5.006000||p
  519. IVdf|5.006000||p
  520. LEAVE|||
  521. LVRET|||
  522. MARK|||
  523. MULTICALL||5.011000|
  524. MY_CXT_CLONE|5.009002||p
  525. MY_CXT_INIT|5.007003||p
  526. MY_CXT|5.007003||p
  527. MoveD|5.009002||p
  528. Move|||
  529. NOOP|5.005000||p
  530. NUM2PTR|5.006000||p
  531. NVTYPE|5.006000||p
  532. NVef|5.006001||p
  533. NVff|5.006001||p
  534. NVgf|5.006001||p
  535. Newxc|5.009003||p
  536. Newxz|5.009003||p
  537. Newx|5.009003||p
  538. Nullav|||
  539. Nullch|||
  540. Nullcv|||
  541. Nullhv|||
  542. Nullsv|||
  543. ORIGMARK|||
  544. PAD_BASE_SV|||
  545. PAD_CLONE_VARS|||
  546. PAD_COMPNAME_FLAGS|||
  547. PAD_COMPNAME_GEN_set|||
  548. PAD_COMPNAME_GEN|||
  549. PAD_COMPNAME_OURSTASH|||
  550. PAD_COMPNAME_PV|||
  551. PAD_COMPNAME_TYPE|||
  552. PAD_DUP|||
  553. PAD_RESTORE_LOCAL|||
  554. PAD_SAVE_LOCAL|||
  555. PAD_SAVE_SETNULLPAD|||
  556. PAD_SETSV|||
  557. PAD_SET_CUR_NOSAVE|||
  558. PAD_SET_CUR|||
  559. PAD_SVl|||
  560. PAD_SV|||
  561. PERLIO_FUNCS_CAST|5.009003||p
  562. PERLIO_FUNCS_DECL|5.009003||p
  563. PERL_ABS|5.008001||p
  564. PERL_BCDVERSION|5.011000||p
  565. PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
  566. PERL_HASH|5.004000||p
  567. PERL_INT_MAX|5.004000||p
  568. PERL_INT_MIN|5.004000||p
  569. PERL_LONG_MAX|5.004000||p
  570. PERL_LONG_MIN|5.004000||p
  571. PERL_MAGIC_arylen|5.007002||p
  572. PERL_MAGIC_backref|5.007002||p
  573. PERL_MAGIC_bm|5.007002||p
  574. PERL_MAGIC_collxfrm|5.007002||p
  575. PERL_MAGIC_dbfile|5.007002||p
  576. PERL_MAGIC_dbline|5.007002||p
  577. PERL_MAGIC_defelem|5.007002||p
  578. PERL_MAGIC_envelem|5.007002||p
  579. PERL_MAGIC_env|5.007002||p
  580. PERL_MAGIC_ext|5.007002||p
  581. PERL_MAGIC_fm|5.007002||p
  582. PERL_MAGIC_glob|5.011000||p
  583. PERL_MAGIC_isaelem|5.007002||p
  584. PERL_MAGIC_isa|5.007002||p
  585. PERL_MAGIC_mutex|5.011000||p
  586. PERL_MAGIC_nkeys|5.007002||p
  587. PERL_MAGIC_overload_elem|5.007002||p
  588. PERL_MAGIC_overload_table|5.007002||p
  589. PERL_MAGIC_overload|5.007002||p
  590. PERL_MAGIC_pos|5.007002||p
  591. PERL_MAGIC_qr|5.007002||p
  592. PERL_MAGIC_regdata|5.007002||p
  593. PERL_MAGIC_regdatum|5.007002||p
  594. PERL_MAGIC_regex_global|5.007002||p
  595. PERL_MAGIC_shared_scalar|5.007003||p
  596. PERL_MAGIC_shared|5.007003||p
  597. PERL_MAGIC_sigelem|5.007002||p
  598. PERL_MAGIC_sig|5.007002||p
  599. PERL_MAGIC_substr|5.007002||p
  600. PERL_MAGIC_sv|5.007002||p
  601. PERL_MAGIC_taint|5.007002||p
  602. PERL_MAGIC_tiedelem|5.007002||p
  603. PERL_MAGIC_tiedscalar|5.007002||p
  604. PERL_MAGIC_tied|5.007002||p
  605. PERL_MAGIC_utf8|5.008001||p
  606. PERL_MAGIC_uvar_elem|5.007003||p
  607. PERL_MAGIC_uvar|5.007002||p
  608. PERL_MAGIC_vec|5.007002||p
  609. PERL_MAGIC_vstring|5.008001||p
  610. PERL_PV_ESCAPE_ALL|5.009004||p
  611. PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p
  612. PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p
  613. PERL_PV_ESCAPE_NOCLEAR|5.009004||p
  614. PERL_PV_ESCAPE_QUOTE|5.009004||p
  615. PERL_PV_ESCAPE_RE|5.009005||p
  616. PERL_PV_ESCAPE_UNI_DETECT|5.009004||p
  617. PERL_PV_ESCAPE_UNI|5.009004||p
  618. PERL_PV_PRETTY_DUMP|5.009004||p
  619. PERL_PV_PRETTY_ELLIPSES|5.010000||p
  620. PERL_PV_PRETTY_LTGT|5.009004||p
  621. PERL_PV_PRETTY_NOCLEAR|5.010000||p
  622. PERL_PV_PRETTY_QUOTE|5.009004||p
  623. PERL_PV_PRETTY_REGPROP|5.009004||p
  624. PERL_QUAD_MAX|5.004000||p
  625. PERL_QUAD_MIN|5.004000||p
  626. PERL_REVISION|5.006000||p
  627. PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p
  628. PERL_SCAN_DISALLOW_PREFIX|5.007003||p
  629. PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p
  630. PERL_SCAN_SILENT_ILLDIGIT|5.008001||p
  631. PERL_SHORT_MAX|5.004000||p
  632. PERL_SHORT_MIN|5.004000||p
  633. PERL_SIGNALS_UNSAFE_FLAG|5.008001||p
  634. PERL_SUBVERSION|5.006000||p
  635. PERL_SYS_INIT3||5.006000|
  636. PERL_SYS_INIT|||
  637. PERL_SYS_TERM||5.011000|
  638. PERL_UCHAR_MAX|5.004000||p
  639. PERL_UCHAR_MIN|5.004000||p
  640. PERL_UINT_MAX|5.004000||p
  641. PERL_UINT_MIN|5.004000||p
  642. PERL_ULONG_MAX|5.004000||p
  643. PERL_ULONG_MIN|5.004000||p
  644. PERL_UNUSED_ARG|5.009003||p
  645. PERL_UNUSED_CONTEXT|5.009004||p
  646. PERL_UNUSED_DECL|5.007002||p
  647. PERL_UNUSED_VAR|5.007002||p
  648. PERL_UQUAD_MAX|5.004000||p
  649. PERL_UQUAD_MIN|5.004000||p
  650. PERL_USE_GCC_BRACE_GROUPS|5.009004||p
  651. PERL_USHORT_MAX|5.004000||p
  652. PERL_USHORT_MIN|5.004000||p
  653. PERL_VERSION|5.006000||p
  654. PL_DBsignal|5.005000||p
  655. PL_DBsingle|||pn
  656. PL_DBsub|||pn
  657. PL_DBtrace|||pn
  658. PL_Sv|5.005000||p
  659. PL_bufend|5.011000||p
  660. PL_bufptr|5.011000||p
  661. PL_compiling|5.004050||p
  662. PL_copline|5.011000||p
  663. PL_curcop|5.004050||p
  664. PL_curstash|5.004050||p
  665. PL_debstash|5.004050||p
  666. PL_defgv|5.004050||p
  667. PL_diehook|5.004050||p
  668. PL_dirty|5.004050||p
  669. PL_dowarn|||pn
  670. PL_errgv|5.004050||p
  671. PL_error_count|5.011000||p
  672. PL_expect|5.011000||p
  673. PL_hexdigit|5.005000||p
  674. PL_hints|5.005000||p
  675. PL_in_my_stash|5.011000||p
  676. PL_in_my|5.011000||p
  677. PL_last_in_gv|||n
  678. PL_laststatval|5.005000||p
  679. PL_lex_state|5.011000||p
  680. PL_lex_stuff|5.011000||p
  681. PL_linestr|5.011000||p
  682. PL_modglobal||5.005000|n
  683. PL_na|5.004050||pn
  684. PL_no_modify|5.006000||p
  685. PL_ofsgv|||n
  686. PL_parser|5.009005||p
  687. PL_perl_destruct_level|5.004050||p
  688. PL_perldb|5.004050||p
  689. PL_ppaddr|5.006000||p
  690. PL_rsfp_filters|5.004050||p
  691. PL_rsfp|5.004050||p
  692. PL_rs|||n
  693. PL_signals|5.008001||p
  694. PL_stack_base|5.004050||p
  695. PL_stack_sp|5.004050||p
  696. PL_statcache|5.005000||p
  697. PL_stdingv|5.004050||p
  698. PL_sv_arenaroot|5.004050||p
  699. PL_sv_no|5.004050||pn
  700. PL_sv_undef|5.004050||pn
  701. PL_sv_yes|5.004050||pn
  702. PL_tainted|5.004050||p
  703. PL_tainting|5.004050||p
  704. PL_tokenbuf|5.011000||p
  705. POP_MULTICALL||5.011000|
  706. POPi|||n
  707. POPl|||n
  708. POPn|||n
  709. POPpbytex||5.007001|n
  710. POPpx||5.005030|n
  711. POPp|||n
  712. POPs|||n
  713. PTR2IV|5.006000||p
  714. PTR2NV|5.006000||p
  715. PTR2UV|5.006000||p
  716. PTR2nat|5.009003||p
  717. PTR2ul|5.007001||p
  718. PTRV|5.006000||p
  719. PUSHMARK|||
  720. PUSH_MULTICALL||5.011000|
  721. PUSHi|||
  722. PUSHmortal|5.009002||p
  723. PUSHn|||
  724. PUSHp|||
  725. PUSHs|||
  726. PUSHu|5.004000||p
  727. PUTBACK|||
  728. PerlIO_clearerr||5.007003|
  729. PerlIO_close||5.007003|
  730. PerlIO_context_layers||5.009004|
  731. PerlIO_eof||5.007003|
  732. PerlIO_error||5.007003|
  733. PerlIO_fileno||5.007003|
  734. PerlIO_fill||5.007003|
  735. PerlIO_flush||5.007003|
  736. PerlIO_get_base||5.007003|
  737. PerlIO_get_bufsiz||5.007003|
  738. PerlIO_get_cnt||5.007003|
  739. PerlIO_get_ptr||5.007003|
  740. PerlIO_read||5.007003|
  741. PerlIO_seek||5.007003|
  742. PerlIO_set_cnt||5.007003|
  743. PerlIO_set_ptrcnt||5.007003|
  744. PerlIO_setlinebuf||5.007003|
  745. PerlIO_stderr||5.007003|
  746. PerlIO_stdin||5.007003|
  747. PerlIO_stdout||5.007003|
  748. PerlIO_tell||5.007003|
  749. PerlIO_unread||5.007003|
  750. PerlIO_write||5.007003|
  751. Perl_signbit||5.009005|n
  752. PoisonFree|5.009004||p
  753. PoisonNew|5.009004||p
  754. PoisonWith|5.009004||p
  755. Poison|5.008000||p
  756. RETVAL|||n
  757. Renewc|||
  758. Renew|||
  759. SAVECLEARSV|||
  760. SAVECOMPPAD|||
  761. SAVEPADSV|||
  762. SAVETMPS|||
  763. SAVE_DEFSV|5.004050||p
  764. SPAGAIN|||
  765. SP|||
  766. START_EXTERN_C|5.005000||p
  767. START_MY_CXT|5.007003||p
  768. STMT_END|||p
  769. STMT_START|||p
  770. STR_WITH_LEN|5.009003||p
  771. ST|||
  772. SV_CONST_RETURN|5.009003||p
  773. SV_COW_DROP_PV|5.008001||p
  774. SV_COW_SHARED_HASH_KEYS|5.009005||p
  775. SV_GMAGIC|5.007002||p
  776. SV_HAS_TRAILING_NUL|5.009004||p
  777. SV_IMMEDIATE_UNREF|5.007001||p
  778. SV_MUTABLE_RETURN|5.009003||p
  779. SV_NOSTEAL|5.009002||p
  780. SV_SMAGIC|5.009003||p
  781. SV_UTF8_NO_ENCODING|5.008001||p
  782. SVfARG|5.009005||p
  783. SVf_UTF8|5.006000||p
  784. SVf|5.006000||p
  785. SVt_IV|||
  786. SVt_NV|||
  787. SVt_PVAV|||
  788. SVt_PVCV|||
  789. SVt_PVHV|||
  790. SVt_PVMG|||
  791. SVt_PV|||
  792. Safefree|||
  793. Slab_Alloc|||
  794. Slab_Free|||
  795. Slab_to_rw|||
  796. StructCopy|||
  797. SvCUR_set|||
  798. SvCUR|||
  799. SvEND|||
  800. SvGAMAGIC||5.006001|
  801. SvGETMAGIC|5.004050||p
  802. SvGROW|||
  803. SvIOK_UV||5.006000|
  804. SvIOK_notUV||5.006000|
  805. SvIOK_off|||
  806. SvIOK_only_UV||5.006000|
  807. SvIOK_only|||
  808. SvIOK_on|||
  809. SvIOKp|||
  810. SvIOK|||
  811. SvIVX|||
  812. SvIV_nomg|5.009001||p
  813. SvIV_set|||
  814. SvIVx|||
  815. SvIV|||
  816. SvIsCOW_shared_hash||5.008003|
  817. SvIsCOW||5.008003|
  818. SvLEN_set|||
  819. SvLEN|||
  820. SvLOCK||5.007003|
  821. SvMAGIC_set|5.009003||p
  822. SvNIOK_off|||
  823. SvNIOKp|||
  824. SvNIOK|||
  825. SvNOK_off|||
  826. SvNOK_only|||
  827. SvNOK_on|||
  828. SvNOKp|||
  829. SvNOK|||
  830. SvNVX|||
  831. SvNV_set|||
  832. SvNVx|||
  833. SvNV|||
  834. SvOK|||
  835. SvOOK_offset||5.011000|
  836. SvOOK|||
  837. SvPOK_off|||
  838. SvPOK_only_UTF8||5.006000|
  839. SvPOK_only|||
  840. SvPOK_on|||
  841. SvPOKp|||
  842. SvPOK|||
  843. SvPVX_const|5.009003||p
  844. SvPVX_mutable|5.009003||p
  845. SvPVX|||
  846. SvPV_const|5.009003||p
  847. SvPV_flags_const_nolen|5.009003||p
  848. SvPV_flags_const|5.009003||p
  849. SvPV_flags_mutable|5.009003||p
  850. SvPV_flags|5.007002||p
  851. SvPV_force_flags_mutable|5.009003||p
  852. SvPV_force_flags_nolen|5.009003||p
  853. SvPV_force_flags|5.007002||p
  854. SvPV_force_mutable|5.009003||p
  855. SvPV_force_nolen|5.009003||p
  856. SvPV_force_nomg_nolen|5.009003||p
  857. SvPV_force_nomg|5.007002||p
  858. SvPV_force|||p
  859. SvPV_mutable|5.009003||p
  860. SvPV_nolen_const|5.009003||p
  861. SvPV_nolen|5.006000||p
  862. SvPV_nomg_const_nolen|5.009003||p
  863. SvPV_nomg_const|5.009003||p
  864. SvPV_nomg|5.007002||p
  865. SvPV_renew|5.009003||p
  866. SvPV_set|||
  867. SvPVbyte_force||5.009002|
  868. SvPVbyte_nolen||5.006000|
  869. SvPVbytex_force||5.006000|
  870. SvPVbytex||5.006000|
  871. SvPVbyte|5.006000||p
  872. SvPVutf8_force||5.006000|
  873. SvPVutf8_nolen||5.006000|
  874. SvPVutf8x_force||5.006000|
  875. SvPVutf8x||5.006000|
  876. SvPVutf8||5.006000|
  877. SvPVx|||
  878. SvPV|||
  879. SvREFCNT_dec|||
  880. SvREFCNT_inc_NN|5.009004||p
  881. SvREFCNT_inc_simple_NN|5.009004||p
  882. SvREFCNT_inc_simple_void_NN|5.009004||p
  883. SvREFCNT_inc_simple_void|5.009004||p
  884. SvREFCNT_inc_simple|5.009004||p
  885. SvREFCNT_inc_void_NN|5.009004||p
  886. SvREFCNT_inc_void|5.009004||p
  887. SvREFCNT_inc|||p
  888. SvREFCNT|||
  889. SvROK_off|||
  890. SvROK_on|||
  891. SvROK|||
  892. SvRV_set|5.009003||p
  893. SvRV|||
  894. SvRXOK||5.009005|
  895. SvRX||5.009005|
  896. SvSETMAGIC|||
  897. SvSHARED_HASH|5.009003||p
  898. SvSHARE||5.007003|
  899. SvSTASH_set|5.009003||p
  900. SvSTASH|||
  901. SvSetMagicSV_nosteal||5.004000|
  902. SvSetMagicSV||5.004000|
  903. SvSetSV_nosteal||5.004000|
  904. SvSetSV|||
  905. SvTAINTED_off||5.004000|
  906. SvTAINTED_on||5.004000|
  907. SvTAINTED||5.004000|
  908. SvTAINT|||
  909. SvTRUE|||
  910. SvTYPE|||
  911. SvUNLOCK||5.007003|
  912. SvUOK|5.007001|5.006000|p
  913. SvUPGRADE|||
  914. SvUTF8_off||5.006000|
  915. SvUTF8_on||5.006000|
  916. SvUTF8||5.006000|
  917. SvUVXx|5.004000||p
  918. SvUVX|5.004000||p
  919. SvUV_nomg|5.009001||p
  920. SvUV_set|5.009003||p
  921. SvUVx|5.004000||p
  922. SvUV|5.004000||p
  923. SvVOK||5.008001|
  924. SvVSTRING_mg|5.009004||p
  925. THIS|||n
  926. UNDERBAR|5.009002||p
  927. UTF8_MAXBYTES|5.009002||p
  928. UVSIZE|5.006000||p
  929. UVTYPE|5.006000||p
  930. UVXf|5.007001||p
  931. UVof|5.006000||p
  932. UVuf|5.006000||p
  933. UVxf|5.006000||p
  934. WARN_ALL|5.006000||p
  935. WARN_AMBIGUOUS|5.006000||p
  936. WARN_ASSERTIONS|5.011000||p
  937. WARN_BAREWORD|5.006000||p
  938. WARN_CLOSED|5.006000||p
  939. WARN_CLOSURE|5.006000||p
  940. WARN_DEBUGGING|5.006000||p
  941. WARN_DEPRECATED|5.006000||p
  942. WARN_DIGIT|5.006000||p
  943. WARN_EXEC|5.006000||p
  944. WARN_EXITING|5.006000||p
  945. WARN_GLOB|5.006000||p
  946. WARN_INPLACE|5.006000||p
  947. WARN_INTERNAL|5.006000||p
  948. WARN_IO|5.006000||p
  949. WARN_LAYER|5.008000||p
  950. WARN_MALLOC|5.006000||p
  951. WARN_MISC|5.006000||p
  952. WARN_NEWLINE|5.006000||p
  953. WARN_NUMERIC|5.006000||p
  954. WARN_ONCE|5.006000||p
  955. WARN_OVERFLOW|5.006000||p
  956. WARN_PACK|5.006000||p
  957. WARN_PARENTHESIS|5.006000||p
  958. WARN_PIPE|5.006000||p
  959. WARN_PORTABLE|5.006000||p
  960. WARN_PRECEDENCE|5.006000||p
  961. WARN_PRINTF|5.006000||p
  962. WARN_PROTOTYPE|5.006000||p
  963. WARN_QW|5.006000||p
  964. WARN_RECURSION|5.006000||p
  965. WARN_REDEFINE|5.006000||p
  966. WARN_REGEXP|5.006000||p
  967. WARN_RESERVED|5.006000||p
  968. WARN_SEMICOLON|5.006000||p
  969. WARN_SEVERE|5.006000||p
  970. WARN_SIGNAL|5.006000||p
  971. WARN_SUBSTR|5.006000||p
  972. WARN_SYNTAX|5.006000||p
  973. WARN_TAINT|5.006000||p
  974. WARN_THREADS|5.008000||p
  975. WARN_UNINITIALIZED|5.006000||p
  976. WARN_UNOPENED|5.006000||p
  977. WARN_UNPACK|5.006000||p
  978. WARN_UNTIE|5.006000||p
  979. WARN_UTF8|5.006000||p
  980. WARN_VOID|5.006000||p
  981. XCPT_CATCH|5.009002||p
  982. XCPT_RETHROW|5.009002||p
  983. XCPT_TRY_END|5.009002||p
  984. XCPT_TRY_START|5.009002||p
  985. XPUSHi|||
  986. XPUSHmortal|5.009002||p
  987. XPUSHn|||
  988. XPUSHp|||
  989. XPUSHs|||
  990. XPUSHu|5.004000||p
  991. XSPROTO|5.010000||p
  992. XSRETURN_EMPTY|||
  993. XSRETURN_IV|||
  994. XSRETURN_NO|||
  995. XSRETURN_NV|||
  996. XSRETURN_PV|||
  997. XSRETURN_UNDEF|||
  998. XSRETURN_UV|5.008001||p
  999. XSRETURN_YES|||
  1000. XSRETURN|||p
  1001. XST_mIV|||
  1002. XST_mNO|||
  1003. XST_mNV|||
  1004. XST_mPV|||
  1005. XST_mUNDEF|||
  1006. XST_mUV|5.008001||p
  1007. XST_mYES|||
  1008. XS_VERSION_BOOTCHECK|||
  1009. XS_VERSION|||
  1010. XSprePUSH|5.006000||p
  1011. XS|||
  1012. ZeroD|5.009002||p
  1013. Zero|||
  1014. _aMY_CXT|5.007003||p
  1015. _pMY_CXT|5.007003||p
  1016. aMY_CXT_|5.007003||p
  1017. aMY_CXT|5.007003||p
  1018. aTHXR_|5.011000||p
  1019. aTHXR|5.011000||p
  1020. aTHX_|5.006000||p
  1021. aTHX|5.006000||p
  1022. add_data|||n
  1023. addmad|||
  1024. allocmy|||
  1025. amagic_call|||
  1026. amagic_cmp_locale|||
  1027. amagic_cmp|||
  1028. amagic_i_ncmp|||
  1029. amagic_ncmp|||
  1030. any_dup|||
  1031. ao|||
  1032. append_elem|||
  1033. append_list|||
  1034. append_madprops|||
  1035. apply_attrs_my|||
  1036. apply_attrs_string||5.006001|
  1037. apply_attrs|||
  1038. apply|||
  1039. atfork_lock||5.007003|n
  1040. atfork_unlock||5.007003|n
  1041. av_arylen_p||5.009003|
  1042. av_clear|||
  1043. av_create_and_push||5.009005|
  1044. av_create_and_unshift_one||5.009005|
  1045. av_delete||5.006000|
  1046. av_exists||5.006000|
  1047. av_extend|||
  1048. av_fetch|||
  1049. av_fill|||
  1050. av_iter_p||5.011000|
  1051. av_len|||
  1052. av_make|||
  1053. av_pop|||
  1054. av_push|||
  1055. av_reify|||
  1056. av_shift|||
  1057. av_store|||
  1058. av_undef|||
  1059. av_unshift|||
  1060. ax|||n
  1061. bad_type|||
  1062. bind_match|||
  1063. block_end|||
  1064. block_gimme||5.004000|
  1065. block_start|||
  1066. boolSV|5.004000||p
  1067. boot_core_PerlIO|||
  1068. boot_core_UNIVERSAL|||
  1069. boot_core_mro|||
  1070. bytes_from_utf8||5.007001|
  1071. bytes_to_uni|||n
  1072. bytes_to_utf8||5.006001|
  1073. call_argv|5.006000||p
  1074. call_atexit||5.006000|
  1075. call_list||5.004000|
  1076. call_method|5.006000||p
  1077. call_pv|5.006000||p
  1078. call_sv|5.006000||p
  1079. calloc||5.007002|n
  1080. cando|||
  1081. cast_i32||5.006000|
  1082. cast_iv||5.006000|
  1083. cast_ulong||5.006000|
  1084. cast_uv||5.006000|
  1085. check_type_and_open|||
  1086. check_uni|||
  1087. checkcomma|||
  1088. checkposixcc|||
  1089. ckWARN|5.006000||p
  1090. ck_anoncode|||
  1091. ck_bitop|||
  1092. ck_concat|||
  1093. ck_defined|||
  1094. ck_delete|||
  1095. ck_die|||
  1096. ck_each|||
  1097. ck_eof|||
  1098. ck_eval|||
  1099. ck_exec|||
  1100. ck_exists|||
  1101. ck_exit|||
  1102. ck_ftst|||
  1103. ck_fun|||
  1104. ck_glob|||
  1105. ck_grep|||
  1106. ck_index|||
  1107. ck_join|||
  1108. ck_lfun|||
  1109. ck_listiob|||
  1110. ck_match|||
  1111. ck_method|||
  1112. ck_null|||
  1113. ck_open|||
  1114. ck_readline|||
  1115. ck_repeat|||
  1116. ck_require|||
  1117. ck_return|||
  1118. ck_rfun|||
  1119. ck_rvconst|||
  1120. ck_sassign|||
  1121. ck_select|||
  1122. ck_shift|||
  1123. ck_sort|||
  1124. ck_spair|||
  1125. ck_split|||
  1126. ck_subr|||
  1127. ck_substr|||
  1128. ck_svconst|||
  1129. ck_trunc|||
  1130. ck_unpack|||
  1131. ckwarn_d||5.009003|
  1132. ckwarn||5.009003|
  1133. cl_and|||n
  1134. cl_anything|||n
  1135. cl_init_zero|||n
  1136. cl_init|||n
  1137. cl_is_anything|||n
  1138. cl_or|||n
  1139. clear_placeholders|||
  1140. closest_cop|||
  1141. convert|||
  1142. cop_free|||
  1143. cr_textfilter|||
  1144. create_eval_scope|||
  1145. croak_nocontext|||vn
  1146. croak_xs_usage||5.011000|
  1147. croak|||v
  1148. csighandler||5.009003|n
  1149. curmad|||
  1150. custom_op_desc||5.007003|
  1151. custom_op_name||5.007003|
  1152. cv_ckproto_len|||
  1153. cv_clone|||
  1154. cv_const_sv||5.004000|
  1155. cv_dump|||
  1156. cv_undef|||
  1157. cx_dump||5.005000|
  1158. cx_dup|||
  1159. cxinc|||
  1160. dAXMARK|5.009003||p
  1161. dAX|5.007002||p
  1162. dITEMS|5.007002||p
  1163. dMARK|||
  1164. dMULTICALL||5.009003|
  1165. dMY_CXT_SV|5.007003||p
  1166. dMY_CXT|5.007003||p
  1167. dNOOP|5.006000||p
  1168. dORIGMARK|||
  1169. dSP|||
  1170. dTHR|5.004050||p
  1171. dTHXR|5.011000||p
  1172. dTHXa|5.006000||p
  1173. dTHXoa|5.006000||p
  1174. dTHX|5.006000||p
  1175. dUNDERBAR|5.009002||p
  1176. dVAR|5.009003||p
  1177. dXCPT|5.009002||p
  1178. dXSARGS|||
  1179. dXSI32|||
  1180. dXSTARG|5.006000||p
  1181. deb_curcv|||
  1182. deb_nocontext|||vn
  1183. deb_stack_all|||
  1184. deb_stack_n|||
  1185. debop||5.005000|
  1186. debprofdump||5.005000|
  1187. debprof|||
  1188. debstackptrs||5.007003|
  1189. debstack||5.007003|
  1190. debug_start_match|||
  1191. deb||5.007003|v
  1192. del_sv|||
  1193. delete_eval_scope|||
  1194. delimcpy||5.004000|
  1195. deprecate_old|||
  1196. deprecate|||
  1197. despatch_signals||5.007001|
  1198. destroy_matcher|||
  1199. die_nocontext|||vn
  1200. die_where|||
  1201. die|||v
  1202. dirp_dup|||
  1203. div128|||
  1204. djSP|||
  1205. do_aexec5|||
  1206. do_aexec|||
  1207. do_aspawn|||
  1208. do_binmode||5.004050|
  1209. do_chomp|||
  1210. do_chop|||
  1211. do_close|||
  1212. do_dump_pad|||
  1213. do_eof|||
  1214. do_exec3|||
  1215. do_execfree|||
  1216. do_exec|||
  1217. do_gv_dump||5.006000|
  1218. do_gvgv_dump||5.006000|
  1219. do_hv_dump||5.006000|
  1220. do_ipcctl|||
  1221. do_ipcget|||
  1222. do_join|||
  1223. do_kv|||
  1224. do_magic_dump||5.006000|
  1225. do_msgrcv|||
  1226. do_msgsnd|||
  1227. do_oddball|||
  1228. do_op_dump||5.006000|
  1229. do_op_xmldump|||
  1230. do_open9||5.006000|
  1231. do_openn||5.007001|
  1232. do_open||5.004000|
  1233. do_pmop_dump||5.006000|
  1234. do_pmop_xmldump|||
  1235. do_print|||
  1236. do_readline|||
  1237. do_seek|||
  1238. do_semop|||
  1239. do_shmio|||
  1240. do_smartmatch|||
  1241. do_spawn_nowait|||
  1242. do_spawn|||
  1243. do_sprintf|||
  1244. do_sv_dump||5.006000|
  1245. do_sysseek|||
  1246. do_tell|||
  1247. do_trans_complex_utf8|||
  1248. do_trans_complex|||
  1249. do_trans_count_utf8|||
  1250. do_trans_count|||
  1251. do_trans_simple_utf8|||
  1252. do_trans_simple|||
  1253. do_trans|||
  1254. do_vecget|||
  1255. do_vecset|||
  1256. do_vop|||
  1257. docatch|||
  1258. doeval|||
  1259. dofile|||
  1260. dofindlabel|||
  1261. doform|||
  1262. doing_taint||5.008001|n
  1263. dooneliner|||
  1264. doopen_pm|||
  1265. doparseform|||
  1266. dopoptoeval|||
  1267. dopoptogiven|||
  1268. dopoptolabel|||
  1269. dopoptoloop|||
  1270. dopoptosub_at|||
  1271. dopoptowhen|||
  1272. doref||5.009003|
  1273. dounwind|||
  1274. dowantarray|||
  1275. dump_all||5.006000|
  1276. dump_eval||5.006000|
  1277. dump_exec_pos|||
  1278. dump_fds|||
  1279. dump_form||5.006000|
  1280. dump_indent||5.006000|v
  1281. dump_mstats|||
  1282. dump_packsubs||5.006000|
  1283. dump_sub||5.006000|
  1284. dump_sv_child|||
  1285. dump_trie_interim_list|||
  1286. dump_trie_interim_table|||
  1287. dump_trie|||
  1288. dump_vindent||5.006000|
  1289. dumpuntil|||
  1290. dup_attrlist|||
  1291. emulate_cop_io|||
  1292. eval_pv|5.006000||p
  1293. eval_sv|5.006000||p
  1294. exec_failed|||
  1295. expect_number|||
  1296. fbm_compile||5.005000|
  1297. fbm_instr||5.005000|
  1298. feature_is_enabled|||
  1299. fetch_cop_label||5.011000|
  1300. filter_add|||
  1301. filter_del|||
  1302. filter_gets|||
  1303. filter_read|||
  1304. find_and_forget_pmops|||
  1305. find_array_subscript|||
  1306. find_beginning|||
  1307. find_byclass|||
  1308. find_hash_subscript|||
  1309. find_in_my_stash|||
  1310. find_runcv||5.008001|
  1311. find_rundefsvoffset||5.009002|
  1312. find_script|||
  1313. find_uninit_var|||
  1314. first_symbol|||n
  1315. fold_constants|||
  1316. forbid_setid|||
  1317. force_ident|||
  1318. force_list|||
  1319. force_next|||
  1320. force_version|||
  1321. force_word|||
  1322. forget_pmop|||
  1323. form_nocontext|||vn
  1324. form||5.004000|v
  1325. fp_dup|||
  1326. fprintf_nocontext|||vn
  1327. free_global_struct|||
  1328. free_tied_hv_pool|||
  1329. free_tmps|||
  1330. gen_constant_list|||
  1331. get_arena|||
  1332. get_aux_mg|||
  1333. get_av|5.006000||p
  1334. get_context||5.006000|n
  1335. get_cvn_flags||5.009005|
  1336. get_cv|5.006000||p
  1337. get_db_sub|||
  1338. get_debug_opts|||
  1339. get_hash_seed|||
  1340. get_hv|5.006000||p
  1341. get_isa_hash|||
  1342. get_mstats|||
  1343. get_no_modify|||
  1344. get_num|||
  1345. get_op_descs||5.005000|
  1346. get_op_names||5.005000|
  1347. get_opargs|||
  1348. get_ppaddr||5.006000|
  1349. get_re_arg|||
  1350. get_sv|5.006000||p
  1351. get_vtbl||5.005030|
  1352. getcwd_sv||5.007002|
  1353. getenv_len|||
  1354. glob_2number|||
  1355. glob_assign_glob|||
  1356. glob_assign_ref|||
  1357. gp_dup|||
  1358. gp_free|||
  1359. gp_ref|||
  1360. grok_bin|5.007003||p
  1361. grok_hex|5.007003||p
  1362. grok_number|5.007002||p
  1363. grok_numeric_radix|5.007002||p
  1364. grok_oct|5.007003||p
  1365. group_end|||
  1366. gv_AVadd|||
  1367. gv_HVadd|||
  1368. gv_IOadd|||
  1369. gv_SVadd|||
  1370. gv_autoload4||5.004000|
  1371. gv_check|||
  1372. gv_const_sv||5.009003|
  1373. gv_dump||5.006000|
  1374. gv_efullname3||5.004000|
  1375. gv_efullname4||5.006001|
  1376. gv_efullname|||
  1377. gv_ename|||
  1378. gv_fetchfile_flags||5.009005|
  1379. gv_fetchfile|||
  1380. gv_fetchmeth_autoload||5.007003|
  1381. gv_fetchmethod_autoload||5.004000|
  1382. gv_fetchmethod_flags||5.011000|
  1383. gv_fetchmethod|||
  1384. gv_fetchmeth|||
  1385. gv_fetchpvn_flags|5.009002||p
  1386. gv_fetchpvs|5.009004||p
  1387. gv_fetchpv|||
  1388. gv_fetchsv||5.009002|
  1389. gv_fullname3||5.004000|
  1390. gv_fullname4||5.006001|
  1391. gv_fullname|||
  1392. gv_get_super_pkg|||
  1393. gv_handler||5.007001|
  1394. gv_init_sv|||
  1395. gv_init|||
  1396. gv_name_set||5.009004|
  1397. gv_stashpvn|5.004000||p
  1398. gv_stashpvs|5.009003||p
  1399. gv_stashpv|||
  1400. gv_stashsv|||
  1401. he_dup|||
  1402. hek_dup|||
  1403. hfreeentries|||
  1404. hsplit|||
  1405. hv_assert||5.011000|
  1406. hv_auxinit|||n
  1407. hv_backreferences_p|||
  1408. hv_clear_placeholders||5.009001|
  1409. hv_clear|||
  1410. hv_common_key_len||5.010000|
  1411. hv_common||5.010000|
  1412. hv_copy_hints_hv|||
  1413. hv_delayfree_ent||5.004000|
  1414. hv_delete_common|||
  1415. hv_delete_ent||5.004000|
  1416. hv_delete|||
  1417. hv_eiter_p||5.009003|
  1418. hv_eiter_set||5.009003|
  1419. hv_exists_ent||5.004000|
  1420. hv_exists|||
  1421. hv_fetch_ent||5.004000|
  1422. hv_fetchs|5.009003||p
  1423. hv_fetch|||
  1424. hv_free_ent||5.004000|
  1425. hv_iterinit|||
  1426. hv_iterkeysv||5.004000|
  1427. hv_iterkey|||
  1428. hv_iternext_flags||5.008000|
  1429. hv_iternextsv|||
  1430. hv_iternext|||
  1431. hv_iterval|||
  1432. hv_kill_backrefs|||
  1433. hv_ksplit||5.004000|
  1434. hv_magic_check|||n
  1435. hv_magic|||
  1436. hv_name_set||5.009003|
  1437. hv_notallowed|||
  1438. hv_placeholders_get||5.009003|
  1439. hv_placeholders_p||5.009003|
  1440. hv_placeholders_set||5.009003|
  1441. hv_riter_p||5.009003|
  1442. hv_riter_set||5.009003|
  1443. hv_scalar||5.009001|
  1444. hv_store_ent||5.004000|
  1445. hv_store_flags||5.008000|
  1446. hv_stores|5.009004||p
  1447. hv_store|||
  1448. hv_undef|||
  1449. ibcmp_locale||5.004000|
  1450. ibcmp_utf8||5.007003|
  1451. ibcmp|||
  1452. incline|||
  1453. incpush_if_exists|||
  1454. incpush_use_sep|||
  1455. incpush|||
  1456. ingroup|||
  1457. init_argv_symbols|||
  1458. init_debugger|||
  1459. init_global_struct|||
  1460. init_i18nl10n||5.006000|
  1461. init_i18nl14n||5.006000|
  1462. init_ids|||
  1463. init_interp|||
  1464. init_main_stash|||
  1465. init_perllib|||
  1466. init_postdump_symbols|||
  1467. init_predump_symbols|||
  1468. init_stacks||5.005000|
  1469. init_tm||5.007002|
  1470. instr|||
  1471. intro_my|||
  1472. intuit_method|||
  1473. intuit_more|||
  1474. invert|||
  1475. io_close|||
  1476. isALNUMC|5.006000||p
  1477. isALNUM|||
  1478. isALPHA|||
  1479. isASCII|5.006000||p
  1480. isBLANK|5.006001||p
  1481. isCNTRL|5.006000||p
  1482. isDIGIT|||
  1483. isGRAPH|5.006000||p
  1484. isGV_with_GP|5.009004||p
  1485. isLOWER|||
  1486. isPRINT|5.004000||p
  1487. isPSXSPC|5.006001||p
  1488. isPUNCT|5.006000||p
  1489. isSPACE|||
  1490. isUPPER|||
  1491. isXDIGIT|5.006000||p
  1492. is_an_int|||
  1493. is_gv_magical_sv|||
  1494. is_handle_constructor|||n
  1495. is_list_assignment|||
  1496. is_lvalue_sub||5.007001|
  1497. is_uni_alnum_lc||5.006000|
  1498. is_uni_alnumc_lc||5.006000|
  1499. is_uni_alnumc||5.006000|
  1500. is_uni_alnum||5.006000|
  1501. is_uni_alpha_lc||5.006000|
  1502. is_uni_alpha||5.006000|
  1503. is_uni_ascii_lc||5.006000|
  1504. is_uni_ascii||5.006000|
  1505. is_uni_cntrl_lc||5.006000|
  1506. is_uni_cntrl||5.006000|
  1507. is_uni_digit_lc||5.006000|
  1508. is_uni_digit||5.006000|
  1509. is_uni_graph_lc||5.006000|
  1510. is_uni_graph||5.006000|
  1511. is_uni_idfirst_lc||5.006000|
  1512. is_uni_idfirst||5.006000|
  1513. is_uni_lower_lc||5.006000|
  1514. is_uni_lower||5.006000|
  1515. is_uni_print_lc||5.006000|
  1516. is_uni_print||5.006000|
  1517. is_uni_punct_lc||5.006000|
  1518. is_uni_punct||5.006000|
  1519. is_uni_space_lc||5.006000|
  1520. is_uni_space||5.006000|
  1521. is_uni_upper_lc||5.006000|
  1522. is_uni_upper||5.006000|
  1523. is_uni_xdigit_lc||5.006000|
  1524. is_uni_xdigit||5.006000|
  1525. is_utf8_alnumc||5.006000|
  1526. is_utf8_alnum||5.006000|
  1527. is_utf8_alpha||5.006000|
  1528. is_utf8_ascii||5.006000|
  1529. is_utf8_char_slow|||n
  1530. is_utf8_char||5.006000|
  1531. is_utf8_cntrl||5.006000|
  1532. is_utf8_common|||
  1533. is_utf8_digit||5.006000|
  1534. is_utf8_graph||5.006000|
  1535. is_utf8_idcont||5.008000|
  1536. is_utf8_idfirst||5.006000|
  1537. is_utf8_lower||5.006000|
  1538. is_utf8_mark||5.006000|
  1539. is_utf8_print||5.006000|
  1540. is_utf8_punct||5.006000|
  1541. is_utf8_space||5.006000|
  1542. is_utf8_string_loclen||5.009003|
  1543. is_utf8_string_loc||5.008001|
  1544. is_utf8_string||5.006001|
  1545. is_utf8_upper||5.006000|
  1546. is_utf8_xdigit||5.006000|
  1547. isa_lookup|||
  1548. items|||n
  1549. ix|||n
  1550. jmaybe|||
  1551. join_exact|||
  1552. keyword|||
  1553. leave_scope|||
  1554. lex_end|||
  1555. lex_start|||
  1556. linklist|||
  1557. listkids|||
  1558. list|||
  1559. load_module_nocontext|||vn
  1560. load_module|5.006000||pv
  1561. localize|||
  1562. looks_like_bool|||
  1563. looks_like_number|||
  1564. lop|||
  1565. mPUSHi|5.009002||p
  1566. mPUSHn|5.009002||p
  1567. mPUSHp|5.009002||p
  1568. mPUSHs|5.011000||p
  1569. mPUSHu|5.009002||p
  1570. mXPUSHi|5.009002||p
  1571. mXPUSHn|5.009002||p
  1572. mXPUSHp|5.009002||p
  1573. mXPUSHs|5.011000||p
  1574. mXPUSHu|5.009002||p
  1575. mad_free|||
  1576. madlex|||
  1577. madparse|||
  1578. magic_clear_all_env|||
  1579. magic_clearenv|||
  1580. magic_clearhint|||
  1581. magic_clearisa|||
  1582. magic_clearpack|||
  1583. magic_clearsig|||
  1584. magic_dump||5.006000|
  1585. magic_existspack|||
  1586. magic_freearylen_p|||
  1587. magic_freeovrld|||
  1588. magic_getarylen|||
  1589. magic_getdefelem|||
  1590. magic_getnkeys|||
  1591. magic_getpack|||
  1592. magic_getpos|||
  1593. magic_getsig|||
  1594. magic_getsubstr|||
  1595. magic_gettaint|||
  1596. magic_getuvar|||
  1597. magic_getvec|||
  1598. magic_get|||
  1599. magic_killbackrefs|||
  1600. magic_len|||
  1601. magic_methcall|||
  1602. magic_methpack|||
  1603. magic_nextpack|||
  1604. magic_regdata_cnt|||
  1605. magic_regdatum_get|||
  1606. magic_regdatum_set|||
  1607. magic_scalarpack|||
  1608. magic_set_all_env|||
  1609. magic_setamagic|||
  1610. magic_setarylen|||
  1611. magic_setcollxfrm|||
  1612. magic_setdbline|||
  1613. magic_setdefelem|||
  1614. magic_setenv|||
  1615. magic_sethint|||
  1616. magic_setisa|||
  1617. magic_setmglob|||
  1618. magic_setnkeys|||
  1619. magic_setpack|||
  1620. magic_setpos|||
  1621. magic_setregexp|||
  1622. magic_setsig|||
  1623. magic_setsubstr|||
  1624. magic_settaint|||
  1625. magic_setutf8|||
  1626. magic_setuvar|||
  1627. magic_setvec|||
  1628. magic_set|||
  1629. magic_sizepack|||
  1630. magic_wipepack|||
  1631. make_matcher|||
  1632. make_trie_failtable|||
  1633. make_trie|||
  1634. malloc_good_size|||n
  1635. malloced_size|||n
  1636. malloc||5.007002|n
  1637. markstack_grow|||
  1638. matcher_matches_sv|||
  1639. measure_struct|||
  1640. memEQ|5.004000||p
  1641. memNE|5.004000||p
  1642. mem_collxfrm|||
  1643. mem_log_common|||n
  1644. mess_alloc|||
  1645. mess_nocontext|||vn
  1646. mess||5.006000|v
  1647. method_common|||
  1648. mfree||5.007002|n
  1649. mg_clear|||
  1650. mg_copy|||
  1651. mg_dup|||
  1652. mg_find|||
  1653. mg_free|||
  1654. mg_get|||
  1655. mg_length||5.005000|
  1656. mg_localize|||
  1657. mg_magical|||
  1658. mg_set|||
  1659. mg_size||5.005000|
  1660. mini_mktime||5.007002|
  1661. missingterm|||
  1662. mode_from_discipline|||
  1663. modkids|||
  1664. mod|||
  1665. more_bodies|||
  1666. more_sv|||
  1667. moreswitches|||
  1668. mro_get_from_name||5.011000|
  1669. mro_get_linear_isa_dfs|||
  1670. mro_get_linear_isa||5.009005|
  1671. mro_get_private_data||5.011000|
  1672. mro_isa_changed_in|||
  1673. mro_meta_dup|||
  1674. mro_meta_init|||
  1675. mro_method_changed_in||5.009005|
  1676. mro_register||5.011000|
  1677. mro_set_mro||5.011000|
  1678. mro_set_private_data||5.011000|
  1679. mul128|||
  1680. mulexp10|||n
  1681. my_atof2||5.007002|
  1682. my_atof||5.006000|
  1683. my_attrs|||
  1684. my_bcopy|||n
  1685. my_betoh16|||n
  1686. my_betoh32|||n
  1687. my_betoh64|||n
  1688. my_betohi|||n
  1689. my_betohl|||n
  1690. my_betohs|||n
  1691. my_bzero|||n
  1692. my_chsize|||
  1693. my_clearenv|||
  1694. my_cxt_index|||
  1695. my_cxt_init|||
  1696. my_dirfd||5.009005|
  1697. my_exit_jump|||
  1698. my_exit|||
  1699. my_failure_exit||5.004000|
  1700. my_fflush_all||5.006000|
  1701. my_fork||5.007003|n
  1702. my_htobe16|||n
  1703. my_htobe32|||n
  1704. my_htobe64|||n
  1705. my_htobei|||n
  1706. my_htobel|||n
  1707. my_htobes|||n
  1708. my_htole16|||n
  1709. my_htole32|||n
  1710. my_htole64|||n
  1711. my_htolei|||n
  1712. my_htolel|||n
  1713. my_htoles|||n
  1714. my_htonl|||
  1715. my_kid|||
  1716. my_letoh16|||n
  1717. my_letoh32|||n
  1718. my_letoh64|||n
  1719. my_letohi|||n
  1720. my_letohl|||n
  1721. my_letohs|||n
  1722. my_lstat|||
  1723. my_memcmp||5.004000|n
  1724. my_memset|||n
  1725. my_ntohl|||
  1726. my_pclose||5.004000|
  1727. my_popen_list||5.007001|
  1728. my_popen||5.004000|
  1729. my_setenv|||
  1730. my_snprintf|5.009004||pvn
  1731. my_socketpair||5.007003|n
  1732. my_sprintf|5.009003||pvn
  1733. my_stat|||
  1734. my_strftime||5.007002|
  1735. my_strlcat|5.009004||pn
  1736. my_strlcpy|5.009004||pn
  1737. my_swabn|||n
  1738. my_swap|||
  1739. my_unexec|||
  1740. my_vsnprintf||5.009004|n
  1741. need_utf8|||n
  1742. newANONATTRSUB||5.006000|
  1743. newANONHASH|||
  1744. newANONLIST|||
  1745. newANONSUB|||
  1746. newASSIGNOP|||
  1747. newATTRSUB||5.006000|
  1748. newAVREF|||
  1749. newAV|||
  1750. newBINOP|||
  1751. newCONDOP|||
  1752. newCONSTSUB|5.004050||p
  1753. newCVREF|||
  1754. newDEFSVOP|||
  1755. newFORM|||
  1756. newFOROP|||
  1757. newGIVENOP||5.009003|
  1758. newGIVWHENOP|||
  1759. newGP|||
  1760. newGVOP|||
  1761. newGVREF|||
  1762. newGVgen|||
  1763. newHVREF|||
  1764. newHVhv||5.005000|
  1765. newHV|||
  1766. newIO|||
  1767. newLISTOP|||
  1768. newLOGOP|||
  1769. newLOOPEX|||
  1770. newLOOPOP|||
  1771. newMADPROP|||
  1772. newMADsv|||
  1773. newMYSUB|||
  1774. newNULLLIST|||
  1775. newOP|||
  1776. newPADOP|||
  1777. newPMOP|||
  1778. newPROG|||
  1779. newPVOP|||
  1780. newRANGE|||
  1781. newRV_inc|5.004000||p
  1782. newRV_noinc|5.004000||p
  1783. newRV|||
  1784. newSLICEOP|||
  1785. newSTATEOP|||
  1786. newSUB|||
  1787. newSVOP|||
  1788. newSVREF|||
  1789. newSV_type|5.009005||p
  1790. newSVhek||5.009003|
  1791. newSViv|||
  1792. newSVnv|||
  1793. newSVpvf_nocontext|||vn
  1794. newSVpvf||5.004000|v
  1795. newSVpvn_flags|5.011000||p
  1796. newSVpvn_share|5.007001||p
  1797. newSVpvn_utf8|5.011000||p
  1798. newSVpvn|5.004050||p
  1799. newSVpvs_flags|5.011000||p
  1800. newSVpvs_share||5.009003|
  1801. newSVpvs|5.009003||p
  1802. newSVpv|||
  1803. newSVrv|||
  1804. newSVsv|||
  1805. newSVuv|5.006000||p
  1806. newSV|||
  1807. newTOKEN|||
  1808. newUNOP|||
  1809. newWHENOP||5.009003|
  1810. newWHILEOP||5.009003|
  1811. newXS_flags||5.009004|
  1812. newXSproto||5.006000|
  1813. newXS||5.006000|
  1814. new_collate||5.006000|
  1815. new_constant|||
  1816. new_ctype||5.006000|
  1817. new_he|||
  1818. new_logop|||
  1819. new_numeric||5.006000|
  1820. new_stackinfo||5.005000|
  1821. new_version||5.009000|
  1822. new_warnings_bitfield|||
  1823. next_symbol|||
  1824. nextargv|||
  1825. nextchar|||
  1826. ninstr|||
  1827. no_bareword_allowed|||
  1828. no_fh_allowed|||
  1829. no_op|||
  1830. not_a_number|||
  1831. nothreadhook||5.008000|
  1832. nuke_stacks|||
  1833. num_overflow|||n
  1834. offer_nice_chunk|||
  1835. oopsAV|||
  1836. oopsHV|||
  1837. op_clear|||
  1838. op_const_sv|||
  1839. op_dump||5.006000|
  1840. op_free|||
  1841. op_getmad_weak|||
  1842. op_getmad|||
  1843. op_null||5.007002|
  1844. op_refcnt_dec|||
  1845. op_refcnt_inc|||
  1846. op_refcnt_lock||5.009002|
  1847. op_refcnt_unlock||5.009002|
  1848. op_xmldump|||
  1849. open_script|||
  1850. pMY_CXT_|5.007003||p
  1851. pMY_CXT|5.007003||p
  1852. pTHX_|5.006000||p
  1853. pTHX|5.006000||p
  1854. packWARN|5.007003||p
  1855. pack_cat||5.007003|
  1856. pack_rec|||
  1857. package|||
  1858. packlist||5.008001|
  1859. pad_add_anon|||
  1860. pad_add_name|||
  1861. pad_alloc|||
  1862. pad_block_start|||
  1863. pad_check_dup|||
  1864. pad_compname_type|||
  1865. pad_findlex|||
  1866. pad_findmy|||
  1867. pad_fixup_inner_anons|||
  1868. pad_free|||
  1869. pad_leavemy|||
  1870. pad_new|||
  1871. pad_peg|||n
  1872. pad_push|||
  1873. pad_reset|||
  1874. pad_setsv|||
  1875. pad_sv||5.011000|
  1876. pad_swipe|||
  1877. pad_tidy|||
  1878. pad_undef|||
  1879. parse_body|||
  1880. parse_unicode_opts|||
  1881. parser_dup|||
  1882. parser_free|||
  1883. path_is_absolute|||n
  1884. peep|||
  1885. pending_Slabs_to_ro|||
  1886. perl_alloc_using|||n
  1887. perl_alloc|||n
  1888. perl_clone_using|||n
  1889. perl_clone|||n
  1890. perl_construct|||n
  1891. perl_destruct||5.007003|n
  1892. perl_free|||n
  1893. perl_parse||5.006000|n
  1894. perl_run|||n
  1895. pidgone|||
  1896. pm_description|||
  1897. pmflag|||
  1898. pmop_dump||5.006000|
  1899. pmop_xmldump|||
  1900. pmruntime|||
  1901. pmtrans|||
  1902. pop_scope|||
  1903. pregcomp||5.009005|
  1904. pregexec|||
  1905. pregfree2||5.011000|
  1906. pregfree|||
  1907. prepend_elem|||
  1908. prepend_madprops|||
  1909. printbuf|||
  1910. printf_nocontext|||vn
  1911. process_special_blocks|||
  1912. ptr_table_clear||5.009005|
  1913. ptr_table_fetch||5.009005|
  1914. ptr_table_find|||n
  1915. ptr_table_free||5.009005|
  1916. ptr_table_new||5.009005|
  1917. ptr_table_split||5.009005|
  1918. ptr_table_store||5.009005|
  1919. push_scope|||
  1920. put_byte|||
  1921. pv_display|5.006000||p
  1922. pv_escape|5.009004||p
  1923. pv_pretty|5.009004||p
  1924. pv_uni_display||5.007003|
  1925. qerror|||
  1926. qsortsvu|||
  1927. re_compile||5.009005|
  1928. re_croak2|||
  1929. re_dup_guts|||
  1930. re_intuit_start||5.009005|
  1931. re_intuit_string||5.006000|
  1932. readpipe_override|||
  1933. realloc||5.007002|n
  1934. reentrant_free|||
  1935. reentrant_init|||
  1936. reentrant_retry|||vn
  1937. reentrant_size|||
  1938. ref_array_or_hash|||
  1939. refcounted_he_chain_2hv|||
  1940. refcounted_he_fetch|||
  1941. refcounted_he_free|||
  1942. refcounted_he_new_common|||
  1943. refcounted_he_new|||
  1944. refcounted_he_value|||
  1945. refkids|||
  1946. refto|||
  1947. ref||5.011000|
  1948. reg_check_named_buff_matched|||
  1949. reg_named_buff_all||5.009005|
  1950. reg_named_buff_exists||5.009005|
  1951. reg_named_buff_fetch||5.009005|
  1952. reg_named_buff_firstkey||5.009005|
  1953. reg_named_buff_iter|||
  1954. reg_named_buff_nextkey||5.009005|
  1955. reg_named_buff_scalar||5.009005|
  1956. reg_named_buff|||
  1957. reg_namedseq|||
  1958. reg_node|||
  1959. reg_numbered_buff_fetch|||
  1960. reg_numbered_buff_length|||
  1961. reg_numbered_buff_store|||
  1962. reg_qr_package|||
  1963. reg_recode|||
  1964. reg_scan_name|||
  1965. reg_skipcomment|||
  1966. reg_temp_copy|||
  1967. reganode|||
  1968. regatom|||
  1969. regbranch|||
  1970. regclass_swash||5.009004|
  1971. regclass|||
  1972. regcppop|||
  1973. regcppush|||
  1974. regcurly|||n
  1975. regdump_extflags|||
  1976. regdump||5.005000|
  1977. regdupe_internal|||
  1978. regexec_flags||5.005000|
  1979. regfree_internal||5.009005|
  1980. reghop3|||n
  1981. reghop4|||n
  1982. reghopmaybe3|||n
  1983. reginclass|||
  1984. reginitcolors||5.006000|
  1985. reginsert|||
  1986. regmatch|||
  1987. regnext||5.005000|
  1988. regpiece|||
  1989. regpposixcc|||
  1990. regprop|||
  1991. regrepeat|||
  1992. regtail_study|||
  1993. regtail|||
  1994. regtry|||
  1995. reguni|||
  1996. regwhite|||n
  1997. reg|||
  1998. repeatcpy|||
  1999. report_evil_fh|||
  2000. report_uninit|||
  2001. require_pv||5.006000|
  2002. require_tie_mod|||
  2003. restore_magic|||
  2004. rninstr|||
  2005. rsignal_restore|||
  2006. rsignal_save|||
  2007. rsignal_state||5.004000|
  2008. rsignal||5.004000|
  2009. run_body|||
  2010. run_user_filter|||
  2011. runops_debug||5.005000|
  2012. runops_standard||5.005000|
  2013. rvpv_dup|||
  2014. rxres_free|||
  2015. rxres_restore|||
  2016. rxres_save|||
  2017. safesyscalloc||5.006000|n
  2018. safesysfree||5.006000|n
  2019. safesysmalloc||5.006000|n
  2020. safesysrealloc||5.006000|n
  2021. same_dirent|||
  2022. save_I16||5.004000|
  2023. save_I32|||
  2024. save_I8||5.006000|
  2025. save_adelete||5.011000|
  2026. save_aelem||5.004050|
  2027. save_alloc||5.006000|
  2028. save_aptr|||
  2029. save_ary|||
  2030. save_bool||5.008001|
  2031. save_clearsv|||
  2032. save_delete|||
  2033. save_destructor_x||5.006000|
  2034. save_destructor||5.006000|
  2035. save_freeop|||
  2036. save_freepv|||
  2037. save_freesv|||
  2038. save_generic_pvref||5.006001|
  2039. save_generic_svref||5.005030|
  2040. save_gp||5.004000|
  2041. save_hash|||
  2042. save_hek_flags|||n
  2043. save_helem_flags||5.011000|
  2044. save_helem||5.004050|
  2045. save_hints|||
  2046. save_hptr|||
  2047. save_int|||
  2048. save_item|||
  2049. save_iv||5.005000|
  2050. save_lines|||
  2051. save_list|||
  2052. save_long|||
  2053. save_magic|||
  2054. save_mortalizesv||5.007001|
  2055. save_nogv|||
  2056. save_op|||
  2057. save_padsv_and_mortalize||5.011000|
  2058. save_pptr|||
  2059. save_pushi32ptr|||
  2060. save_pushptri32ptr|||
  2061. save_pushptrptr|||
  2062. save_pushptr||5.011000|
  2063. save_re_context||5.006000|
  2064. save_scalar_at|||
  2065. save_scalar|||
  2066. save_set_svflags||5.009000|
  2067. save_shared_pvref||5.007003|
  2068. save_sptr|||
  2069. save_svref|||
  2070. save_vptr||5.006000|
  2071. savepvn|||
  2072. savepvs||5.009003|
  2073. savepv|||
  2074. savesharedpvn||5.009005|
  2075. savesharedpv||5.007003|
  2076. savestack_grow_cnt||5.008001|
  2077. savestack_grow|||
  2078. savesvpv||5.009002|
  2079. sawparens|||
  2080. scalar_mod_type|||n
  2081. scalarboolean|||
  2082. scalarkids|||
  2083. scalarseq|||
  2084. scalarvoid|||
  2085. scalar|||
  2086. scan_bin||5.006000|
  2087. scan_commit|||
  2088. scan_const|||
  2089. scan_formline|||
  2090. scan_heredoc|||
  2091. scan_hex|||
  2092. scan_ident|||
  2093. scan_inputsymbol|||
  2094. scan_num||5.007001|
  2095. scan_oct|||
  2096. scan_pat|||
  2097. scan_str|||
  2098. scan_subst|||
  2099. scan_trans|||
  2100. scan_version||5.009001|
  2101. scan_vstring||5.009005|
  2102. scan_word|||
  2103. scope|||
  2104. screaminstr||5.005000|
  2105. search_const|||
  2106. seed||5.008001|
  2107. sequence_num|||
  2108. sequence_tail|||
  2109. sequence|||
  2110. set_context||5.006000|n
  2111. set_numeric_local||5.006000|
  2112. set_numeric_radix||5.006000|
  2113. set_numeric_standard||5.006000|
  2114. setdefout|||
  2115. share_hek_flags|||
  2116. share_hek||5.004000|
  2117. si_dup|||
  2118. sighandler|||n
  2119. simplify_sort|||
  2120. skipspace0|||
  2121. skipspace1|||
  2122. skipspace2|||
  2123. skipspace|||
  2124. softref2xv|||
  2125. sortcv_stacked|||
  2126. sortcv_xsub|||
  2127. sortcv|||
  2128. sortsv_flags||5.009003|
  2129. sortsv||5.007003|
  2130. space_join_names_mortal|||
  2131. ss_dup|||
  2132. stack_grow|||
  2133. start_force|||
  2134. start_glob|||
  2135. start_subparse||5.004000|
  2136. stashpv_hvname_match||5.011000|
  2137. stdize_locale|||
  2138. store_cop_label|||
  2139. strEQ|||
  2140. strGE|||
  2141. strGT|||
  2142. strLE|||
  2143. strLT|||
  2144. strNE|||
  2145. str_to_version||5.006000|
  2146. strip_return|||
  2147. strnEQ|||
  2148. strnNE|||
  2149. study_chunk|||
  2150. sub_crush_depth|||
  2151. sublex_done|||
  2152. sublex_push|||
  2153. sublex_start|||
  2154. sv_2bool|||
  2155. sv_2cv|||
  2156. sv_2io|||
  2157. sv_2iuv_common|||
  2158. sv_2iuv_non_preserve|||
  2159. sv_2iv_flags||5.009001|
  2160. sv_2iv|||
  2161. sv_2mortal|||
  2162. sv_2num|||
  2163. sv_2nv|||
  2164. sv_2pv_flags|5.007002||p
  2165. sv_2pv_nolen|5.006000||p
  2166. sv_2pvbyte_nolen|5.006000||p
  2167. sv_2pvbyte|5.006000||p
  2168. sv_2pvutf8_nolen||5.006000|
  2169. sv_2pvutf8||5.006000|
  2170. sv_2pv|||
  2171. sv_2uv_flags||5.009001|
  2172. sv_2uv|5.004000||p
  2173. sv_add_arena|||
  2174. sv_add_backref|||
  2175. sv_backoff|||
  2176. sv_bless|||
  2177. sv_cat_decode||5.008001|
  2178. sv_catpv_mg|5.004050||p
  2179. sv_catpvf_mg_nocontext|||pvn
  2180. sv_catpvf_mg|5.006000|5.004000|pv
  2181. sv_catpvf_nocontext|||vn
  2182. sv_catpvf||5.004000|v
  2183. sv_catpvn_flags||5.007002|
  2184. sv_catpvn_mg|5.004050||p
  2185. sv_catpvn_nomg|5.007002||p
  2186. sv_catpvn|||
  2187. sv_catpvs|5.009003||p
  2188. sv_catpv|||
  2189. sv_catsv_flags||5.007002|
  2190. sv_catsv_mg|5.004050||p
  2191. sv_catsv_nomg|5.007002||p
  2192. sv_catsv|||
  2193. sv_catxmlpvn|||
  2194. sv_catxmlsv|||
  2195. sv_chop|||
  2196. sv_clean_all|||
  2197. sv_clean_objs|||
  2198. sv_clear|||
  2199. sv_cmp_locale||5.004000|
  2200. sv_cmp|||
  2201. sv_collxfrm|||
  2202. sv_compile_2op||5.008001|
  2203. sv_copypv||5.007003|
  2204. sv_dec|||
  2205. sv_del_backref|||
  2206. sv_derived_from||5.004000|
  2207. sv_destroyable||5.010000|
  2208. sv_does||5.009004|
  2209. sv_dump|||
  2210. sv_dup_inc_multiple|||
  2211. sv_dup|||
  2212. sv_eq|||
  2213. sv_exp_grow|||
  2214. sv_force_normal_flags||5.007001|
  2215. sv_force_normal||5.006000|
  2216. sv_free2|||
  2217. sv_free_arenas|||
  2218. sv_free|||
  2219. sv_gets||5.004000|
  2220. sv_grow|||
  2221. sv_i_ncmp|||
  2222. sv_inc|||
  2223. sv_insert_flags||5.011000|
  2224. sv_insert|||
  2225. sv_isa|||
  2226. sv_isobject|||
  2227. sv_iv||5.005000|
  2228. sv_kill_backrefs|||
  2229. sv_len_utf8||5.006000|
  2230. sv_len|||
  2231. sv_magic_portable|5.011000|5.004000|p
  2232. sv_magicext||5.007003|
  2233. sv_magic|||
  2234. sv_mortalcopy|||
  2235. sv_ncmp|||
  2236. sv_newmortal|||
  2237. sv_newref|||
  2238. sv_nolocking||5.007003|
  2239. sv_nosharing||5.007003|
  2240. sv_nounlocking|||
  2241. sv_nv||5.005000|
  2242. sv_peek||5.005000|
  2243. sv_pos_b2u_midway|||
  2244. sv_pos_b2u||5.006000|
  2245. sv_pos_u2b_cached|||
  2246. sv_pos_u2b_forwards|||n
  2247. sv_pos_u2b_midway|||n
  2248. sv_pos_u2b||5.006000|
  2249. sv_pvbyten_force||5.006000|
  2250. sv_pvbyten||5.006000|
  2251. sv_pvbyte||5.006000|
  2252. sv_pvn_force_flags|5.007002||p
  2253. sv_pvn_force|||
  2254. sv_pvn_nomg|5.007003|5.005000|p
  2255. sv_pvn||5.005000|
  2256. sv_pvutf8n_force||5.006000|
  2257. sv_pvutf8n||5.006000|
  2258. sv_pvutf8||5.006000|
  2259. sv_pv||5.006000|
  2260. sv_recode_to_utf8||5.007003|
  2261. sv_reftype|||
  2262. sv_release_COW|||
  2263. sv_replace|||
  2264. sv_report_used|||
  2265. sv_reset|||
  2266. sv_rvweaken||5.006000|
  2267. sv_setiv_mg|5.004050||p
  2268. sv_setiv|||
  2269. sv_setnv_mg|5.006000||p
  2270. sv_setnv|||
  2271. sv_setpv_mg|5.004050||p
  2272. sv_setpvf_mg_nocontext|||pvn
  2273. sv_setpvf_mg|5.006000|5.004000|pv
  2274. sv_setpvf_nocontext|||vn
  2275. sv_setpvf||5.004000|v
  2276. sv_setpviv_mg||5.008001|
  2277. sv_setpviv||5.008001|
  2278. sv_setpvn_mg|5.004050||p
  2279. sv_setpvn|||
  2280. sv_setpvs|5.009004||p
  2281. sv_setpv|||
  2282. sv_setref_iv|||
  2283. sv_setref_nv|||
  2284. sv_setref_pvn|||
  2285. sv_setref_pv|||
  2286. sv_setref_uv||5.007001|
  2287. sv_setsv_cow|||
  2288. sv_setsv_flags||5.007002|
  2289. sv_setsv_mg|5.004050||p
  2290. sv_setsv_nomg|5.007002||p
  2291. sv_setsv|||
  2292. sv_setuv_mg|5.004050||p
  2293. sv_setuv|5.004000||p
  2294. sv_tainted||5.004000|
  2295. sv_taint||5.004000|
  2296. sv_true||5.005000|
  2297. sv_unglob|||
  2298. sv_uni_display||5.007003|
  2299. sv_unmagic|||
  2300. sv_unref_flags||5.007001|
  2301. sv_unref|||
  2302. sv_untaint||5.004000|
  2303. sv_upgrade|||
  2304. sv_usepvn_flags||5.009004|
  2305. sv_usepvn_mg|5.004050||p
  2306. sv_usepvn|||
  2307. sv_utf8_decode||5.006000|
  2308. sv_utf8_downgrade||5.006000|
  2309. sv_utf8_encode||5.006000|
  2310. sv_utf8_upgrade_flags_grow||5.011000|
  2311. sv_utf8_upgrade_flags||5.007002|
  2312. sv_utf8_upgrade_nomg||5.007002|
  2313. sv_utf8_upgrade||5.007001|
  2314. sv_uv|5.005000||p
  2315. sv_vcatpvf_mg|5.006000|5.004000|p
  2316. sv_vcatpvfn||5.004000|
  2317. sv_vcatpvf|5.006000|5.004000|p
  2318. sv_vsetpvf_mg|5.006000|5.004000|p
  2319. sv_vsetpvfn||5.004000|
  2320. sv_vsetpvf|5.006000|5.004000|p
  2321. sv_xmlpeek|||
  2322. svtype|||
  2323. swallow_bom|||
  2324. swap_match_buff|||
  2325. swash_fetch||5.007002|
  2326. swash_get|||
  2327. swash_init||5.006000|
  2328. sys_init3||5.010000|n
  2329. sys_init||5.010000|n
  2330. sys_intern_clear|||
  2331. sys_intern_dup|||
  2332. sys_intern_init|||
  2333. sys_term||5.010000|n
  2334. taint_env|||
  2335. taint_proper|||
  2336. tmps_grow||5.006000|
  2337. toLOWER|||
  2338. toUPPER|||
  2339. to_byte_substr|||
  2340. to_uni_fold||5.007003|
  2341. to_uni_lower_lc||5.006000|
  2342. to_uni_lower||5.007003|
  2343. to_uni_title_lc||5.006000|
  2344. to_uni_title||5.007003|
  2345. to_uni_upper_lc||5.006000|
  2346. to_uni_upper||5.007003|
  2347. to_utf8_case||5.007003|
  2348. to_utf8_fold||5.007003|
  2349. to_utf8_lower||5.007003|
  2350. to_utf8_substr|||
  2351. to_utf8_title||5.007003|
  2352. to_utf8_upper||5.007003|
  2353. token_free|||
  2354. token_getmad|||
  2355. tokenize_use|||
  2356. tokeq|||
  2357. tokereport|||
  2358. too_few_arguments|||
  2359. too_many_arguments|||
  2360. uiv_2buf|||n
  2361. unlnk|||
  2362. unpack_rec|||
  2363. unpack_str||5.007003|
  2364. unpackstring||5.008001|
  2365. unshare_hek_or_pvn|||
  2366. unshare_hek|||
  2367. unsharepvn||5.004000|
  2368. unwind_handler_stack|||
  2369. update_debugger_info|||
  2370. upg_version||5.009005|
  2371. usage|||
  2372. utf16_to_utf8_reversed||5.006001|
  2373. utf16_to_utf8||5.006001|
  2374. utf8_distance||5.006000|
  2375. utf8_hop||5.006000|
  2376. utf8_length||5.007001|
  2377. utf8_mg_pos_cache_update|||
  2378. utf8_to_bytes||5.006001|
  2379. utf8_to_uvchr||5.007001|
  2380. utf8_to_uvuni||5.007001|
  2381. utf8n_to_uvchr|||
  2382. utf8n_to_uvuni||5.007001|
  2383. utilize|||
  2384. uvchr_to_utf8_flags||5.007003|
  2385. uvchr_to_utf8|||
  2386. uvuni_to_utf8_flags||5.007003|
  2387. uvuni_to_utf8||5.007001|
  2388. validate_suid|||
  2389. varname|||
  2390. vcmp||5.009000|
  2391. vcroak||5.006000|
  2392. vdeb||5.007003|
  2393. vdie_common|||
  2394. vdie_croak_common|||
  2395. vdie|||
  2396. vform||5.006000|
  2397. visit|||
  2398. vivify_defelem|||
  2399. vivify_ref|||
  2400. vload_module|5.006000||p
  2401. vmess||5.006000|
  2402. vnewSVpvf|5.006000|5.004000|p
  2403. vnormal||5.009002|
  2404. vnumify||5.009000|
  2405. vstringify||5.009000|
  2406. vverify||5.009003|
  2407. vwarner||5.006000|
  2408. vwarn||5.006000|
  2409. wait4pid|||
  2410. warn_nocontext|||vn
  2411. warner_nocontext|||vn
  2412. warner|5.006000|5.004000|pv
  2413. warn|||v
  2414. watch|||
  2415. whichsig|||
  2416. write_no_mem|||
  2417. write_to_stderr|||
  2418. xmldump_all|||
  2419. xmldump_attr|||
  2420. xmldump_eval|||
  2421. xmldump_form|||
  2422. xmldump_indent|||v
  2423. xmldump_packsubs|||
  2424. xmldump_sub|||
  2425. xmldump_vindent|||
  2426. yyerror|||
  2427. yylex|||
  2428. yyparse|||
  2429. yywarn|||
  2430. );
  2431.  
  2432. if (exists $opt{'list-unsupported'}) {
  2433.   my $f;
  2434.   for $f (sort { lc $a cmp lc $b } keys %API) {
  2435.   next unless $API{$f}{todo};
  2436.   print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
  2437.   }
  2438.   exit 0;
  2439. }
  2440.  
  2441. # Scan for possible replacement candidates
  2442.  
  2443. my(%replace, %need, %hints, %warnings, %depends);
  2444. my $replace = 0;
  2445. my($hint, $define, $function);
  2446.  
  2447. sub find_api
  2448. {
  2449.   my $code = shift;
  2450.   $code =~ s{
  2451.   / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
  2452.   | "[^"\\]*(?:\\.[^"\\]*)*"
  2453.   | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
  2454.   grep { exists $API{$_} } $code =~ /(\w+)/mg;
  2455. }
  2456.  
  2457. while (<DATA>) {
  2458.   if ($hint) {
  2459.   my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
  2460.   if (m{^\s*\*\s(.*?)\s*$}) {
  2461.   for (@{$hint->[1]}) {
  2462.   $h->{$_} ||= ''; # suppress warning with older perls
  2463.   $h->{$_} .= "$1\n";
  2464.   }
  2465.   }
  2466.   else { undef $hint }
  2467.   }
  2468.  
  2469.   $hint = [$1, [split /,?\s+/, $2]]
  2470.   if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
  2471.  
  2472.   if ($define) {
  2473.   if ($define->[1] =~ /\\$/) {
  2474.   $define->[1] .= $_;
  2475.   }
  2476.   else {
  2477.   if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
  2478.   my @n = find_api($define->[1]);
  2479.   push @{$depends{$define->[0]}}, @n if @n
  2480.   }
  2481.   undef $define;
  2482.   }
  2483.   }
  2484.  
  2485.   $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
  2486.  
  2487.   if ($function) {
  2488.   if (/^}/) {
  2489.   if (exists $API{$function->[0]}) {
  2490.   my @n = find_api($function->[1]);
  2491.   push @{$depends{$function->[0]}}, @n if @n
  2492.   }
  2493.   undef $function;
  2494.   }
  2495.   else {
  2496.   $function->[1] .= $_;
  2497.   }
  2498.   }
  2499.  
  2500.   $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
  2501.  
  2502.   $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
  2503.   $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
  2504.   $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
  2505.   $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
  2506.  
  2507.   if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
  2508.   my @deps = map { s/\s+//g; $_ } split /,/, $3;
  2509.   my $d;
  2510.   for $d (map { s/\s+//g; $_ } split /,/, $1) {
  2511.   push @{$depends{$d}}, @deps;
  2512.   }
  2513.   }
  2514.  
  2515.   $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
  2516. }
  2517.  
  2518. for (values %depends) {
  2519.   my %s;
  2520.   $_ = [sort grep !$s{$_}++, @$_];
  2521. }
  2522.  
  2523. if (exists $opt{'api-info'}) {
  2524.   my $f;
  2525.   my $count = 0;
  2526.   my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
  2527.   for $f (sort { lc $a cmp lc $b } keys %API) {
  2528.   next unless $f =~ /$match/;
  2529.   print "\n=== $f ===\n\n";
  2530.   my $info = 0;
  2531.   if ($API{$f}{base} || $API{$f}{todo}) {
  2532.   my $base = format_version($API{$f}{base} || $API{$f}{todo});
  2533.   print "Supported at least starting from perl-$base.\n";
  2534.   $info++;
  2535.   }
  2536.   if ($API{$f}{provided}) {
  2537.   my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
  2538.   print "Support by $ppport provided back to perl-$todo.\n";
  2539.   print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
  2540.   print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
  2541.   print "\n$hints{$f}" if exists $hints{$f};
  2542.   print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
  2543.   $info++;
  2544.   }
  2545.   print "No portability information available.\n" unless $info;
  2546.   $count++;
  2547.   }
  2548.   $count or print "Found no API matching '$opt{'api-info'}'.";
  2549.   print "\n";
  2550.   exit 0;
  2551. }
  2552.  
  2553. if (exists $opt{'list-provided'}) {
  2554.   my $f;
  2555.   for $f (sort { lc $a cmp lc $b } keys %API) {
  2556.   next unless $API{$f}{provided};
  2557.   my @flags;
  2558.   push @flags, 'explicit' if exists $need{$f};
  2559.   push @flags, 'depend' if exists $depends{$f};
  2560.   push @flags, 'hint' if exists $hints{$f};
  2561.   push @flags, 'warning' if exists $warnings{$f};
  2562.   my $flags = @flags ? ' ['.join(', ', @flags).']' : '';
  2563.   print "$f$flags\n";
  2564.   }
  2565.   exit 0;
  2566. }
  2567.  
  2568. my @files;
  2569. my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
  2570. my $srcext = join '|', map { quotemeta $_ } @srcext;
  2571.  
  2572. if (@ARGV) {
  2573.   my %seen;
  2574.   for (@ARGV) {
  2575.   if (-e) {
  2576.   if (-f) {
  2577.   push @files, $_ unless $seen{$_}++;
  2578.   }
  2579.   else { warn "'$_' is not a file.\n" }
  2580.   }
  2581.   else {
  2582.   my @new = grep { -f } glob $_
  2583.   or warn "'$_' does not exist.\n";
  2584.   push @files, grep { !$seen{$_}++ } @new;
  2585.   }
  2586.   }
  2587. }
  2588. else {
  2589.   eval {
  2590.   require File::Find;
  2591.   File::Find::find(sub {
  2592.   $File::Find::name =~ /($srcext)$/i
  2593.   and push @files, $File::Find::name;
  2594.   }, '.');
  2595.   };
  2596.   if ($@) {
  2597.   @files = map { glob "*$_" } @srcext;
  2598.   }
  2599. }
  2600.  
  2601. if (!@ARGV || $opt{filter}) {
  2602.   my(@in, @out);
  2603.   my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files;
  2604.   for (@files) {
  2605.   my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
  2606.   push @{ $out ? \@out : \@in }, $_;
  2607.   }
  2608.   if (@ARGV && @out) {
  2609.   warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
  2610.   }
  2611.   @files = @in;
  2612. }
  2613.  
  2614. die "No input files given!\n" unless @files;
  2615.  
  2616. my(%files, %global, %revreplace);
  2617. %revreplace = reverse %replace;
  2618. my $filename;
  2619. my $patch_opened = 0;
  2620.  
  2621. for $filename (@files) {
  2622.   unless (open IN, "<$filename") {
  2623.   warn "Unable to read from $filename: $!\n";
  2624.   next;
  2625.   }
  2626.  
  2627.   info("Scanning $filename ...");
  2628.  
  2629.   my $c = do { local $/; <IN> };
  2630.   close IN;
  2631.  
  2632.   my %file = (orig => $c, changes => 0);
  2633.  
  2634.   # Temporarily remove C/XS comments and strings from the code
  2635.   my @ccom;
  2636.  
  2637.   $c =~ s{
  2638.   ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
  2639.   | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
  2640.   | ( ^$HS*\#[^\r\n]*
  2641.   | "[^"\\]*(?:\\.[^"\\]*)*"
  2642.   | '[^'\\]*(?:\\.[^'\\]*)*'
  2643.   | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
  2644.   }{ defined $2 and push @ccom, $2;
  2645.   defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
  2646.  
  2647.   $file{ccom} = \@ccom;
  2648.   $file{code} = $c;
  2649.   $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
  2650.  
  2651.   my $func;
  2652.  
  2653.   for $func (keys %API) {
  2654.   my $match = $func;
  2655.   $match .= "|$revreplace{$func}" if exists $revreplace{$func};
  2656.   if ($c =~ /\b(?:Perl_)?($match)\b/) {
  2657.   $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
  2658.   $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
  2659.   if (exists $API{$func}{provided}) {
  2660.   $file{uses_provided}{$func}++;
  2661.   if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
  2662.   $file{uses}{$func}++;
  2663.   my @deps = rec_depend($func);
  2664.   if (@deps) {
  2665.   $file{uses_deps}{$func} = \@deps;
  2666.   for (@deps) {
  2667.   $file{uses}{$_} = 0 unless exists $file{uses}{$_};
  2668.   }
  2669.   }
  2670.   for ($func, @deps) {
  2671.   $file{needs}{$_} = 'static' if exists $need{$_};
  2672.   }
  2673.   }
  2674.   }
  2675.   if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
  2676.   if ($c =~ /\b$func\b/) {
  2677.   $file{uses_todo}{$func}++;
  2678.   }
  2679.   }
  2680.   }
  2681.   }
  2682.  
  2683.   while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
  2684.   if (exists $need{$2}) {
  2685.   $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
  2686.   }
  2687.   else { warning("Possibly wrong #define $1 in $filename") }
  2688.   }
  2689.  
  2690.   for (qw(uses needs uses_todo needed_global needed_static)) {
  2691.   for $func (keys %{$file{$_}}) {
  2692.   push @{$global{$_}{$func}}, $filename;
  2693.   }
  2694.   }
  2695.  
  2696.   $files{$filename} = \%file;
  2697. }
  2698.  
  2699. # Globally resolve NEED_'s
  2700. my $need;
  2701. for $need (keys %{$global{needs}}) {
  2702.   if (@{$global{needs}{$need}} > 1) {
  2703.   my @targets = @{$global{needs}{$need}};
  2704.   my @t = grep $files{$_}{needed_global}{$need}, @targets;
  2705.   @targets = @t if @t;
  2706.   @t = grep /\.xs$/i, @targets;
  2707.   @targets = @t if @t;
  2708.   my $target = shift @targets;
  2709.   $files{$target}{needs}{$need} = 'global';
  2710.   for (@{$global{needs}{$need}}) {
  2711.   $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
  2712.   }
  2713.   }
  2714. }
  2715.  
  2716. for $filename (@files) {
  2717.   exists $files{$filename} or next;
  2718.  
  2719.   info("=== Analyzing $filename ===");
  2720.  
  2721.   my %file = %{$files{$filename}};
  2722.   my $func;
  2723.   my $c = $file{code};
  2724.   my $warnings = 0;
  2725.  
  2726.   for $func (sort keys %{$file{uses_Perl}}) {
  2727.   if ($API{$func}{varargs}) {
  2728.   unless ($API{$func}{nothxarg}) {
  2729.   my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
  2730.   { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
  2731.   if ($changes) {
  2732.   warning("Doesn't pass interpreter argument aTHX to Perl_$func");
  2733.   $file{changes} += $changes;
  2734.   }
  2735.   }
  2736.   }
  2737.   else {
  2738.   warning("Uses Perl_$func instead of $func");
  2739.   $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
  2740.   {$func$1(}g);
  2741.   }
  2742.   }
  2743.  
  2744.   for $func (sort keys %{$file{uses_replace}}) {
  2745.   warning("Uses $func instead of $replace{$func}");
  2746.   $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
  2747.   }
  2748.  
  2749.   for $func (sort keys %{$file{uses_provided}}) {
  2750.   if ($file{uses}{$func}) {
  2751.   if (exists $file{uses_deps}{$func}) {
  2752.   diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
  2753.   }
  2754.   else {
  2755.   diag("Uses $func");
  2756.   }
  2757.   }
  2758.   $warnings += hint($func);
  2759.   }
  2760.  
  2761.   unless ($opt{quiet}) {
  2762.   for $func (sort keys %{$file{uses_todo}}) {
  2763.   print "*** WARNING: Uses $func, which may not be portable below perl ",
  2764.   format_version($API{$func}{todo}), ", even with '$ppport'\n";
  2765.   $warnings++;
  2766.   }
  2767.   }
  2768.  
  2769.   for $func (sort keys %{$file{needed_static}}) {
  2770.   my $message = '';
  2771.   if (not exists $file{uses}{$func}) {
  2772.   $message = "No need to define NEED_$func if $func is never used";
  2773.   }
  2774.   elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
  2775.   $message = "No need to define NEED_$func when already needed globally";
  2776.   }
  2777.   if ($message) {
  2778.   diag($message);
  2779.   $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
  2780.   }
  2781.   }
  2782.  
  2783.   for $func (sort keys %{$file{needed_global}}) {
  2784.   my $message = '';
  2785.   if (not exists $global{uses}{$func}) {
  2786.   $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
  2787.   }
  2788.   elsif (exists $file{needs}{$func}) {
  2789.   if ($file{needs}{$func} eq 'extern') {
  2790.   $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
  2791.   }
  2792.   elsif ($file{needs}{$func} eq 'static') {
  2793.   $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
  2794.   }
  2795.   }
  2796.   if ($message) {
  2797.   diag($message);
  2798.   $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
  2799.   }
  2800.   }
  2801.  
  2802.   $file{needs_inc_ppport} = keys %{$file{uses}};
  2803.  
  2804.   if ($file{needs_inc_ppport}) {
  2805.   my $pp = '';
  2806.  
  2807.   for $func (sort keys %{$file{needs}}) {
  2808.   my $type = $file{needs}{$func};
  2809.   next if $type eq 'extern';
  2810.   my $suffix = $type eq 'global' ? '_GLOBAL' : '';
  2811.   unless (exists $file{"needed_$type"}{$func}) {
  2812.   if ($type eq 'global') {
  2813.   diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
  2814.   }
  2815.   else {
  2816.   diag("File needs $func, adding static request");
  2817.   }
  2818.   $pp .= "#define NEED_$func$suffix\n";
  2819.   }
  2820.   }
  2821.  
  2822.   if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
  2823.   $pp = '';
  2824.   $file{changes}++;
  2825.   }
  2826.  
  2827.   unless ($file{has_inc_ppport}) {
  2828.   diag("Needs to include '$ppport'");
  2829.   $pp .= qq(#include "$ppport"\n)
  2830.   }
  2831.  
  2832.   if ($pp) {
  2833.   $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
  2834.   || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
  2835.   || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
  2836.   || ($c =~ s/^/$pp/);
  2837.   }
  2838.   }
  2839.   else {
  2840.   if ($file{has_inc_ppport}) {
  2841.   diag("No need to include '$ppport'");
  2842.   $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
  2843.   }
  2844.   }
  2845.  
  2846.   # put back in our C comments
  2847.   my $ix;
  2848.   my $cppc = 0;
  2849.   my @ccom = @{$file{ccom}};
  2850.   for $ix (0 .. $#ccom) {
  2851.   if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
  2852.   $cppc++;
  2853.   $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
  2854.   }
  2855.   else {
  2856.   $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
  2857.   }
  2858.   }
  2859.  
  2860.   if ($cppc) {
  2861.   my $s = $cppc != 1 ? 's' : '';
  2862.   warning("Uses $cppc C++ style comment$s, which is not portable");
  2863.   }
  2864.  
  2865.   my $s = $warnings != 1 ? 's' : '';
  2866.   my $warn = $warnings ? " ($warnings warning$s)" : '';
  2867.   info("Analysis completed$warn");
  2868.  
  2869.   if ($file{changes}) {
  2870.   if (exists $opt{copy}) {
  2871.   my $newfile = "$filename$opt{copy}";
  2872.   if (-e $newfile) {
  2873.   error("'$newfile' already exists, refusing to write copy of '$filename'");
  2874.   }
  2875.   else {
  2876.   local *F;
  2877.   if (open F, ">$newfile") {
  2878.   info("Writing copy of '$filename' with changes to '$newfile'");
  2879.   print F $c;
  2880.   close F;
  2881.   }
  2882.   else {
  2883.   error("Cannot open '$newfile' for writing: $!");
  2884.   }
  2885.   }
  2886.   }
  2887.   elsif (exists $opt{patch} || $opt{changes}) {
  2888.   if (exists $opt{patch}) {
  2889.   unless ($patch_opened) {
  2890.   if (open PATCH, ">$opt{patch}") {
  2891.   $patch_opened = 1;
  2892.   }
  2893.   else {
  2894.   error("Cannot open '$opt{patch}' for writing: $!");
  2895.   delete $opt{patch};
  2896.   $opt{changes} = 1;
  2897.   goto fallback;
  2898.   }
  2899.   }
  2900.   mydiff(\*PATCH, $filename, $c);
  2901.   }
  2902.   else {
  2903. fallback:
  2904.   info("Suggested changes:");
  2905.   mydiff(\*STDOUT, $filename, $c);
  2906.   }
  2907.   }
  2908.   else {
  2909.   my $s = $file{changes} == 1 ? '' : 's';
  2910.   info("$file{changes} potentially required change$s detected");
  2911.   }
  2912.   }
  2913.   else {
  2914.   info("Looks good");
  2915.   }
  2916. }
  2917.  
  2918. close PATCH if $patch_opened;
  2919.  
  2920. exit 0;
  2921.  
  2922.  
  2923. sub try_use { eval "use @_;"; return $@ eq '' }
  2924.  
  2925. sub mydiff
  2926. {
  2927.   local *F = shift;
  2928.   my($file, $str) = @_;
  2929.   my $diff;
  2930.  
  2931.   if (exists $opt{diff}) {
  2932.   $diff = run_diff($opt{diff}, $file, $str);
  2933.   }
  2934.  
  2935.   if (!defined $diff and try_use('Text::Diff')) {
  2936.   $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
  2937.   $diff = <<HEADER . $diff;
  2938. --- $file
  2939. +++ $file.patched
  2940. HEADER
  2941.   }
  2942.  
  2943.   if (!defined $diff) {
  2944.   $diff = run_diff('diff -u', $file, $str);
  2945.   }
  2946.  
  2947.   if (!defined $diff) {
  2948.   $diff = run_diff('diff', $file, $str);
  2949.   }
  2950.  
  2951.   if (!defined $diff) {
  2952.   error("Cannot generate a diff. Please install Text::Diff or use --copy.");
  2953.   return;
  2954.   }
  2955.  
  2956.   print F $diff;
  2957. }
  2958.  
  2959. sub run_diff
  2960. {
  2961.   my($prog, $file, $str) = @_;
  2962.   my $tmp = 'dppptemp';
  2963.   my $suf = 'aaa';
  2964.   my $diff = '';
  2965.   local *F;
  2966.  
  2967.   while (-e "$tmp.$suf") { $suf++ }
  2968.   $tmp = "$tmp.$suf";
  2969.  
  2970.   if (open F, ">$tmp") {
  2971.   print F $str;
  2972.   close F;
  2973.  
  2974.   if (open F, "$prog $file $tmp |") {
  2975.   while (<F>) {
  2976.   s/\Q$tmp\E/$file.patched/;
  2977.   $diff .= $_;
  2978.   }
  2979.   close F;
  2980.   unlink $tmp;
  2981.   return $diff;
  2982.   }
  2983.  
  2984.   unlink $tmp;
  2985.   }
  2986.   else {
  2987.   error("Cannot open '$tmp' for writing: $!");
  2988.   }
  2989.  
  2990.   return undef;
  2991. }
  2992.  
  2993. sub rec_depend
  2994. {
  2995.   my($func, $seen) = @_;
  2996.   return () unless exists $depends{$func};
  2997.   $seen = {%{$seen||{}}};
  2998.   return () if $seen->{$func}++;
  2999.   my %s;
  3000.   grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
  3001. }
  3002.  
  3003. sub parse_version
  3004. {
  3005.   my $ver = shift;
  3006.  
  3007.   if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
  3008.   return ($1, $2, $3);
  3009.   }
  3010.   elsif ($ver !~ /^\d+\.[\d_]+$/) {
  3011.   die "cannot parse version '$ver'\n";
  3012.   }
  3013.  
  3014.   $ver =~ s/_//g;
  3015.   $ver =~ s/$/000000/;
  3016.  
  3017.   my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
  3018.  
  3019.   $v = int $v;
  3020.   $s = int $s;
  3021.  
  3022.   if ($r < 5 || ($r == 5 && $v < 6)) {
  3023.   if ($s % 10) {
  3024.   die "cannot parse version '$ver'\n";
  3025.   }
  3026.   }
  3027.  
  3028.   return ($r, $v, $s);
  3029. }
  3030.  
  3031. sub format_version
  3032. {
  3033.   my $ver = shift;
  3034.  
  3035.   $ver =~ s/$/000000/;
  3036.   my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
  3037.  
  3038.   $v = int $v;
  3039.   $s = int $s;
  3040.  
  3041.   if ($r < 5 || ($r == 5 && $v < 6)) {
  3042.   if ($s % 10) {
  3043.   die "invalid version '$ver'\n";
  3044.   }
  3045.   $s /= 10;
  3046.  
  3047.   $ver = sprintf "%d.%03d", $r, $v;
  3048.   $s > 0 and $ver .= sprintf "_%02d", $s;
  3049.  
  3050.   return $ver;
  3051.   }
  3052.  
  3053.   return sprintf "%d.%d.%d", $r, $v, $s;
  3054. }
  3055.  
  3056. sub info
  3057. {
  3058.   $opt{quiet} and return;
  3059.   print @_, "\n";
  3060. }
  3061.  
  3062. sub diag
  3063. {
  3064.   $opt{quiet} and return;
  3065.   $opt{diag} and print @_, "\n";
  3066. }
  3067.  
  3068. sub warning
  3069. {
  3070.   $opt{quiet} and return;
  3071.   print "*** ", @_, "\n";
  3072. }
  3073.  
  3074. sub error
  3075. {
  3076.   print "*** ERROR: ", @_, "\n";
  3077. }
  3078.  
  3079. my %given_hints;
  3080. my %given_warnings;
  3081. sub hint
  3082. {
  3083.   $opt{quiet} and return;
  3084.   my $func = shift;
  3085.   my $rv = 0;
  3086.   if (exists $warnings{$func} && !$given_warnings{$func}++) {
  3087.   my $warn = $warnings{$func};
  3088.   $warn =~ s!^!*** !mg;
  3089.   print "*** WARNING: $func\n", $warn;
  3090.   $rv++;
  3091.   }
  3092.   if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
  3093.   my $hint = $hints{$func};
  3094.   $hint =~ s/^/ /mg;
  3095.   print " --- hint for $func ---\n", $hint;
  3096.   }
  3097.   $rv;
  3098. }
  3099.  
  3100. sub usage
  3101. {
  3102.   my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
  3103.   my %M = ( 'I' => '*' );
  3104.   $usage =~ s/^\s*perl\s+\S+/$^X $0/;
  3105.   $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
  3106.  
  3107.   print <<ENDUSAGE;
  3108.  
  3109. Usage: $usage
  3110.  
  3111. See perldoc $0 for details.
  3112.  
  3113. ENDUSAGE
  3114.  
  3115.   exit 2;
  3116. }
  3117.  
  3118. sub strip
  3119. {
  3120.   my $self = do { local(@ARGV,$/)=($0); <> };
  3121.   my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
  3122.   $copy =~ s/^(?=\S+)/ /gms;
  3123.   $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
  3124.   $self =~ s/^SKIP.*(?=^__DATA__)/SKIP
  3125. if (\@ARGV && \$ARGV[0] eq '--unstrip') {
  3126.   eval { require Devel::PPPort };
  3127.   \$@ and die "Cannot require Devel::PPPort, please install.\\n";
  3128.   if (eval \$Devel::PPPort::VERSION < $VERSION) {
  3129.   die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
  3130.   . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
  3131.   . "Please install a newer version, or --unstrip will not work.\\n";
  3132.   }
  3133.   Devel::PPPort::WriteFile(\$0);
  3134.   exit 0;
  3135. }
  3136. print <<END;
  3137.  
  3138. Sorry, but this is a stripped version of \$0.
  3139.  
  3140. To be able to use its original script and doc functionality,
  3141. please try to regenerate this file using:
  3142.  
  3143.   \$^X \$0 --unstrip
  3144.  
  3145. END
  3146. /ms;
  3147.   my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
  3148.   $c =~ s{
  3149.   / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
  3150.   | ( "[^"\\]*(?:\\.[^"\\]*)*"
  3151.   | '[^'\\]*(?:\\.[^'\\]*)*' )
  3152.   | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
  3153.   $c =~ s!\s+$!!mg;
  3154.   $c =~ s!^$LF!!mg;
  3155.   $c =~ s!^\s*#\s*!#!mg;
  3156.   $c =~ s!^\s+!!mg;
  3157.  
  3158.   open OUT, ">$0" or die "cannot strip $0: $!\n";
  3159.   print OUT "$pl$c\n";
  3160.  
  3161.   exit 0;
  3162. }
  3163.  
  3164. __DATA__
  3165. */
  3166.  
  3167. #ifndef _P_P_PORTABILITY_H_
  3168. #define _P_P_PORTABILITY_H_
  3169.  
  3170. #ifndef DPPP_NAMESPACE
  3171. # define DPPP_NAMESPACE DPPP_
  3172. #endif
  3173.  
  3174. #define DPPP_CAT2(x,y) CAT2(x,y)
  3175. #define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
  3176.  
  3177. #ifndef PERL_REVISION
  3178. # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
  3179. # define PERL_PATCHLEVEL_H_IMPLICIT
  3180. # include <patchlevel.h>
  3181. # endif
  3182. # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
  3183. # include <could_not_find_Perl_patchlevel.h>
  3184. # endif
  3185. # ifndef PERL_REVISION
  3186. # define PERL_REVISION (5)
  3187. /* Replace: 1 */
  3188. # define PERL_VERSION PATCHLEVEL
  3189. # define PERL_SUBVERSION SUBVERSION
  3190. /* Replace PERL_PATCHLEVEL with PERL_VERSION */
  3191. /* Replace: 0 */
  3192. # endif
  3193. #endif
  3194.  
  3195. #define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
  3196. #define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION))
  3197.  
  3198. /* It is very unlikely that anyone will try to use this with Perl 6
  3199.   (or greater), but who knows.
  3200.  */
  3201. #if PERL_REVISION != 5
  3202. # error ppport.h only works with Perl version 5
  3203. #endif /* PERL_REVISION != 5 */
  3204. #ifndef dTHR
  3205. # define dTHR dNOOP
  3206. #endif
  3207. #ifndef dTHX
  3208. # define dTHX dNOOP
  3209. #endif
  3210.  
  3211. #ifndef dTHXa
  3212. # define dTHXa(x) dNOOP
  3213. #endif
  3214. #ifndef pTHX
  3215. # define pTHX void
  3216. #endif
  3217.  
  3218. #ifndef pTHX_
  3219. # define pTHX_
  3220. #endif
  3221.  
  3222. #ifndef aTHX
  3223. # define aTHX
  3224. #endif
  3225.  
  3226. #ifndef aTHX_
  3227. # define aTHX_
  3228. #endif
  3229.  
  3230. #if (PERL_BCDVERSION < 0x5006000)
  3231. # ifdef USE_THREADS
  3232. # define aTHXR thr
  3233. # define aTHXR_ thr,
  3234. # else
  3235. # define aTHXR
  3236. # define aTHXR_
  3237. # endif
  3238. # define dTHXR dTHR
  3239. #else
  3240. # define aTHXR aTHX
  3241. # define aTHXR_ aTHX_
  3242. # define dTHXR dTHX
  3243. #endif
  3244. #ifndef dTHXoa
  3245. # define dTHXoa(x) dTHXa(x)
  3246. #endif
  3247.  
  3248. #ifdef I_LIMITS
  3249. # include <limits.h>
  3250. #endif
  3251.  
  3252. #ifndef PERL_UCHAR_MIN
  3253. # define PERL_UCHAR_MIN ((unsigned char)0)
  3254. #endif
  3255.  
  3256. #ifndef PERL_UCHAR_MAX
  3257. # ifdef UCHAR_MAX
  3258. # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
  3259. # else
  3260. # ifdef MAXUCHAR
  3261. # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
  3262. # else
  3263. # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
  3264. # endif
  3265. # endif
  3266. #endif
  3267.  
  3268. #ifndef PERL_USHORT_MIN
  3269. # define PERL_USHORT_MIN ((unsigned short)0)
  3270. #endif
  3271.  
  3272. #ifndef PERL_USHORT_MAX
  3273. # ifdef USHORT_MAX
  3274. # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
  3275. # else
  3276. # ifdef MAXUSHORT
  3277. # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
  3278. # else
  3279. # ifdef USHRT_MAX
  3280. # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
  3281. # else
  3282. # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
  3283. # endif
  3284. # endif
  3285. # endif
  3286. #endif
  3287.  
  3288. #ifndef PERL_SHORT_MAX
  3289. # ifdef SHORT_MAX
  3290. # define PERL_SHORT_MAX ((short)SHORT_MAX)
  3291. # else
  3292. # ifdef MAXSHORT /* Often used in <values.h> */
  3293. # define PERL_SHORT_MAX ((short)MAXSHORT)
  3294. # else
  3295. # ifdef SHRT_MAX
  3296. # define PERL_SHORT_MAX ((short)SHRT_MAX)
  3297. # else
  3298. # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
  3299. # endif
  3300. # endif
  3301. # endif
  3302. #endif
  3303.  
  3304. #ifndef PERL_SHORT_MIN
  3305. # ifdef SHORT_MIN
  3306. # define PERL_SHORT_MIN ((short)SHORT_MIN)
  3307. # else
  3308. # ifdef MINSHORT
  3309. # define PERL_SHORT_MIN ((short)MINSHORT)
  3310. # else
  3311. # ifdef SHRT_MIN
  3312. # define PERL_SHORT_MIN ((short)SHRT_MIN)
  3313. # else
  3314. # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
  3315. # endif
  3316. # endif
  3317. # endif
  3318. #endif
  3319.  
  3320. #ifndef PERL_UINT_MAX
  3321. # ifdef UINT_MAX
  3322. # define PERL_UINT_MAX ((unsigned int)UINT_MAX)
  3323. # else
  3324. # ifdef MAXUINT
  3325. # define PERL_UINT_MAX ((unsigned int)MAXUINT)
  3326. # else
  3327. # define PERL_UINT_MAX (~(unsigned int)0)
  3328. # endif
  3329. # endif
  3330. #endif
  3331.  
  3332. #ifndef PERL_UINT_MIN
  3333. # define PERL_UINT_MIN ((unsigned int)0)
  3334. #endif
  3335.  
  3336. #ifndef PERL_INT_MAX
  3337. # ifdef INT_MAX
  3338. # define PERL_INT_MAX ((int)INT_MAX)
  3339. # else
  3340. # ifdef MAXINT /* Often used in <values.h> */
  3341. # define PERL_INT_MAX ((int)MAXINT)
  3342. # else
  3343. # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
  3344. # endif
  3345. # endif
  3346. #endif
  3347.  
  3348. #ifndef PERL_INT_MIN
  3349. # ifdef INT_MIN
  3350. # define PERL_INT_MIN ((int)INT_MIN)
  3351. # else
  3352. # ifdef MININT
  3353. # define PERL_INT_MIN ((int)MININT)
  3354. # else
  3355. # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
  3356. # endif
  3357. # endif
  3358. #endif
  3359.  
  3360. #ifndef PERL_ULONG_MAX
  3361. # ifdef ULONG_MAX
  3362. # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
  3363. # else
  3364. # ifdef MAXULONG
  3365. # define PERL_ULONG_MAX ((unsigned long)MAXULONG)
  3366. # else
  3367. # define PERL_ULONG_MAX (~(unsigned long)0)
  3368. # endif
  3369. # endif
  3370. #endif
  3371.  
  3372. #ifndef PERL_ULONG_MIN
  3373. # define PERL_ULONG_MIN ((unsigned long)0L)
  3374. #endif
  3375.  
  3376. #ifndef PERL_LONG_MAX
  3377. # ifdef LONG_MAX
  3378. # define PERL_LONG_MAX ((long)LONG_MAX)
  3379. # else
  3380. # ifdef MAXLONG
  3381. # define PERL_LONG_MAX ((long)MAXLONG)
  3382. # else
  3383. # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
  3384. # endif
  3385. # endif
  3386. #endif
  3387.  
  3388. #ifndef PERL_LONG_MIN
  3389. # ifdef LONG_MIN
  3390. # define PERL_LONG_MIN ((long)LONG_MIN)
  3391. # else
  3392. # ifdef MINLONG
  3393. # define PERL_LONG_MIN ((long)MINLONG)
  3394. # else
  3395. # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
  3396. # endif
  3397. # endif
  3398. #endif
  3399.  
  3400. #if defined(HAS_QUAD) && (defined(convex) || defined(uts))
  3401. # ifndef PERL_UQUAD_MAX
  3402. # ifdef ULONGLONG_MAX
  3403. # define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX)
  3404. # else
  3405. # ifdef MAXULONGLONG
  3406. # define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG)
  3407. # else
  3408. # define PERL_UQUAD_MAX (~(unsigned long long)0)
  3409. # endif
  3410. # endif
  3411. # endif
  3412.  
  3413. # ifndef PERL_UQUAD_MIN
  3414. # define PERL_UQUAD_MIN ((unsigned long long)0L)
  3415. # endif
  3416.  
  3417. # ifndef PERL_QUAD_MAX
  3418. # ifdef LONGLONG_MAX
  3419. # define PERL_QUAD_MAX ((long long)LONGLONG_MAX)
  3420. # else
  3421. # ifdef MAXLONGLONG
  3422. # define PERL_QUAD_MAX ((long long)MAXLONGLONG)
  3423. # else
  3424. # define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1))
  3425. # endif
  3426. # endif
  3427. # endif
  3428.  
  3429. # ifndef PERL_QUAD_MIN
  3430. # ifdef LONGLONG_MIN
  3431. # define PERL_QUAD_MIN ((long long)LONGLONG_MIN)
  3432. # else
  3433. # ifdef MINLONGLONG
  3434. # define PERL_QUAD_MIN ((long long)MINLONGLONG)
  3435. # else
  3436. # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
  3437. # endif
  3438. # endif
  3439. # endif
  3440. #endif
  3441.  
  3442. /* This is based on code from 5.003 perl.h */
  3443. #ifdef HAS_QUAD
  3444. # ifdef cray
  3445. #ifndef IVTYPE
  3446. # define IVTYPE int
  3447. #endif
  3448.  
  3449. #ifndef IV_MIN
  3450. # define IV_MIN PERL_INT_MIN
  3451. #endif
  3452.  
  3453. #ifndef IV_MAX
  3454. # define IV_MAX PERL_INT_MAX
  3455. #endif
  3456.  
  3457. #ifndef UV_MIN
  3458. # define UV_MIN PERL_UINT_MIN
  3459. #endif
  3460.  
  3461. #ifndef UV_MAX
  3462. # define UV_MAX PERL_UINT_MAX
  3463. #endif
  3464.  
  3465. # ifdef INTSIZE
  3466. #ifndef IVSIZE
  3467. # define IVSIZE INTSIZE
  3468. #endif
  3469.  
  3470. # endif
  3471. # else
  3472. # if defined(convex) || defined(uts)
  3473. #ifndef IVTYPE
  3474. # define IVTYPE long long
  3475. #endif
  3476.  
  3477. #ifndef IV_MIN
  3478. # define IV_MIN PERL_QUAD_MIN
  3479. #endif
  3480.  
  3481. #ifndef IV_MAX
  3482. # define IV_MAX PERL_QUAD_MAX
  3483. #endif
  3484.  
  3485. #ifndef UV_MIN
  3486. # define UV_MIN PERL_UQUAD_MIN
  3487. #endif
  3488.  
  3489. #ifndef UV_MAX
  3490. # define UV_MAX PERL_UQUAD_MAX
  3491. #endif
  3492.  
  3493. # ifdef LONGLONGSIZE
  3494. #ifndef IVSIZE
  3495. # define IVSIZE LONGLONGSIZE
  3496. #endif
  3497.  
  3498. # endif
  3499. # else
  3500. #ifndef IVTYPE
  3501. # define IVTYPE long
  3502. #endif
  3503.  
  3504. #ifndef IV_MIN
  3505. # define IV_MIN PERL_LONG_MIN
  3506. #endif
  3507.  
  3508. #ifndef IV_MAX
  3509. # define IV_MAX PERL_LONG_MAX
  3510. #endif
  3511.  
  3512. #ifndef UV_MIN
  3513. # define UV_MIN PERL_ULONG_MIN
  3514. #endif
  3515.  
  3516. #ifndef UV_MAX
  3517. # define UV_MAX PERL_ULONG_MAX
  3518. #endif
  3519.  
  3520. # ifdef LONGSIZE
  3521. #ifndef IVSIZE
  3522. # define IVSIZE LONGSIZE
  3523. #endif
  3524.  
  3525. # endif
  3526. # endif
  3527. # endif
  3528. #ifndef IVSIZE
  3529. # define IVSIZE 8
  3530. #endif
  3531.  
  3532. #ifndef PERL_QUAD_MIN
  3533. # define PERL_QUAD_MIN IV_MIN
  3534. #endif
  3535.  
  3536. #ifndef PERL_QUAD_MAX
  3537. # define PERL_QUAD_MAX IV_MAX
  3538. #endif
  3539.  
  3540. #ifndef PERL_UQUAD_MIN
  3541. # define PERL_UQUAD_MIN UV_MIN
  3542. #endif
  3543.  
  3544. #ifndef PERL_UQUAD_MAX
  3545. # define PERL_UQUAD_MAX UV_MAX
  3546. #endif
  3547.  
  3548. #else
  3549. #ifndef IVTYPE
  3550. # define IVTYPE long
  3551. #endif
  3552.  
  3553. #ifndef IV_MIN
  3554. # define IV_MIN PERL_LONG_MIN
  3555. #endif
  3556.  
  3557. #ifndef IV_MAX
  3558. # define IV_MAX PERL_LONG_MAX
  3559. #endif
  3560.  
  3561. #ifndef UV_MIN
  3562. # define UV_MIN PERL_ULONG_MIN
  3563. #endif
  3564.  
  3565. #ifndef UV_MAX
  3566. # define UV_MAX PERL_ULONG_MAX
  3567. #endif
  3568.  
  3569. #endif
  3570.  
  3571. #ifndef IVSIZE
  3572. # ifdef LONGSIZE
  3573. # define IVSIZE LONGSIZE
  3574. # else
  3575. # define IVSIZE 4 /* A bold guess, but the best we can make. */
  3576. # endif
  3577. #endif
  3578. #ifndef UVTYPE
  3579. # define UVTYPE unsigned IVTYPE
  3580. #endif
  3581.  
  3582. #ifndef UVSIZE
  3583. # define UVSIZE IVSIZE
  3584. #endif
  3585. #ifndef sv_setuv
  3586. # define sv_setuv(sv, uv) \
  3587.   STMT_START { \
  3588.   UV TeMpUv = uv; \
  3589.   if (TeMpUv <= IV_MAX) \
  3590.   sv_setiv(sv, TeMpUv); \
  3591.   else \
  3592.   sv_setnv(sv, (double)TeMpUv); \
  3593.   } STMT_END
  3594. #endif
  3595. #ifndef newSVuv
  3596. # define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
  3597. #endif
  3598. #ifndef sv_2uv
  3599. # define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
  3600. #endif
  3601.  
  3602. #ifndef SvUVX
  3603. # define SvUVX(sv) ((UV)SvIVX(sv))
  3604. #endif
  3605.  
  3606. #ifndef SvUVXx
  3607. # define SvUVXx(sv) SvUVX(sv)
  3608. #endif
  3609.  
  3610. #ifndef SvUV
  3611. # define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
  3612. #endif
  3613.  
  3614. #ifndef SvUVx
  3615. # define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
  3616. #endif
  3617.  
  3618. /* Hint: sv_uv
  3619.  * Always use the SvUVx() macro instead of sv_uv().
  3620.  */
  3621. #ifndef sv_uv
  3622. # define sv_uv(sv) SvUVx(sv)
  3623. #endif
  3624.  
  3625. #if !defined(SvUOK) && defined(SvIOK_UV)
  3626. # define SvUOK(sv) SvIOK_UV(sv)
  3627. #endif
  3628. #ifndef XST_mUV
  3629. # define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) )
  3630. #endif
  3631.  
  3632. #ifndef XSRETURN_UV
  3633. # define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END
  3634. #endif
  3635. #ifndef PUSHu
  3636. # define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
  3637. #endif
  3638.  
  3639. #ifndef XPUSHu
  3640. # define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
  3641. #endif
  3642.  
  3643. #ifdef HAS_MEMCMP
  3644. #ifndef memNE
  3645. # define memNE(s1,s2,l) (memcmp(s1,s2,l))
  3646. #endif
  3647.  
  3648. #ifndef memEQ
  3649. # define memEQ(s1,s2,l) (!memcmp(s1,s2,l))
  3650. #endif
  3651.  
  3652. #else
  3653. #ifndef memNE
  3654. # define memNE(s1,s2,l) (bcmp(s1,s2,l))
  3655. #endif
  3656.  
  3657. #ifndef memEQ
  3658. # define memEQ(s1,s2,l) (!bcmp(s1,s2,l))
  3659. #endif
  3660.  
  3661. #endif
  3662. #ifndef MoveD
  3663. # define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t))
  3664. #endif
  3665.  
  3666. #ifndef CopyD
  3667. # define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
  3668. #endif
  3669.  
  3670. #ifdef HAS_MEMSET
  3671. #ifndef ZeroD
  3672. # define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t))
  3673. #endif
  3674.  
  3675. #else
  3676. #ifndef ZeroD
  3677. # define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d)
  3678. #endif
  3679.  
  3680. #endif
  3681. #ifndef PoisonWith
  3682. # define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t))
  3683. #endif
  3684.  
  3685. #ifndef PoisonNew
  3686. # define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB)
  3687. #endif
  3688.  
  3689. #ifndef PoisonFree
  3690. # define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF)
  3691. #endif
  3692.  
  3693. #ifndef Poison
  3694. # define Poison(d,n,t) PoisonFree(d,n,t)
  3695. #endif
  3696. #ifndef Newx
  3697. # define Newx(v,n,t) New(0,v,n,t)
  3698. #endif
  3699.  
  3700. #ifndef Newxc
  3701. # define Newxc(v,n,t,c) Newc(0,v,n,t,c)
  3702. #endif
  3703.  
  3704. #ifndef Newxz
  3705. # define Newxz(v,n,t) Newz(0,v,n,t)
  3706. #endif
  3707.  
  3708. #ifndef PERL_UNUSED_DECL
  3709. # ifdef HASATTRIBUTE
  3710. # if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER)
  3711. # define PERL_UNUSED_DECL
  3712. # else
  3713. # define PERL_UNUSED_DECL __attribute__((unused))
  3714. # endif
  3715. # else
  3716. # define PERL_UNUSED_DECL
  3717. # endif
  3718. #endif
  3719.  
  3720. #ifndef PERL_UNUSED_ARG
  3721. # if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
  3722. # include <note.h>
  3723. # define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
  3724. # else
  3725. # define PERL_UNUSED_ARG(x) ((void)x)
  3726. # endif
  3727. #endif
  3728.  
  3729. #ifndef PERL_UNUSED_VAR
  3730. # define PERL_UNUSED_VAR(x) ((void)x)
  3731. #endif
  3732.  
  3733. #ifndef PERL_UNUSED_CONTEXT
  3734. # ifdef USE_ITHREADS
  3735. # define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
  3736. # else
  3737. # define PERL_UNUSED_CONTEXT
  3738. # endif
  3739. #endif
  3740. #ifndef NOOP
  3741. # define NOOP /*EMPTY*/(void)0
  3742. #endif
  3743.  
  3744. #ifndef dNOOP
  3745. # define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL
  3746. #endif
  3747.  
  3748. #ifndef NVTYPE
  3749. # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
  3750. # define NVTYPE long double
  3751. # else
  3752. # define NVTYPE double
  3753. # endif
  3754. typedef NVTYPE NV;
  3755. #endif
  3756.  
  3757. #ifndef INT2PTR
  3758. # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
  3759. # define PTRV UV
  3760. # define INT2PTR(any,d) (any)(d)
  3761. # else
  3762. # if PTRSIZE == LONGSIZE
  3763. # define PTRV unsigned long
  3764. # else
  3765. # define PTRV unsigned
  3766. # endif
  3767. # define INT2PTR(any,d) (any)(PTRV)(d)
  3768. # endif
  3769. #endif
  3770.  
  3771. #ifndef PTR2ul
  3772. # if PTRSIZE == LONGSIZE
  3773. # define PTR2ul(p) (unsigned long)(p)
  3774. # else
  3775. # define PTR2ul(p) INT2PTR(unsigned long,p)
  3776. # endif
  3777. #endif
  3778. #ifndef PTR2nat
  3779. # define PTR2nat(p) (PTRV)(p)
  3780. #endif
  3781.  
  3782. #ifndef NUM2PTR
  3783. # define NUM2PTR(any,d) (any)PTR2nat(d)
  3784. #endif
  3785.  
  3786. #ifndef PTR2IV
  3787. # define PTR2IV(p) INT2PTR(IV,p)
  3788. #endif
  3789.  
  3790. #ifndef PTR2UV
  3791. # define PTR2UV(p) INT2PTR(UV,p)
  3792. #endif
  3793.  
  3794. #ifndef PTR2NV
  3795. # define PTR2NV(p) NUM2PTR(NV,p)
  3796. #endif
  3797.  
  3798. #undef START_EXTERN_C
  3799. #undef END_EXTERN_C
  3800. #undef EXTERN_C
  3801. #ifdef __cplusplus
  3802. # define START_EXTERN_C extern "C" {
  3803. # define END_EXTERN_C }
  3804. # define EXTERN_C extern "C"
  3805. #else
  3806. # define START_EXTERN_C
  3807. # define END_EXTERN_C
  3808. # define EXTERN_C extern
  3809. #endif
  3810.  
  3811. #if defined(PERL_GCC_PEDANTIC)
  3812. # ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
  3813. # define PERL_GCC_BRACE_GROUPS_FORBIDDEN
  3814. # endif
  3815. #endif
  3816.  
  3817. #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
  3818. # ifndef PERL_USE_GCC_BRACE_GROUPS
  3819. # define PERL_USE_GCC_BRACE_GROUPS
  3820. # endif
  3821. #endif
  3822.  
  3823. #undef STMT_START
  3824. #undef STMT_END
  3825. #ifdef PERL_USE_GCC_BRACE_GROUPS
  3826. # define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */
  3827. # define STMT_END )
  3828. #else
  3829. # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
  3830. # define STMT_START if (1)
  3831. # define STMT_END else (void)0
  3832. # else
  3833. # define STMT_START do
  3834. # define STMT_END while (0)
  3835. # endif
  3836. #endif
  3837. #ifndef boolSV
  3838. # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no)
  3839. #endif
  3840.  
  3841. /* DEFSV appears first in 5.004_56 */
  3842. #ifndef DEFSV
  3843. # define DEFSV GvSV(PL_defgv)
  3844. #endif
  3845.  
  3846. #ifndef SAVE_DEFSV
  3847. # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv))
  3848. #endif
  3849.  
  3850. #ifndef DEFSV_set
  3851. # define DEFSV_set(sv) (DEFSV = (sv))
  3852. #endif
  3853.  
  3854. /* Older perls (<=5.003) lack AvFILLp */
  3855. #ifndef AvFILLp
  3856. # define AvFILLp AvFILL
  3857. #endif
  3858. #ifndef ERRSV
  3859. # define ERRSV get_sv("@",FALSE)
  3860. #endif
  3861.  
  3862. /* Hint: gv_stashpvn
  3863.  * This function's backport doesn't support the length parameter, but
  3864.  * rather ignores it. Portability can only be ensured if the length
  3865.  * parameter is used for speed reasons, but the length can always be
  3866.  * correctly computed from the string argument.
  3867.  */
  3868. #ifndef gv_stashpvn
  3869. # define gv_stashpvn(str,len,create) gv_stashpv(str,create)
  3870. #endif
  3871.  
  3872. /* Replace: 1 */
  3873. #ifndef get_cv
  3874. # define get_cv perl_get_cv
  3875. #endif
  3876.  
  3877. #ifndef get_sv
  3878. # define get_sv perl_get_sv
  3879. #endif
  3880.  
  3881. #ifndef get_av
  3882. # define get_av perl_get_av
  3883. #endif
  3884.  
  3885. #ifndef get_hv
  3886. # define get_hv perl_get_hv
  3887. #endif
  3888.  
  3889. /* Replace: 0 */
  3890. #ifndef dUNDERBAR
  3891. # define dUNDERBAR dNOOP
  3892. #endif
  3893.  
  3894. #ifndef UNDERBAR
  3895. # define UNDERBAR DEFSV
  3896. #endif
  3897. #ifndef dAX
  3898. # define dAX I32 ax = MARK - PL_stack_base + 1
  3899. #endif
  3900.  
  3901. #ifndef dITEMS
  3902. # define dITEMS I32 items = SP - MARK
  3903. #endif
  3904. #ifndef dXSTARG
  3905. # define dXSTARG SV * targ = sv_newmortal()
  3906. #endif
  3907. #ifndef dAXMARK
  3908. # define dAXMARK I32 ax = POPMARK; \
  3909.   register SV ** const mark = PL_stack_base + ax++
  3910. #endif
  3911. #ifndef XSprePUSH
  3912. # define XSprePUSH (sp = PL_stack_base + ax - 1)
  3913. #endif
  3914.  
  3915. #if (PERL_BCDVERSION < 0x5005000)
  3916. # undef XSRETURN
  3917. # define XSRETURN(off) \
  3918.   STMT_START { \
  3919.   PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
  3920.   return; \
  3921.   } STMT_END
  3922. #endif
  3923. #ifndef XSPROTO
  3924. # define XSPROTO(name) void name(pTHX_ CV* cv)
  3925. #endif
  3926.  
  3927. #ifndef SVfARG
  3928. # define SVfARG(p) ((void*)(p))
  3929. #endif
  3930. #ifndef PERL_ABS
  3931. # define PERL_ABS(x) ((x) < 0 ? -(x) : (x))
  3932. #endif
  3933. #ifndef dVAR
  3934. # define dVAR dNOOP
  3935. #endif
  3936. #ifndef SVf
  3937. # define SVf "_"
  3938. #endif
  3939. #ifndef UTF8_MAXBYTES
  3940. # define UTF8_MAXBYTES UTF8_MAXLEN
  3941. #endif
  3942. #ifndef CPERLscope
  3943. # define CPERLscope(x) x
  3944. #endif
  3945. #ifndef PERL_HASH
  3946. # define PERL_HASH(hash,str,len) \
  3947.   STMT_START { \
  3948. const char *s_PeRlHaSh = str; \
  3949. I32 i_PeRlHaSh = len; \
  3950. U32 hash_PeRlHaSh = 0; \
  3951. while (i_PeRlHaSh--) \
  3952. hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \
  3953. (hash) = hash_PeRlHaSh; \
  3954.   } STMT_END
  3955. #endif
  3956.  
  3957. #ifndef PERLIO_FUNCS_DECL
  3958. # ifdef PERLIO_FUNCS_CONST
  3959. # define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
  3960. # define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
  3961. # else
  3962. # define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
  3963. # define PERLIO_FUNCS_CAST(funcs) (funcs)
  3964. # endif
  3965. #endif
  3966.  
  3967. /* provide these typedefs for older perls */
  3968. #if (PERL_BCDVERSION < 0x5009003)
  3969.  
  3970. # ifdef ARGSproto
  3971. typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto);
  3972. # else
  3973. typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX);
  3974. # endif
  3975.  
  3976. typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
  3977.  
  3978. #endif
  3979. #ifndef isPSXSPC
  3980. # define isPSXSPC(c) (isSPACE(c) || (c) == '\v')
  3981. #endif
  3982.  
  3983. #ifndef isBLANK
  3984. # define isBLANK(c) ((c) == ' ' || (c) == '\t')
  3985. #endif
  3986.  
  3987. #ifdef EBCDIC
  3988. #ifndef isALNUMC
  3989. # define isALNUMC(c) isalnum(c)
  3990. #endif
  3991.  
  3992. #ifndef isASCII
  3993. # define isASCII(c) isascii(c)
  3994. #endif
  3995.  
  3996. #ifndef isCNTRL
  3997. # define isCNTRL(c) iscntrl(c)
  3998. #endif
  3999.  
  4000. #ifndef isGRAPH
  4001. # define isGRAPH(c) isgraph(c)
  4002. #endif
  4003.  
  4004. #ifndef isPRINT
  4005. # define isPRINT(c) isprint(c)
  4006. #endif
  4007.  
  4008. #ifndef isPUNCT
  4009. # define isPUNCT(c) ispunct(c)
  4010. #endif
  4011.  
  4012. #ifndef isXDIGIT
  4013. # define isXDIGIT(c) isxdigit(c)
  4014. #endif
  4015.  
  4016. #else
  4017. # if (PERL_BCDVERSION < 0x5010000)
  4018. /* Hint: isPRINT
  4019.  * The implementation in older perl versions includes all of the
  4020.  * isSPACE() characters, which is wrong. The version provided by
  4021.  * Devel::PPPort always overrides a present buggy version.
  4022.  */
  4023. # undef isPRINT
  4024. # endif
  4025. #ifndef isALNUMC
  4026. # define isALNUMC(c) (isALPHA(c) || isDIGIT(c))
  4027. #endif
  4028.  
  4029. #ifndef isASCII
  4030. # define isASCII(c) ((c) <= 127)
  4031. #endif
  4032.  
  4033. #ifndef isCNTRL
  4034. # define isCNTRL(c) ((c) < ' ' || (c) == 127)
  4035. #endif
  4036.  
  4037. #ifndef isGRAPH
  4038. # define isGRAPH(c) (isALNUM(c) || isPUNCT(c))
  4039. #endif
  4040.  
  4041. #ifndef isPRINT
  4042. # define isPRINT(c) (((c) >= 32 && (c) < 127))
  4043. #endif
  4044.  
  4045. #ifndef isPUNCT
  4046. # define isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126))
  4047. #endif
  4048.  
  4049. #ifndef isXDIGIT
  4050. # define isXDIGIT(c) (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
  4051. #endif
  4052.  
  4053. #endif
  4054.  
  4055. #ifndef PERL_SIGNALS_UNSAFE_FLAG
  4056.  
  4057. #define PERL_SIGNALS_UNSAFE_FLAG 0x0001
  4058.  
  4059. #if (PERL_BCDVERSION < 0x5008000)
  4060. # define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG
  4061. #else
  4062. # define D_PPP_PERL_SIGNALS_INIT 0
  4063. #endif
  4064.  
  4065. #if defined(NEED_PL_signals)
  4066. static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
  4067. #elif defined(NEED_PL_signals_GLOBAL)
  4068. U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
  4069. #else
  4070. extern U32 DPPP_(my_PL_signals);
  4071. #endif
  4072. #define PL_signals DPPP_(my_PL_signals)
  4073.  
  4074. #endif
  4075.  
  4076. /* Hint: PL_ppaddr
  4077.  * Calling an op via PL_ppaddr requires passing a context argument
  4078.  * for threaded builds. Since the context argument is different for
  4079.  * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will
  4080.  * automatically be defined as the correct argument.
  4081.  */
  4082.  
  4083. #if (PERL_BCDVERSION <= 0x5005005)
  4084. /* Replace: 1 */
  4085. # define PL_ppaddr ppaddr
  4086. # define PL_no_modify no_modify
  4087. /* Replace: 0 */
  4088. #endif
  4089.  
  4090. #if (PERL_BCDVERSION <= 0x5004005)
  4091. /* Replace: 1 */
  4092. # define PL_DBsignal DBsignal
  4093. # define PL_DBsingle DBsingle
  4094. # define PL_DBsub DBsub
  4095. # define PL_DBtrace DBtrace
  4096. # define PL_Sv Sv
  4097. # define PL_bufend bufend
  4098. # define PL_bufptr bufptr
  4099. # define PL_compiling compiling
  4100. # define PL_copline copline
  4101. # define PL_curcop curcop
  4102. # define PL_curstash curstash
  4103. # define PL_debstash debstash
  4104. # define PL_defgv defgv
  4105. # define PL_diehook diehook
  4106. # define PL_dirty dirty
  4107. # define PL_dowarn dowarn
  4108. # define PL_errgv errgv
  4109. # define PL_error_count error_count
  4110. # define PL_expect expect
  4111. # define PL_hexdigit hexdigit
  4112. # define PL_hints hints
  4113. # define PL_in_my in_my
  4114. # define PL_laststatval laststatval
  4115. # define PL_lex_state lex_state
  4116. # define PL_lex_stuff lex_stuff
  4117. # define PL_linestr linestr
  4118. # define PL_na na
  4119. # define PL_perl_destruct_level perl_destruct_level
  4120. # define PL_perldb perldb
  4121. # define PL_rsfp_filters rsfp_filters
  4122. # define PL_rsfp rsfp
  4123. # define PL_stack_base stack_base
  4124. # define PL_stack_sp stack_sp
  4125. # define PL_statcache statcache
  4126. # define PL_stdingv stdingv
  4127. # define PL_sv_arenaroot sv_arenaroot
  4128. # define PL_sv_no sv_no
  4129. # define PL_sv_undef sv_undef
  4130. # define PL_sv_yes sv_yes
  4131. # define PL_tainted tainted
  4132. # define PL_tainting tainting
  4133. # define PL_tokenbuf tokenbuf
  4134. /* Replace: 0 */
  4135. #endif
  4136.  
  4137. /* Warning: PL_parser
  4138.  * For perl versions earlier than 5.9.5, this is an always
  4139.  * non-NULL dummy. Also, it cannot be dereferenced. Don't
  4140.  * use it if you can avoid is and unless you absolutely know
  4141.  * what you're doing.
  4142.  * If you always check that PL_parser is non-NULL, you can
  4143.  * define DPPP_PL_parser_NO_DUMMY to avoid the creation of
  4144.  * a dummy parser structure.
  4145.  */
  4146.  
  4147. #if (PERL_BCDVERSION >= 0x5009005)
  4148. # ifdef DPPP_PL_parser_NO_DUMMY
  4149. # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
  4150.   (croak("panic: PL_parser == NULL in %s:%d", \
  4151.   __FILE__, __LINE__), (yy_parser *) NULL))->var)
  4152. # else
  4153. # ifdef DPPP_PL_parser_NO_DUMMY_WARNING
  4154. # define D_PPP_parser_dummy_warning(var)
  4155. # else
  4156. # define D_PPP_parser_dummy_warning(var) \
  4157.   warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__),
  4158. # endif
  4159. # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
  4160.   (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var)
  4161. #if defined(NEED_PL_parser)
  4162. static yy_parser DPPP_(dummy_PL_parser);
  4163. #elif defined(NEED_PL_parser_GLOBAL)
  4164. yy_parser DPPP_(dummy_PL_parser);
  4165. #else
  4166. extern yy_parser DPPP_(dummy_PL_parser);
  4167. #endif
  4168.  
  4169. # endif
  4170.  
  4171. /* 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 */
  4172. /* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf
  4173.  * Do not use this variable unless you know exactly what you're
  4174.  * doint. It is internal to the perl parser and may change or even
  4175.  * be removed in the future. As of perl 5.9.5, you have to check
  4176.  * for (PL_parser != NULL) for this variable to have any effect.
  4177.  * An always non-NULL PL_parser dummy is provided for earlier
  4178.  * perl versions.
  4179.  * If PL_parser is NULL when you try to access this variable, a
  4180.  * dummy is being accessed instead and a warning is issued unless
  4181.  * you define DPPP_PL_parser_NO_DUMMY_WARNING.
  4182.  * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access
  4183.  * this variable will croak with a panic message.
  4184.  */
  4185.  
  4186. # define PL_expect D_PPP_my_PL_parser_var(expect)
  4187. # define PL_copline D_PPP_my_PL_parser_var(copline)
  4188. # define PL_rsfp D_PPP_my_PL_parser_var(rsfp)
  4189. # define PL_rsfp_filters D_PPP_my_PL_parser_var(rsfp_filters)
  4190. # define PL_linestr D_PPP_my_PL_parser_var(linestr)
  4191. # define PL_bufptr D_PPP_my_PL_parser_var(bufptr)
  4192. # define PL_bufend D_PPP_my_PL_parser_var(bufend)
  4193. # define PL_lex_state D_PPP_my_PL_parser_var(lex_state)
  4194. # define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff)
  4195. # define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf)
  4196. # define PL_in_my D_PPP_my_PL_parser_var(in_my)
  4197. # define PL_in_my_stash D_PPP_my_PL_parser_var(in_my_stash)
  4198. # define PL_error_count D_PPP_my_PL_parser_var(error_count)
  4199.  
  4200.  
  4201. #else
  4202.  
  4203. /* ensure that PL_parser != NULL and cannot be dereferenced */
  4204. # define PL_parser ((void *) 1)
  4205.  
  4206. #endif
  4207. #ifndef mPUSHs
  4208. # define mPUSHs(s) PUSHs(sv_2mortal(s))
  4209. #endif
  4210.  
  4211. #ifndef PUSHmortal
  4212. # define PUSHmortal PUSHs(sv_newmortal())
  4213. #endif
  4214.  
  4215. #ifndef mPUSHp
  4216. # define mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l))
  4217. #endif
  4218.  
  4219. #ifndef mPUSHn
  4220. # define mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n))
  4221. #endif
  4222.  
  4223. #ifndef mPUSHi
  4224. # define mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i))
  4225. #endif
  4226.  
  4227. #ifndef mPUSHu
  4228. # define mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u))
  4229. #endif
  4230. #ifndef mXPUSHs
  4231. # define mXPUSHs(s) XPUSHs(sv_2mortal(s))
  4232. #endif
  4233.  
  4234. #ifndef XPUSHmortal
  4235. # define XPUSHmortal XPUSHs(sv_newmortal())
  4236. #endif
  4237.  
  4238. #ifndef mXPUSHp
  4239. # define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END
  4240. #endif
  4241.  
  4242. #ifndef mXPUSHn
  4243. # define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END
  4244. #endif
  4245.  
  4246. #ifndef mXPUSHi
  4247. # define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END
  4248. #endif
  4249.  
  4250. #ifndef mXPUSHu
  4251. # define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END
  4252. #endif
  4253.  
  4254. /* Replace: 1 */
  4255. #ifndef call_sv
  4256. # define call_sv perl_call_sv
  4257. #endif
  4258.  
  4259. #ifndef call_pv
  4260. # define call_pv perl_call_pv
  4261. #endif
  4262.  
  4263. #ifndef call_argv
  4264. # define call_argv perl_call_argv
  4265. #endif
  4266.  
  4267. #ifndef call_method
  4268. # define call_method perl_call_method
  4269. #endif
  4270. #ifndef eval_sv
  4271. # define eval_sv perl_eval_sv
  4272. #endif
  4273.  
  4274. /* Replace: 0 */
  4275. #ifndef PERL_LOADMOD_DENY
  4276. # define PERL_LOADMOD_DENY 0x1
  4277. #endif
  4278.  
  4279. #ifndef PERL_LOADMOD_NOIMPORT
  4280. # define PERL_LOADMOD_NOIMPORT 0x2
  4281. #endif
  4282.  
  4283. #ifndef PERL_LOADMOD_IMPORT_OPS
  4284. # define PERL_LOADMOD_IMPORT_OPS 0x4
  4285. #endif
  4286.  
  4287. #ifndef G_METHOD
  4288. # define G_METHOD 64
  4289. # ifdef call_sv
  4290. # undef call_sv
  4291. # endif
  4292. # if (PERL_BCDVERSION < 0x5006000)
  4293. # define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \
  4294. (flags) & ~G_METHOD) : perl_call_sv(sv, flags))
  4295. # else
  4296. # define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \
  4297. (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags))
  4298. # endif
  4299. #endif
  4300.  
  4301. /* Replace perl_eval_pv with eval_pv */
  4302.  
  4303. #ifndef eval_pv
  4304. #if defined(NEED_eval_pv)
  4305. static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
  4306. static
  4307. #else
  4308. extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
  4309. #endif
  4310.  
  4311. #ifdef eval_pv
  4312. # undef eval_pv
  4313. #endif
  4314. #define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b)
  4315. #define Perl_eval_pv DPPP_(my_eval_pv)
  4316.  
  4317. #if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL)
  4318.  
  4319. SV*
  4320. DPPP_(my_eval_pv)(char *p, I32 croak_on_error)
  4321. {
  4322. dSP;
  4323. SV* sv = newSVpv(p, 0);
  4324.  
  4325. PUSHMARK(sp);
  4326. eval_sv(sv, G_SCALAR);
  4327. SvREFCNT_dec(sv);
  4328.  
  4329. SPAGAIN;
  4330. sv = POPs;
  4331. PUTBACK;
  4332.  
  4333. if (croak_on_error && SvTRUE(GvSV(errgv)))
  4334. croak(SvPVx(GvSV(errgv), na));
  4335.  
  4336. return sv;
  4337. }
  4338.  
  4339. #endif
  4340. #endif
  4341.  
  4342. #ifndef vload_module
  4343. #if defined(NEED_vload_module)
  4344. static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
  4345. static
  4346. #else
  4347. extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
  4348. #endif
  4349.  
  4350. #ifdef vload_module
  4351. # undef vload_module
  4352. #endif
  4353. #define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d)
  4354. #define Perl_vload_module DPPP_(my_vload_module)
  4355.  
  4356. #if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL)
  4357.  
  4358. void
  4359. DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args)
  4360. {
  4361. dTHR;
  4362. dVAR;
  4363. OP *veop, *imop;
  4364.  
  4365. OP * const modname = newSVOP(OP_CONST, 0, name);
  4366. /* 5.005 has a somewhat hacky force_normal that doesn't croak on
  4367.   SvREADONLY() if PL_compling is true. Current perls take care in
  4368.   ck_require() to correctly turn off SvREADONLY before calling
  4369.   force_normal_flags(). This seems a better fix than fudging PL_compling
  4370.   */
  4371. SvREADONLY_off(((SVOP*)modname)->op_sv);
  4372. modname->op_private |= OPpCONST_BARE;
  4373. if (ver) {
  4374. veop = newSVOP(OP_CONST, 0, ver);
  4375. }
  4376. else
  4377. veop = NULL;
  4378. if (flags & PERL_LOADMOD_NOIMPORT) {
  4379. imop = sawparens(newNULLLIST());
  4380. }
  4381. else if (flags & PERL_LOADMOD_IMPORT_OPS) {
  4382. imop = va_arg(*args, OP*);
  4383. }
  4384. else {
  4385. SV *sv;
  4386. imop = NULL;
  4387. sv = va_arg(*args, SV*);
  4388. while (sv) {
  4389. imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
  4390. sv = va_arg(*args, SV*);
  4391. }
  4392. }
  4393. {
  4394. const line_t ocopline = PL_copline;
  4395. COP * const ocurcop = PL_curcop;
  4396. const int oexpect = PL_expect;
  4397.  
  4398. #if (PERL_BCDVERSION >= 0x5004000)
  4399. utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
  4400. veop, modname, imop);
  4401. #else
  4402. utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(),
  4403. modname, imop);
  4404. #endif
  4405. PL_expect = oexpect;
  4406. PL_copline = ocopline;
  4407. PL_curcop = ocurcop;
  4408. }
  4409. }
  4410.  
  4411. #endif
  4412. #endif
  4413.  
  4414. #ifndef load_module
  4415. #if defined(NEED_load_module)
  4416. static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
  4417. static
  4418. #else
  4419. extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
  4420. #endif
  4421.  
  4422. #ifdef load_module
  4423. # undef load_module
  4424. #endif
  4425. #define load_module DPPP_(my_load_module)
  4426. #define Perl_load_module DPPP_(my_load_module)
  4427.  
  4428. #if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL)
  4429.  
  4430. void
  4431. DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...)
  4432. {
  4433. va_list args;
  4434. va_start(args, ver);
  4435. vload_module(flags, name, ver, &args);
  4436. va_end(args);
  4437. }
  4438.  
  4439. #endif
  4440. #endif
  4441. #ifndef newRV_inc
  4442. # define newRV_inc(sv) newRV(sv) /* Replace */
  4443. #endif
  4444.  
  4445. #ifndef newRV_noinc
  4446. #if defined(NEED_newRV_noinc)
  4447. static SV * DPPP_(my_newRV_noinc)(SV *sv);
  4448. static
  4449. #else
  4450. extern SV * DPPP_(my_newRV_noinc)(SV *sv);
  4451. #endif
  4452.  
  4453. #ifdef newRV_noinc
  4454. # undef newRV_noinc
  4455. #endif
  4456. #define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a)
  4457. #define Perl_newRV_noinc DPPP_(my_newRV_noinc)
  4458.  
  4459. #if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL)
  4460. SV *
  4461. DPPP_(my_newRV_noinc)(SV *sv)
  4462. {
  4463. SV *rv = (SV *)newRV(sv);
  4464. SvREFCNT_dec(sv);
  4465. return rv;
  4466. }
  4467. #endif
  4468. #endif
  4469.  
  4470. /* Hint: newCONSTSUB
  4471.  * Returns a CV* as of perl-5.7.1. This return value is not supported
  4472.  * by Devel::PPPort.
  4473.  */
  4474.  
  4475. /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
  4476. #if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005)
  4477. #if defined(NEED_newCONSTSUB)
  4478. static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
  4479. static
  4480. #else
  4481. extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
  4482. #endif
  4483.  
  4484. #ifdef newCONSTSUB
  4485. # undef newCONSTSUB
  4486. #endif
  4487. #define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c)
  4488. #define Perl_newCONSTSUB DPPP_(my_newCONSTSUB)
  4489.  
  4490. #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
  4491.  
  4492. /* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */
  4493. /* (There's no PL_parser in perl < 5.005, so this is completely safe) */
  4494. #define D_PPP_PL_copline PL_copline
  4495.  
  4496. void
  4497. DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv)
  4498. {
  4499. U32 oldhints = PL_hints;
  4500. HV *old_cop_stash = PL_curcop->cop_stash;
  4501. HV *old_curstash = PL_curstash;
  4502. line_t oldline = PL_curcop->cop_line;
  4503. PL_curcop->cop_line = D_PPP_PL_copline;
  4504.  
  4505. PL_hints &= ~HINT_BLOCK_SCOPE;
  4506. if (stash)
  4507. PL_curstash = PL_curcop->cop_stash = stash;
  4508.  
  4509. newSUB(
  4510.  
  4511. #if (PERL_BCDVERSION < 0x5003022)
  4512. start_subparse(),
  4513. #elif (PERL_BCDVERSION == 0x5003022)
  4514. start_subparse(0),
  4515. #else /* 5.003_23 onwards */
  4516. start_subparse(FALSE, 0),
  4517. #endif
  4518.  
  4519. newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)),
  4520. newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */
  4521. newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
  4522. );
  4523.  
  4524. PL_hints = oldhints;
  4525. PL_curcop->cop_stash = old_cop_stash;
  4526. PL_curstash = old_curstash;
  4527. PL_curcop->cop_line = oldline;
  4528. }
  4529. #endif
  4530. #endif
  4531.  
  4532. /*
  4533.  * Boilerplate macros for initializing and accessing interpreter-local
  4534.  * data from C. All statics in extensions should be reworked to use
  4535.  * this, if you want to make the extension thread-safe. See ext/re/re.xs
  4536.  * for an example of the use of these macros.
  4537.  *
  4538.  * Code that uses these macros is responsible for the following:
  4539.  * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
  4540.  * 2. Declare a typedef named my_cxt_t that is a structure that contains
  4541.  * all the data that needs to be interpreter-local.
  4542.  * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
  4543.  * 4. Use the MY_CXT_INIT macro such that it is called exactly once
  4544.  * (typically put in the BOOT: section).
  4545.  * 5. Use the members of the my_cxt_t structure everywhere as
  4546.  * MY_CXT.member.
  4547.  * 6. Use the dMY_CXT macro (a declaration) in all the functions that
  4548.  * access MY_CXT.
  4549.  */
  4550.  
  4551. #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \
  4552.   defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT)
  4553.  
  4554. #ifndef START_MY_CXT
  4555.  
  4556. /* This must appear in all extensions that define a my_cxt_t structure,
  4557.  * right after the definition (i.e. at file scope). The non-threads
  4558.  * case below uses it to declare the data as static. */
  4559. #define START_MY_CXT
  4560.  
  4561. #if (PERL_BCDVERSION < 0x5004068)
  4562. /* Fetches the SV that keeps the per-interpreter data. */
  4563. #define dMY_CXT_SV \
  4564. SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
  4565. #else /* >= perl5.004_68 */
  4566. #define dMY_CXT_SV \
  4567. SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \
  4568. sizeof(MY_CXT_KEY)-1, TRUE)
  4569. #endif /* < perl5.004_68 */
  4570.  
  4571. /* This declaration should be used within all functions that use the
  4572.  * interpreter-local data. */
  4573. #define dMY_CXT \
  4574. dMY_CXT_SV; \
  4575. my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
  4576.  
  4577. /* Creates and zeroes the per-interpreter data.
  4578.  * (We allocate my_cxtp in a Perl SV so that it will be released when
  4579.  * the interpreter goes away.) */
  4580. #define MY_CXT_INIT \
  4581. dMY_CXT_SV; \
  4582. /* newSV() allocates one more than needed */ \
  4583. my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
  4584. Zero(my_cxtp, 1, my_cxt_t); \
  4585. sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
  4586.  
  4587. /* This macro must be used to access members of the my_cxt_t structure.
  4588.  * e.g. MYCXT.some_data */
  4589. #define MY_CXT (*my_cxtp)
  4590.  
  4591. /* Judicious use of these macros can reduce the number of times dMY_CXT
  4592.  * is used. Use is similar to pTHX, aTHX etc. */
  4593. #define pMY_CXT my_cxt_t *my_cxtp
  4594. #define pMY_CXT_ pMY_CXT,
  4595. #define _pMY_CXT ,pMY_CXT
  4596. #define aMY_CXT my_cxtp
  4597. #define aMY_CXT_ aMY_CXT,
  4598. #define _aMY_CXT ,aMY_CXT
  4599.  
  4600. #endif /* START_MY_CXT */
  4601.  
  4602. #ifndef MY_CXT_CLONE
  4603. /* Clones the per-interpreter data. */
  4604. #define MY_CXT_CLONE \
  4605. dMY_CXT_SV; \
  4606. my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
  4607. Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
  4608. sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
  4609. #endif
  4610.  
  4611. #else /* single interpreter */
  4612.  
  4613. #ifndef START_MY_CXT
  4614.  
  4615. #define START_MY_CXT static my_cxt_t my_cxt;
  4616. #define dMY_CXT_SV dNOOP
  4617. #define dMY_CXT dNOOP
  4618. #define MY_CXT_INIT NOOP
  4619. #define MY_CXT my_cxt
  4620.  
  4621. #define pMY_CXT void
  4622. #define pMY_CXT_
  4623. #define _pMY_CXT
  4624. #define aMY_CXT
  4625. #define aMY_CXT_
  4626. #define _aMY_CXT
  4627.  
  4628. #endif /* START_MY_CXT */
  4629.  
  4630. #ifndef MY_CXT_CLONE
  4631. #define MY_CXT_CLONE NOOP
  4632. #endif
  4633.  
  4634. #endif
  4635.  
  4636. #ifndef IVdf
  4637. # if IVSIZE == LONGSIZE
  4638. # define IVdf "ld"
  4639. # define UVuf "lu"
  4640. # define UVof "lo"
  4641. # define UVxf "lx"
  4642. # define UVXf "lX"
  4643. # else
  4644. # if IVSIZE == INTSIZE
  4645. # define IVdf "d"
  4646. # define UVuf "u"
  4647. # define UVof "o"
  4648. # define UVxf "x"
  4649. # define UVXf "X"
  4650. # endif
  4651. # endif
  4652. #endif
  4653.  
  4654. #ifndef NVef
  4655. # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
  4656.   defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000)
  4657. /* Not very likely, but let's try anyway. */
  4658. # define NVef PERL_PRIeldbl
  4659. # define NVff PERL_PRIfldbl
  4660. # define NVgf PERL_PRIgldbl
  4661. # else
  4662. # define NVef "e"
  4663. # define NVff "f"
  4664. # define NVgf "g"
  4665. # endif
  4666. #endif
  4667.  
  4668. #ifndef SvREFCNT_inc
  4669. # ifdef PERL_USE_GCC_BRACE_GROUPS
  4670. # define SvREFCNT_inc(sv) \
  4671.   ({ \
  4672.   SV * const _sv = (SV*)(sv); \
  4673.   if (_sv) \
  4674.   (SvREFCNT(_sv))++; \
  4675.   _sv; \
  4676.   })
  4677. # else
  4678. # define SvREFCNT_inc(sv) \
  4679.   ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
  4680. # endif
  4681. #endif
  4682.  
  4683. #ifndef SvREFCNT_inc_simple
  4684. # ifdef PERL_USE_GCC_BRACE_GROUPS
  4685. # define SvREFCNT_inc_simple(sv) \
  4686.   ({ \
  4687.   if (sv) \
  4688.   (SvREFCNT(sv))++; \
  4689.   (SV *)(sv); \
  4690.   })
  4691. # else
  4692. # define SvREFCNT_inc_simple(sv) \
  4693.   ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
  4694. # endif
  4695. #endif
  4696.  
  4697. #ifndef SvREFCNT_inc_NN
  4698. # ifdef PERL_USE_GCC_BRACE_GROUPS
  4699. # define SvREFCNT_inc_NN(sv) \
  4700.   ({ \
  4701.   SV * const _sv = (SV*)(sv); \
  4702.   SvREFCNT(_sv)++; \
  4703.   _sv; \
  4704.   })
  4705. # else
  4706. # define SvREFCNT_inc_NN(sv) \
  4707.   (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
  4708. # endif
  4709. #endif
  4710.  
  4711. #ifndef SvREFCNT_inc_void
  4712. # ifdef PERL_USE_GCC_BRACE_GROUPS
  4713. # define SvREFCNT_inc_void(sv) \
  4714.   ({ \
  4715.   SV * const _sv = (SV*)(sv); \
  4716.   if (_sv) \
  4717.   (void)(SvREFCNT(_sv)++); \
  4718.   })
  4719. # else
  4720. # define SvREFCNT_inc_void(sv) \
  4721.   (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
  4722. # endif
  4723. #endif
  4724. #ifndef SvREFCNT_inc_simple_void
  4725. # define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
  4726. #endif
  4727.  
  4728. #ifndef SvREFCNT_inc_simple_NN
  4729. # define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv))
  4730. #endif
  4731.  
  4732. #ifndef SvREFCNT_inc_void_NN
  4733. # define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
  4734. #endif
  4735.  
  4736. #ifndef SvREFCNT_inc_simple_void_NN
  4737. # define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
  4738. #endif
  4739.  
  4740. #ifndef newSV_type
  4741.  
  4742. #if defined(NEED_newSV_type)
  4743. static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
  4744. static
  4745. #else
  4746. extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
  4747. #endif
  4748.  
  4749. #ifdef newSV_type
  4750. # undef newSV_type
  4751. #endif
  4752. #define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a)
  4753. #define Perl_newSV_type DPPP_(my_newSV_type)
  4754.  
  4755. #if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL)
  4756.  
  4757. SV*
  4758. DPPP_(my_newSV_type)(pTHX_ svtype const t)
  4759. {
  4760. SV* const sv = newSV(0);
  4761. sv_upgrade(sv, t);
  4762. return sv;
  4763. }
  4764.  
  4765. #endif
  4766.  
  4767. #endif
  4768.  
  4769. #if (PERL_BCDVERSION < 0x5006000)
  4770. # define D_PPP_CONSTPV_ARG(x) ((char *) (x))
  4771. #else
  4772. # define D_PPP_CONSTPV_ARG(x) (x)
  4773. #endif
  4774. #ifndef newSVpvn
  4775. # define newSVpvn(data,len) ((data) \
  4776.   ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
  4777.   : newSV(0))
  4778. #endif
  4779. #ifndef newSVpvn_utf8
  4780. # define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
  4781. #endif
  4782. #ifndef SVf_UTF8
  4783. # define SVf_UTF8 0
  4784. #endif
  4785.  
  4786. #ifndef newSVpvn_flags
  4787.  
  4788. #if defined(NEED_newSVpvn_flags)
  4789. static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
  4790. static
  4791. #else
  4792. extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
  4793. #endif
  4794.  
  4795. #ifdef newSVpvn_flags
  4796. # undef newSVpvn_flags
  4797. #endif
  4798. #define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c)
  4799. #define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags)
  4800.  
  4801. #if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL)
  4802.  
  4803. SV *
  4804. DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags)
  4805. {
  4806. SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len);
  4807. SvFLAGS(sv) |= (flags & SVf_UTF8);
  4808. return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
  4809. }
  4810.  
  4811. #endif
  4812.  
  4813. #endif
  4814.  
  4815. /* Backwards compatibility stuff... :-( */
  4816. #if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen)
  4817. # define NEED_sv_2pv_flags
  4818. #endif
  4819. #if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL)
  4820. # define NEED_sv_2pv_flags_GLOBAL
  4821. #endif
  4822.  
  4823. /* Hint: sv_2pv_nolen
  4824.  * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen().
  4825.  */
  4826. #ifndef sv_2pv_nolen
  4827. # define sv_2pv_nolen(sv) SvPV_nolen(sv)
  4828. #endif
  4829.  
  4830. #ifdef SvPVbyte
  4831.  
  4832. /* Hint: SvPVbyte
  4833.  * Does not work in perl-5.6.1, ppport.h implements a version
  4834.  * borrowed from perl-5.7.3.
  4835.  */
  4836.  
  4837. #if (PERL_BCDVERSION < 0x5007000)
  4838.  
  4839. #if defined(NEED_sv_2pvbyte)
  4840. static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
  4841. static
  4842. #else
  4843. extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
  4844. #endif
  4845.  
  4846. #ifdef sv_2pvbyte
  4847. # undef sv_2pvbyte
  4848. #endif
  4849. #define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b)
  4850. #define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte)
  4851.  
  4852. #if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL)
  4853.  
  4854. char *
  4855. DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp)
  4856. {
  4857. sv_utf8_downgrade(sv,0);
  4858. return SvPV(sv,*lp);
  4859. }
  4860.  
  4861. #endif
  4862.  
  4863. /* Hint: sv_2pvbyte
  4864.  * Use the SvPVbyte() macro instead of sv_2pvbyte().
  4865.  */
  4866.  
  4867. #undef SvPVbyte
  4868.  
  4869. #define SvPVbyte(sv, lp) \
  4870.   ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \
  4871.   ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
  4872.  
  4873. #endif
  4874.  
  4875. #else
  4876.  
  4877. # define SvPVbyte SvPV
  4878. # define sv_2pvbyte sv_2pv
  4879.  
  4880. #endif
  4881. #ifndef sv_2pvbyte_nolen
  4882. # define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv)
  4883. #endif
  4884.  
  4885. /* Hint: sv_pvn
  4886.  * Always use the SvPV() macro instead of sv_pvn().
  4887.  */
  4888.  
  4889. /* Hint: sv_pvn_force
  4890.  * Always use the SvPV_force() macro instead of sv_pvn_force().
  4891.  */
  4892.  
  4893. /* If these are undefined, they're not handled by the core anyway */
  4894. #ifndef SV_IMMEDIATE_UNREF
  4895. # define SV_IMMEDIATE_UNREF 0
  4896. #endif
  4897.  
  4898. #ifndef SV_GMAGIC
  4899. # define SV_GMAGIC 0
  4900. #endif
  4901.  
  4902. #ifndef SV_COW_DROP_PV
  4903. # define SV_COW_DROP_PV 0
  4904. #endif
  4905.  
  4906. #ifndef SV_UTF8_NO_ENCODING
  4907. # define SV_UTF8_NO_ENCODING 0
  4908. #endif
  4909.  
  4910. #ifndef SV_NOSTEAL
  4911. # define SV_NOSTEAL 0
  4912. #endif
  4913.  
  4914. #ifndef SV_CONST_RETURN
  4915. # define SV_CONST_RETURN 0
  4916. #endif
  4917.  
  4918. #ifndef SV_MUTABLE_RETURN
  4919. # define SV_MUTABLE_RETURN 0
  4920. #endif
  4921.  
  4922. #ifndef SV_SMAGIC
  4923. # define SV_SMAGIC 0
  4924. #endif
  4925.  
  4926. #ifndef SV_HAS_TRAILING_NUL
  4927. # define SV_HAS_TRAILING_NUL 0
  4928. #endif
  4929.  
  4930. #ifndef SV_COW_SHARED_HASH_KEYS
  4931. # define SV_COW_SHARED_HASH_KEYS 0
  4932. #endif
  4933.  
  4934. #if (PERL_BCDVERSION < 0x5007002)
  4935.  
  4936. #if defined(NEED_sv_2pv_flags)
  4937. static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
  4938. static
  4939. #else
  4940. extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
  4941. #endif
  4942.  
  4943. #ifdef sv_2pv_flags
  4944. # undef sv_2pv_flags
  4945. #endif
  4946. #define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c)
  4947. #define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags)
  4948.  
  4949. #if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL)
  4950.  
  4951. char *
  4952. DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
  4953. {
  4954. STRLEN n_a = (STRLEN) flags;
  4955. return sv_2pv(sv, lp ? lp : &n_a);
  4956. }
  4957.  
  4958. #endif
  4959.  
  4960. #if defined(NEED_sv_pvn_force_flags)
  4961. static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
  4962. static
  4963. #else
  4964. extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
  4965. #endif
  4966.  
  4967. #ifdef sv_pvn_force_flags
  4968. # undef sv_pvn_force_flags
  4969. #endif
  4970. #define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c)
  4971. #define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags)
  4972.  
  4973. #if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL)
  4974.  
  4975. char *
  4976. DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
  4977. {
  4978. STRLEN n_a = (STRLEN) flags;
  4979. return sv_pvn_force(sv, lp ? lp : &n_a);
  4980. }
  4981.  
  4982. #endif
  4983.  
  4984. #endif
  4985.  
  4986. #if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) )
  4987. # define DPPP_SVPV_NOLEN_LP_ARG &PL_na
  4988. #else
  4989. # define DPPP_SVPV_NOLEN_LP_ARG 0
  4990. #endif
  4991. #ifndef SvPV_const
  4992. # define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC)
  4993. #endif
  4994.  
  4995. #ifndef SvPV_mutable
  4996. # define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC)
  4997. #endif
  4998. #ifndef SvPV_flags
  4999. # define SvPV_flags(sv, lp, flags) \
  5000.   ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
  5001.   ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
  5002. #endif
  5003. #ifndef SvPV_flags_const
  5004. # define SvPV_flags_const(sv, lp, flags) \
  5005.   ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
  5006.   ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
  5007.   (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN))
  5008. #endif
  5009. #ifndef SvPV_flags_const_nolen
  5010. # define SvPV_flags_const_nolen(sv, flags) \
  5011.   ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
  5012.   ? SvPVX_const(sv) : \
  5013.   (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN))
  5014. #endif
  5015. #ifndef SvPV_flags_mutable
  5016. # define SvPV_flags_mutable(sv, lp, flags) \
  5017.   ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
  5018.   ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
  5019.   sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
  5020. #endif
  5021. #ifndef SvPV_force
  5022. # define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC)
  5023. #endif
  5024.  
  5025. #ifndef SvPV_force_nolen
  5026. # define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC)
  5027. #endif
  5028.  
  5029. #ifndef SvPV_force_mutable
  5030. # define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
  5031. #endif
  5032.  
  5033. #ifndef SvPV_force_nomg
  5034. # define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0)
  5035. #endif
  5036.  
  5037. #ifndef SvPV_force_nomg_nolen
  5038. # define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0)
  5039. #endif
  5040. #ifndef SvPV_force_flags
  5041. # define SvPV_force_flags(sv, lp, flags) \
  5042.   ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
  5043.   ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
  5044. #endif
  5045. #ifndef SvPV_force_flags_nolen
  5046. # define SvPV_force_flags_nolen(sv, flags) \
  5047.   ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
  5048.   ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags))
  5049. #endif
  5050. #ifndef SvPV_force_flags_mutable
  5051. # define SvPV_force_flags_mutable(sv, lp, flags) \
  5052.   ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
  5053.   ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
  5054.   : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
  5055. #endif
  5056. #ifndef SvPV_nolen
  5057. # define SvPV_nolen(sv) \
  5058.   ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
  5059.   ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC))
  5060. #endif
  5061. #ifndef SvPV_nolen_const
  5062. # define SvPV_nolen_const(sv) \
  5063.   ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
  5064.   ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN))
  5065. #endif
  5066. #ifndef SvPV_nomg
  5067. # define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0)
  5068. #endif
  5069.  
  5070. #ifndef SvPV_nomg_const
  5071. # define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0)
  5072. #endif
  5073.  
  5074. #ifndef SvPV_nomg_const_nolen
  5075. # define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0)
  5076. #endif
  5077. #ifndef SvPV_renew
  5078. # define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \
  5079.   SvPV_set((sv), (char *) saferealloc( \
  5080.   (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \
  5081.   } STMT_END
  5082. #endif
  5083. #ifndef SvMAGIC_set
  5084. # define SvMAGIC_set(sv, val) \
  5085.   STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
  5086.   (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
  5087. #endif
  5088.  
  5089. #if (PERL_BCDVERSION < 0x5009003)
  5090. #ifndef SvPVX_const
  5091. # define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv)))
  5092. #endif
  5093.  
  5094. #ifndef SvPVX_mutable
  5095. # define SvPVX_mutable(sv) (0 + SvPVX(sv))
  5096. #endif
  5097. #ifndef SvRV_set
  5098. # define SvRV_set(sv, val) \
  5099.   STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
  5100.   (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END
  5101. #endif
  5102.  
  5103. #else
  5104. #ifndef SvPVX_const
  5105. # define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv))
  5106. #endif
  5107.  
  5108. #ifndef SvPVX_mutable
  5109. # define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv)
  5110. #endif
  5111. #ifndef SvRV_set
  5112. # define SvRV_set(sv, val) \
  5113.   STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
  5114.   ((sv)->sv_u.svu_rv = (val)); } STMT_END
  5115. #endif
  5116.  
  5117. #endif
  5118. #ifndef SvSTASH_set
  5119. # define SvSTASH_set(sv, val) \
  5120.   STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
  5121.   (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
  5122. #endif
  5123.  
  5124. #if (PERL_BCDVERSION < 0x5004000)
  5125. #ifndef SvUV_set
  5126. # define SvUV_set(sv, val) \
  5127.   STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
  5128.   (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END
  5129. #endif
  5130.  
  5131. #else
  5132. #ifndef SvUV_set
  5133. # define SvUV_set(sv, val) \
  5134.   STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
  5135.   (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END
  5136. #endif
  5137.  
  5138. #endif
  5139.  
  5140. #if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf)
  5141. #if defined(NEED_vnewSVpvf)
  5142. static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
  5143. static
  5144. #else
  5145. extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
  5146. #endif
  5147.  
  5148. #ifdef vnewSVpvf
  5149. # undef vnewSVpvf
  5150. #endif
  5151. #define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b)
  5152. #define Perl_vnewSVpvf DPPP_(my_vnewSVpvf)
  5153.  
  5154. #if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL)
  5155.  
  5156. SV *
  5157. DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args)
  5158. {
  5159. register SV *sv = newSV(0);
  5160. sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
  5161. return sv;
  5162. }
  5163.  
  5164. #endif
  5165. #endif
  5166.  
  5167. #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf)
  5168. # define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
  5169. #endif
  5170.  
  5171. #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf)
  5172. # define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
  5173. #endif
  5174.  
  5175. #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg)
  5176. #if defined(NEED_sv_catpvf_mg)
  5177. static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
  5178. static
  5179. #else
  5180. extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
  5181. #endif
  5182.  
  5183. #define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg)
  5184.  
  5185. #if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL)
  5186.  
  5187. void
  5188. DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
  5189. {
  5190. va_list args;
  5191. va_start(args, pat);
  5192. sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
  5193. SvSETMAGIC(sv);
  5194. va_end(args);
  5195. }
  5196.  
  5197. #endif
  5198. #endif
  5199.  
  5200. #ifdef PERL_IMPLICIT_CONTEXT
  5201. #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext)
  5202. #if defined(NEED_sv_catpvf_mg_nocontext)
  5203. static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
  5204. static
  5205. #else
  5206. extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
  5207. #endif
  5208.  
  5209. #define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
  5210. #define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
  5211.  
  5212. #if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL)
  5213.  
  5214. void
  5215. DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
  5216. {
  5217. dTHX;
  5218. va_list args;
  5219. va_start(args, pat);
  5220. sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
  5221. SvSETMAGIC(sv);
  5222. va_end(args);
  5223. }
  5224.  
  5225. #endif
  5226. #endif
  5227. #endif
  5228.  
  5229. /* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */
  5230. #ifndef sv_catpvf_mg
  5231. # ifdef PERL_IMPLICIT_CONTEXT
  5232. # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext
  5233. # else
  5234. # define sv_catpvf_mg Perl_sv_catpvf_mg
  5235. # endif
  5236. #endif
  5237.  
  5238. #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg)
  5239. # define sv_vcatpvf_mg(sv, pat, args) \
  5240.   STMT_START { \
  5241.   sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \
  5242.   SvSETMAGIC(sv); \
  5243.   } STMT_END
  5244. #endif
  5245.  
  5246. #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg)
  5247. #if defined(NEED_sv_setpvf_mg)
  5248. static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
  5249. static
  5250. #else
  5251. extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
  5252. #endif
  5253.  
  5254. #define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg)
  5255.  
  5256. #if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL)
  5257.  
  5258. void
  5259. DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
  5260. {
  5261. va_list args;
  5262. va_start(args, pat);
  5263. sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
  5264. SvSETMAGIC(sv);
  5265. va_end(args);
  5266. }
  5267.  
  5268. #endif
  5269. #endif
  5270.  
  5271. #ifdef PERL_IMPLICIT_CONTEXT
  5272. #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext)
  5273. #if defined(NEED_sv_setpvf_mg_nocontext)
  5274. static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
  5275. static
  5276. #else
  5277. extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
  5278. #endif
  5279.  
  5280. #define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
  5281. #define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
  5282.  
  5283. #if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL)
  5284.  
  5285. void
  5286. DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
  5287. {
  5288. dTHX;
  5289. va_list args;
  5290. va_start(args, pat);
  5291. sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
  5292. SvSETMAGIC(sv);
  5293. va_end(args);
  5294. }
  5295.  
  5296. #endif
  5297. #endif
  5298. #endif
  5299.  
  5300. /* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */
  5301. #ifndef sv_setpvf_mg
  5302. # ifdef PERL_IMPLICIT_CONTEXT
  5303. # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext
  5304. # else
  5305. # define sv_setpvf_mg Perl_sv_setpvf_mg
  5306. # endif
  5307. #endif
  5308.  
  5309. #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg)
  5310. # define sv_vsetpvf_mg(sv, pat, args) \
  5311.   STMT_START { \
  5312.   sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \
  5313.   SvSETMAGIC(sv); \
  5314.   } STMT_END
  5315. #endif
  5316.  
  5317. #ifndef newSVpvn_share
  5318.  
  5319. #if defined(NEED_newSVpvn_share)
  5320. static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
  5321. static
  5322. #else
  5323. extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
  5324. #endif
  5325.  
  5326. #ifdef newSVpvn_share
  5327. # undef newSVpvn_share
  5328. #endif
  5329. #define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c)
  5330. #define Perl_newSVpvn_share DPPP_(my_newSVpvn_share)
  5331.  
  5332. #if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL)
  5333.  
  5334. SV *
  5335. DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash)
  5336. {
  5337. SV *sv;
  5338. if (len < 0)
  5339. len = -len;
  5340. if (!hash)
  5341. PERL_HASH(hash, (char*) src, len);
  5342. sv = newSVpvn((char *) src, len);
  5343. sv_upgrade(sv, SVt_PVIV);
  5344. SvIVX(sv) = hash;
  5345. SvREADONLY_on(sv);
  5346. SvPOK_on(sv);
  5347. return sv;
  5348. }
  5349.  
  5350. #endif
  5351.  
  5352. #endif
  5353. #ifndef SvSHARED_HASH
  5354. # define SvSHARED_HASH(sv) (0 + SvUVX(sv))
  5355. #endif
  5356. #ifndef HvNAME_get
  5357. # define HvNAME_get(hv) HvNAME(hv)
  5358. #endif
  5359. #ifndef HvNAMELEN_get
  5360. # define HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0)
  5361. #endif
  5362. #ifndef GvSVn
  5363. # define GvSVn(gv) GvSV(gv)
  5364. #endif
  5365.  
  5366. #ifndef isGV_with_GP
  5367. # define isGV_with_GP(gv) isGV(gv)
  5368. #endif
  5369. #ifndef WARN_ALL
  5370. # define WARN_ALL 0
  5371. #endif
  5372.  
  5373. #ifndef WARN_CLOSURE
  5374. # define WARN_CLOSURE 1
  5375. #endif
  5376.  
  5377. #ifndef WARN_DEPRECATED
  5378. # define WARN_DEPRECATED 2
  5379. #endif
  5380.  
  5381. #ifndef WARN_EXITING
  5382. # define WARN_EXITING 3
  5383. #endif
  5384.  
  5385. #ifndef WARN_GLOB
  5386. # define WARN_GLOB 4
  5387. #endif
  5388.  
  5389. #ifndef WARN_IO
  5390. # define WARN_IO 5
  5391. #endif
  5392.  
  5393. #ifndef WARN_CLOSED
  5394. # define WARN_CLOSED 6
  5395. #endif
  5396.  
  5397. #ifndef WARN_EXEC
  5398. # define WARN_EXEC 7
  5399. #endif
  5400.  
  5401. #ifndef WARN_LAYER
  5402. # define WARN_LAYER 8
  5403. #endif
  5404.  
  5405. #ifndef WARN_NEWLINE
  5406. # define WARN_NEWLINE 9
  5407. #endif
  5408.  
  5409. #ifndef WARN_PIPE
  5410. # define WARN_PIPE 10
  5411. #endif
  5412.  
  5413. #ifndef WARN_UNOPENED
  5414. # define WARN_UNOPENED 11
  5415. #endif
  5416.  
  5417. #ifndef WARN_MISC
  5418. # define WARN_MISC 12
  5419. #endif
  5420.  
  5421. #ifndef WARN_NUMERIC
  5422. # define WARN_NUMERIC 13
  5423. #endif
  5424.  
  5425. #ifndef WARN_ONCE
  5426. # define WARN_ONCE 14
  5427. #endif
  5428.  
  5429. #ifndef WARN_OVERFLOW
  5430. # define WARN_OVERFLOW 15
  5431. #endif
  5432.  
  5433. #ifndef WARN_PACK
  5434. # define WARN_PACK 16
  5435. #endif
  5436.  
  5437. #ifndef WARN_PORTABLE
  5438. # define WARN_PORTABLE 17
  5439. #endif
  5440.  
  5441. #ifndef WARN_RECURSION
  5442. # define WARN_RECURSION 18
  5443. #endif
  5444.  
  5445. #ifndef WARN_REDEFINE
  5446. # define WARN_REDEFINE 19
  5447. #endif
  5448.  
  5449. #ifndef WARN_REGEXP
  5450. # define WARN_REGEXP 20
  5451. #endif
  5452.  
  5453. #ifndef WARN_SEVERE
  5454. # define WARN_SEVERE 21
  5455. #endif
  5456.  
  5457. #ifndef WARN_DEBUGGING
  5458. # define WARN_DEBUGGING 22
  5459. #endif
  5460.  
  5461. #ifndef WARN_INPLACE
  5462. # define WARN_INPLACE 23
  5463. #endif
  5464.  
  5465. #ifndef WARN_INTERNAL
  5466. # define WARN_INTERNAL 24
  5467. #endif
  5468.  
  5469. #ifndef WARN_MALLOC
  5470. # define WARN_MALLOC 25
  5471. #endif
  5472.  
  5473. #ifndef WARN_SIGNAL
  5474. # define WARN_SIGNAL 26
  5475. #endif
  5476.  
  5477. #ifndef WARN_SUBSTR
  5478. # define WARN_SUBSTR 27
  5479. #endif
  5480.  
  5481. #ifndef WARN_SYNTAX
  5482. # define WARN_SYNTAX 28
  5483. #endif
  5484.  
  5485. #ifndef WARN_AMBIGUOUS
  5486. # define WARN_AMBIGUOUS 29
  5487. #endif
  5488.  
  5489. #ifndef WARN_BAREWORD
  5490. # define WARN_BAREWORD 30
  5491. #endif
  5492.  
  5493. #ifndef WARN_DIGIT
  5494. # define WARN_DIGIT 31
  5495. #endif
  5496.  
  5497. #ifndef WARN_PARENTHESIS
  5498. # define WARN_PARENTHESIS 32
  5499. #endif
  5500.  
  5501. #ifndef WARN_PRECEDENCE
  5502. # define WARN_PRECEDENCE 33
  5503. #endif
  5504.  
  5505. #ifndef WARN_PRINTF
  5506. # define WARN_PRINTF 34
  5507. #endif
  5508.  
  5509. #ifndef WARN_PROTOTYPE
  5510. # define WARN_PROTOTYPE 35
  5511. #endif
  5512.  
  5513. #ifndef WARN_QW
  5514. # define WARN_QW 36
  5515. #endif
  5516.  
  5517. #ifndef WARN_RESERVED
  5518. # define WARN_RESERVED 37
  5519. #endif
  5520.  
  5521. #ifndef WARN_SEMICOLON
  5522. # define WARN_SEMICOLON 38
  5523. #endif
  5524.  
  5525. #ifndef WARN_TAINT
  5526. # define WARN_TAINT 39
  5527. #endif
  5528.  
  5529. #ifndef WARN_THREADS
  5530. # define WARN_THREADS 40
  5531. #endif
  5532.  
  5533. #ifndef WARN_UNINITIALIZED
  5534. # define WARN_UNINITIALIZED 41
  5535. #endif
  5536.  
  5537. #ifndef WARN_UNPACK
  5538. # define WARN_UNPACK 42
  5539. #endif
  5540.  
  5541. #ifndef WARN_UNTIE
  5542. # define WARN_UNTIE 43
  5543. #endif
  5544.  
  5545. #ifndef WARN_UTF8
  5546. # define WARN_UTF8 44
  5547. #endif
  5548.  
  5549. #ifndef WARN_VOID
  5550. # define WARN_VOID 45
  5551. #endif
  5552.  
  5553. #ifndef WARN_ASSERTIONS
  5554. # define WARN_ASSERTIONS 46
  5555. #endif
  5556. #ifndef packWARN
  5557. # define packWARN(a) (a)
  5558. #endif
  5559.  
  5560. #ifndef ckWARN
  5561. # ifdef G_WARN_ON
  5562. # define ckWARN(a) (PL_dowarn & G_WARN_ON)
  5563. # else
  5564. # define ckWARN(a) PL_dowarn
  5565. # endif
  5566. #endif
  5567.  
  5568. #if (PERL_BCDVERSION >= 0x5004000) && !defined(warner)
  5569. #if defined(NEED_warner)
  5570. static void DPPP_(my_warner)(U32 err, const char *pat, ...);
  5571. static
  5572. #else
  5573. extern void DPPP_(my_warner)(U32 err, const char *pat, ...);
  5574. #endif
  5575.  
  5576. #define Perl_warner DPPP_(my_warner)
  5577.  
  5578. #if defined(NEED_warner) || defined(NEED_warner_GLOBAL)
  5579.  
  5580. void
  5581. DPPP_(my_warner)(U32 err, const char *pat, ...)
  5582. {
  5583. SV *sv;
  5584. va_list args;
  5585.  
  5586. PERL_UNUSED_ARG(err);
  5587.  
  5588. va_start(args, pat);
  5589. sv = vnewSVpvf(pat, &args);
  5590. va_end(args);
  5591. sv_2mortal(sv);
  5592. warn("%s", SvPV_nolen(sv));
  5593. }
  5594.  
  5595. #define warner Perl_warner
  5596.  
  5597. #define Perl_warner_nocontext Perl_warner
  5598.  
  5599. #endif
  5600. #endif
  5601.  
  5602. /* concatenating with "" ensures that only literal strings are accepted as argument
  5603.  * note that STR_WITH_LEN() can't be used as argument to macros or functions that
  5604.  * under some configurations might be macros
  5605.  */
  5606. #ifndef STR_WITH_LEN
  5607. # define STR_WITH_LEN(s) (s ""), (sizeof(s)-1)
  5608. #endif
  5609. #ifndef newSVpvs
  5610. # define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1)
  5611. #endif
  5612.  
  5613. #ifndef newSVpvs_flags
  5614. # define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags)
  5615. #endif
  5616.  
  5617. #ifndef sv_catpvs
  5618. # define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1)
  5619. #endif
  5620.  
  5621. #ifndef sv_setpvs
  5622. # define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1)
  5623. #endif
  5624.  
  5625. #ifndef hv_fetchs
  5626. # define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval)
  5627. #endif
  5628.  
  5629. #ifndef hv_stores
  5630. # define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0)
  5631. #endif
  5632. #ifndef gv_fetchpvn_flags
  5633. # define gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt)
  5634. #endif
  5635.  
  5636. #ifndef gv_fetchpvs
  5637. # define gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt)
  5638. #endif
  5639.  
  5640. #ifndef gv_stashpvs
  5641. # define gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags)
  5642. #endif
  5643. #ifndef SvGETMAGIC
  5644. # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
  5645. #endif
  5646. #ifndef PERL_MAGIC_sv
  5647. # define PERL_MAGIC_sv '\0'
  5648. #endif
  5649.  
  5650. #ifndef PERL_MAGIC_overload
  5651. # define PERL_MAGIC_overload 'A'
  5652. #endif
  5653.  
  5654. #ifndef PERL_MAGIC_overload_elem
  5655. # define PERL_MAGIC_overload_elem 'a'
  5656. #endif
  5657.  
  5658. #ifndef PERL_MAGIC_overload_table
  5659. # define PERL_MAGIC_overload_table 'c'
  5660. #endif
  5661.  
  5662. #ifndef PERL_MAGIC_bm
  5663. # define PERL_MAGIC_bm 'B'
  5664. #endif
  5665.  
  5666. #ifndef PERL_MAGIC_regdata
  5667. # define PERL_MAGIC_regdata 'D'
  5668. #endif
  5669.  
  5670. #ifndef PERL_MAGIC_regdatum
  5671. # define PERL_MAGIC_regdatum 'd'
  5672. #endif
  5673.  
  5674. #ifndef PERL_MAGIC_env
  5675. # define PERL_MAGIC_env 'E'
  5676. #endif
  5677.  
  5678. #ifndef PERL_MAGIC_envelem
  5679. # define PERL_MAGIC_envelem 'e'
  5680. #endif
  5681.  
  5682. #ifndef PERL_MAGIC_fm
  5683. # define PERL_MAGIC_fm 'f'
  5684. #endif
  5685.  
  5686. #ifndef PERL_MAGIC_regex_global
  5687. # define PERL_MAGIC_regex_global 'g'
  5688. #endif
  5689.  
  5690. #ifndef PERL_MAGIC_isa
  5691. # define PERL_MAGIC_isa 'I'
  5692. #endif
  5693.  
  5694. #ifndef PERL_MAGIC_isaelem
  5695. # define PERL_MAGIC_isaelem 'i'
  5696. #endif
  5697.  
  5698. #ifndef PERL_MAGIC_nkeys
  5699. # define PERL_MAGIC_nkeys 'k'
  5700. #endif
  5701.  
  5702. #ifndef PERL_MAGIC_dbfile
  5703. # define PERL_MAGIC_dbfile 'L'
  5704. #endif
  5705.  
  5706. #ifndef PERL_MAGIC_dbline
  5707. # define PERL_MAGIC_dbline 'l'
  5708. #endif
  5709.  
  5710. #ifndef PERL_MAGIC_mutex
  5711. # define PERL_MAGIC_mutex 'm'
  5712. #endif
  5713.  
  5714. #ifndef PERL_MAGIC_shared
  5715. # define PERL_MAGIC_shared 'N'
  5716. #endif
  5717.  
  5718. #ifndef PERL_MAGIC_shared_scalar
  5719. # define PERL_MAGIC_shared_scalar 'n'
  5720. #endif
  5721.  
  5722. #ifndef PERL_MAGIC_collxfrm
  5723. # define PERL_MAGIC_collxfrm 'o'
  5724. #endif
  5725.  
  5726. #ifndef PERL_MAGIC_tied
  5727. # define PERL_MAGIC_tied 'P'
  5728. #endif
  5729.  
  5730. #ifndef PERL_MAGIC_tiedelem
  5731. # define PERL_MAGIC_tiedelem 'p'
  5732. #endif
  5733.  
  5734. #ifndef PERL_MAGIC_tiedscalar
  5735. # define PERL_MAGIC_tiedscalar 'q'
  5736. #endif
  5737.  
  5738. #ifndef PERL_MAGIC_qr
  5739. # define PERL_MAGIC_qr 'r'
  5740. #endif
  5741.  
  5742. #ifndef PERL_MAGIC_sig
  5743. # define PERL_MAGIC_sig 'S'
  5744. #endif
  5745.  
  5746. #ifndef PERL_MAGIC_sigelem
  5747. # define PERL_MAGIC_sigelem 's'
  5748. #endif
  5749.  
  5750. #ifndef PERL_MAGIC_taint
  5751. # define PERL_MAGIC_taint 't'
  5752. #endif
  5753.  
  5754. #ifndef PERL_MAGIC_uvar
  5755. # define PERL_MAGIC_uvar 'U'
  5756. #endif
  5757.  
  5758. #ifndef PERL_MAGIC_uvar_elem
  5759. # define PERL_MAGIC_uvar_elem 'u'
  5760. #endif
  5761.  
  5762. #ifndef PERL_MAGIC_vstring
  5763. # define PERL_MAGIC_vstring 'V'
  5764. #endif
  5765.  
  5766. #ifndef PERL_MAGIC_vec
  5767. # define PERL_MAGIC_vec 'v'
  5768. #endif
  5769.  
  5770. #ifndef PERL_MAGIC_utf8
  5771. # define PERL_MAGIC_utf8 'w'
  5772. #endif
  5773.  
  5774. #ifndef PERL_MAGIC_substr
  5775. # define PERL_MAGIC_substr 'x'
  5776. #endif
  5777.  
  5778. #ifndef PERL_MAGIC_defelem
  5779. # define PERL_MAGIC_defelem 'y'
  5780. #endif
  5781.  
  5782. #ifndef PERL_MAGIC_glob
  5783. # define PERL_MAGIC_glob '*'
  5784. #endif
  5785.  
  5786. #ifndef PERL_MAGIC_arylen
  5787. # define PERL_MAGIC_arylen '#'
  5788. #endif
  5789.  
  5790. #ifndef PERL_MAGIC_pos
  5791. # define PERL_MAGIC_pos '.'
  5792. #endif
  5793.  
  5794. #ifndef PERL_MAGIC_backref
  5795. # define PERL_MAGIC_backref '<'
  5796. #endif
  5797.  
  5798. #ifndef PERL_MAGIC_ext
  5799. # define PERL_MAGIC_ext '~'
  5800. #endif
  5801.  
  5802. /* That's the best we can do... */
  5803. #ifndef sv_catpvn_nomg
  5804. # define sv_catpvn_nomg sv_catpvn
  5805. #endif
  5806.  
  5807. #ifndef sv_catsv_nomg
  5808. # define sv_catsv_nomg sv_catsv
  5809. #endif
  5810.  
  5811. #ifndef sv_setsv_nomg
  5812. # define sv_setsv_nomg sv_setsv
  5813. #endif
  5814.  
  5815. #ifndef sv_pvn_nomg
  5816. # define sv_pvn_nomg sv_pvn
  5817. #endif
  5818.  
  5819. #ifndef SvIV_nomg
  5820. # define SvIV_nomg SvIV
  5821. #endif
  5822.  
  5823. #ifndef SvUV_nomg
  5824. # define SvUV_nomg SvUV
  5825. #endif
  5826.  
  5827. #ifndef sv_catpv_mg
  5828. # define sv_catpv_mg(sv, ptr) \
  5829.   STMT_START { \
  5830.   SV *TeMpSv = sv; \
  5831.   sv_catpv(TeMpSv,ptr); \
  5832.   SvSETMAGIC(TeMpSv); \
  5833.   } STMT_END
  5834. #endif
  5835.  
  5836. #ifndef sv_catpvn_mg
  5837. # define sv_catpvn_mg(sv, ptr, len) \
  5838.   STMT_START { \
  5839.   SV *TeMpSv = sv; \
  5840.   sv_catpvn(TeMpSv,ptr,len); \
  5841.   SvSETMAGIC(TeMpSv); \
  5842.   } STMT_END
  5843. #endif
  5844.  
  5845. #ifndef sv_catsv_mg
  5846. # define sv_catsv_mg(dsv, ssv) \
  5847.   STMT_START { \
  5848.   SV *TeMpSv = dsv; \
  5849.   sv_catsv(TeMpSv,ssv); \
  5850.   SvSETMAGIC(TeMpSv); \
  5851.   } STMT_END
  5852. #endif
  5853.  
  5854. #ifndef sv_setiv_mg
  5855. # define sv_setiv_mg(sv, i) \
  5856.   STMT_START { \
  5857.   SV *TeMpSv = sv; \
  5858.   sv_setiv(TeMpSv,i); \
  5859.   SvSETMAGIC(TeMpSv); \
  5860.   } STMT_END
  5861. #endif
  5862.  
  5863. #ifndef sv_setnv_mg
  5864. # define sv_setnv_mg(sv, num) \
  5865.   STMT_START { \
  5866.   SV *TeMpSv = sv; \
  5867.   sv_setnv(TeMpSv,num); \
  5868.   SvSETMAGIC(TeMpSv); \
  5869.   } STMT_END
  5870. #endif
  5871.  
  5872. #ifndef sv_setpv_mg
  5873. # define sv_setpv_mg(sv, ptr) \
  5874.   STMT_START { \
  5875.   SV *TeMpSv = sv; \
  5876.   sv_setpv(TeMpSv,ptr); \
  5877.   SvSETMAGIC(TeMpSv); \
  5878.   } STMT_END
  5879. #endif
  5880.  
  5881. #ifndef sv_setpvn_mg
  5882. # define sv_setpvn_mg(sv, ptr, len) \
  5883.   STMT_START { \
  5884.   SV *TeMpSv = sv; \
  5885.   sv_setpvn(TeMpSv,ptr,len); \
  5886.   SvSETMAGIC(TeMpSv); \
  5887.   } STMT_END
  5888. #endif
  5889.  
  5890. #ifndef sv_setsv_mg
  5891. # define sv_setsv_mg(dsv, ssv) \
  5892.   STMT_START { \
  5893.   SV *TeMpSv = dsv; \
  5894.   sv_setsv(TeMpSv,ssv); \
  5895.   SvSETMAGIC(TeMpSv); \
  5896.   } STMT_END
  5897. #endif
  5898.  
  5899. #ifndef sv_setuv_mg
  5900. # define sv_setuv_mg(sv, i) \
  5901.   STMT_START { \
  5902.   SV *TeMpSv = sv; \
  5903.   sv_setuv(TeMpSv,i); \
  5904.   SvSETMAGIC(TeMpSv); \
  5905.   } STMT_END
  5906. #endif
  5907.  
  5908. #ifndef sv_usepvn_mg
  5909. # define sv_usepvn_mg(sv, ptr, len) \
  5910.   STMT_START { \
  5911.   SV *TeMpSv = sv; \
  5912.   sv_usepvn(TeMpSv,ptr,len); \
  5913.   SvSETMAGIC(TeMpSv); \
  5914.   } STMT_END
  5915. #endif
  5916. #ifndef SvVSTRING_mg
  5917. # define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL)
  5918. #endif
  5919.  
  5920. /* Hint: sv_magic_portable
  5921.  * This is a compatibility function that is only available with
  5922.  * Devel::PPPort. It is NOT in the perl core.
  5923.  * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when
  5924.  * it is being passed a name pointer with namlen == 0. In that
  5925.  * case, perl 5.8.0 and later store the pointer, not a copy of it.
  5926.  * The compatibility can be provided back to perl 5.004. With
  5927.  * earlier versions, the code will not compile.
  5928.  */
  5929.  
  5930. #if (PERL_BCDVERSION < 0x5004000)
  5931.  
  5932. /* code that uses sv_magic_portable will not compile */
  5933.  
  5934. #elif (PERL_BCDVERSION < 0x5008000)
  5935.  
  5936. # define sv_magic_portable(sv, obj, how, name, namlen) \
  5937.   STMT_START { \
  5938.   SV *SvMp_sv = (sv); \
  5939.   char *SvMp_name = (char *) (name); \
  5940.   I32 SvMp_namlen = (namlen); \
  5941.   if (SvMp_name && SvMp_namlen == 0) \
  5942.   { \
  5943.   MAGIC *mg; \
  5944.   sv_magic(SvMp_sv, obj, how, 0, 0); \
  5945.   mg = SvMAGIC(SvMp_sv); \
  5946.   mg->mg_len = -42; /* XXX: this is the tricky part */ \
  5947.   mg->mg_ptr = SvMp_name; \
  5948.   } \
  5949.   else \
  5950.   { \
  5951.   sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \
  5952.   } \
  5953.   } STMT_END
  5954.  
  5955. #else
  5956.  
  5957. # define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e)
  5958.  
  5959. #endif
  5960.  
  5961. #ifdef USE_ITHREADS
  5962. #ifndef CopFILE
  5963. # define CopFILE(c) ((c)->cop_file)
  5964. #endif
  5965.  
  5966. #ifndef CopFILEGV
  5967. # define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv)
  5968. #endif
  5969.  
  5970. #ifndef CopFILE_set
  5971. # define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv))
  5972. #endif
  5973.  
  5974. #ifndef CopFILESV
  5975. # define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv)
  5976. #endif
  5977.  
  5978. #ifndef CopFILEAV
  5979. # define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav)
  5980. #endif
  5981.  
  5982. #ifndef CopSTASHPV
  5983. # define CopSTASHPV(c) ((c)->cop_stashpv)
  5984. #endif
  5985.  
  5986. #ifndef CopSTASHPV_set
  5987. # define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch))
  5988. #endif
  5989.  
  5990. #ifndef CopSTASH
  5991. # define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv)
  5992. #endif
  5993.  
  5994. #ifndef CopSTASH_set
  5995. # define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch)
  5996. #endif
  5997.  
  5998. #ifndef CopSTASH_eq
  5999. # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \
  6000. || (CopSTASHPV(c) && HvNAME(hv) \
  6001. && strEQ(CopSTASHPV(c), HvNAME(hv)))))
  6002. #endif
  6003.  
  6004. #else
  6005. #ifndef CopFILEGV
  6006. # define CopFILEGV(c) ((c)->cop_filegv)
  6007. #endif
  6008.  
  6009. #ifndef CopFILEGV_set
  6010. # define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
  6011. #endif
  6012.  
  6013. #ifndef CopFILE_set
  6014. # define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv))
  6015. #endif
  6016.  
  6017. #ifndef CopFILESV
  6018. # define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv)
  6019. #endif
  6020.  
  6021. #ifndef CopFILEAV
  6022. # define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav)
  6023. #endif
  6024.  
  6025. #ifndef CopFILE
  6026. # define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch)
  6027. #endif
  6028.  
  6029. #ifndef CopSTASH
  6030. # define CopSTASH(c) ((c)->cop_stash)
  6031. #endif
  6032.  
  6033. #ifndef CopSTASH_set
  6034. # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv))
  6035. #endif
  6036.  
  6037. #ifndef CopSTASHPV
  6038. # define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch)
  6039. #endif
  6040.  
  6041. #ifndef CopSTASHPV_set
  6042. # define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
  6043. #endif
  6044.  
  6045. #ifndef CopSTASH_eq
  6046. # define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv))
  6047. #endif
  6048.  
  6049. #endif /* USE_ITHREADS */
  6050. #ifndef IN_PERL_COMPILETIME
  6051. # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling)
  6052. #endif
  6053.  
  6054. #ifndef IN_LOCALE_RUNTIME
  6055. # define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE)
  6056. #endif
  6057.  
  6058. #ifndef IN_LOCALE_COMPILETIME
  6059. # define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE)
  6060. #endif
  6061.  
  6062. #ifndef IN_LOCALE
  6063. # define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
  6064. #endif
  6065. #ifndef IS_NUMBER_IN_UV
  6066. # define IS_NUMBER_IN_UV 0x01
  6067. #endif
  6068.  
  6069. #ifndef IS_NUMBER_GREATER_THAN_UV_MAX
  6070. # define IS_NUMBER_GREATER_THAN_UV_MAX 0x02
  6071. #endif
  6072.  
  6073. #ifndef IS_NUMBER_NOT_INT
  6074. # define IS_NUMBER_NOT_INT 0x04
  6075. #endif
  6076.  
  6077. #ifndef IS_NUMBER_NEG
  6078. # define IS_NUMBER_NEG 0x08
  6079. #endif
  6080.  
  6081. #ifndef IS_NUMBER_INFINITY
  6082. # define IS_NUMBER_INFINITY 0x10
  6083. #endif
  6084.  
  6085. #ifndef IS_NUMBER_NAN
  6086. # define IS_NUMBER_NAN 0x20
  6087. #endif
  6088. #ifndef GROK_NUMERIC_RADIX
  6089. # define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send)
  6090. #endif
  6091. #ifndef PERL_SCAN_GREATER_THAN_UV_MAX
  6092. # define PERL_SCAN_GREATER_THAN_UV_MAX 0x02
  6093. #endif
  6094.  
  6095. #ifndef PERL_SCAN_SILENT_ILLDIGIT
  6096. # define PERL_SCAN_SILENT_ILLDIGIT 0x04
  6097. #endif
  6098.  
  6099. #ifndef PERL_SCAN_ALLOW_UNDERSCORES
  6100. # define PERL_SCAN_ALLOW_UNDERSCORES 0x01
  6101. #endif
  6102.  
  6103. #ifndef PERL_SCAN_DISALLOW_PREFIX
  6104. # define PERL_SCAN_DISALLOW_PREFIX 0x02
  6105. #endif
  6106.  
  6107. #ifndef grok_numeric_radix
  6108. #if defined(NEED_grok_numeric_radix)
  6109. static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
  6110. static
  6111. #else
  6112. extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
  6113. #endif
  6114.  
  6115. #ifdef grok_numeric_radix
  6116. # undef grok_numeric_radix
  6117. #endif
  6118. #define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b)
  6119. #define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix)
  6120.  
  6121. #if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL)
  6122. bool
  6123. DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
  6124. {
  6125. #ifdef USE_LOCALE_NUMERIC
  6126. #ifdef PL_numeric_radix_sv
  6127. if (PL_numeric_radix_sv && IN_LOCALE) {
  6128. STRLEN len;
  6129. char* radix = SvPV(PL_numeric_radix_sv, len);
  6130. if (*sp + len <= send && memEQ(*sp, radix, len)) {
  6131. *sp += len;
  6132. return TRUE;
  6133. }
  6134. }
  6135. #else
  6136. /* older perls don't have PL_numeric_radix_sv so the radix
  6137.   * must manually be requested from locale.h
  6138.   */
  6139. #include <locale.h>
  6140. dTHR; /* needed for older threaded perls */
  6141. struct lconv *lc = localeconv();
  6142. char *radix = lc->decimal_point;
  6143. if (radix && IN_LOCALE) {
  6144. STRLEN len = strlen(radix);
  6145. if (*sp + len <= send && memEQ(*sp, radix, len)) {
  6146. *sp += len;
  6147. return TRUE;
  6148. }
  6149. }
  6150. #endif
  6151. #endif /* USE_LOCALE_NUMERIC */
  6152. /* always try "." if numeric radix didn't match because
  6153.   * we may have data from different locales mixed */
  6154. if (*sp < send && **sp == '.') {
  6155. ++*sp;
  6156. return TRUE;
  6157. }
  6158. return FALSE;
  6159. }
  6160. #endif
  6161. #endif
  6162.  
  6163. #ifndef grok_number
  6164. #if defined(NEED_grok_number)
  6165. static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
  6166. static
  6167. #else
  6168. extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
  6169. #endif
  6170.  
  6171. #ifdef grok_number
  6172. # undef grok_number
  6173. #endif
  6174. #define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c)
  6175. #define Perl_grok_number DPPP_(my_grok_number)
  6176.  
  6177. #if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL)
  6178. int
  6179. DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
  6180. {
  6181. const char *s = pv;
  6182. const char *send = pv + len;
  6183. const UV max_div_10 = UV_MAX / 10;
  6184. const char max_mod_10 = UV_MAX % 10;
  6185. int numtype = 0;
  6186. int sawinf = 0;
  6187. int sawnan = 0;
  6188.  
  6189. while (s < send && isSPACE(*s))
  6190. s++;
  6191. if (s == send) {
  6192. return 0;
  6193. } else if (*s == '-') {
  6194. s++;
  6195. numtype = IS_NUMBER_NEG;
  6196. }
  6197. else if (*s == '+')
  6198. s++;
  6199.  
  6200. if (s == send)
  6201. return 0;
  6202.  
  6203. /* next must be digit or the radix separator or beginning of infinity */
  6204. if (isDIGIT(*s)) {
  6205. /* UVs are at least 32 bits, so the first 9 decimal digits cannot
  6206.   overflow. */
  6207. UV value = *s - '0';
  6208. /* This construction seems to be more optimiser friendly.
  6209.   (without it gcc does the isDIGIT test and the *s - '0' separately)
  6210.   With it gcc on arm is managing 6 instructions (6 cycles) per digit.
  6211.   In theory the optimiser could deduce how far to unroll the loop
  6212.   before checking for overflow. */
  6213. if (++s < send) {
  6214. int digit = *s - '0';
  6215. if (digit >= 0 && digit <= 9) {
  6216. value = value * 10 + digit;
  6217. if (++s < send) {
  6218. digit = *s - '0';
  6219. if (digit >= 0 && digit <= 9) {
  6220. value = value * 10 + digit;
  6221. if (++s < send) {
  6222. digit = *s - '0';
  6223. if (digit >= 0 && digit <= 9) {
  6224. value = value * 10 + digit;
  6225. if (++s < send) {
  6226. digit = *s - '0';
  6227. if (digit >= 0 && digit <= 9) {
  6228. value = value * 10 + digit;
  6229. if (++s < send) {
  6230. digit = *s - '0';
  6231. if (digit >= 0 && digit <= 9) {
  6232. value = value * 10 + digit;
  6233. if (++s < send) {
  6234. digit = *s - '0';
  6235. if (digit >= 0 && digit <= 9) {
  6236. value = value * 10 + digit;
  6237. if (++s < send) {
  6238. digit = *s - '0';
  6239. if (digit >= 0 && digit <= 9) {
  6240. value = value * 10 + digit;
  6241. if (++s < send) {
  6242. digit = *s - '0';
  6243. if (digit >= 0 && digit <= 9) {
  6244. value = value * 10 + digit;
  6245. if (++s < send) {
  6246. /* Now got 9 digits, so need to check
  6247.   each time for overflow. */
  6248. digit = *s - '0';
  6249. while (digit >= 0 && digit <= 9
  6250. && (value < max_div_10
  6251. || (value == max_div_10
  6252. && digit <= max_mod_10))) {
  6253. value = value * 10 + digit;
  6254. if (++s < send)
  6255. digit = *s - '0';
  6256. else
  6257. break;
  6258. }
  6259. if (digit >= 0 && digit <= 9
  6260. && (s < send)) {
  6261. /* value overflowed.
  6262.   skip the remaining digits, don't
  6263.   worry about setting *valuep. */
  6264. do {
  6265. s++;
  6266. } while (s < send && isDIGIT(*s));
  6267. numtype |=
  6268. IS_NUMBER_GREATER_THAN_UV_MAX;
  6269. goto skip_value;
  6270. }
  6271. }
  6272. }
  6273. }
  6274. }
  6275. }
  6276. }
  6277. }
  6278. }
  6279. }
  6280. }
  6281. }
  6282. }
  6283. }
  6284. }
  6285. }
  6286. }
  6287. }
  6288. numtype |= IS_NUMBER_IN_UV;
  6289. if (valuep)
  6290. *valuep = value;
  6291.  
  6292. skip_value:
  6293. if (GROK_NUMERIC_RADIX(&s, send)) {
  6294. numtype |= IS_NUMBER_NOT_INT;
  6295. while (s < send && isDIGIT(*s)) /* optional digits after the radix */
  6296. s++;
  6297. }
  6298. }
  6299. else if (GROK_NUMERIC_RADIX(&s, send)) {
  6300. numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */
  6301. /* no digits before the radix means we need digits after it */
  6302. if (s < send && isDIGIT(*s)) {
  6303. do {
  6304. s++;
  6305. } while (s < send && isDIGIT(*s));
  6306. if (valuep) {
  6307. /* integer approximation is valid - it's 0. */
  6308. *valuep = 0;
  6309. }
  6310. }
  6311. else
  6312. return 0;
  6313. } else if (*s == 'I' || *s == 'i') {
  6314. s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
  6315. s++; if (s == send || (*s != 'F' && *s != 'f')) return 0;
  6316. s++; if (s < send && (*s == 'I' || *s == 'i')) {
  6317. s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
  6318. s++; if (s == send || (*s != 'I' && *s != 'i')) return 0;
  6319. s++; if (s == send || (*s != 'T' && *s != 't')) return 0;
  6320. s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0;
  6321. s++;
  6322. }
  6323. sawinf = 1;
  6324. } else if (*s == 'N' || *s == 'n') {
  6325. /* XXX TODO: There are signaling NaNs and quiet NaNs. */
  6326. s++; if (s == send || (*s != 'A' && *s != 'a')) return 0;
  6327. s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
  6328. s++;
  6329. sawnan = 1;
  6330. } else
  6331. return 0;
  6332.  
  6333. if (sawinf) {
  6334. numtype &= IS_NUMBER_NEG; /* Keep track of sign */
  6335. numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
  6336. } else if (sawnan) {
  6337. numtype &= IS_NUMBER_NEG; /* Keep track of sign */
  6338. numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;
  6339. } else if (s < send) {
  6340. /* we can have an optional exponent part */
  6341. if (*s == 'e' || *s == 'E') {
  6342. /* The only flag we keep is sign. Blow away any "it's UV" */
  6343. numtype &= IS_NUMBER_NEG;
  6344. numtype |= IS_NUMBER_NOT_INT;
  6345. s++;
  6346. if (s < send && (*s == '-' || *s == '+'))
  6347. s++;
  6348. if (s < send && isDIGIT(*s)) {
  6349. do {
  6350. s++;
  6351. } while (s < send && isDIGIT(*s));
  6352. }
  6353. else
  6354. return 0;
  6355. }
  6356. }
  6357. while (s < send && isSPACE(*s))
  6358. s++;
  6359. if (s >= send)
  6360. return numtype;
  6361. if (len == 10 && memEQ(pv, "0 but true", 10)) {
  6362. if (valuep)
  6363. *valuep = 0;
  6364. return IS_NUMBER_IN_UV;
  6365. }
  6366. return 0;
  6367. }
  6368. #endif
  6369. #endif
  6370.  
  6371. /*
  6372.  * The grok_* routines have been modified to use warn() instead of
  6373.  * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit,
  6374.  * which is why the stack variable has been renamed to 'xdigit'.
  6375.  */
  6376.  
  6377. #ifndef grok_bin
  6378. #if defined(NEED_grok_bin)
  6379. static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
  6380. static
  6381. #else
  6382. extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
  6383. #endif
  6384.  
  6385. #ifdef grok_bin
  6386. # undef grok_bin
  6387. #endif
  6388. #define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d)
  6389. #define Perl_grok_bin DPPP_(my_grok_bin)
  6390.  
  6391. #if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL)
  6392. UV
  6393. DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
  6394. {
  6395. const char *s = start;
  6396. STRLEN len = *len_p;
  6397. UV value = 0;
  6398. NV value_nv = 0;
  6399.  
  6400. const UV max_div_2 = UV_MAX / 2;
  6401. bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
  6402. bool overflowed = FALSE;
  6403.  
  6404. if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
  6405. /* strip off leading b or 0b.
  6406.   for compatibility silently suffer "b" and "0b" as valid binary
  6407.   numbers. */
  6408. if (len >= 1) {
  6409. if (s[0] == 'b') {
  6410. s++;
  6411. len--;
  6412. }
  6413. else if (len >= 2 && s[0] == '0' && s[1] == 'b') {
  6414. s+=2;
  6415. len-=2;
  6416. }
  6417. }
  6418. }
  6419.  
  6420. for (; len-- && *s; s++) {
  6421. char bit = *s;
  6422. if (bit == '0' || bit == '1') {
  6423. /* Write it in this wonky order with a goto to attempt to get the
  6424.   compiler to make the common case integer-only loop pretty tight.
  6425.   With gcc seems to be much straighter code than old scan_bin. */
  6426. redo:
  6427. if (!overflowed) {
  6428. if (value <= max_div_2) {
  6429. value = (value << 1) | (bit - '0');
  6430. continue;
  6431. }
  6432. /* Bah. We're just overflowed. */
  6433. warn("Integer overflow in binary number");
  6434. overflowed = TRUE;
  6435. value_nv = (NV) value;
  6436. }
  6437. value_nv *= 2.0;
  6438. /* If an NV has not enough bits in its mantissa to
  6439. * represent a UV this summing of small low-order numbers
  6440. * is a waste of time (because the NV cannot preserve
  6441. * the low-order bits anyway): we could just remember when
  6442. * did we overflow and in the end just multiply value_nv by the
  6443. * right amount. */
  6444. value_nv += (NV)(bit - '0');
  6445. continue;
  6446. }
  6447. if (bit == '_' && len && allow_underscores && (bit = s[1])
  6448. && (bit == '0' || bit == '1'))
  6449. {
  6450. --len;
  6451. ++s;
  6452. goto redo;
  6453. }
  6454. if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
  6455. warn("Illegal binary digit '%c' ignored", *s);
  6456. break;
  6457. }
  6458.  
  6459. if ( ( overflowed && value_nv > 4294967295.0)
  6460. #if UVSIZE > 4
  6461. || (!overflowed && value > 0xffffffff )
  6462. #endif
  6463. ) {
  6464. warn("Binary number > 0b11111111111111111111111111111111 non-portable");
  6465. }
  6466. *len_p = s - start;
  6467. if (!overflowed) {
  6468. *flags = 0;
  6469. return value;
  6470. }
  6471. *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
  6472. if (result)
  6473. *result = value_nv;
  6474. return UV_MAX;
  6475. }
  6476. #endif
  6477. #endif
  6478.  
  6479. #ifndef grok_hex
  6480. #if defined(NEED_grok_hex)
  6481. static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
  6482. static
  6483. #else
  6484. extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
  6485. #endif
  6486.  
  6487. #ifdef grok_hex
  6488. # undef grok_hex
  6489. #endif
  6490. #define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d)
  6491. #define Perl_grok_hex DPPP_(my_grok_hex)
  6492.  
  6493. #if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL)
  6494. UV
  6495. DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
  6496. {
  6497. const char *s = start;
  6498. STRLEN len = *len_p;
  6499. UV value = 0;
  6500. NV value_nv = 0;
  6501.  
  6502. const UV max_div_16 = UV_MAX / 16;
  6503. bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
  6504. bool overflowed = FALSE;
  6505. const char *xdigit;
  6506.  
  6507. if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
  6508. /* strip off leading x or 0x.
  6509.   for compatibility silently suffer "x" and "0x" as valid hex numbers.
  6510.   */
  6511. if (len >= 1) {
  6512. if (s[0] == 'x') {
  6513. s++;
  6514. len--;
  6515. }
  6516. else if (len >= 2 && s[0] == '0' && s[1] == 'x') {
  6517. s+=2;
  6518. len-=2;
  6519. }
  6520. }
  6521. }
  6522.  
  6523. for (; len-- && *s; s++) {
  6524. xdigit = strchr((char *) PL_hexdigit, *s);
  6525. if (xdigit) {
  6526. /* Write it in this wonky order with a goto to attempt to get the
  6527.   compiler to make the common case integer-only loop pretty tight.
  6528.   With gcc seems to be much straighter code than old scan_hex. */
  6529. redo:
  6530. if (!overflowed) {
  6531. if (value <= max_div_16) {
  6532. value = (value << 4) | ((xdigit - PL_hexdigit) & 15);
  6533. continue;
  6534. }
  6535. warn("Integer overflow in hexadecimal number");
  6536. overflowed = TRUE;
  6537. value_nv = (NV) value;
  6538. }
  6539. value_nv *= 16.0;
  6540. /* If an NV has not enough bits in its mantissa to
  6541. * represent a UV this summing of small low-order numbers
  6542. * is a waste of time (because the NV cannot preserve
  6543. * the low-order bits anyway): we could just remember when
  6544. * did we overflow and in the end just multiply value_nv by the
  6545. * right amount of 16-tuples. */
  6546. value_nv += (NV)((xdigit - PL_hexdigit) & 15);
  6547. continue;
  6548. }
  6549. if (*s == '_' && len && allow_underscores && s[1]
  6550. && (xdigit = strchr((char *) PL_hexdigit, s[1])))
  6551. {
  6552. --len;
  6553. ++s;
  6554. goto redo;
  6555. }
  6556. if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
  6557. warn("Illegal hexadecimal digit '%c' ignored", *s);
  6558. break;
  6559. }
  6560.  
  6561. if ( ( overflowed && value_nv > 4294967295.0)
  6562. #if UVSIZE > 4
  6563. || (!overflowed && value > 0xffffffff )
  6564. #endif
  6565. ) {
  6566. warn("Hexadecimal number > 0xffffffff non-portable");
  6567. }
  6568. *len_p = s - start;
  6569. if (!overflowed) {
  6570. *flags = 0;
  6571. return value;
  6572. }
  6573. *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
  6574. if (result)
  6575. *result = value_nv;
  6576. return UV_MAX;
  6577. }
  6578. #endif
  6579. #endif
  6580.  
  6581. #ifndef grok_oct
  6582. #if defined(NEED_grok_oct)
  6583. static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
  6584. static
  6585. #else
  6586. extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
  6587. #endif
  6588.  
  6589. #ifdef grok_oct
  6590. # undef grok_oct
  6591. #endif
  6592. #define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d)
  6593. #define Perl_grok_oct DPPP_(my_grok_oct)
  6594.  
  6595. #if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL)
  6596. UV
  6597. DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
  6598. {
  6599. const char *s = start;
  6600. STRLEN len = *len_p;
  6601. UV value = 0;
  6602. NV value_nv = 0;
  6603.  
  6604. const UV max_div_8 = UV_MAX / 8;
  6605. bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
  6606. bool overflowed = FALSE;
  6607.  
  6608. for (; len-- && *s; s++) {
  6609. /* gcc 2.95 optimiser not smart enough to figure that this subtraction
  6610.   out front allows slicker code. */
  6611. int digit = *s - '0';
  6612. if (digit >= 0 && digit <= 7) {
  6613. /* Write it in this wonky order with a goto to attempt to get the
  6614.   compiler to make the common case integer-only loop pretty tight.
  6615.   */
  6616. redo:
  6617. if (!overflowed) {
  6618. if (value <= max_div_8) {
  6619. value = (value << 3) | digit;
  6620. continue;
  6621. }
  6622. /* Bah. We're just overflowed. */
  6623. warn("Integer overflow in octal number");
  6624. overflowed = TRUE;
  6625. value_nv = (NV) value;
  6626. }
  6627. value_nv *= 8.0;
  6628. /* If an NV has not enough bits in its mantissa to
  6629. * represent a UV this summing of small low-order numbers
  6630. * is a waste of time (because the NV cannot preserve
  6631. * the low-order bits anyway): we could just remember when
  6632. * did we overflow and in the end just multiply value_nv by the
  6633. * right amount of 8-tuples. */
  6634. value_nv += (NV)digit;
  6635. continue;
  6636. }
  6637. if (digit == ('_' - '0') && len && allow_underscores
  6638. && (digit = s[1] - '0') && (digit >= 0 && digit <= 7))
  6639. {
  6640. --len;
  6641. ++s;
  6642. goto redo;
  6643. }
  6644. /* Allow \octal to work the DWIM way (that is, stop scanning
  6645.   * as soon as non-octal characters are seen, complain only iff
  6646.   * someone seems to want to use the digits eight and nine). */
  6647. if (digit == 8 || digit == 9) {
  6648. if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
  6649. warn("Illegal octal digit '%c' ignored", *s);
  6650. }
  6651. break;
  6652. }
  6653.  
  6654. if ( ( overflowed && value_nv > 4294967295.0)
  6655. #if UVSIZE > 4
  6656. || (!overflowed && value > 0xffffffff )
  6657. #endif
  6658. ) {
  6659. warn("Octal number > 037777777777 non-portable");
  6660. }
  6661. *len_p = s - start;
  6662. if (!overflowed) {
  6663. *flags = 0;
  6664. return value;
  6665. }
  6666. *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
  6667. if (result)
  6668. *result = value_nv;
  6669. return UV_MAX;
  6670. }
  6671. #endif
  6672. #endif
  6673.  
  6674. #if !defined(my_snprintf)
  6675. #if defined(NEED_my_snprintf)
  6676. static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
  6677. static
  6678. #else
  6679. extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
  6680. #endif
  6681.  
  6682. #define my_snprintf DPPP_(my_my_snprintf)
  6683. #define Perl_my_snprintf DPPP_(my_my_snprintf)
  6684.  
  6685. #if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL)
  6686.  
  6687. int
  6688. DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...)
  6689. {
  6690. dTHX;
  6691. int retval;
  6692. va_list ap;
  6693. va_start(ap, format);
  6694. #ifdef HAS_VSNPRINTF
  6695. retval = vsnprintf(buffer, len, format, ap);
  6696. #else
  6697. retval = vsprintf(buffer, format, ap);
  6698. #endif
  6699. va_end(ap);
  6700. if (retval < 0 || (len > 0 && (Size_t)retval >= len))
  6701. Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
  6702. return retval;
  6703. }
  6704.  
  6705. #endif
  6706. #endif
  6707.  
  6708. #if !defined(my_sprintf)
  6709. #if defined(NEED_my_sprintf)
  6710. static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
  6711. static
  6712. #else
  6713. extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
  6714. #endif
  6715.  
  6716. #define my_sprintf DPPP_(my_my_sprintf)
  6717. #define Perl_my_sprintf DPPP_(my_my_sprintf)
  6718.  
  6719. #if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL)
  6720.  
  6721. int
  6722. DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...)
  6723. {
  6724. va_list args;
  6725. va_start(args, pat);
  6726. vsprintf(buffer, pat, args);
  6727. va_end(args);
  6728. return strlen(buffer);
  6729. }
  6730.  
  6731. #endif
  6732. #endif
  6733.  
  6734. #ifdef NO_XSLOCKS
  6735. # ifdef dJMPENV
  6736. # define dXCPT dJMPENV; int rEtV = 0
  6737. # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0)
  6738. # define XCPT_TRY_END JMPENV_POP;
  6739. # define XCPT_CATCH if (rEtV != 0)
  6740. # define XCPT_RETHROW JMPENV_JUMP(rEtV)
  6741. # else
  6742. # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0
  6743. # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
  6744. # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf);
  6745. # define XCPT_CATCH if (rEtV != 0)
  6746. # define XCPT_RETHROW Siglongjmp(top_env, rEtV)
  6747. # endif
  6748. #endif
  6749.  
  6750. #if !defined(my_strlcat)
  6751. #if defined(NEED_my_strlcat)
  6752. static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
  6753. static
  6754. #else
  6755. extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
  6756. #endif
  6757.  
  6758. #define my_strlcat DPPP_(my_my_strlcat)
  6759. #define Perl_my_strlcat DPPP_(my_my_strlcat)
  6760.  
  6761. #if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL)
  6762.  
  6763. Size_t
  6764. DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size)
  6765. {
  6766. Size_t used, length, copy;
  6767.  
  6768. used = strlen(dst);
  6769. length = strlen(src);
  6770. if (size > 0 && used < size - 1) {
  6771. copy = (length >= size - used) ? size - used - 1 : length;
  6772. memcpy(dst + used, src, copy);
  6773. dst[used + copy] = '\0';
  6774. }
  6775. return used + length;
  6776. }
  6777. #endif
  6778. #endif
  6779.  
  6780. #if !defined(my_strlcpy)
  6781. #if defined(NEED_my_strlcpy)
  6782. static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
  6783. static
  6784. #else
  6785. extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
  6786. #endif
  6787.  
  6788. #define my_strlcpy DPPP_(my_my_strlcpy)
  6789. #define Perl_my_strlcpy DPPP_(my_my_strlcpy)
  6790.  
  6791. #if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL)
  6792.  
  6793. Size_t
  6794. DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size)
  6795. {
  6796. Size_t length, copy;
  6797.  
  6798. length = strlen(src);
  6799. if (size > 0) {
  6800. copy = (length >= size) ? size - 1 : length;
  6801. memcpy(dst, src, copy);
  6802. dst[copy] = '\0';
  6803. }
  6804. return length;
  6805. }
  6806.  
  6807. #endif
  6808. #endif
  6809. #ifndef PERL_PV_ESCAPE_QUOTE
  6810. # define PERL_PV_ESCAPE_QUOTE 0x0001
  6811. #endif
  6812.  
  6813. #ifndef PERL_PV_PRETTY_QUOTE
  6814. # define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE
  6815. #endif
  6816.  
  6817. #ifndef PERL_PV_PRETTY_ELLIPSES
  6818. # define PERL_PV_PRETTY_ELLIPSES 0x0002
  6819. #endif
  6820.  
  6821. #ifndef PERL_PV_PRETTY_LTGT
  6822. # define PERL_PV_PRETTY_LTGT 0x0004
  6823. #endif
  6824.  
  6825. #ifndef PERL_PV_ESCAPE_FIRSTCHAR
  6826. # define PERL_PV_ESCAPE_FIRSTCHAR 0x0008
  6827. #endif
  6828.  
  6829. #ifndef PERL_PV_ESCAPE_UNI
  6830. # define PERL_PV_ESCAPE_UNI 0x0100
  6831. #endif
  6832.  
  6833. #ifndef PERL_PV_ESCAPE_UNI_DETECT
  6834. # define PERL_PV_ESCAPE_UNI_DETECT 0x0200
  6835. #endif
  6836.  
  6837. #ifndef PERL_PV_ESCAPE_ALL
  6838. # define PERL_PV_ESCAPE_ALL 0x1000
  6839. #endif
  6840.  
  6841. #ifndef PERL_PV_ESCAPE_NOBACKSLASH
  6842. # define PERL_PV_ESCAPE_NOBACKSLASH 0x2000
  6843. #endif
  6844.  
  6845. #ifndef PERL_PV_ESCAPE_NOCLEAR
  6846. # define PERL_PV_ESCAPE_NOCLEAR 0x4000
  6847. #endif
  6848.  
  6849. #ifndef PERL_PV_ESCAPE_RE
  6850. # define PERL_PV_ESCAPE_RE 0x8000
  6851. #endif
  6852.  
  6853. #ifndef PERL_PV_PRETTY_NOCLEAR
  6854. # define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR
  6855. #endif
  6856. #ifndef PERL_PV_PRETTY_DUMP
  6857. # define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE
  6858. #endif
  6859.  
  6860. #ifndef PERL_PV_PRETTY_REGPROP
  6861. # define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE
  6862. #endif
  6863.  
  6864. /* Hint: pv_escape
  6865.  * Note that unicode functionality is only backported to
  6866.  * those perl versions that support it. For older perl
  6867.  * versions, the implementation will fall back to bytes.
  6868.  */
  6869.  
  6870. #ifndef pv_escape
  6871. #if defined(NEED_pv_escape)
  6872. 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);
  6873. static
  6874. #else
  6875. 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);
  6876. #endif
  6877.  
  6878. #ifdef pv_escape
  6879. # undef pv_escape
  6880. #endif
  6881. #define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f)
  6882. #define Perl_pv_escape DPPP_(my_pv_escape)
  6883.  
  6884. #if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL)
  6885.  
  6886. char *
  6887. DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str,
  6888. const STRLEN count, const STRLEN max,
  6889. STRLEN * const escaped, const U32 flags)
  6890. {
  6891. const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\';
  6892. const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc;
  6893. char octbuf[32] = "%123456789ABCDF";
  6894. STRLEN wrote = 0;
  6895. STRLEN chsize = 0;
  6896. STRLEN readsize = 1;
  6897. #if defined(is_utf8_string) && defined(utf8_to_uvchr)
  6898. bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0;
  6899. #endif
  6900. const char *pv = str;
  6901. const char * const end = pv + count;
  6902. octbuf[0] = esc;
  6903.  
  6904. if (!(flags & PERL_PV_ESCAPE_NOCLEAR))
  6905. sv_setpvs(dsv, "");
  6906.  
  6907. #if defined(is_utf8_string) && defined(utf8_to_uvchr)
  6908. if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count))
  6909. isuni = 1;
  6910. #endif
  6911.  
  6912. for (; pv < end && (!max || wrote < max) ; pv += readsize) {
  6913. const UV u =
  6914. #if defined(is_utf8_string) && defined(utf8_to_uvchr)
  6915. isuni ? utf8_to_uvchr((U8*)pv, &readsize) :
  6916. #endif
  6917. (U8)*pv;
  6918. const U8 c = (U8)u & 0xFF;
  6919.  
  6920. if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) {
  6921. if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
  6922. chsize = my_snprintf(octbuf, sizeof octbuf,
  6923. "%"UVxf, u);
  6924. else
  6925. chsize = my_snprintf(octbuf, sizeof octbuf,
  6926. "%cx{%"UVxf"}", esc, u);
  6927. } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) {
  6928. chsize = 1;
  6929. } else {
  6930. if (c == dq || c == esc || !isPRINT(c)) {
  6931. chsize = 2;
  6932. switch (c) {
  6933. case '\\' : /* fallthrough */
  6934. case '%' : if (c == esc)
  6935. octbuf[1] = esc;
  6936. else
  6937. chsize = 1;
  6938. break;
  6939. case '\v' : octbuf[1] = 'v'; break;
  6940. case '\t' : octbuf[1] = 't'; break;
  6941. case '\r' : octbuf[1] = 'r'; break;
  6942. case '\n' : octbuf[1] = 'n'; break;
  6943. case '\f' : octbuf[1] = 'f'; break;
  6944. case '"' : if (dq == '"')
  6945. octbuf[1] = '"';
  6946. else
  6947. chsize = 1;
  6948. break;
  6949. default: chsize = my_snprintf(octbuf, sizeof octbuf,
  6950. pv < end && isDIGIT((U8)*(pv+readsize))
  6951. ? "%c%03o" : "%c%o", esc, c);
  6952. }
  6953. } else {
  6954. chsize = 1;
  6955. }
  6956. }
  6957. if (max && wrote + chsize > max) {
  6958. break;
  6959. } else if (chsize > 1) {
  6960. sv_catpvn(dsv, octbuf, chsize);
  6961. wrote += chsize;
  6962. } else {
  6963. char tmp[2];
  6964. my_snprintf(tmp, sizeof tmp, "%c", c);
  6965. sv_catpvn(dsv, tmp, 1);
  6966. wrote++;
  6967. }
  6968. if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
  6969. break;
  6970. }
  6971. if (escaped != NULL)
  6972. *escaped= pv - str;
  6973. return SvPVX(dsv);
  6974. }
  6975.  
  6976. #endif
  6977. #endif
  6978.  
  6979. #ifndef pv_pretty
  6980. #if defined(NEED_pv_pretty)
  6981. 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);
  6982. static
  6983. #else
  6984. 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);
  6985. #endif
  6986.  
  6987. #ifdef pv_pretty
  6988. # undef pv_pretty
  6989. #endif
  6990. #define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g)
  6991. #define Perl_pv_pretty DPPP_(my_pv_pretty)
  6992.  
  6993. #if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL)
  6994.  
  6995. char *
  6996. DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count,
  6997. const STRLEN max, char const * const start_color, char const * const end_color,
  6998. const U32 flags)
  6999. {
  7000. const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%';
  7001. STRLEN escaped;
  7002.  
  7003. if (!(flags & PERL_PV_PRETTY_NOCLEAR))
  7004. sv_setpvs(dsv, "");
  7005.  
  7006. if (dq == '"')
  7007. sv_catpvs(dsv, "\"");
  7008. else if (flags & PERL_PV_PRETTY_LTGT)
  7009. sv_catpvs(dsv, "<");
  7010.  
  7011. if (start_color != NULL)
  7012. sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color));
  7013.  
  7014. pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR);
  7015.  
  7016. if (end_color != NULL)
  7017. sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color));
  7018.  
  7019. if (dq == '"')
  7020. sv_catpvs(dsv, "\"");
  7021. else if (flags & PERL_PV_PRETTY_LTGT)
  7022. sv_catpvs(dsv, ">");
  7023.  
  7024. if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count)
  7025. sv_catpvs(dsv, "...");
  7026.  
  7027. return SvPVX(dsv);
  7028. }
  7029.  
  7030. #endif
  7031. #endif
  7032.  
  7033. #ifndef pv_display
  7034. #if defined(NEED_pv_display)
  7035. static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
  7036. static
  7037. #else
  7038. extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
  7039. #endif
  7040.  
  7041. #ifdef pv_display
  7042. # undef pv_display
  7043. #endif
  7044. #define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e)
  7045. #define Perl_pv_display DPPP_(my_pv_display)
  7046.  
  7047. #if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL)
  7048.  
  7049. char *
  7050. DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
  7051. {
  7052. pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP);
  7053. if (len > cur && pv[cur] == '\0')
  7054. sv_catpvs(dsv, "\\0");
  7055. return SvPVX(dsv);
  7056. }
  7057.  
  7058. #endif
  7059. #endif
  7060.  
  7061. #endif /* _P_P_PORTABILITY_H_ */
  7062.  
  7063. /* End of File ppport.h */
  7064.