Blame ppport.h

Packit d03632
#if 0
Packit d03632
<<'SKIP';
Packit d03632
#endif
Packit d03632
/*
Packit d03632
----------------------------------------------------------------------
Packit d03632
Packit d03632
    ppport.h -- Perl/Pollution/Portability Version 3.21
Packit d03632
Packit d03632
    Automatically created by Devel::PPPort running under perl 5.019005.
Packit d03632
Packit d03632
    Do NOT edit this file directly! -- Edit PPPort_pm.PL and the
Packit d03632
    includes in parts/inc/ instead.
Packit d03632
Packit d03632
    Use 'perldoc ppport.h' to view the documentation below.
Packit d03632
Packit d03632
----------------------------------------------------------------------
Packit d03632
Packit d03632
SKIP
Packit d03632
Packit d03632
=pod
Packit d03632
Packit d03632
=head1 NAME
Packit d03632
Packit d03632
ppport.h - Perl/Pollution/Portability version 3.21
Packit d03632
Packit d03632
=head1 SYNOPSIS
Packit d03632
Packit d03632
  perl ppport.h [options] [source files]
Packit d03632
Packit d03632
  Searches current directory for files if no [source files] are given
Packit d03632
Packit d03632
  --help                      show short help
Packit d03632
Packit d03632
  --version                   show version
Packit d03632
Packit d03632
  --patch=file                write one patch file with changes
Packit d03632
  --copy=suffix               write changed copies with suffix
Packit d03632
  --diff=program              use diff program and options
Packit d03632
Packit d03632
  --compat-version=version    provide compatibility with Perl version
Packit d03632
  --cplusplus                 accept C++ comments
Packit d03632
Packit d03632
  --quiet                     don't output anything except fatal errors
Packit d03632
  --nodiag                    don't show diagnostics
Packit d03632
  --nohints                   don't show hints
Packit d03632
  --nochanges                 don't suggest changes
Packit d03632
  --nofilter                  don't filter input files
Packit d03632
Packit d03632
  --strip                     strip all script and doc functionality from
Packit d03632
                              ppport.h
Packit d03632
Packit d03632
  --list-provided             list provided API
Packit d03632
  --list-unsupported          list unsupported API
Packit d03632
  --api-info=name             show Perl API portability information
Packit d03632
Packit d03632
=head1 COMPATIBILITY
Packit d03632
Packit d03632
This version of F<ppport.h> is designed to support operation with Perl
Packit d03632
installations back to 5.003, and has been tested up to 5.11.5.
Packit d03632
Packit d03632
=head1 OPTIONS
Packit d03632
Packit d03632
=head2 --help
Packit d03632
Packit d03632
Display a brief usage summary.
Packit d03632
Packit d03632
=head2 --version
Packit d03632
Packit d03632
Display the version of F<ppport.h>.
Packit d03632
Packit d03632
=head2 --patch=I<file>
Packit d03632
Packit d03632
If this option is given, a single patch file will be created if
Packit d03632
any changes are suggested. This requires a working diff program
Packit d03632
to be installed on your system.
Packit d03632
Packit d03632
=head2 --copy=I<suffix>
Packit d03632
Packit d03632
If this option is given, a copy of each file will be saved with
Packit d03632
the given suffix that contains the suggested changes. This does
Packit d03632
not require any external programs. Note that this does not
Packit d03632
automagially add a dot between the original filename and the
Packit d03632
suffix. If you want the dot, you have to include it in the option
Packit d03632
argument.
Packit d03632
Packit d03632
If neither C<--patch> or C<--copy> are given, the default is to
Packit d03632
simply print the diffs for each file. This requires either
Packit d03632
C<Text::Diff> or a C<diff> program to be installed.
Packit d03632
Packit d03632
=head2 --diff=I<program>
Packit d03632
Packit d03632
Manually set the diff program and options to use. The default
Packit d03632
is to use C<Text::Diff>, when installed, and output unified
Packit d03632
context diffs.
Packit d03632
Packit d03632
=head2 --compat-version=I<version>
Packit d03632
Packit d03632
Tell F<ppport.h> to check for compatibility with the given
Packit d03632
Perl version. The default is to check for compatibility with Perl
Packit d03632
version 5.003. You can use this option to reduce the output
Packit d03632
of F<ppport.h> if you intend to be backward compatible only
Packit d03632
down to a certain Perl version.
Packit d03632
Packit d03632
=head2 --cplusplus
Packit d03632
Packit d03632
Usually, F<ppport.h> will detect C++ style comments and
Packit d03632
replace them with C style comments for portability reasons.
Packit d03632
Using this option instructs F<ppport.h> to leave C++
Packit d03632
comments untouched.
Packit d03632
Packit d03632
=head2 --quiet
Packit d03632
Packit d03632
Be quiet. Don't print anything except fatal errors.
Packit d03632
Packit d03632
=head2 --nodiag
Packit d03632
Packit d03632
Don't output any diagnostic messages. Only portability
Packit d03632
alerts will be printed.
Packit d03632
Packit d03632
=head2 --nohints
Packit d03632
Packit d03632
Don't output any hints. Hints often contain useful portability
Packit d03632
notes. Warnings will still be displayed.
Packit d03632
Packit d03632
=head2 --nochanges
Packit d03632
Packit d03632
Don't suggest any changes. Only give diagnostic output and hints
Packit d03632
unless these are also deactivated.
Packit d03632
Packit d03632
=head2 --nofilter
Packit d03632
Packit d03632
Don't filter the list of input files. By default, files not looking
Packit d03632
like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped.
Packit d03632
Packit d03632
=head2 --strip
Packit d03632
Packit d03632
Strip all script and documentation functionality from F<ppport.h>.
Packit d03632
This reduces the size of F<ppport.h> dramatically and may be useful
Packit d03632
if you want to include F<ppport.h> in smaller modules without
Packit d03632
increasing their distribution size too much.
Packit d03632
Packit d03632
The stripped F<ppport.h> will have a C<--unstrip> option that allows
Packit d03632
you to undo the stripping, but only if an appropriate C<Devel::PPPort>
Packit d03632
module is installed.
Packit d03632
Packit d03632
=head2 --list-provided
Packit d03632
Packit d03632
Lists the API elements for which compatibility is provided by
Packit d03632
F<ppport.h>. Also lists if it must be explicitly requested,
Packit d03632
if it has dependencies, and if there are hints or warnings for it.
Packit d03632
Packit d03632
=head2 --list-unsupported
Packit d03632
Packit d03632
Lists the API elements that are known not to be supported by
Packit d03632
F<ppport.h> and below which version of Perl they probably
Packit d03632
won't be available or work.
Packit d03632
Packit d03632
=head2 --api-info=I<name>
Packit d03632
Packit d03632
Show portability information for API elements matching I<name>.
Packit d03632
If I<name> is surrounded by slashes, it is interpreted as a regular
Packit d03632
expression.
Packit d03632
Packit d03632
=head1 DESCRIPTION
Packit d03632
Packit d03632
In order for a Perl extension (XS) module to be as portable as possible
Packit d03632
across differing versions of Perl itself, certain steps need to be taken.
Packit d03632
Packit d03632
=over 4
Packit d03632
Packit d03632
=item *
Packit d03632
Packit d03632
Including this header is the first major one. This alone will give you
Packit d03632
access to a large part of the Perl API that hasn't been available in
Packit d03632
earlier Perl releases. Use
Packit d03632
Packit d03632
    perl ppport.h --list-provided
Packit d03632
Packit d03632
to see which API elements are provided by ppport.h.
Packit d03632
Packit d03632
=item *
Packit d03632
Packit d03632
You should avoid using deprecated parts of the API. For example, using
Packit d03632
global Perl variables without the C<PL_> prefix is deprecated. Also,
Packit d03632
some API functions used to have a C<perl_> prefix. Using this form is
Packit d03632
also deprecated. You can safely use the supported API, as F<ppport.h>
Packit d03632
will provide wrappers for older Perl versions.
Packit d03632
Packit d03632
=item *
Packit d03632
Packit d03632
If you use one of a few functions or variables that were not present in
Packit d03632
earlier versions of Perl, and that can't be provided using a macro, you
Packit d03632
have to explicitly request support for these functions by adding one or
Packit d03632
more C<#define>s in your source code before the inclusion of F<ppport.h>.
Packit d03632
Packit d03632
These functions or variables will be marked C<explicit> in the list shown
Packit d03632
by C<--list-provided>.
Packit d03632
Packit d03632
Depending on whether you module has a single or multiple files that
Packit d03632
use such functions or variables, you want either C<static> or global
Packit d03632
variants.
Packit d03632
Packit d03632
For a C<static> function or variable (used only in a single source
Packit d03632
file), use:
Packit d03632
Packit d03632
    #define NEED_function
Packit d03632
    #define NEED_variable
Packit d03632
Packit d03632
For a global function or variable (used in multiple source files),
Packit d03632
use:
Packit d03632
Packit d03632
    #define NEED_function_GLOBAL
Packit d03632
    #define NEED_variable_GLOBAL
Packit d03632
Packit d03632
Note that you mustn't have more than one global request for the
Packit d03632
same function or variable in your project.
Packit d03632
Packit d03632
    Function / Variable       Static Request               Global Request
Packit d03632
    -----------------------------------------------------------------------------------------
Packit d03632
    PL_parser                 NEED_PL_parser               NEED_PL_parser_GLOBAL
Packit d03632
    PL_signals                NEED_PL_signals              NEED_PL_signals_GLOBAL
Packit d03632
    eval_pv()                 NEED_eval_pv                 NEED_eval_pv_GLOBAL
Packit d03632
    grok_bin()                NEED_grok_bin                NEED_grok_bin_GLOBAL
Packit d03632
    grok_hex()                NEED_grok_hex                NEED_grok_hex_GLOBAL
Packit d03632
    grok_number()             NEED_grok_number             NEED_grok_number_GLOBAL
Packit d03632
    grok_numeric_radix()      NEED_grok_numeric_radix      NEED_grok_numeric_radix_GLOBAL
Packit d03632
    grok_oct()                NEED_grok_oct                NEED_grok_oct_GLOBAL
Packit d03632
    load_module()             NEED_load_module             NEED_load_module_GLOBAL
Packit d03632
    my_snprintf()             NEED_my_snprintf             NEED_my_snprintf_GLOBAL
Packit d03632
    my_sprintf()              NEED_my_sprintf              NEED_my_sprintf_GLOBAL
Packit d03632
    my_strlcat()              NEED_my_strlcat              NEED_my_strlcat_GLOBAL
Packit d03632
    my_strlcpy()              NEED_my_strlcpy              NEED_my_strlcpy_GLOBAL
Packit d03632
    newCONSTSUB()             NEED_newCONSTSUB             NEED_newCONSTSUB_GLOBAL
Packit d03632
    newRV_noinc()             NEED_newRV_noinc             NEED_newRV_noinc_GLOBAL
Packit d03632
    newSV_type()              NEED_newSV_type              NEED_newSV_type_GLOBAL
Packit d03632
    newSVpvn_flags()          NEED_newSVpvn_flags          NEED_newSVpvn_flags_GLOBAL
Packit d03632
    newSVpvn_share()          NEED_newSVpvn_share          NEED_newSVpvn_share_GLOBAL
Packit d03632
    pv_display()              NEED_pv_display              NEED_pv_display_GLOBAL
Packit d03632
    pv_escape()               NEED_pv_escape               NEED_pv_escape_GLOBAL
Packit d03632
    pv_pretty()               NEED_pv_pretty               NEED_pv_pretty_GLOBAL
Packit d03632
    sv_2pv_flags()            NEED_sv_2pv_flags            NEED_sv_2pv_flags_GLOBAL
Packit d03632
    sv_2pvbyte()              NEED_sv_2pvbyte              NEED_sv_2pvbyte_GLOBAL
Packit d03632
    sv_catpvf_mg()            NEED_sv_catpvf_mg            NEED_sv_catpvf_mg_GLOBAL
Packit d03632
    sv_catpvf_mg_nocontext()  NEED_sv_catpvf_mg_nocontext  NEED_sv_catpvf_mg_nocontext_GLOBAL
Packit d03632
    sv_pvn_force_flags()      NEED_sv_pvn_force_flags      NEED_sv_pvn_force_flags_GLOBAL
Packit d03632
    sv_setpvf_mg()            NEED_sv_setpvf_mg            NEED_sv_setpvf_mg_GLOBAL
Packit d03632
    sv_setpvf_mg_nocontext()  NEED_sv_setpvf_mg_nocontext  NEED_sv_setpvf_mg_nocontext_GLOBAL
Packit d03632
    vload_module()            NEED_vload_module            NEED_vload_module_GLOBAL
Packit d03632
    vnewSVpvf()               NEED_vnewSVpvf               NEED_vnewSVpvf_GLOBAL
Packit d03632
    warner()                  NEED_warner                  NEED_warner_GLOBAL
Packit d03632
Packit d03632
To avoid namespace conflicts, you can change the namespace of the
Packit d03632
explicitly exported functions / variables using the C<DPPP_NAMESPACE>
Packit d03632
macro. Just C<#define> the macro before including C<ppport.h>:
Packit d03632
Packit d03632
    #define DPPP_NAMESPACE MyOwnNamespace_
Packit d03632
    #include "ppport.h"
Packit d03632
Packit d03632
The default namespace is C<DPPP_>.
Packit d03632
Packit d03632
=back
Packit d03632
Packit d03632
The good thing is that most of the above can be checked by running
Packit d03632
F<ppport.h> on your source code. See the next section for
Packit d03632
details.
Packit d03632
Packit d03632
=head1 EXAMPLES
Packit d03632
Packit d03632
To verify whether F<ppport.h> is needed for your module, whether you
Packit d03632
should make any changes to your code, and whether any special defines
Packit d03632
should be used, F<ppport.h> can be run as a Perl script to check your
Packit d03632
source code. Simply say:
Packit d03632
Packit d03632
    perl ppport.h
Packit d03632
Packit d03632
The result will usually be a list of patches suggesting changes
Packit d03632
that should at least be acceptable, if not necessarily the most
Packit d03632
efficient solution, or a fix for all possible problems.
Packit d03632
Packit d03632
If you know that your XS module uses features only available in
Packit d03632
newer Perl releases, if you're aware that it uses C++ comments,
Packit d03632
and if you want all suggestions as a single patch file, you could
Packit d03632
use something like this:
Packit d03632
Packit d03632
    perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff
Packit d03632
Packit d03632
If you only want your code to be scanned without any suggestions
Packit d03632
for changes, use:
Packit d03632
Packit d03632
    perl ppport.h --nochanges
Packit d03632
Packit d03632
You can specify a different C<diff> program or options, using
Packit d03632
the C<--diff> option:
Packit d03632
Packit d03632
    perl ppport.h --diff='diff -C 10'
Packit d03632
Packit d03632
This would output context diffs with 10 lines of context.
Packit d03632
Packit d03632
If you want to create patched copies of your files instead, use:
Packit d03632
Packit d03632
    perl ppport.h --copy=.new
Packit d03632
Packit d03632
To display portability information for the C<newSVpvn> function,
Packit d03632
use:
Packit d03632
Packit d03632
    perl ppport.h --api-info=newSVpvn
Packit d03632
Packit d03632
Since the argument to C<--api-info> can be a regular expression,
Packit d03632
you can use
Packit d03632
Packit d03632
    perl ppport.h --api-info=/_nomg$/
Packit d03632
Packit d03632
to display portability information for all C<_nomg> functions or
Packit d03632
Packit d03632
    perl ppport.h --api-info=/./
Packit d03632
Packit d03632
to display information for all known API elements.
Packit d03632
Packit d03632
=head1 BUGS
Packit d03632
Packit d03632
If this version of F<ppport.h> is causing failure during
Packit d03632
the compilation of this module, please check if newer versions
Packit d03632
of either this module or C<Devel::PPPort> are available on CPAN
Packit d03632
before sending a bug report.
Packit d03632
Packit d03632
If F<ppport.h> was generated using the latest version of
Packit d03632
C<Devel::PPPort> and is causing failure of this module, please
Packit d03632
file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>.
Packit d03632
Packit d03632
Please include the following information:
Packit d03632
Packit d03632
=over 4
Packit d03632
Packit d03632
=item 1.
Packit d03632
Packit d03632
The complete output from running "perl -V"
Packit d03632
Packit d03632
=item 2.
Packit d03632
Packit d03632
This file.
Packit d03632
Packit d03632
=item 3.
Packit d03632
Packit d03632
The name and version of the module you were trying to build.
Packit d03632
Packit d03632
=item 4.
Packit d03632
Packit d03632
A full log of the build that failed.
Packit d03632
Packit d03632
=item 5.
Packit d03632
Packit d03632
Any other information that you think could be relevant.
Packit d03632
Packit d03632
=back
Packit d03632
Packit d03632
For the latest version of this code, please get the C<Devel::PPPort>
Packit d03632
module from CPAN.
Packit d03632
Packit d03632
=head1 COPYRIGHT
Packit d03632
Packit d03632
Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz.
Packit d03632
Packit d03632
Version 2.x, Copyright (C) 2001, Paul Marquess.
Packit d03632
Packit d03632
Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
Packit d03632
Packit d03632
This program is free software; you can redistribute it and/or
Packit d03632
modify it under the same terms as Perl itself.
Packit d03632
Packit d03632
=head1 SEE ALSO
Packit d03632
Packit d03632
See L<Devel::PPPort>.
Packit d03632
Packit d03632
=cut
Packit d03632
Packit d03632
use strict;
Packit d03632
Packit d03632
# Disable broken TRIE-optimization
Packit d03632
BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 }
Packit d03632
Packit d03632
my $VERSION = 3.21;
Packit d03632
Packit d03632
my %opt = (
Packit d03632
  quiet     => 0,
Packit d03632
  diag      => 1,
Packit d03632
  hints     => 1,
Packit d03632
  changes   => 1,
Packit d03632
  cplusplus => 0,
Packit d03632
  filter    => 1,
Packit d03632
  strip     => 0,
Packit d03632
  version   => 0,
Packit d03632
);
Packit d03632
Packit d03632
my($ppport) = $0 =~ /([\w.]+)$/;
Packit d03632
my $LF = '(?:\r\n|[\r\n])';   # line feed
Packit d03632
my $HS = "[ \t]";             # horizontal whitespace
Packit d03632
Packit d03632
# Never use C comments in this file!
Packit d03632
my $ccs  = '/'.'*';
Packit d03632
my $cce  = '*'.'/';
Packit d03632
my $rccs = quotemeta $ccs;
Packit d03632
my $rcce = quotemeta $cce;
Packit d03632
Packit d03632
eval {
Packit d03632
  require Getopt::Long;
Packit d03632
  Getopt::Long::GetOptions(\%opt, qw(
Packit d03632
    help quiet diag! filter! hints! changes! cplusplus strip version
Packit d03632
    patch=s copy=s diff=s compat-version=s
Packit d03632
    list-provided list-unsupported api-info=s
Packit d03632
  )) or usage();
Packit d03632
};
Packit d03632
Packit d03632
if ($@ and grep /^-/, @ARGV) {
Packit d03632
  usage() if "@ARGV" =~ /^--?h(?:elp)?$/;
Packit d03632
  die "Getopt::Long not found. Please don't use any options.\n";
Packit d03632
}
Packit d03632
Packit d03632
if ($opt{version}) {
Packit d03632
  print "This is $0 $VERSION.\n";
Packit d03632
  exit 0;
Packit d03632
}
Packit d03632
Packit d03632
usage() if $opt{help};
Packit d03632
strip() if $opt{strip};
Packit d03632
Packit d03632
if (exists $opt{'compat-version'}) {
Packit d03632
  my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) };
Packit d03632
  if ($@) {
Packit d03632
    die "Invalid version number format: '$opt{'compat-version'}'\n";
Packit d03632
  }
Packit d03632
  die "Only Perl 5 is supported\n" if $r != 5;
Packit d03632
  die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000;
Packit d03632
  $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s;
Packit d03632
}
Packit d03632
else {
Packit d03632
  $opt{'compat-version'} = 5;
Packit d03632
}
Packit d03632
Packit d03632
my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/
Packit d03632
                ? ( $1 => {
Packit d03632
                      ($2                  ? ( base     => $2 ) : ()),
Packit d03632
                      ($3                  ? ( todo     => $3 ) : ()),
Packit d03632
                      (index($4, 'v') >= 0 ? ( varargs  => 1  ) : ()),
Packit d03632
                      (index($4, 'p') >= 0 ? ( provided => 1  ) : ()),
Packit d03632
                      (index($4, 'n') >= 0 ? ( nothxarg => 1  ) : ()),
Packit d03632
                    } )
Packit d03632
                : die "invalid spec: $_" } qw(
Packit d03632
AvFILLp|5.004050||p
Packit d03632
AvFILL|||
Packit d03632
BhkDISABLE||5.019003|
Packit d03632
BhkENABLE||5.019003|
Packit d03632
BhkENTRY_set||5.019003|
Packit d03632
BhkENTRY|||
Packit d03632
BhkFLAGS|||
Packit d03632
CALL_BLOCK_HOOKS|||
Packit d03632
CLASS|||n
Packit d03632
CPERLscope|5.005000||p
Packit d03632
CX_CURPAD_SAVE|||
Packit d03632
CX_CURPAD_SV|||
Packit d03632
CopFILEAV|5.006000||p
Packit d03632
CopFILEGV_set|5.006000||p
Packit d03632
CopFILEGV|5.006000||p
Packit d03632
CopFILESV|5.006000||p
Packit d03632
CopFILE_set|5.006000||p
Packit d03632
CopFILE|5.006000||p
Packit d03632
CopSTASHPV_set|5.006000||p
Packit d03632
CopSTASHPV|5.006000||p
Packit d03632
CopSTASH_eq|5.006000||p
Packit d03632
CopSTASH_set|5.006000||p
Packit d03632
CopSTASH|5.006000||p
Packit d03632
CopyD|5.009002|5.004050|p
Packit d03632
Copy||5.004050|
Packit d03632
CvPADLIST||5.008001|
Packit d03632
CvSTASH|||
Packit d03632
CvWEAKOUTSIDE|||
Packit d03632
DEFSV_set|5.010001||p
Packit d03632
DEFSV|5.004050||p
Packit d03632
END_EXTERN_C|5.005000||p
Packit d03632
ENTER|||
Packit d03632
ERRSV|5.004050||p
Packit d03632
EXTEND|||
Packit d03632
EXTERN_C|5.005000||p
Packit d03632
F0convert|||n
Packit d03632
FREETMPS|||
Packit d03632
GIMME_V||5.004000|n
Packit d03632
GIMME|||n
Packit d03632
GROK_NUMERIC_RADIX|5.007002||p
Packit d03632
G_ARRAY|||
Packit d03632
G_DISCARD|||
Packit d03632
G_EVAL|||
Packit d03632
G_METHOD|5.006001||p
Packit d03632
G_NOARGS|||
Packit d03632
G_SCALAR|||
Packit d03632
G_VOID||5.004000|
Packit d03632
GetVars|||
Packit d03632
GvAV|||
Packit d03632
GvCV|||
Packit d03632
GvHV|||
Packit d03632
GvSVn|5.009003||p
Packit d03632
GvSV|||
Packit d03632
Gv_AMupdate||5.011000|
Packit d03632
HEf_SVKEY||5.004000|
Packit d03632
HeHASH||5.004000|
Packit d03632
HeKEY||5.004000|
Packit d03632
HeKLEN||5.004000|
Packit d03632
HePV||5.004000|
Packit d03632
HeSVKEY_force||5.004000|
Packit d03632
HeSVKEY_set||5.004000|
Packit d03632
HeSVKEY||5.004000|
Packit d03632
HeUTF8||5.010001|
Packit d03632
HeVAL||5.004000|
Packit d03632
HvENAMELEN||5.015004|
Packit d03632
HvENAMEUTF8||5.015004|
Packit d03632
HvENAME||5.013007|
Packit d03632
HvNAMELEN_get|5.009003||p
Packit d03632
HvNAMELEN||5.015004|
Packit d03632
HvNAMEUTF8||5.015004|
Packit d03632
HvNAME_get|5.009003||p
Packit d03632
HvNAME|||
Packit d03632
INT2PTR|5.006000||p
Packit d03632
IN_LOCALE_COMPILETIME|5.007002||p
Packit d03632
IN_LOCALE_RUNTIME|5.007002||p
Packit d03632
IN_LOCALE|5.007002||p
Packit d03632
IN_PERL_COMPILETIME|5.008001||p
Packit d03632
IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p
Packit d03632
IS_NUMBER_INFINITY|5.007002||p
Packit d03632
IS_NUMBER_IN_UV|5.007002||p
Packit d03632
IS_NUMBER_NAN|5.007003||p
Packit d03632
IS_NUMBER_NEG|5.007002||p
Packit d03632
IS_NUMBER_NOT_INT|5.007002||p
Packit d03632
IVSIZE|5.006000||p
Packit d03632
IVTYPE|5.006000||p
Packit d03632
IVdf|5.006000||p
Packit d03632
LEAVE|||
Packit d03632
LINKLIST||5.013006|
Packit d03632
LVRET|||
Packit d03632
MARK|||
Packit d03632
MULTICALL||5.019003|
Packit d03632
MY_CXT_CLONE|5.009002||p
Packit d03632
MY_CXT_INIT|5.007003||p
Packit d03632
MY_CXT|5.007003||p
Packit d03632
MoveD|5.009002|5.004050|p
Packit d03632
Move||5.004050|
Packit d03632
NOOP|5.005000||p
Packit d03632
NUM2PTR|5.006000||p
Packit d03632
NVTYPE|5.006000||p
Packit d03632
NVef|5.006001||p
Packit d03632
NVff|5.006001||p
Packit d03632
NVgf|5.006001||p
Packit d03632
Newxc|5.009003||p
Packit d03632
Newxz|5.009003||p
Packit d03632
Newx|5.009003||p
Packit d03632
Nullav|||
Packit d03632
Nullch|||
Packit d03632
Nullcv|||
Packit d03632
Nullhv|||
Packit d03632
Nullsv|||
Packit d03632
OP_CLASS||5.013007|
Packit d03632
OP_DESC||5.007003|
Packit d03632
OP_NAME||5.007003|
Packit d03632
ORIGMARK|||
Packit d03632
PAD_BASE_SV|||
Packit d03632
PAD_CLONE_VARS|||
Packit d03632
PAD_COMPNAME_FLAGS|||
Packit d03632
PAD_COMPNAME_GEN_set|||
Packit d03632
PAD_COMPNAME_GEN|||
Packit d03632
PAD_COMPNAME_OURSTASH|||
Packit d03632
PAD_COMPNAME_PV|||
Packit d03632
PAD_COMPNAME_TYPE|||
Packit d03632
PAD_RESTORE_LOCAL|||
Packit d03632
PAD_SAVE_LOCAL|||
Packit d03632
PAD_SAVE_SETNULLPAD|||
Packit d03632
PAD_SETSV|||
Packit d03632
PAD_SET_CUR_NOSAVE|||
Packit d03632
PAD_SET_CUR|||
Packit d03632
PAD_SVl|||
Packit d03632
PAD_SV|||
Packit d03632
PERLIO_FUNCS_CAST|5.009003||p
Packit d03632
PERLIO_FUNCS_DECL|5.009003||p
Packit d03632
PERL_ABS|5.008001||p
Packit d03632
PERL_BCDVERSION|5.019002||p
Packit d03632
PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p
Packit d03632
PERL_HASH|5.004000||p
Packit d03632
PERL_INT_MAX|5.004000||p
Packit d03632
PERL_INT_MIN|5.004000||p
Packit d03632
PERL_LONG_MAX|5.004000||p
Packit d03632
PERL_LONG_MIN|5.004000||p
Packit d03632
PERL_MAGIC_arylen|5.007002||p
Packit d03632
PERL_MAGIC_backref|5.007002||p
Packit d03632
PERL_MAGIC_bm|5.007002||p
Packit d03632
PERL_MAGIC_collxfrm|5.007002||p
Packit d03632
PERL_MAGIC_dbfile|5.007002||p
Packit d03632
PERL_MAGIC_dbline|5.007002||p
Packit d03632
PERL_MAGIC_defelem|5.007002||p
Packit d03632
PERL_MAGIC_envelem|5.007002||p
Packit d03632
PERL_MAGIC_env|5.007002||p
Packit d03632
PERL_MAGIC_ext|5.007002||p
Packit d03632
PERL_MAGIC_fm|5.007002||p
Packit d03632
PERL_MAGIC_glob|5.019002||p
Packit d03632
PERL_MAGIC_isaelem|5.007002||p
Packit d03632
PERL_MAGIC_isa|5.007002||p
Packit d03632
PERL_MAGIC_mutex|5.019002||p
Packit d03632
PERL_MAGIC_nkeys|5.007002||p
Packit d03632
PERL_MAGIC_overload_elem|5.019002||p
Packit d03632
PERL_MAGIC_overload_table|5.007002||p
Packit d03632
PERL_MAGIC_overload|5.019002||p
Packit d03632
PERL_MAGIC_pos|5.007002||p
Packit d03632
PERL_MAGIC_qr|5.007002||p
Packit d03632
PERL_MAGIC_regdata|5.007002||p
Packit d03632
PERL_MAGIC_regdatum|5.007002||p
Packit d03632
PERL_MAGIC_regex_global|5.007002||p
Packit d03632
PERL_MAGIC_shared_scalar|5.007003||p
Packit d03632
PERL_MAGIC_shared|5.007003||p
Packit d03632
PERL_MAGIC_sigelem|5.007002||p
Packit d03632
PERL_MAGIC_sig|5.007002||p
Packit d03632
PERL_MAGIC_substr|5.007002||p
Packit d03632
PERL_MAGIC_sv|5.007002||p
Packit d03632
PERL_MAGIC_taint|5.007002||p
Packit d03632
PERL_MAGIC_tiedelem|5.007002||p
Packit d03632
PERL_MAGIC_tiedscalar|5.007002||p
Packit d03632
PERL_MAGIC_tied|5.007002||p
Packit d03632
PERL_MAGIC_utf8|5.008001||p
Packit d03632
PERL_MAGIC_uvar_elem|5.007003||p
Packit d03632
PERL_MAGIC_uvar|5.007002||p
Packit d03632
PERL_MAGIC_vec|5.007002||p
Packit d03632
PERL_MAGIC_vstring|5.008001||p
Packit d03632
PERL_PV_ESCAPE_ALL|5.009004||p
Packit d03632
PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p
Packit d03632
PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p
Packit d03632
PERL_PV_ESCAPE_NOCLEAR|5.009004||p
Packit d03632
PERL_PV_ESCAPE_QUOTE|5.009004||p
Packit d03632
PERL_PV_ESCAPE_RE|5.009005||p
Packit d03632
PERL_PV_ESCAPE_UNI_DETECT|5.009004||p
Packit d03632
PERL_PV_ESCAPE_UNI|5.009004||p
Packit d03632
PERL_PV_PRETTY_DUMP|5.009004||p
Packit d03632
PERL_PV_PRETTY_ELLIPSES|5.010000||p
Packit d03632
PERL_PV_PRETTY_LTGT|5.009004||p
Packit d03632
PERL_PV_PRETTY_NOCLEAR|5.010000||p
Packit d03632
PERL_PV_PRETTY_QUOTE|5.009004||p
Packit d03632
PERL_PV_PRETTY_REGPROP|5.009004||p
Packit d03632
PERL_QUAD_MAX|5.004000||p
Packit d03632
PERL_QUAD_MIN|5.004000||p
Packit d03632
PERL_REVISION|5.006000||p
Packit d03632
PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p
Packit d03632
PERL_SCAN_DISALLOW_PREFIX|5.007003||p
Packit d03632
PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p
Packit d03632
PERL_SCAN_SILENT_ILLDIGIT|5.008001||p
Packit d03632
PERL_SHORT_MAX|5.004000||p
Packit d03632
PERL_SHORT_MIN|5.004000||p
Packit d03632
PERL_SIGNALS_UNSAFE_FLAG|5.008001||p
Packit d03632
PERL_SUBVERSION|5.006000||p
Packit d03632
PERL_SYS_INIT3||5.010000|
Packit d03632
PERL_SYS_INIT||5.010000|
Packit d03632
PERL_SYS_TERM||5.019003|
Packit d03632
PERL_UCHAR_MAX|5.004000||p
Packit d03632
PERL_UCHAR_MIN|5.004000||p
Packit d03632
PERL_UINT_MAX|5.004000||p
Packit d03632
PERL_UINT_MIN|5.004000||p
Packit d03632
PERL_ULONG_MAX|5.004000||p
Packit d03632
PERL_ULONG_MIN|5.004000||p
Packit d03632
PERL_UNUSED_ARG|5.009003||p
Packit d03632
PERL_UNUSED_CONTEXT|5.009004||p
Packit d03632
PERL_UNUSED_DECL|5.007002||p
Packit d03632
PERL_UNUSED_VAR|5.007002||p
Packit d03632
PERL_UQUAD_MAX|5.004000||p
Packit d03632
PERL_UQUAD_MIN|5.004000||p
Packit d03632
PERL_USE_GCC_BRACE_GROUPS|5.009004||p
Packit d03632
PERL_USHORT_MAX|5.004000||p
Packit d03632
PERL_USHORT_MIN|5.004000||p
Packit d03632
PERL_VERSION|5.006000||p
Packit d03632
PL_DBsignal|5.005000||p
Packit d03632
PL_DBsingle|||pn
Packit d03632
PL_DBsub|||pn
Packit d03632
PL_DBtrace|||pn
Packit d03632
PL_Sv|5.005000||p
Packit d03632
PL_bufend|5.019002||p
Packit d03632
PL_bufptr|5.019002||p
Packit d03632
PL_check||5.006000|
Packit d03632
PL_compiling|5.004050||p
Packit d03632
PL_comppad_name||5.017004|
Packit d03632
PL_comppad||5.008001|
Packit d03632
PL_copline|5.019002||p
Packit d03632
PL_curcop|5.004050||p
Packit d03632
PL_curpad||5.005000|
Packit d03632
PL_curstash|5.004050||p
Packit d03632
PL_debstash|5.004050||p
Packit d03632
PL_defgv|5.004050||p
Packit d03632
PL_diehook|5.004050||p
Packit d03632
PL_dirty|5.004050||p
Packit d03632
PL_dowarn|||pn
Packit d03632
PL_errgv|5.004050||p
Packit d03632
PL_error_count|5.019002||p
Packit d03632
PL_expect|5.019002||p
Packit d03632
PL_hexdigit|5.005000||p
Packit d03632
PL_hints|5.005000||p
Packit d03632
PL_in_my_stash|5.019002||p
Packit d03632
PL_in_my|5.019002||p
Packit d03632
PL_keyword_plugin||5.011002|
Packit d03632
PL_last_in_gv|||n
Packit d03632
PL_laststatval|5.005000||p
Packit d03632
PL_lex_state|5.019002||p
Packit d03632
PL_lex_stuff|5.019002||p
Packit d03632
PL_linestr|5.019002||p
Packit d03632
PL_modglobal||5.005000|n
Packit d03632
PL_na|5.004050||pn
Packit d03632
PL_no_modify|5.006000||p
Packit d03632
PL_ofsgv|||n
Packit d03632
PL_opfreehook||5.011000|n
Packit d03632
PL_parser|5.009005|5.009005|p
Packit d03632
PL_peepp||5.007003|n
Packit d03632
PL_perl_destruct_level|5.004050||p
Packit d03632
PL_perldb|5.004050||p
Packit d03632
PL_ppaddr|5.006000||p
Packit d03632
PL_rpeepp||5.013005|n
Packit d03632
PL_rsfp_filters|5.019002||p
Packit d03632
PL_rsfp|5.019002||p
Packit d03632
PL_rs|||n
Packit d03632
PL_signals|5.008001||p
Packit d03632
PL_stack_base|5.004050||p
Packit d03632
PL_stack_sp|5.004050||p
Packit d03632
PL_statcache|5.005000||p
Packit d03632
PL_stdingv|5.004050||p
Packit d03632
PL_sv_arenaroot|5.004050||p
Packit d03632
PL_sv_no|5.004050||pn
Packit d03632
PL_sv_undef|5.004050||pn
Packit d03632
PL_sv_yes|5.004050||pn
Packit d03632
PL_tainted|5.004050||p
Packit d03632
PL_tainting|5.004050||p
Packit d03632
PL_tokenbuf|5.019002||p
Packit d03632
POP_MULTICALL||5.019003|
Packit d03632
POPi|||n
Packit d03632
POPl|||n
Packit d03632
POPn|||n
Packit d03632
POPpbytex||5.007001|n
Packit d03632
POPpx||5.005030|n
Packit d03632
POPp|||n
Packit d03632
POPs|||n
Packit d03632
PTR2IV|5.006000||p
Packit d03632
PTR2NV|5.006000||p
Packit d03632
PTR2UV|5.006000||p
Packit d03632
PTR2nat|5.009003||p
Packit d03632
PTR2ul|5.007001||p
Packit d03632
PTRV|5.006000||p
Packit d03632
PUSHMARK|||
Packit d03632
PUSH_MULTICALL||5.019003|
Packit d03632
PUSHi|||
Packit d03632
PUSHmortal|5.009002||p
Packit d03632
PUSHn|||
Packit d03632
PUSHp|||
Packit d03632
PUSHs|||
Packit d03632
PUSHu|5.004000||p
Packit d03632
PUTBACK|||
Packit d03632
PadARRAY||5.019003|
Packit d03632
PadMAX||5.019003|
Packit d03632
PadlistARRAY||5.019003|
Packit d03632
PadlistMAX||5.019003|
Packit d03632
PadlistNAMESARRAY||5.019003|
Packit d03632
PadlistNAMESMAX||5.019003|
Packit d03632
PadlistNAMES||5.019003|
Packit d03632
PadlistREFCNT||5.017004|
Packit d03632
PadnameIsOUR|||
Packit d03632
PadnameIsSTATE|||
Packit d03632
PadnameLEN||5.019003|
Packit d03632
PadnameOURSTASH|||
Packit d03632
PadnameOUTER|||
Packit d03632
PadnamePV||5.019003|
Packit d03632
PadnameSV||5.019003|
Packit d03632
PadnameTYPE|||
Packit d03632
PadnameUTF8||5.019003|
Packit d03632
PadnamelistARRAY||5.019003|
Packit d03632
PadnamelistMAX||5.019003|
Packit d03632
PerlIO_clearerr||5.007003|
Packit d03632
PerlIO_close||5.007003|
Packit d03632
PerlIO_context_layers||5.009004|
Packit d03632
PerlIO_eof||5.007003|
Packit d03632
PerlIO_error||5.007003|
Packit d03632
PerlIO_fileno||5.007003|
Packit d03632
PerlIO_fill||5.007003|
Packit d03632
PerlIO_flush||5.007003|
Packit d03632
PerlIO_get_base||5.007003|
Packit d03632
PerlIO_get_bufsiz||5.007003|
Packit d03632
PerlIO_get_cnt||5.007003|
Packit d03632
PerlIO_get_ptr||5.007003|
Packit d03632
PerlIO_read||5.007003|
Packit d03632
PerlIO_seek||5.007003|
Packit d03632
PerlIO_set_cnt||5.007003|
Packit d03632
PerlIO_set_ptrcnt||5.007003|
Packit d03632
PerlIO_setlinebuf||5.007003|
Packit d03632
PerlIO_stderr||5.007003|
Packit d03632
PerlIO_stdin||5.007003|
Packit d03632
PerlIO_stdout||5.007003|
Packit d03632
PerlIO_tell||5.007003|
Packit d03632
PerlIO_unread||5.007003|
Packit d03632
PerlIO_write||5.007003|
Packit d03632
Perl_signbit||5.009005|n
Packit d03632
PoisonFree|5.009004||p
Packit d03632
PoisonNew|5.009004||p
Packit d03632
PoisonWith|5.009004||p
Packit d03632
Poison|5.008000||p
Packit d03632
READ_XDIGIT||5.017006|
Packit d03632
RETVAL|||n
Packit d03632
Renewc|||
Packit d03632
Renew|||
Packit d03632
SAVECLEARSV|||
Packit d03632
SAVECOMPPAD|||
Packit d03632
SAVEPADSV|||
Packit d03632
SAVETMPS|||
Packit d03632
SAVE_DEFSV|5.004050||p
Packit d03632
SPAGAIN|||
Packit d03632
SP|||
Packit d03632
START_EXTERN_C|5.005000||p
Packit d03632
START_MY_CXT|5.007003||p
Packit d03632
STMT_END|||p
Packit d03632
STMT_START|||p
Packit d03632
STR_WITH_LEN|5.009003||p
Packit d03632
ST|||
Packit d03632
SV_CONST_RETURN|5.009003||p
Packit d03632
SV_COW_DROP_PV|5.008001||p
Packit d03632
SV_COW_SHARED_HASH_KEYS|5.009005||p
Packit d03632
SV_GMAGIC|5.007002||p
Packit d03632
SV_HAS_TRAILING_NUL|5.009004||p
Packit d03632
SV_IMMEDIATE_UNREF|5.007001||p
Packit d03632
SV_MUTABLE_RETURN|5.009003||p
Packit d03632
SV_NOSTEAL|5.009002||p
Packit d03632
SV_SMAGIC|5.009003||p
Packit d03632
SV_UTF8_NO_ENCODING|5.008001||p
Packit d03632
SVfARG|5.009005||p
Packit d03632
SVf_UTF8|5.006000||p
Packit d03632
SVf|5.006000||p
Packit d03632
SVt_INVLIST||5.019002|
Packit d03632
SVt_IV|||
Packit d03632
SVt_NULL|||
Packit d03632
SVt_NV|||
Packit d03632
SVt_PVAV|||
Packit d03632
SVt_PVCV|||
Packit d03632
SVt_PVFM|||
Packit d03632
SVt_PVGV|||
Packit d03632
SVt_PVHV|||
Packit d03632
SVt_PVIO|||
Packit d03632
SVt_PVIV|||
Packit d03632
SVt_PVLV|||
Packit d03632
SVt_PVMG|||
Packit d03632
SVt_PVNV|||
Packit d03632
SVt_PV|||
Packit d03632
SVt_REGEXP||5.011000|
Packit d03632
Safefree|||
Packit d03632
Slab_Alloc|||
Packit d03632
Slab_Free|||
Packit d03632
Slab_to_ro|||
Packit d03632
Slab_to_rw|||
Packit d03632
StructCopy|||
Packit d03632
SvCUR_set|||
Packit d03632
SvCUR|||
Packit d03632
SvEND|||
Packit d03632
SvGAMAGIC||5.006001|
Packit d03632
SvGETMAGIC|5.004050||p
Packit d03632
SvGROW|||
Packit d03632
SvIOK_UV||5.006000|
Packit d03632
SvIOK_notUV||5.006000|
Packit d03632
SvIOK_off|||
Packit d03632
SvIOK_only_UV||5.006000|
Packit d03632
SvIOK_only|||
Packit d03632
SvIOK_on|||
Packit d03632
SvIOKp|||
Packit d03632
SvIOK|||
Packit d03632
SvIVX|||
Packit d03632
SvIV_nomg|5.009001||p
Packit d03632
SvIV_set|||
Packit d03632
SvIVx|||
Packit d03632
SvIV|||
Packit d03632
SvIsCOW_shared_hash||5.008003|
Packit d03632
SvIsCOW||5.008003|
Packit d03632
SvLEN_set|||
Packit d03632
SvLEN|||
Packit d03632
SvLOCK||5.007003|
Packit d03632
SvMAGIC_set|5.009003||p
Packit d03632
SvNIOK_off|||
Packit d03632
SvNIOKp|||
Packit d03632
SvNIOK|||
Packit d03632
SvNOK_off|||
Packit d03632
SvNOK_only|||
Packit d03632
SvNOK_on|||
Packit d03632
SvNOKp|||
Packit d03632
SvNOK|||
Packit d03632
SvNVX|||
Packit d03632
SvNV_nomg||5.013002|
Packit d03632
SvNV_set|||
Packit d03632
SvNVx|||
Packit d03632
SvNV|||
Packit d03632
SvOK|||
Packit d03632
SvOOK_offset||5.011000|
Packit d03632
SvOOK|||
Packit d03632
SvPOK_off|||
Packit d03632
SvPOK_only_UTF8||5.006000|
Packit d03632
SvPOK_only|||
Packit d03632
SvPOK_on|||
Packit d03632
SvPOKp|||
Packit d03632
SvPOK|||
Packit d03632
SvPVX_const|5.009003||p
Packit d03632
SvPVX_mutable|5.009003||p
Packit d03632
SvPVX|||
Packit d03632
SvPV_const|5.009003||p
Packit d03632
SvPV_flags_const_nolen|5.009003||p
Packit d03632
SvPV_flags_const|5.009003||p
Packit d03632
SvPV_flags_mutable|5.009003||p
Packit d03632
SvPV_flags|5.007002||p
Packit d03632
SvPV_force_flags_mutable|5.009003||p
Packit d03632
SvPV_force_flags_nolen|5.009003||p
Packit d03632
SvPV_force_flags|5.007002||p
Packit d03632
SvPV_force_mutable|5.009003||p
Packit d03632
SvPV_force_nolen|5.009003||p
Packit d03632
SvPV_force_nomg_nolen|5.009003||p
Packit d03632
SvPV_force_nomg|5.007002||p
Packit d03632
SvPV_force|||p
Packit d03632
SvPV_mutable|5.009003||p
Packit d03632
SvPV_nolen_const|5.009003||p
Packit d03632
SvPV_nolen|5.006000||p
Packit d03632
SvPV_nomg_const_nolen|5.009003||p
Packit d03632
SvPV_nomg_const|5.009003||p
Packit d03632
SvPV_nomg_nolen|5.013007||p
Packit d03632
SvPV_nomg|5.007002||p
Packit d03632
SvPV_renew|5.009003||p
Packit d03632
SvPV_set|||
Packit d03632
SvPVbyte_force||5.009002|
Packit d03632
SvPVbyte_nolen||5.006000|
Packit d03632
SvPVbytex_force||5.006000|
Packit d03632
SvPVbytex||5.006000|
Packit d03632
SvPVbyte|5.006000||p
Packit d03632
SvPVutf8_force||5.006000|
Packit d03632
SvPVutf8_nolen||5.006000|
Packit d03632
SvPVutf8x_force||5.006000|
Packit d03632
SvPVutf8x||5.006000|
Packit d03632
SvPVutf8||5.006000|
Packit d03632
SvPVx|||
Packit d03632
SvPV|||
Packit d03632
SvREFCNT_dec_NN||5.017007|
Packit d03632
SvREFCNT_dec|||
Packit d03632
SvREFCNT_inc_NN|5.009004||p
Packit d03632
SvREFCNT_inc_simple_NN|5.009004||p
Packit d03632
SvREFCNT_inc_simple_void_NN|5.009004||p
Packit d03632
SvREFCNT_inc_simple_void|5.009004||p
Packit d03632
SvREFCNT_inc_simple|5.009004||p
Packit d03632
SvREFCNT_inc_void_NN|5.009004||p
Packit d03632
SvREFCNT_inc_void|5.009004||p
Packit d03632
SvREFCNT_inc|||p
Packit d03632
SvREFCNT|||
Packit d03632
SvROK_off|||
Packit d03632
SvROK_on|||
Packit d03632
SvROK|||
Packit d03632
SvRV_set|5.009003||p
Packit d03632
SvRV|||
Packit d03632
SvRXOK||5.009005|
Packit d03632
SvRX||5.009005|
Packit d03632
SvSETMAGIC|||
Packit d03632
SvSHARED_HASH|5.009003||p
Packit d03632
SvSHARE||5.007003|
Packit d03632
SvSTASH_set|5.009003||p
Packit d03632
SvSTASH|||
Packit d03632
SvSetMagicSV_nosteal||5.004000|
Packit d03632
SvSetMagicSV||5.004000|
Packit d03632
SvSetSV_nosteal||5.004000|
Packit d03632
SvSetSV|||
Packit d03632
SvTAINTED_off||5.004000|
Packit d03632
SvTAINTED_on||5.004000|
Packit d03632
SvTAINTED||5.004000|
Packit d03632
SvTAINT|||
Packit d03632
SvTHINKFIRST|||
Packit d03632
SvTRUE_nomg||5.013006|
Packit d03632
SvTRUE|||
Packit d03632
SvTYPE|||
Packit d03632
SvUNLOCK||5.007003|
Packit d03632
SvUOK|5.007001|5.006000|p
Packit d03632
SvUPGRADE|||
Packit d03632
SvUTF8_off||5.006000|
Packit d03632
SvUTF8_on||5.006000|
Packit d03632
SvUTF8||5.006000|
Packit d03632
SvUVXx|5.004000||p
Packit d03632
SvUVX|5.004000||p
Packit d03632
SvUV_nomg|5.009001||p
Packit d03632
SvUV_set|5.009003||p
Packit d03632
SvUVx|5.004000||p
Packit d03632
SvUV|5.004000||p
Packit d03632
SvVOK||5.008001|
Packit d03632
SvVSTRING_mg|5.009004||p
Packit d03632
THIS|||n
Packit d03632
UNDERBAR|5.009002||p
Packit d03632
UTF8_MAXBYTES|5.009002||p
Packit d03632
UVSIZE|5.006000||p
Packit d03632
UVTYPE|5.006000||p
Packit d03632
UVXf|5.007001||p
Packit d03632
UVof|5.006000||p
Packit d03632
UVuf|5.006000||p
Packit d03632
UVxf|5.006000||p
Packit d03632
WARN_ALL|5.006000||p
Packit d03632
WARN_AMBIGUOUS|5.006000||p
Packit d03632
WARN_ASSERTIONS|5.019002||p
Packit d03632
WARN_BAREWORD|5.006000||p
Packit d03632
WARN_CLOSED|5.006000||p
Packit d03632
WARN_CLOSURE|5.006000||p
Packit d03632
WARN_DEBUGGING|5.006000||p
Packit d03632
WARN_DEPRECATED|5.006000||p
Packit d03632
WARN_DIGIT|5.006000||p
Packit d03632
WARN_EXEC|5.006000||p
Packit d03632
WARN_EXITING|5.006000||p
Packit d03632
WARN_GLOB|5.006000||p
Packit d03632
WARN_INPLACE|5.006000||p
Packit d03632
WARN_INTERNAL|5.006000||p
Packit d03632
WARN_IO|5.006000||p
Packit d03632
WARN_LAYER|5.008000||p
Packit d03632
WARN_MALLOC|5.006000||p
Packit d03632
WARN_MISC|5.006000||p
Packit d03632
WARN_NEWLINE|5.006000||p
Packit d03632
WARN_NUMERIC|5.006000||p
Packit d03632
WARN_ONCE|5.006000||p
Packit d03632
WARN_OVERFLOW|5.006000||p
Packit d03632
WARN_PACK|5.006000||p
Packit d03632
WARN_PARENTHESIS|5.006000||p
Packit d03632
WARN_PIPE|5.006000||p
Packit d03632
WARN_PORTABLE|5.006000||p
Packit d03632
WARN_PRECEDENCE|5.006000||p
Packit d03632
WARN_PRINTF|5.006000||p
Packit d03632
WARN_PROTOTYPE|5.006000||p
Packit d03632
WARN_QW|5.006000||p
Packit d03632
WARN_RECURSION|5.006000||p
Packit d03632
WARN_REDEFINE|5.006000||p
Packit d03632
WARN_REGEXP|5.006000||p
Packit d03632
WARN_RESERVED|5.006000||p
Packit d03632
WARN_SEMICOLON|5.006000||p
Packit d03632
WARN_SEVERE|5.006000||p
Packit d03632
WARN_SIGNAL|5.006000||p
Packit d03632
WARN_SUBSTR|5.006000||p
Packit d03632
WARN_SYNTAX|5.006000||p
Packit d03632
WARN_TAINT|5.006000||p
Packit d03632
WARN_THREADS|5.008000||p
Packit d03632
WARN_UNINITIALIZED|5.006000||p
Packit d03632
WARN_UNOPENED|5.006000||p
Packit d03632
WARN_UNPACK|5.006000||p
Packit d03632
WARN_UNTIE|5.006000||p
Packit d03632
WARN_UTF8|5.006000||p
Packit d03632
WARN_VOID|5.006000||p
Packit d03632
WIDEST_UTYPE|5.015004||p
Packit d03632
XCPT_CATCH|5.009002||p
Packit d03632
XCPT_RETHROW|5.009002|5.007001|p
Packit d03632
XCPT_TRY_END|5.009002|5.004000|p
Packit d03632
XCPT_TRY_START|5.009002|5.004000|p
Packit d03632
XPUSHi|||
Packit d03632
XPUSHmortal|5.009002||p
Packit d03632
XPUSHn|||
Packit d03632
XPUSHp|||
Packit d03632
XPUSHs|||
Packit d03632
XPUSHu|5.004000||p
Packit d03632
XSPROTO|5.010000||p
Packit d03632
XSRETURN_EMPTY|||
Packit d03632
XSRETURN_IV|||
Packit d03632
XSRETURN_NO|||
Packit d03632
XSRETURN_NV|||
Packit d03632
XSRETURN_PV|||
Packit d03632
XSRETURN_UNDEF|||
Packit d03632
XSRETURN_UV|5.008001||p
Packit d03632
XSRETURN_YES|||
Packit d03632
XSRETURN|||p
Packit d03632
XST_mIV|||
Packit d03632
XST_mNO|||
Packit d03632
XST_mNV|||
Packit d03632
XST_mPV|||
Packit d03632
XST_mUNDEF|||
Packit d03632
XST_mUV|5.008001||p
Packit d03632
XST_mYES|||
Packit d03632
XS_APIVERSION_BOOTCHECK||5.013004|
Packit d03632
XS_EXTERNAL||5.019003|
Packit d03632
XS_INTERNAL||5.019003|
Packit d03632
XS_VERSION_BOOTCHECK|||
Packit d03632
XS_VERSION|||
Packit d03632
XSprePUSH|5.006000||p
Packit d03632
XS|||
Packit d03632
XopDISABLE||5.019003|
Packit d03632
XopENABLE||5.019003|
Packit d03632
XopENTRY_set||5.019003|
Packit d03632
XopENTRY||5.019003|
Packit d03632
XopFLAGS||5.013007|
Packit d03632
ZeroD|5.009002||p
Packit d03632
Zero|||
Packit d03632
_aMY_CXT|5.007003||p
Packit d03632
_add_range_to_invlist|||
Packit d03632
_append_range_to_invlist|||
Packit d03632
_core_swash_init|||
Packit d03632
_get_swash_invlist|||
Packit d03632
_invlist_array_init|||
Packit d03632
_invlist_contains_cp|||
Packit d03632
_invlist_contents|||
Packit d03632
_invlist_dump|||
Packit d03632
_invlist_intersection_maybe_complement_2nd|||
Packit d03632
_invlist_intersection|||
Packit d03632
_invlist_invert_prop|||
Packit d03632
_invlist_invert|||
Packit d03632
_invlist_len|||
Packit d03632
_invlist_populate_swatch|||
Packit d03632
_invlist_search|||
Packit d03632
_invlist_subtract|||
Packit d03632
_invlist_union_maybe_complement_2nd|||
Packit d03632
_invlist_union|||
Packit d03632
_is_uni_FOO||5.017008|
Packit d03632
_is_uni_perl_idcont||5.017008|
Packit d03632
_is_uni_perl_idstart||5.017007|
Packit d03632
_is_utf8_FOO||5.017008|
Packit d03632
_is_utf8_mark||5.017008|
Packit d03632
_is_utf8_perl_idcont||5.017008|
Packit d03632
_is_utf8_perl_idstart||5.017007|
Packit d03632
_new_invlist_C_array|||
Packit d03632
_new_invlist|||
Packit d03632
_pMY_CXT|5.007003||p
Packit d03632
_swash_inversion_hash|||
Packit d03632
_swash_to_invlist|||
Packit d03632
_to_fold_latin1|||
Packit d03632
_to_uni_fold_flags||5.013011|
Packit d03632
_to_upper_title_latin1|||
Packit d03632
_to_utf8_fold_flags||5.015006|
Packit d03632
_to_utf8_lower_flags||5.015006|
Packit d03632
_to_utf8_title_flags||5.015006|
Packit d03632
_to_utf8_upper_flags||5.015006|
Packit d03632
aMY_CXT_|5.007003||p
Packit d03632
aMY_CXT|5.007003||p
Packit d03632
aTHXR_|5.019002||p
Packit d03632
aTHXR|5.019002||p
Packit d03632
aTHX_|5.006000||p
Packit d03632
aTHX|5.006000||p
Packit d03632
aassign_common_vars|||
Packit d03632
add_cp_to_invlist|||
Packit d03632
add_data|||n
Packit d03632
add_utf16_textfilter|||
Packit d03632
addmad|||
Packit d03632
adjust_size_and_find_bucket|||n
Packit d03632
adjust_stack_on_leave|||
Packit d03632
alloc_maybe_populate_EXACT|||
Packit d03632
alloccopstash|||
Packit d03632
allocmy|||
Packit d03632
amagic_call|||
Packit d03632
amagic_cmp_locale|||
Packit d03632
amagic_cmp|||
Packit d03632
amagic_deref_call||5.013007|
Packit d03632
amagic_i_ncmp|||
Packit d03632
amagic_is_enabled|||
Packit d03632
amagic_ncmp|||
Packit d03632
anonymise_cv_maybe|||
Packit d03632
any_dup|||
Packit d03632
ao|||
Packit d03632
append_madprops|||
Packit d03632
apply_attrs_my|||
Packit d03632
apply_attrs_string||5.006001|
Packit d03632
apply_attrs|||
Packit d03632
apply|||
Packit d03632
assert_uft8_cache_coherent|||
Packit d03632
atfork_lock||5.007003|n
Packit d03632
atfork_unlock||5.007003|n
Packit d03632
av_arylen_p||5.009003|
Packit d03632
av_clear|||
Packit d03632
av_create_and_push||5.009005|
Packit d03632
av_create_and_unshift_one||5.009005|
Packit d03632
av_delete||5.006000|
Packit d03632
av_exists||5.006000|
Packit d03632
av_extend_guts|||
Packit d03632
av_extend|||
Packit d03632
av_fetch|||
Packit d03632
av_fill|||
Packit d03632
av_iter_p||5.011000|
Packit d03632
av_len|||
Packit d03632
av_make|||
Packit d03632
av_pop|||
Packit d03632
av_push|||
Packit d03632
av_reify|||
Packit d03632
av_shift|||
Packit d03632
av_store|||
Packit d03632
av_tindex||5.017009|
Packit d03632
av_top_index||5.017009|
Packit d03632
av_undef|||
Packit d03632
av_unshift|||
Packit d03632
ax|||n
Packit d03632
bad_type_gv|||
Packit d03632
bad_type_pv|||
Packit d03632
bind_match|||
Packit d03632
block_end|||
Packit d03632
block_gimme||5.004000|
Packit d03632
block_start|||
Packit d03632
blockhook_register||5.013003|
Packit d03632
boolSV|5.004000||p
Packit d03632
boot_core_PerlIO|||
Packit d03632
boot_core_UNIVERSAL|||
Packit d03632
boot_core_mro|||
Packit d03632
bytes_cmp_utf8||5.013007|
Packit d03632
bytes_from_utf8||5.007001|
Packit d03632
bytes_to_uni|||n
Packit d03632
bytes_to_utf8||5.006001|
Packit d03632
call_argv|5.006000||p
Packit d03632
call_atexit||5.006000|
Packit d03632
call_list||5.004000|
Packit d03632
call_method|5.006000||p
Packit d03632
call_pv|5.006000||p
Packit d03632
call_sv|5.006000||p
Packit d03632
caller_cx||5.013005|
Packit d03632
calloc||5.007002|n
Packit d03632
cando|||
Packit d03632
cast_i32||5.006000|
Packit d03632
cast_iv||5.006000|
Packit d03632
cast_ulong||5.006000|
Packit d03632
cast_uv||5.006000|
Packit d03632
check_locale_boundary_crossing|||
Packit d03632
check_type_and_open|||
Packit d03632
check_uni|||
Packit d03632
check_utf8_print|||
Packit d03632
checkcomma|||
Packit d03632
ckWARN|5.006000||p
Packit d03632
ck_entersub_args_core|||
Packit d03632
ck_entersub_args_list||5.013006|
Packit d03632
ck_entersub_args_proto_or_list||5.013006|
Packit d03632
ck_entersub_args_proto||5.013006|
Packit d03632
ck_warner_d||5.011001|v
Packit d03632
ck_warner||5.011001|v
Packit d03632
ckwarn_common|||
Packit d03632
ckwarn_d||5.009003|
Packit d03632
ckwarn||5.009003|
Packit d03632
cl_and|||n
Packit d03632
cl_anything|||n
Packit d03632
cl_init|||n
Packit d03632
cl_is_anything|||n
Packit d03632
cl_or|||n
Packit d03632
clear_placeholders|||
Packit d03632
clone_params_del|||n
Packit d03632
clone_params_new|||n
Packit d03632
closest_cop|||
Packit d03632
compute_EXACTish|||
Packit d03632
convert|||
Packit d03632
cop_fetch_label||5.015001|
Packit d03632
cop_free|||
Packit d03632
cop_hints_2hv||5.013007|
Packit d03632
cop_hints_fetch_pvn||5.013007|
Packit d03632
cop_hints_fetch_pvs||5.013007|
Packit d03632
cop_hints_fetch_pv||5.013007|
Packit d03632
cop_hints_fetch_sv||5.013007|
Packit d03632
cop_store_label||5.015001|
Packit d03632
cophh_2hv||5.013007|
Packit d03632
cophh_copy||5.013007|
Packit d03632
cophh_delete_pvn||5.013007|
Packit d03632
cophh_delete_pvs||5.013007|
Packit d03632
cophh_delete_pv||5.013007|
Packit d03632
cophh_delete_sv||5.013007|
Packit d03632
cophh_fetch_pvn||5.013007|
Packit d03632
cophh_fetch_pvs||5.013007|
Packit d03632
cophh_fetch_pv||5.013007|
Packit d03632
cophh_fetch_sv||5.013007|
Packit d03632
cophh_free||5.013007|
Packit d03632
cophh_new_empty||5.019003|
Packit d03632
cophh_store_pvn||5.013007|
Packit d03632
cophh_store_pvs||5.013007|
Packit d03632
cophh_store_pv||5.013007|
Packit d03632
cophh_store_sv||5.013007|
Packit d03632
core_prototype|||
Packit d03632
core_regclass_swash|||
Packit d03632
coresub_op|||
Packit d03632
could_it_be_a_POSIX_class|||
Packit d03632
cr_textfilter|||
Packit d03632
create_eval_scope|||
Packit d03632
croak_memory_wrap||5.019003|n
Packit d03632
croak_no_mem|||n
Packit d03632
croak_no_modify||5.013003|n
Packit d03632
croak_nocontext|||vn
Packit d03632
croak_popstack|||n
Packit d03632
croak_sv||5.013001|
Packit d03632
croak_xs_usage||5.010001|n
Packit d03632
croak|||v
Packit d03632
csighandler||5.009003|n
Packit d03632
curmad|||
Packit d03632
current_re_engine|||
Packit d03632
curse|||
Packit d03632
custom_op_desc||5.007003|
Packit d03632
custom_op_name||5.007003|
Packit d03632
custom_op_register||5.013007|
Packit d03632
custom_op_xop||5.013007|
Packit d03632
cv_ckproto_len_flags|||
Packit d03632
cv_clone_into|||
Packit d03632
cv_clone|||
Packit d03632
cv_const_sv_or_av|||
Packit d03632
cv_const_sv||5.004000|
Packit d03632
cv_dump|||
Packit d03632
cv_forget_slab|||
Packit d03632
cv_get_call_checker||5.013006|
Packit d03632
cv_set_call_checker||5.013006|
Packit d03632
cv_undef|||
Packit d03632
cvgv_set|||
Packit d03632
cvstash_set|||
Packit d03632
cx_dump||5.005000|
Packit d03632
cx_dup|||
Packit d03632
cxinc|||
Packit d03632
dAXMARK|5.009003||p
Packit d03632
dAX|5.007002||p
Packit d03632
dITEMS|5.007002||p
Packit d03632
dMARK|||
Packit d03632
dMULTICALL||5.009003|
Packit d03632
dMY_CXT_SV|5.007003||p
Packit d03632
dMY_CXT|5.007003||p
Packit d03632
dNOOP|5.006000||p
Packit d03632
dORIGMARK|||
Packit d03632
dSP|||
Packit d03632
dTHR|5.004050||p
Packit d03632
dTHXR|5.019002||p
Packit d03632
dTHXa|5.006000||p
Packit d03632
dTHXoa|5.006000||p
Packit d03632
dTHX|5.006000||p
Packit d03632
dUNDERBAR|5.009002||p
Packit d03632
dVAR|5.009003||p
Packit d03632
dXCPT|5.009002||p
Packit d03632
dXSARGS|||
Packit d03632
dXSI32|||
Packit d03632
dXSTARG|5.006000||p
Packit d03632
deb_curcv|||
Packit d03632
deb_nocontext|||vn
Packit d03632
deb_stack_all|||
Packit d03632
deb_stack_n|||
Packit d03632
debop||5.005000|
Packit d03632
debprofdump||5.005000|
Packit d03632
debprof|||
Packit d03632
debstackptrs||5.007003|
Packit d03632
debstack||5.007003|
Packit d03632
debug_start_match|||
Packit d03632
deb||5.007003|v
Packit d03632
defelem_target|||
Packit d03632
del_sv|||
Packit d03632
delete_eval_scope|||
Packit d03632
delimcpy||5.004000|n
Packit d03632
deprecate_commaless_var_list|||
Packit d03632
despatch_signals||5.007001|
Packit d03632
destroy_matcher|||
Packit d03632
die_nocontext|||vn
Packit d03632
die_sv||5.013001|
Packit d03632
die_unwind|||
Packit d03632
die|||v
Packit d03632
dirp_dup|||
Packit d03632
div128|||
Packit d03632
djSP|||
Packit d03632
do_aexec5|||
Packit d03632
do_aexec|||
Packit d03632
do_aspawn|||
Packit d03632
do_binmode||5.004050|
Packit d03632
do_chomp|||
Packit d03632
do_close|||
Packit d03632
do_delete_local|||
Packit d03632
do_dump_pad|||
Packit d03632
do_eof|||
Packit d03632
do_exec3|||
Packit d03632
do_execfree|||
Packit d03632
do_exec|||
Packit d03632
do_gv_dump||5.006000|
Packit d03632
do_gvgv_dump||5.006000|
Packit d03632
do_hv_dump||5.006000|
Packit d03632
do_ipcctl|||
Packit d03632
do_ipcget|||
Packit d03632
do_join|||
Packit d03632
do_magic_dump||5.006000|
Packit d03632
do_msgrcv|||
Packit d03632
do_msgsnd|||
Packit d03632
do_ncmp|||
Packit d03632
do_oddball|||
Packit d03632
do_op_dump||5.006000|
Packit d03632
do_op_xmldump|||
Packit d03632
do_open9||5.006000|
Packit d03632
do_openn||5.007001|
Packit d03632
do_open||5.004000|
Packit d03632
do_pmop_dump||5.006000|
Packit d03632
do_pmop_xmldump|||
Packit d03632
do_print|||
Packit d03632
do_readline|||
Packit d03632
do_seek|||
Packit d03632
do_semop|||
Packit d03632
do_shmio|||
Packit d03632
do_smartmatch|||
Packit d03632
do_spawn_nowait|||
Packit d03632
do_spawn|||
Packit d03632
do_sprintf|||
Packit d03632
do_sv_dump||5.006000|
Packit d03632
do_sysseek|||
Packit d03632
do_tell|||
Packit d03632
do_trans_complex_utf8|||
Packit d03632
do_trans_complex|||
Packit d03632
do_trans_count_utf8|||
Packit d03632
do_trans_count|||
Packit d03632
do_trans_simple_utf8|||
Packit d03632
do_trans_simple|||
Packit d03632
do_trans|||
Packit d03632
do_vecget|||
Packit d03632
do_vecset|||
Packit d03632
do_vop|||
Packit d03632
docatch|||
Packit d03632
doeval|||
Packit d03632
dofile|||
Packit d03632
dofindlabel|||
Packit d03632
doform|||
Packit d03632
doing_taint||5.008001|n
Packit d03632
dooneliner|||
Packit d03632
doopen_pm|||
Packit d03632
doparseform|||
Packit d03632
dopoptoeval|||
Packit d03632
dopoptogiven|||
Packit d03632
dopoptolabel|||
Packit d03632
dopoptoloop|||
Packit d03632
dopoptosub_at|||
Packit d03632
dopoptowhen|||
Packit d03632
doref||5.009003|
Packit d03632
dounwind|||
Packit d03632
dowantarray|||
Packit d03632
dump_all_perl|||
Packit d03632
dump_all||5.006000|
Packit d03632
dump_eval||5.006000|
Packit d03632
dump_exec_pos|||
Packit d03632
dump_fds|||
Packit d03632
dump_form||5.006000|
Packit d03632
dump_indent||5.006000|v
Packit d03632
dump_mstats|||
Packit d03632
dump_packsubs_perl|||
Packit d03632
dump_packsubs||5.006000|
Packit d03632
dump_sub_perl|||
Packit d03632
dump_sub||5.006000|
Packit d03632
dump_sv_child|||
Packit d03632
dump_trie_interim_list|||
Packit d03632
dump_trie_interim_table|||
Packit d03632
dump_trie|||
Packit d03632
dump_vindent||5.006000|
Packit d03632
dumpuntil|||
Packit d03632
dup_attrlist|||
Packit d03632
emulate_cop_io|||
Packit d03632
eval_pv|5.006000||p
Packit d03632
eval_sv|5.006000||p
Packit d03632
exec_failed|||
Packit d03632
expect_number|||
Packit d03632
fbm_compile||5.005000|
Packit d03632
fbm_instr||5.005000|
Packit d03632
feature_is_enabled|||
Packit d03632
filter_add|||
Packit d03632
filter_del|||
Packit d03632
filter_gets|||
Packit d03632
filter_read|||
Packit d03632
finalize_optree|||
Packit d03632
finalize_op|||
Packit d03632
find_and_forget_pmops|||
Packit d03632
find_array_subscript|||
Packit d03632
find_beginning|||
Packit d03632
find_byclass|||
Packit d03632
find_hash_subscript|||
Packit d03632
find_in_my_stash|||
Packit d03632
find_lexical_cv|||
Packit d03632
find_runcv_where|||
Packit d03632
find_runcv||5.008001|
Packit d03632
find_rundefsv2|||
Packit d03632
find_rundefsvoffset||5.009002|
Packit d03632
find_rundefsv||5.013002|
Packit d03632
find_script|||
Packit d03632
find_uninit_var|||
Packit d03632
first_symbol|||n
Packit d03632
foldEQ_latin1||5.013008|n
Packit d03632
foldEQ_locale||5.013002|n
Packit d03632
foldEQ_utf8_flags||5.013010|
Packit d03632
foldEQ_utf8||5.013002|
Packit d03632
foldEQ||5.013002|n
Packit d03632
fold_constants|||
Packit d03632
forbid_setid|||
Packit d03632
force_ident_maybe_lex|||
Packit d03632
force_ident|||
Packit d03632
force_list|||
Packit d03632
force_next|||
Packit d03632
force_strict_version|||
Packit d03632
force_version|||
Packit d03632
force_word|||
Packit d03632
forget_pmop|||
Packit d03632
form_nocontext|||vn
Packit d03632
form_short_octal_warning|||
Packit d03632
form||5.004000|v
Packit d03632
fp_dup|||
Packit d03632
fprintf_nocontext|||vn
Packit d03632
free_global_struct|||
Packit d03632
free_tied_hv_pool|||
Packit d03632
free_tmps|||
Packit d03632
gen_constant_list|||
Packit d03632
get_and_check_backslash_N_name|||
Packit d03632
get_aux_mg|||
Packit d03632
get_av|5.006000||p
Packit d03632
get_context||5.006000|n
Packit d03632
get_cvn_flags|5.009005||p
Packit d03632
get_cvs|5.011000||p
Packit d03632
get_cv|5.006000||p
Packit d03632
get_db_sub|||
Packit d03632
get_debug_opts|||
Packit d03632
get_hash_seed|||
Packit d03632
get_hv|5.006000||p
Packit d03632
get_invlist_iter_addr|||
Packit d03632
get_invlist_offset_addr|||
Packit d03632
get_invlist_previous_index_addr|||
Packit d03632
get_mstats|||
Packit d03632
get_no_modify|||
Packit d03632
get_num|||
Packit d03632
get_op_descs||5.005000|
Packit d03632
get_op_names||5.005000|
Packit d03632
get_opargs|||
Packit d03632
get_ppaddr||5.006000|
Packit d03632
get_re_arg|||
Packit d03632
get_sv|5.006000||p
Packit d03632
get_vtbl||5.005030|
Packit d03632
getcwd_sv||5.007002|
Packit d03632
getenv_len|||
Packit d03632
glob_2number|||
Packit d03632
glob_assign_glob|||
Packit d03632
glob_assign_ref|||
Packit d03632
gp_dup|||
Packit d03632
gp_free|||
Packit d03632
gp_ref|||
Packit d03632
grok_bin|5.007003||p
Packit d03632
grok_bslash_N|||
Packit d03632
grok_bslash_c|||
Packit d03632
grok_bslash_o|||
Packit d03632
grok_bslash_x|||
Packit d03632
grok_hex|5.007003||p
Packit d03632
grok_number|5.007002||p
Packit d03632
grok_numeric_radix|5.007002||p
Packit d03632
grok_oct|5.007003||p
Packit d03632
group_end|||
Packit d03632
gv_AVadd|||
Packit d03632
gv_HVadd|||
Packit d03632
gv_IOadd|||
Packit d03632
gv_SVadd|||
Packit d03632
gv_add_by_type||5.011000|
Packit d03632
gv_autoload4||5.004000|
Packit d03632
gv_autoload_pvn||5.015004|
Packit d03632
gv_autoload_pv||5.015004|
Packit d03632
gv_autoload_sv||5.015004|
Packit d03632
gv_check|||
Packit d03632
gv_const_sv||5.009003|
Packit d03632
gv_dump||5.006000|
Packit d03632
gv_efullname3||5.004000|
Packit d03632
gv_efullname4||5.006001|
Packit d03632
gv_efullname|||
Packit d03632
gv_ename|||
Packit d03632
gv_fetchfile_flags||5.009005|
Packit d03632
gv_fetchfile|||
Packit d03632
gv_fetchmeth_autoload||5.007003|
Packit d03632
gv_fetchmeth_pv_autoload||5.015004|
Packit d03632
gv_fetchmeth_pvn_autoload||5.015004|
Packit d03632
gv_fetchmeth_pvn||5.015004|
Packit d03632
gv_fetchmeth_pv||5.015004|
Packit d03632
gv_fetchmeth_sv_autoload||5.015004|
Packit d03632
gv_fetchmeth_sv||5.015004|
Packit d03632
gv_fetchmethod_autoload||5.004000|
Packit d03632
gv_fetchmethod_pv_flags||5.015004|
Packit d03632
gv_fetchmethod_pvn_flags||5.015004|
Packit d03632
gv_fetchmethod_sv_flags||5.015004|
Packit d03632
gv_fetchmethod|||
Packit d03632
gv_fetchmeth|||
Packit d03632
gv_fetchpvn_flags|5.009002||p
Packit d03632
gv_fetchpvs|5.009004||p
Packit d03632
gv_fetchpv|||
Packit d03632
gv_fetchsv|5.009002||p
Packit d03632
gv_fullname3||5.004000|
Packit d03632
gv_fullname4||5.006001|
Packit d03632
gv_fullname|||
Packit d03632
gv_handler||5.007001|
Packit d03632
gv_init_pvn||5.015004|
Packit d03632
gv_init_pv||5.015004|
Packit d03632
gv_init_svtype|||
Packit d03632
gv_init_sv||5.015004|
Packit d03632
gv_init|||
Packit d03632
gv_magicalize_isa|||
Packit d03632
gv_name_set||5.009004|
Packit d03632
gv_stashpvn|5.004000||p
Packit d03632
gv_stashpvs|5.009003||p
Packit d03632
gv_stashpv|||
Packit d03632
gv_stashsv|||
Packit d03632
gv_try_downgrade|||
Packit d03632
handle_regex_sets|||
Packit d03632
he_dup|||
Packit d03632
hek_dup|||
Packit d03632
hfree_next_entry|||
Packit d03632
hfreeentries|||
Packit d03632
hsplit|||
Packit d03632
hv_assert|||
Packit d03632
hv_auxinit|||
Packit d03632
hv_backreferences_p|||
Packit d03632
hv_clear_placeholders||5.009001|
Packit d03632
hv_clear|||
Packit d03632
hv_common_key_len||5.010000|
Packit d03632
hv_common||5.010000|
Packit d03632
hv_copy_hints_hv||5.009004|
Packit d03632
hv_delayfree_ent||5.004000|
Packit d03632
hv_delete_common|||
Packit d03632
hv_delete_ent||5.004000|
Packit d03632
hv_delete|||
Packit d03632
hv_eiter_p||5.009003|
Packit d03632
hv_eiter_set||5.009003|
Packit d03632
hv_ename_add|||
Packit d03632
hv_ename_delete|||
Packit d03632
hv_exists_ent||5.004000|
Packit d03632
hv_exists|||
Packit d03632
hv_fetch_ent||5.004000|
Packit d03632
hv_fetchs|5.009003||p
Packit d03632
hv_fetch|||
Packit d03632
hv_fill||5.013002|
Packit d03632
hv_free_ent_ret|||
Packit d03632
hv_free_ent||5.004000|
Packit d03632
hv_iterinit|||
Packit d03632
hv_iterkeysv||5.004000|
Packit d03632
hv_iterkey|||
Packit d03632
hv_iternext_flags||5.008000|
Packit d03632
hv_iternextsv|||
Packit d03632
hv_iternext|||
Packit d03632
hv_iterval|||
Packit d03632
hv_kill_backrefs|||
Packit d03632
hv_ksplit||5.004000|
Packit d03632
hv_magic_check|||n
Packit d03632
hv_magic|||
Packit d03632
hv_name_set||5.009003|
Packit d03632
hv_notallowed|||
Packit d03632
hv_placeholders_get||5.009003|
Packit d03632
hv_placeholders_p|||
Packit d03632
hv_placeholders_set||5.009003|
Packit d03632
hv_rand_set||5.017011|
Packit d03632
hv_riter_p||5.009003|
Packit d03632
hv_riter_set||5.009003|
Packit d03632
hv_scalar||5.009001|
Packit d03632
hv_store_ent||5.004000|
Packit d03632
hv_store_flags||5.008000|
Packit d03632
hv_stores|5.009004||p
Packit d03632
hv_store|||
Packit d03632
hv_undef_flags|||
Packit d03632
hv_undef|||
Packit d03632
ibcmp_locale||5.004000|
Packit d03632
ibcmp_utf8||5.007003|
Packit d03632
ibcmp|||
Packit d03632
incline|||
Packit d03632
incpush_if_exists|||
Packit d03632
incpush_use_sep|||
Packit d03632
incpush|||
Packit d03632
ingroup|||
Packit d03632
init_argv_symbols|||
Packit d03632
init_constants|||
Packit d03632
init_dbargs|||
Packit d03632
init_debugger|||
Packit d03632
init_global_struct|||
Packit d03632
init_i18nl10n||5.006000|
Packit d03632
init_i18nl14n||5.006000|
Packit d03632
init_ids|||
Packit d03632
init_interp|||
Packit d03632
init_main_stash|||
Packit d03632
init_perllib|||
Packit d03632
init_postdump_symbols|||
Packit d03632
init_predump_symbols|||
Packit d03632
init_stacks||5.005000|
Packit d03632
init_tm||5.007002|
Packit d03632
inplace_aassign|||
Packit d03632
instr|||n
Packit d03632
intro_my|||
Packit d03632
intuit_method|||
Packit d03632
intuit_more|||
Packit d03632
invert|||
Packit d03632
invlist_array|||
Packit d03632
invlist_clone|||
Packit d03632
invlist_extend|||
Packit d03632
invlist_highest|||
Packit d03632
invlist_is_iterating|||
Packit d03632
invlist_iterfinish|||
Packit d03632
invlist_iterinit|||
Packit d03632
invlist_iternext|||
Packit d03632
invlist_max|||
Packit d03632
invlist_previous_index|||
Packit d03632
invlist_set_len|||
Packit d03632
invlist_set_previous_index|||
Packit d03632
invlist_trim|||
Packit d03632
invoke_exception_hook|||
Packit d03632
io_close|||
Packit d03632
isALNUMC|5.006000||p
Packit d03632
isALNUM_lazy|||
Packit d03632
isALPHANUMERIC||5.017008|
Packit d03632
isALPHA|||
Packit d03632
isASCII|5.006000|5.006000|p
Packit d03632
isBLANK|5.006001||p
Packit d03632
isCNTRL|5.006000|5.006000|p
Packit d03632
isDIGIT|||
Packit d03632
isFOO_lc|||
Packit d03632
isFOO_utf8_lc|||
Packit d03632
isGRAPH|5.006000||p
Packit d03632
isGV_with_GP|5.009004||p
Packit d03632
isIDCONT||5.017008|
Packit d03632
isIDFIRST_lazy|||
Packit d03632
isIDFIRST|||
Packit d03632
isLOWER|||
Packit d03632
isOCTAL||5.013005|
Packit d03632
isPRINT|5.004000||p
Packit d03632
isPSXSPC|5.006001||p
Packit d03632
isPUNCT|5.006000||p
Packit d03632
isSPACE|||
Packit d03632
isUPPER|||
Packit d03632
isWORDCHAR||5.013006|
Packit d03632
isXDIGIT|5.006000||p
Packit d03632
is_an_int|||
Packit d03632
is_ascii_string||5.011000|n
Packit d03632
is_cur_LC_category_utf8|||
Packit d03632
is_handle_constructor|||n
Packit d03632
is_list_assignment|||
Packit d03632
is_lvalue_sub||5.007001|
Packit d03632
is_uni_alnum_lc||5.006000|
Packit d03632
is_uni_alnumc_lc||5.017007|
Packit d03632
is_uni_alnumc||5.017007|
Packit d03632
is_uni_alnum||5.006000|
Packit d03632
is_uni_alpha_lc||5.006000|
Packit d03632
is_uni_alpha||5.006000|
Packit d03632
is_uni_ascii_lc||5.006000|
Packit d03632
is_uni_ascii||5.006000|
Packit d03632
is_uni_blank_lc||5.017002|
Packit d03632
is_uni_blank||5.017002|
Packit d03632
is_uni_cntrl_lc||5.006000|
Packit d03632
is_uni_cntrl||5.006000|
Packit d03632
is_uni_digit_lc||5.006000|
Packit d03632
is_uni_digit||5.006000|
Packit d03632
is_uni_graph_lc||5.006000|
Packit d03632
is_uni_graph||5.006000|
Packit d03632
is_uni_idfirst_lc||5.006000|
Packit d03632
is_uni_idfirst||5.006000|
Packit d03632
is_uni_lower_lc||5.006000|
Packit d03632
is_uni_lower||5.006000|
Packit d03632
is_uni_print_lc||5.006000|
Packit d03632
is_uni_print||5.006000|
Packit d03632
is_uni_punct_lc||5.006000|
Packit d03632
is_uni_punct||5.006000|
Packit d03632
is_uni_space_lc||5.006000|
Packit d03632
is_uni_space||5.006000|
Packit d03632
is_uni_upper_lc||5.006000|
Packit d03632
is_uni_upper||5.006000|
Packit d03632
is_uni_xdigit_lc||5.006000|
Packit d03632
is_uni_xdigit||5.006000|
Packit d03632
is_utf8_alnumc||5.017007|
Packit d03632
is_utf8_alnum||5.006000|
Packit d03632
is_utf8_alpha||5.006000|
Packit d03632
is_utf8_ascii||5.006000|
Packit d03632
is_utf8_blank||5.017002|
Packit d03632
is_utf8_char_buf||5.015008|n
Packit d03632
is_utf8_char_slow|||n
Packit d03632
is_utf8_char||5.006000|n
Packit d03632
is_utf8_cntrl||5.006000|
Packit d03632
is_utf8_common|||
Packit d03632
is_utf8_digit||5.006000|
Packit d03632
is_utf8_graph||5.006000|
Packit d03632
is_utf8_idcont||5.008000|
Packit d03632
is_utf8_idfirst||5.006000|
Packit d03632
is_utf8_lower||5.006000|
Packit d03632
is_utf8_mark||5.006000|
Packit d03632
is_utf8_perl_space||5.011001|
Packit d03632
is_utf8_perl_word||5.011001|
Packit d03632
is_utf8_posix_digit||5.011001|
Packit d03632
is_utf8_print||5.006000|
Packit d03632
is_utf8_punct||5.006000|
Packit d03632
is_utf8_space||5.006000|
Packit d03632
is_utf8_string_loclen||5.009003|n
Packit d03632
is_utf8_string_loc||5.008001|n
Packit d03632
is_utf8_string||5.006001|n
Packit d03632
is_utf8_upper||5.006000|
Packit d03632
is_utf8_xdigit||5.006000|
Packit d03632
is_utf8_xidcont||5.013010|
Packit d03632
is_utf8_xidfirst||5.013010|
Packit d03632
isa_lookup|||
Packit d03632
items|||n
Packit d03632
ix|||n
Packit d03632
jmaybe|||
Packit d03632
join_exact|||
Packit d03632
keyword_plugin_standard|||
Packit d03632
keyword|||
Packit d03632
leave_scope|||
Packit d03632
lex_bufutf8||5.011002|
Packit d03632
lex_discard_to||5.011002|
Packit d03632
lex_grow_linestr||5.011002|
Packit d03632
lex_next_chunk||5.011002|
Packit d03632
lex_peek_unichar||5.011002|
Packit d03632
lex_read_space||5.011002|
Packit d03632
lex_read_to||5.011002|
Packit d03632
lex_read_unichar||5.011002|
Packit d03632
lex_start||5.009005|
Packit d03632
lex_stuff_pvn||5.011002|
Packit d03632
lex_stuff_pvs||5.013005|
Packit d03632
lex_stuff_pv||5.013006|
Packit d03632
lex_stuff_sv||5.011002|
Packit d03632
lex_unstuff||5.011002|
Packit d03632
listkids|||
Packit d03632
list|||
Packit d03632
load_module_nocontext|||vn
Packit d03632
load_module|5.006000||pv
Packit d03632
localize|||
Packit d03632
looks_like_bool|||
Packit d03632
looks_like_number|||
Packit d03632
lop|||
Packit d03632
mPUSHi|5.009002||p
Packit d03632
mPUSHn|5.009002||p
Packit d03632
mPUSHp|5.009002||p
Packit d03632
mPUSHs|5.010001||p
Packit d03632
mPUSHu|5.009002||p
Packit d03632
mXPUSHi|5.009002||p
Packit d03632
mXPUSHn|5.009002||p
Packit d03632
mXPUSHp|5.009002||p
Packit d03632
mXPUSHs|5.010001||p
Packit d03632
mXPUSHu|5.009002||p
Packit d03632
mad_free|||
Packit d03632
madlex|||
Packit d03632
madparse|||
Packit d03632
magic_clear_all_env|||
Packit d03632
magic_cleararylen_p|||
Packit d03632
magic_clearenv|||
Packit d03632
magic_clearhints|||
Packit d03632
magic_clearhint|||
Packit d03632
magic_clearisa|||
Packit d03632
magic_clearpack|||
Packit d03632
magic_clearsig|||
Packit d03632
magic_copycallchecker|||
Packit d03632
magic_dump||5.006000|
Packit d03632
magic_existspack|||
Packit d03632
magic_freearylen_p|||
Packit d03632
magic_freeovrld|||
Packit d03632
magic_getarylen|||
Packit d03632
magic_getdefelem|||
Packit d03632
magic_getnkeys|||
Packit d03632
magic_getpack|||
Packit d03632
magic_getpos|||
Packit d03632
magic_getsig|||
Packit d03632
magic_getsubstr|||
Packit d03632
magic_gettaint|||
Packit d03632
magic_getuvar|||
Packit d03632
magic_getvec|||
Packit d03632
magic_get|||
Packit d03632
magic_killbackrefs|||
Packit d03632
magic_methcall1|||
Packit d03632
magic_methcall|||v
Packit d03632
magic_methpack|||
Packit d03632
magic_nextpack|||
Packit d03632
magic_regdata_cnt|||
Packit d03632
magic_regdatum_get|||
Packit d03632
magic_regdatum_set|||
Packit d03632
magic_scalarpack|||
Packit d03632
magic_set_all_env|||
Packit d03632
magic_setarylen|||
Packit d03632
magic_setcollxfrm|||
Packit d03632
magic_setdbline|||
Packit d03632
magic_setdefelem|||
Packit d03632
magic_setenv|||
Packit d03632
magic_sethint|||
Packit d03632
magic_setisa|||
Packit d03632
magic_setmglob|||
Packit d03632
magic_setnkeys|||
Packit d03632
magic_setpack|||
Packit d03632
magic_setpos|||
Packit d03632
magic_setregexp|||
Packit d03632
magic_setsig|||
Packit d03632
magic_setsubstr|||
Packit d03632
magic_settaint|||
Packit d03632
magic_setutf8|||
Packit d03632
magic_setuvar|||
Packit d03632
magic_setvec|||
Packit d03632
magic_set|||
Packit d03632
magic_sizepack|||
Packit d03632
magic_wipepack|||
Packit d03632
make_matcher|||
Packit d03632
make_trie_failtable|||
Packit d03632
make_trie|||
Packit d03632
malloc_good_size|||n
Packit d03632
malloced_size|||n
Packit d03632
malloc||5.007002|n
Packit d03632
markstack_grow|||
Packit d03632
matcher_matches_sv|||
Packit d03632
mayberelocate|||
Packit d03632
measure_struct|||
Packit d03632
memEQs|5.009005||p
Packit d03632
memEQ|5.004000||p
Packit d03632
memNEs|5.009005||p
Packit d03632
memNE|5.004000||p
Packit d03632
mem_collxfrm|||
Packit d03632
mem_log_common|||n
Packit d03632
mess_alloc|||
Packit d03632
mess_nocontext|||vn
Packit d03632
mess_sv||5.013001|
Packit d03632
mess||5.006000|v
Packit d03632
method_common|||
Packit d03632
mfree||5.007002|n
Packit d03632
mg_clear|||
Packit d03632
mg_copy|||
Packit d03632
mg_dup|||
Packit d03632
mg_find_mglob|||
Packit d03632
mg_findext||5.013008|
Packit d03632
mg_find|||
Packit d03632
mg_free_type||5.013006|
Packit d03632
mg_free|||
Packit d03632
mg_get|||
Packit d03632
mg_length||5.005000|
Packit d03632
mg_localize|||
Packit d03632
mg_magical|||
Packit d03632
mg_set|||
Packit d03632
mg_size||5.005000|
Packit d03632
mini_mktime||5.007002|
Packit d03632
minus_v|||
Packit d03632
missingterm|||
Packit d03632
mode_from_discipline|||
Packit d03632
modkids|||
Packit d03632
more_bodies|||
Packit d03632
more_sv|||
Packit d03632
moreswitches|||
Packit d03632
mro_clean_isarev|||
Packit d03632
mro_gather_and_rename|||
Packit d03632
mro_get_from_name||5.010001|
Packit d03632
mro_get_linear_isa_dfs|||
Packit d03632
mro_get_linear_isa||5.009005|
Packit d03632
mro_get_private_data||5.010001|
Packit d03632
mro_isa_changed_in|||
Packit d03632
mro_meta_dup|||
Packit d03632
mro_meta_init|||
Packit d03632
mro_method_changed_in||5.009005|
Packit d03632
mro_package_moved|||
Packit d03632
mro_register||5.010001|
Packit d03632
mro_set_mro||5.010001|
Packit d03632
mro_set_private_data||5.010001|
Packit d03632
mul128|||
Packit d03632
mulexp10|||n
Packit d03632
my_atof2||5.007002|
Packit d03632
my_atof||5.006000|
Packit d03632
my_attrs|||
Packit d03632
my_bcopy|||n
Packit d03632
my_bzero|||n
Packit d03632
my_chsize|||
Packit d03632
my_clearenv|||
Packit d03632
my_cxt_index|||
Packit d03632
my_cxt_init|||
Packit d03632
my_dirfd||5.009005|
Packit d03632
my_exit_jump|||
Packit d03632
my_exit|||
Packit d03632
my_failure_exit||5.004000|
Packit d03632
my_fflush_all||5.006000|
Packit d03632
my_fork||5.007003|n
Packit d03632
my_kid|||
Packit d03632
my_lstat_flags|||
Packit d03632
my_lstat||5.019003|
Packit d03632
my_memcmp|||n
Packit d03632
my_memset||5.004000|n
Packit d03632
my_pclose||5.004000|
Packit d03632
my_popen_list||5.007001|
Packit d03632
my_popen||5.004000|
Packit d03632
my_setenv|||
Packit d03632
my_snprintf|5.009004||pvn
Packit d03632
my_socketpair||5.007003|n
Packit d03632
my_sprintf|5.009003||pvn
Packit d03632
my_stat_flags|||
Packit d03632
my_stat||5.019003|
Packit d03632
my_strftime||5.007002|
Packit d03632
my_strlcat|5.009004||pn
Packit d03632
my_strlcpy|5.009004||pn
Packit d03632
my_unexec|||
Packit d03632
my_vsnprintf||5.009004|n
Packit d03632
need_utf8|||n
Packit d03632
newANONATTRSUB||5.006000|
Packit d03632
newANONHASH|||
Packit d03632
newANONLIST|||
Packit d03632
newANONSUB|||
Packit d03632
newASSIGNOP|||
Packit d03632
newATTRSUB_flags|||
Packit d03632
newATTRSUB||5.006000|
Packit d03632
newAVREF|||
Packit d03632
newAV|||
Packit d03632
newBINOP|||
Packit d03632
newCONDOP|||
Packit d03632
newCONSTSUB_flags||5.015006|
Packit d03632
newCONSTSUB|5.004050||p
Packit d03632
newCVREF|||
Packit d03632
newDEFSVOP|||
Packit d03632
newFORM|||
Packit d03632
newFOROP||5.013007|
Packit d03632
newGIVENOP||5.009003|
Packit d03632
newGIVWHENOP|||
Packit d03632
newGP|||
Packit d03632
newGVOP|||
Packit d03632
newGVREF|||
Packit d03632
newGVgen_flags||5.015004|
Packit d03632
newGVgen|||
Packit d03632
newHVREF|||
Packit d03632
newHVhv||5.005000|
Packit d03632
newHV|||
Packit d03632
newIO|||
Packit d03632
newLISTOP|||
Packit d03632
newLOGOP|||
Packit d03632
newLOOPEX|||
Packit d03632
newLOOPOP|||
Packit d03632
newMADPROP|||
Packit d03632
newMADsv|||
Packit d03632
newMYSUB||5.017004|
Packit d03632
newNULLLIST|||
Packit d03632
newOP|||
Packit d03632
newPADOP|||
Packit d03632
newPMOP|||
Packit d03632
newPROG|||
Packit d03632
newPVOP|||
Packit d03632
newRANGE|||
Packit d03632
newRV_inc|5.004000||p
Packit d03632
newRV_noinc|5.004000||p
Packit d03632
newRV|||
Packit d03632
newSLICEOP|||
Packit d03632
newSTATEOP|||
Packit d03632
newSTUB|||
Packit d03632
newSUB|||
Packit d03632
newSVOP|||
Packit d03632
newSVREF|||
Packit d03632
newSV_type|5.009005||p
Packit d03632
newSVhek||5.009003|
Packit d03632
newSViv|||
Packit d03632
newSVnv|||
Packit d03632
newSVpadname||5.017004|
Packit d03632
newSVpv_share||5.013006|
Packit d03632
newSVpvf_nocontext|||vn
Packit d03632
newSVpvf||5.004000|v
Packit d03632
newSVpvn_flags|5.010001||p
Packit d03632
newSVpvn_share|5.007001||p
Packit d03632
newSVpvn_utf8|5.010001||p
Packit d03632
newSVpvn|5.004050||p
Packit d03632
newSVpvs_flags|5.010001||p
Packit d03632
newSVpvs_share|5.009003||p
Packit d03632
newSVpvs|5.009003||p
Packit d03632
newSVpv|||
Packit d03632
newSVrv|||
Packit d03632
newSVsv|||
Packit d03632
newSVuv|5.006000||p
Packit d03632
newSV|||
Packit d03632
newTOKEN|||
Packit d03632
newUNOP|||
Packit d03632
newWHENOP||5.009003|
Packit d03632
newWHILEOP||5.013007|
Packit d03632
newXS_flags||5.009004|
Packit d03632
newXS_len_flags|||
Packit d03632
newXSproto||5.006000|
Packit d03632
newXS||5.006000|
Packit d03632
new_collate||5.006000|
Packit d03632
new_constant|||
Packit d03632
new_ctype||5.006000|
Packit d03632
new_he|||
Packit d03632
new_logop|||
Packit d03632
new_numeric||5.006000|
Packit d03632
new_stackinfo||5.005000|
Packit d03632
new_version||5.009000|
Packit d03632
new_warnings_bitfield|||
Packit d03632
next_symbol|||
Packit d03632
nextargv|||
Packit d03632
nextchar|||
Packit d03632
ninstr|||n
Packit d03632
no_bareword_allowed|||
Packit d03632
no_fh_allowed|||
Packit d03632
no_op|||
Packit d03632
not_a_number|||
Packit d03632
not_incrementable|||
Packit d03632
nothreadhook||5.008000|
Packit d03632
nuke_stacks|||
Packit d03632
num_overflow|||n
Packit d03632
oopsAV|||
Packit d03632
oopsHV|||
Packit d03632
op_append_elem||5.013006|
Packit d03632
op_append_list||5.013006|
Packit d03632
op_clear|||
Packit d03632
op_const_sv|||
Packit d03632
op_contextualize||5.013006|
Packit d03632
op_dump||5.006000|
Packit d03632
op_free|||
Packit d03632
op_getmad_weak|||
Packit d03632
op_getmad|||
Packit d03632
op_integerize|||
Packit d03632
op_linklist||5.013006|
Packit d03632
op_lvalue_flags|||
Packit d03632
op_lvalue||5.013007|
Packit d03632
op_null||5.007002|
Packit d03632
op_prepend_elem||5.013006|
Packit d03632
op_refcnt_dec|||
Packit d03632
op_refcnt_inc|||
Packit d03632
op_refcnt_lock||5.009002|
Packit d03632
op_refcnt_unlock||5.009002|
Packit d03632
op_scope||5.013007|
Packit d03632
op_std_init|||
Packit d03632
op_unscope|||
Packit d03632
op_xmldump|||
Packit d03632
open_script|||
Packit d03632
opslab_force_free|||
Packit d03632
opslab_free_nopad|||
Packit d03632
opslab_free|||
Packit d03632
pMY_CXT_|5.007003||p
Packit d03632
pMY_CXT|5.007003||p
Packit d03632
pTHX_|5.006000||p
Packit d03632
pTHX|5.006000||p
Packit d03632
packWARN|5.007003||p
Packit d03632
pack_cat||5.007003|
Packit d03632
pack_rec|||
Packit d03632
package_version|||
Packit d03632
package|||
Packit d03632
packlist||5.008001|
Packit d03632
pad_add_anon||5.008001|
Packit d03632
pad_add_name_pvn||5.015001|
Packit d03632
pad_add_name_pvs||5.015001|
Packit d03632
pad_add_name_pv||5.015001|
Packit d03632
pad_add_name_sv||5.015001|
Packit d03632
pad_alloc_name|||
Packit d03632
pad_alloc|||
Packit d03632
pad_block_start|||
Packit d03632
pad_check_dup|||
Packit d03632
pad_compname_type||5.009003|
Packit d03632
pad_findlex|||
Packit d03632
pad_findmy_pvn||5.015001|
Packit d03632
pad_findmy_pvs||5.015001|
Packit d03632
pad_findmy_pv||5.015001|
Packit d03632
pad_findmy_sv||5.015001|
Packit d03632
pad_fixup_inner_anons|||
Packit d03632
pad_free|||
Packit d03632
pad_leavemy|||
Packit d03632
pad_new||5.008001|
Packit d03632
pad_peg|||n
Packit d03632
pad_push|||
Packit d03632
pad_reset|||
Packit d03632
pad_setsv|||
Packit d03632
pad_sv|||
Packit d03632
pad_swipe|||
Packit d03632
pad_tidy||5.008001|
Packit d03632
padlist_dup|||
Packit d03632
padlist_store|||
Packit d03632
parse_arithexpr||5.013008|
Packit d03632
parse_barestmt||5.013007|
Packit d03632
parse_block||5.013007|
Packit d03632
parse_body|||
Packit d03632
parse_fullexpr||5.013008|
Packit d03632
parse_fullstmt||5.013005|
Packit d03632
parse_ident|||
Packit d03632
parse_label||5.013007|
Packit d03632
parse_listexpr||5.013008|
Packit d03632
parse_lparen_question_flags|||
Packit d03632
parse_stmtseq||5.013006|
Packit d03632
parse_termexpr||5.013008|
Packit d03632
parse_unicode_opts|||
Packit d03632
parser_dup|||
Packit d03632
parser_free_nexttoke_ops|||
Packit d03632
parser_free|||
Packit d03632
path_is_searchable|||n
Packit d03632
peep|||
Packit d03632
pending_ident|||
Packit d03632
perl_alloc_using|||n
Packit d03632
perl_alloc|||n
Packit d03632
perl_clone_using|||n
Packit d03632
perl_clone|||n
Packit d03632
perl_construct|||n
Packit d03632
perl_destruct||5.007003|n
Packit d03632
perl_free|||n
Packit d03632
perl_parse||5.006000|n
Packit d03632
perl_run|||n
Packit d03632
pidgone|||
Packit d03632
pm_description|||
Packit d03632
pmop_dump||5.006000|
Packit d03632
pmop_xmldump|||
Packit d03632
pmruntime|||
Packit d03632
pmtrans|||
Packit d03632
pop_scope|||
Packit d03632
populate_isa|||v
Packit d03632
pregcomp||5.009005|
Packit d03632
pregexec|||
Packit d03632
pregfree2||5.011000|
Packit d03632
pregfree|||
Packit d03632
prepend_madprops|||
Packit d03632
prescan_version||5.011004|
Packit d03632
printbuf|||
Packit d03632
printf_nocontext|||vn
Packit d03632
process_special_blocks|||
Packit d03632
ptr_hash|||n
Packit d03632
ptr_table_clear||5.009005|
Packit d03632
ptr_table_fetch||5.009005|
Packit d03632
ptr_table_find|||n
Packit d03632
ptr_table_free||5.009005|
Packit d03632
ptr_table_new||5.009005|
Packit d03632
ptr_table_split||5.009005|
Packit d03632
ptr_table_store||5.009005|
Packit d03632
push_scope|||
Packit d03632
put_byte|||
Packit d03632
put_latin1_charclass_innards|||
Packit d03632
pv_display|5.006000||p
Packit d03632
pv_escape|5.009004||p
Packit d03632
pv_pretty|5.009004||p
Packit d03632
pv_uni_display||5.007003|
Packit d03632
qerror|||
Packit d03632
qsortsvu|||
Packit d03632
re_compile||5.009005|
Packit d03632
re_croak2|||
Packit d03632
re_dup_guts|||
Packit d03632
re_intuit_start||5.019001|
Packit d03632
re_intuit_string||5.006000|
Packit d03632
re_op_compile|||
Packit d03632
readpipe_override|||
Packit d03632
realloc||5.007002|n
Packit d03632
reentrant_free||5.019003|
Packit d03632
reentrant_init||5.019003|
Packit d03632
reentrant_retry||5.019003|vn
Packit d03632
reentrant_size||5.019003|
Packit d03632
ref_array_or_hash|||
Packit d03632
refcounted_he_chain_2hv|||
Packit d03632
refcounted_he_fetch_pvn|||
Packit d03632
refcounted_he_fetch_pvs|||
Packit d03632
refcounted_he_fetch_pv|||
Packit d03632
refcounted_he_fetch_sv|||
Packit d03632
refcounted_he_free|||
Packit d03632
refcounted_he_inc|||
Packit d03632
refcounted_he_new_pvn|||
Packit d03632
refcounted_he_new_pvs|||
Packit d03632
refcounted_he_new_pv|||
Packit d03632
refcounted_he_new_sv|||
Packit d03632
refcounted_he_value|||
Packit d03632
refkids|||
Packit d03632
refto|||
Packit d03632
ref||5.019003|
Packit d03632
reg_check_named_buff_matched|||
Packit d03632
reg_named_buff_all||5.009005|
Packit d03632
reg_named_buff_exists||5.009005|
Packit d03632
reg_named_buff_fetch||5.009005|
Packit d03632
reg_named_buff_firstkey||5.009005|
Packit d03632
reg_named_buff_iter|||
Packit d03632
reg_named_buff_nextkey||5.009005|
Packit d03632
reg_named_buff_scalar||5.009005|
Packit d03632
reg_named_buff|||
Packit d03632
reg_node|||
Packit d03632
reg_numbered_buff_fetch|||
Packit d03632
reg_numbered_buff_length|||
Packit d03632
reg_numbered_buff_store|||
Packit d03632
reg_qr_package|||
Packit d03632
reg_recode|||
Packit d03632
reg_scan_name|||
Packit d03632
reg_skipcomment|||
Packit d03632
reg_temp_copy|||
Packit d03632
reganode|||
Packit d03632
regatom|||
Packit d03632
regbranch|||
Packit d03632
regclass_swash||5.009004|
Packit d03632
regclass|||
Packit d03632
regcppop|||
Packit d03632
regcppush|||
Packit d03632
regcurly|||
Packit d03632
regdump_extflags|||
Packit d03632
regdump_intflags|||
Packit d03632
regdump||5.005000|
Packit d03632
regdupe_internal|||
Packit d03632
regexec_flags||5.005000|
Packit d03632
regfree_internal||5.009005|
Packit d03632
reghop3|||n
Packit d03632
reghop4|||n
Packit d03632
reghopmaybe3|||n
Packit d03632
reginclass|||
Packit d03632
reginitcolors||5.006000|
Packit d03632
reginsert|||
Packit d03632
regmatch|||
Packit d03632
regnext||5.005000|
Packit d03632
regpatws|||n
Packit d03632
regpiece|||
Packit d03632
regpposixcc|||
Packit d03632
regprop|||
Packit d03632
regrepeat|||
Packit d03632
regtail_study|||
Packit d03632
regtail|||
Packit d03632
regtry|||
Packit d03632
reguni|||
Packit d03632
regwhite|||n
Packit d03632
reg|||
Packit d03632
repeatcpy|||n
Packit d03632
report_evil_fh|||
Packit d03632
report_redefined_cv|||
Packit d03632
report_uninit|||
Packit d03632
report_wrongway_fh|||
Packit d03632
require_pv||5.006000|
Packit d03632
require_tie_mod|||
Packit d03632
restore_magic|||
Packit d03632
rninstr|||n
Packit d03632
rpeep|||
Packit d03632
rsignal_restore|||
Packit d03632
rsignal_save|||
Packit d03632
rsignal_state||5.004000|
Packit d03632
rsignal||5.004000|
Packit d03632
run_body|||
Packit d03632
run_user_filter|||
Packit d03632
runops_debug||5.005000|
Packit d03632
runops_standard||5.005000|
Packit d03632
rv2cv_op_cv||5.013006|
Packit d03632
rvpv_dup|||
Packit d03632
rxres_free|||
Packit d03632
rxres_restore|||
Packit d03632
rxres_save|||
Packit d03632
safesyscalloc||5.006000|n
Packit d03632
safesysfree||5.006000|n
Packit d03632
safesysmalloc||5.006000|n
Packit d03632
safesysrealloc||5.006000|n
Packit d03632
same_dirent|||
Packit d03632
save_I16||5.004000|
Packit d03632
save_I32|||
Packit d03632
save_I8||5.006000|
Packit d03632
save_adelete||5.011000|
Packit d03632
save_aelem_flags||5.011000|
Packit d03632
save_aelem||5.004050|
Packit d03632
save_alloc||5.006000|
Packit d03632
save_aptr|||
Packit d03632
save_ary|||
Packit d03632
save_bool||5.008001|
Packit d03632
save_clearsv|||
Packit d03632
save_delete|||
Packit d03632
save_destructor_x||5.006000|
Packit d03632
save_destructor||5.006000|
Packit d03632
save_freeop|||
Packit d03632
save_freepv|||
Packit d03632
save_freesv|||
Packit d03632
save_generic_pvref||5.006001|
Packit d03632
save_generic_svref||5.005030|
Packit d03632
save_gp||5.004000|
Packit d03632
save_hash|||
Packit d03632
save_hdelete||5.011000|
Packit d03632
save_hek_flags|||n
Packit d03632
save_helem_flags||5.011000|
Packit d03632
save_helem||5.004050|
Packit d03632
save_hints||5.010001|
Packit d03632
save_hptr|||
Packit d03632
save_int|||
Packit d03632
save_item|||
Packit d03632
save_iv||5.005000|
Packit d03632
save_lines|||
Packit d03632
save_list|||
Packit d03632
save_long|||
Packit d03632
save_magic_flags|||
Packit d03632
save_mortalizesv||5.007001|
Packit d03632
save_nogv|||
Packit d03632
save_op||5.005000|
Packit d03632
save_padsv_and_mortalize||5.010001|
Packit d03632
save_pptr|||
Packit d03632
save_pushi32ptr||5.010001|
Packit d03632
save_pushptri32ptr|||
Packit d03632
save_pushptrptr||5.010001|
Packit d03632
save_pushptr||5.010001|
Packit d03632
save_re_context||5.006000|
Packit d03632
save_scalar_at|||
Packit d03632
save_scalar|||
Packit d03632
save_set_svflags||5.009000|
Packit d03632
save_shared_pvref||5.007003|
Packit d03632
save_sptr|||
Packit d03632
save_svref|||
Packit d03632
save_vptr||5.006000|
Packit d03632
savepvn|||
Packit d03632
savepvs||5.009003|
Packit d03632
savepv|||
Packit d03632
savesharedpvn||5.009005|
Packit d03632
savesharedpvs||5.013006|
Packit d03632
savesharedpv||5.007003|
Packit d03632
savesharedsvpv||5.013006|
Packit d03632
savestack_grow_cnt||5.008001|
Packit d03632
savestack_grow|||
Packit d03632
savesvpv||5.009002|
Packit d03632
sawparens|||
Packit d03632
scalar_mod_type|||n
Packit d03632
scalarboolean|||
Packit d03632
scalarkids|||
Packit d03632
scalarseq|||
Packit d03632
scalarvoid|||
Packit d03632
scalar|||
Packit d03632
scan_bin||5.006000|
Packit d03632
scan_commit|||
Packit d03632
scan_const|||
Packit d03632
scan_formline|||
Packit d03632
scan_heredoc|||
Packit d03632
scan_hex|||
Packit d03632
scan_ident|||
Packit d03632
scan_inputsymbol|||
Packit d03632
scan_num||5.007001|
Packit d03632
scan_oct|||
Packit d03632
scan_pat|||
Packit d03632
scan_str|||
Packit d03632
scan_subst|||
Packit d03632
scan_trans|||
Packit d03632
scan_version||5.009001|
Packit d03632
scan_vstring||5.009005|
Packit d03632
scan_word|||
Packit d03632
screaminstr||5.005000|
Packit d03632
search_const|||
Packit d03632
seed||5.008001|
Packit d03632
sequence_num|||
Packit d03632
set_context||5.006000|n
Packit d03632
set_numeric_local||5.006000|
Packit d03632
set_numeric_radix||5.006000|
Packit d03632
set_numeric_standard||5.006000|
Packit d03632
setdefout|||
Packit d03632
share_hek_flags|||
Packit d03632
share_hek||5.004000|
Packit d03632
si_dup|||
Packit d03632
sighandler|||n
Packit d03632
simplify_sort|||
Packit d03632
skipspace0|||
Packit d03632
skipspace1|||
Packit d03632
skipspace2|||
Packit d03632
skipspace_flags|||
Packit d03632
softref2xv|||
Packit d03632
sortcv_stacked|||
Packit d03632
sortcv_xsub|||
Packit d03632
sortcv|||
Packit d03632
sortsv_flags||5.009003|
Packit d03632
sortsv||5.007003|
Packit d03632
space_join_names_mortal|||
Packit d03632
ss_dup|||
Packit d03632
stack_grow|||
Packit d03632
start_force|||
Packit d03632
start_glob|||
Packit d03632
start_subparse||5.004000|
Packit d03632
stdize_locale|||
Packit d03632
strEQ|||
Packit d03632
strGE|||
Packit d03632
strGT|||
Packit d03632
strLE|||
Packit d03632
strLT|||
Packit d03632
strNE|||
Packit d03632
str_to_version||5.006000|
Packit d03632
strip_return|||
Packit d03632
strnEQ|||
Packit d03632
strnNE|||
Packit d03632
study_chunk|||
Packit d03632
sub_crush_depth|||
Packit d03632
sublex_done|||
Packit d03632
sublex_push|||
Packit d03632
sublex_start|||
Packit d03632
sv_2bool_flags||5.013006|
Packit d03632
sv_2bool|||
Packit d03632
sv_2cv|||
Packit d03632
sv_2io|||
Packit d03632
sv_2iuv_common|||
Packit d03632
sv_2iuv_non_preserve|||
Packit d03632
sv_2iv_flags||5.009001|
Packit d03632
sv_2iv|||
Packit d03632
sv_2mortal|||
Packit d03632
sv_2num|||
Packit d03632
sv_2nv_flags||5.013001|
Packit d03632
sv_2pv_flags|5.007002||p
Packit d03632
sv_2pv_nolen|5.006000||p
Packit d03632
sv_2pvbyte_nolen|5.006000||p
Packit d03632
sv_2pvbyte|5.006000||p
Packit d03632
sv_2pvutf8_nolen||5.006000|
Packit d03632
sv_2pvutf8||5.006000|
Packit d03632
sv_2pv|||
Packit d03632
sv_2uv_flags||5.009001|
Packit d03632
sv_2uv|5.004000||p
Packit d03632
sv_add_arena|||
Packit d03632
sv_add_backref|||
Packit d03632
sv_backoff|||
Packit d03632
sv_bless|||
Packit d03632
sv_cat_decode||5.008001|
Packit d03632
sv_catpv_flags||5.013006|
Packit d03632
sv_catpv_mg|5.004050||p
Packit d03632
sv_catpv_nomg||5.013006|
Packit d03632
sv_catpvf_mg_nocontext|||pvn
Packit d03632
sv_catpvf_mg|5.006000|5.004000|pv
Packit d03632
sv_catpvf_nocontext|||vn
Packit d03632
sv_catpvf||5.004000|v
Packit d03632
sv_catpvn_flags||5.007002|
Packit d03632
sv_catpvn_mg|5.004050||p
Packit d03632
sv_catpvn_nomg|5.007002||p
Packit d03632
sv_catpvn|||
Packit d03632
sv_catpvs_flags||5.013006|
Packit d03632
sv_catpvs_mg||5.013006|
Packit d03632
sv_catpvs_nomg||5.013006|
Packit d03632
sv_catpvs|5.009003||p
Packit d03632
sv_catpv|||
Packit d03632
sv_catsv_flags||5.007002|
Packit d03632
sv_catsv_mg|5.004050||p
Packit d03632
sv_catsv_nomg|5.007002||p
Packit d03632
sv_catsv|||
Packit d03632
sv_catxmlpvn|||
Packit d03632
sv_catxmlpv|||
Packit d03632
sv_catxmlsv|||
Packit d03632
sv_chop|||
Packit d03632
sv_clean_all|||
Packit d03632
sv_clean_objs|||
Packit d03632
sv_clear|||
Packit d03632
sv_cmp_flags||5.013006|
Packit d03632
sv_cmp_locale_flags||5.013006|
Packit d03632
sv_cmp_locale||5.004000|
Packit d03632
sv_cmp|||
Packit d03632
sv_collxfrm_flags||5.013006|
Packit d03632
sv_collxfrm|||
Packit d03632
sv_copypv_flags||5.017002|
Packit d03632
sv_copypv_nomg||5.017002|
Packit d03632
sv_copypv|||
Packit d03632
sv_dec_nomg||5.013002|
Packit d03632
sv_dec|||
Packit d03632
sv_del_backref|||
Packit d03632
sv_derived_from_pvn||5.015004|
Packit d03632
sv_derived_from_pv||5.015004|
Packit d03632
sv_derived_from_sv||5.015004|
Packit d03632
sv_derived_from||5.004000|
Packit d03632
sv_destroyable||5.010000|
Packit d03632
sv_display|||
Packit d03632
sv_does_pvn||5.015004|
Packit d03632
sv_does_pv||5.015004|
Packit d03632
sv_does_sv||5.015004|
Packit d03632
sv_does||5.009004|
Packit d03632
sv_dump|||
Packit d03632
sv_dup_common|||
Packit d03632
sv_dup_inc_multiple|||
Packit d03632
sv_dup_inc|||
Packit d03632
sv_dup|||
Packit d03632
sv_eq_flags||5.013006|
Packit d03632
sv_eq|||
Packit d03632
sv_exp_grow|||
Packit d03632
sv_force_normal_flags||5.007001|
Packit d03632
sv_force_normal||5.006000|
Packit d03632
sv_free2|||
Packit d03632
sv_free_arenas|||
Packit d03632
sv_free|||
Packit d03632
sv_gets||5.004000|
Packit d03632
sv_grow|||
Packit d03632
sv_i_ncmp|||
Packit d03632
sv_inc_nomg||5.013002|
Packit d03632
sv_inc|||
Packit d03632
sv_insert_flags||5.010001|
Packit d03632
sv_insert|||
Packit d03632
sv_isa|||
Packit d03632
sv_isobject|||
Packit d03632
sv_iv||5.005000|
Packit d03632
sv_kill_backrefs|||
Packit d03632
sv_len_utf8_nomg|||
Packit d03632
sv_len_utf8||5.006000|
Packit d03632
sv_len|||
Packit d03632
sv_magic_portable|5.019003|5.004000|p
Packit d03632
sv_magicext_mglob|||
Packit d03632
sv_magicext||5.007003|
Packit d03632
sv_magic|||
Packit d03632
sv_mortalcopy_flags|||
Packit d03632
sv_mortalcopy|||
Packit d03632
sv_ncmp|||
Packit d03632
sv_newmortal|||
Packit d03632
sv_newref|||
Packit d03632
sv_nolocking||5.007003|
Packit d03632
sv_nosharing||5.007003|
Packit d03632
sv_nounlocking|||
Packit d03632
sv_nv||5.005000|
Packit d03632
sv_peek||5.005000|
Packit d03632
sv_pos_b2u_flags||5.019003|
Packit d03632
sv_pos_b2u_midway|||
Packit d03632
sv_pos_b2u||5.006000|
Packit d03632
sv_pos_u2b_cached|||
Packit d03632
sv_pos_u2b_flags||5.011005|
Packit d03632
sv_pos_u2b_forwards|||n
Packit d03632
sv_pos_u2b_midway|||n
Packit d03632
sv_pos_u2b||5.006000|
Packit d03632
sv_pvbyten_force||5.006000|
Packit d03632
sv_pvbyten||5.006000|
Packit d03632
sv_pvbyte||5.006000|
Packit d03632
sv_pvn_force_flags|5.007002||p
Packit d03632
sv_pvn_force|||
Packit d03632
sv_pvn_nomg|5.007003|5.005000|p
Packit d03632
sv_pvn||5.005000|
Packit d03632
sv_pvutf8n_force||5.006000|
Packit d03632
sv_pvutf8n||5.006000|
Packit d03632
sv_pvutf8||5.006000|
Packit d03632
sv_pv||5.006000|
Packit d03632
sv_recode_to_utf8||5.007003|
Packit d03632
sv_reftype|||
Packit d03632
sv_ref|||
Packit d03632
sv_release_COW|||
Packit d03632
sv_replace|||
Packit d03632
sv_report_used|||
Packit d03632
sv_resetpvn|||
Packit d03632
sv_reset|||
Packit d03632
sv_rvweaken||5.006000|
Packit d03632
sv_sethek|||
Packit d03632
sv_setiv_mg|5.004050||p
Packit d03632
sv_setiv|||
Packit d03632
sv_setnv_mg|5.006000||p
Packit d03632
sv_setnv|||
Packit d03632
sv_setpv_mg|5.004050||p
Packit d03632
sv_setpvf_mg_nocontext|||pvn
Packit d03632
sv_setpvf_mg|5.006000|5.004000|pv
Packit d03632
sv_setpvf_nocontext|||vn
Packit d03632
sv_setpvf||5.004000|v
Packit d03632
sv_setpviv_mg||5.008001|
Packit d03632
sv_setpviv||5.008001|
Packit d03632
sv_setpvn_mg|5.004050||p
Packit d03632
sv_setpvn|||
Packit d03632
sv_setpvs_mg||5.013006|
Packit d03632
sv_setpvs|5.009004||p
Packit d03632
sv_setpv|||
Packit d03632
sv_setref_iv|||
Packit d03632
sv_setref_nv|||
Packit d03632
sv_setref_pvn|||
Packit d03632
sv_setref_pvs||5.019003|
Packit d03632
sv_setref_pv|||
Packit d03632
sv_setref_uv||5.007001|
Packit d03632
sv_setsv_cow|||
Packit d03632
sv_setsv_flags||5.007002|
Packit d03632
sv_setsv_mg|5.004050||p
Packit d03632
sv_setsv_nomg|5.007002||p
Packit d03632
sv_setsv|||
Packit d03632
sv_setuv_mg|5.004050||p
Packit d03632
sv_setuv|5.004000||p
Packit d03632
sv_tainted||5.004000|
Packit d03632
sv_taint||5.004000|
Packit d03632
sv_true||5.005000|
Packit d03632
sv_unglob|||
Packit d03632
sv_uni_display||5.007003|
Packit d03632
sv_unmagicext||5.013008|
Packit d03632
sv_unmagic|||
Packit d03632
sv_unref_flags||5.007001|
Packit d03632
sv_unref|||
Packit d03632
sv_untaint||5.004000|
Packit d03632
sv_upgrade|||
Packit d03632
sv_usepvn_flags||5.009004|
Packit d03632
sv_usepvn_mg|5.004050||p
Packit d03632
sv_usepvn|||
Packit d03632
sv_utf8_decode||5.006000|
Packit d03632
sv_utf8_downgrade||5.006000|
Packit d03632
sv_utf8_encode||5.006000|
Packit d03632
sv_utf8_upgrade_flags_grow||5.011000|
Packit d03632
sv_utf8_upgrade_flags||5.007002|
Packit d03632
sv_utf8_upgrade_nomg||5.007002|
Packit d03632
sv_utf8_upgrade||5.007001|
Packit d03632
sv_uv|5.005000||p
Packit d03632
sv_vcatpvf_mg|5.006000|5.004000|p
Packit d03632
sv_vcatpvfn_flags||5.017002|
Packit d03632
sv_vcatpvfn||5.004000|
Packit d03632
sv_vcatpvf|5.006000|5.004000|p
Packit d03632
sv_vsetpvf_mg|5.006000|5.004000|p
Packit d03632
sv_vsetpvfn||5.004000|
Packit d03632
sv_vsetpvf|5.006000|5.004000|p
Packit d03632
sv_xmlpeek|||
Packit d03632
svtype|||
Packit d03632
swallow_bom|||
Packit d03632
swash_fetch||5.007002|
Packit d03632
swash_init||5.006000|
Packit d03632
swatch_get|||
Packit d03632
sys_init3||5.010000|n
Packit d03632
sys_init||5.010000|n
Packit d03632
sys_intern_clear|||
Packit d03632
sys_intern_dup|||
Packit d03632
sys_intern_init|||
Packit d03632
sys_term||5.010000|n
Packit d03632
taint_env|||
Packit d03632
taint_proper|||
Packit d03632
tied_method|||v
Packit d03632
tmps_grow||5.006000|
Packit d03632
toFOLD_uni||5.007003|
Packit d03632
toFOLD_utf8||5.019001|
Packit d03632
toFOLD||5.019001|
Packit d03632
toLOWER_L1||5.019001|
Packit d03632
toLOWER_LC||5.004000|
Packit d03632
toLOWER_uni||5.007003|
Packit d03632
toLOWER_utf8||5.015007|
Packit d03632
toLOWER|||
Packit d03632
toTITLE_uni||5.007003|
Packit d03632
toTITLE_utf8||5.015007|
Packit d03632
toTITLE||5.019001|
Packit d03632
toUPPER_uni||5.007003|
Packit d03632
toUPPER_utf8||5.015007|
Packit d03632
toUPPER||5.004000|
Packit d03632
to_byte_substr|||
Packit d03632
to_lower_latin1|||
Packit d03632
to_uni_fold||5.007003|
Packit d03632
to_uni_lower_lc||5.006000|
Packit d03632
to_uni_lower||5.007003|
Packit d03632
to_uni_title_lc||5.006000|
Packit d03632
to_uni_title||5.007003|
Packit d03632
to_uni_upper_lc||5.006000|
Packit d03632
to_uni_upper||5.007003|
Packit d03632
to_utf8_case||5.007003|
Packit d03632
to_utf8_fold||5.015007|
Packit d03632
to_utf8_lower||5.015007|
Packit d03632
to_utf8_substr|||
Packit d03632
to_utf8_title||5.015007|
Packit d03632
to_utf8_upper||5.015007|
Packit d03632
token_free|||
Packit d03632
token_getmad|||
Packit d03632
tokenize_use|||
Packit d03632
tokeq|||
Packit d03632
tokereport|||
Packit d03632
too_few_arguments_pv|||
Packit d03632
too_few_arguments_sv|||
Packit d03632
too_many_arguments_pv|||
Packit d03632
too_many_arguments_sv|||
Packit d03632
translate_substr_offsets|||
Packit d03632
try_amagic_bin|||
Packit d03632
try_amagic_un|||
Packit d03632
uiv_2buf|||n
Packit d03632
unlnk|||
Packit d03632
unpack_rec|||
Packit d03632
unpack_str||5.007003|
Packit d03632
unpackstring||5.008001|
Packit d03632
unreferenced_to_tmp_stack|||
Packit d03632
unshare_hek_or_pvn|||
Packit d03632
unshare_hek|||
Packit d03632
unsharepvn||5.004000|
Packit d03632
unwind_handler_stack|||
Packit d03632
update_debugger_info|||
Packit d03632
upg_version||5.009005|
Packit d03632
usage|||
Packit d03632
utf16_textfilter|||
Packit d03632
utf16_to_utf8_reversed||5.006001|
Packit d03632
utf16_to_utf8||5.006001|
Packit d03632
utf8_distance||5.006000|
Packit d03632
utf8_hop||5.006000|
Packit d03632
utf8_length||5.007001|
Packit d03632
utf8_mg_len_cache_update|||
Packit d03632
utf8_mg_pos_cache_update|||
Packit d03632
utf8_to_bytes||5.006001|
Packit d03632
utf8_to_uvchr_buf||5.015009|
Packit d03632
utf8_to_uvchr||5.007001|
Packit d03632
utf8_to_uvuni_buf||5.015009|
Packit d03632
utf8_to_uvuni||5.007001|
Packit d03632
utf8n_to_uvchr|||
Packit d03632
utf8n_to_uvuni||5.007001|
Packit d03632
utilize|||
Packit d03632
uvchr_to_utf8_flags||5.007003|
Packit d03632
uvchr_to_utf8|||
Packit d03632
uvuni_to_utf8_flags||5.007003|
Packit d03632
uvuni_to_utf8||5.007001|
Packit d03632
valid_utf8_to_uvchr|||
Packit d03632
valid_utf8_to_uvuni||5.015009|
Packit d03632
validate_proto|||
Packit d03632
validate_suid|||
Packit d03632
varname|||
Packit d03632
vcmp||5.009000|
Packit d03632
vcroak||5.006000|
Packit d03632
vdeb||5.007003|
Packit d03632
vform||5.006000|
Packit d03632
visit|||
Packit d03632
vivify_defelem|||
Packit d03632
vivify_ref|||
Packit d03632
vload_module|5.006000||p
Packit d03632
vmess||5.006000|
Packit d03632
vnewSVpvf|5.006000|5.004000|p
Packit d03632
vnormal||5.009002|
Packit d03632
vnumify||5.009000|
Packit d03632
vstringify||5.009000|
Packit d03632
vverify||5.009003|
Packit d03632
vwarner||5.006000|
Packit d03632
vwarn||5.006000|
Packit d03632
wait4pid|||
Packit d03632
warn_nocontext|||vn
Packit d03632
warn_sv||5.013001|
Packit d03632
warner_nocontext|||vn
Packit d03632
warner|5.006000|5.004000|pv
Packit d03632
warn|||v
Packit d03632
was_lvalue_sub|||
Packit d03632
watch|||
Packit d03632
whichsig_pvn||5.015004|
Packit d03632
whichsig_pv||5.015004|
Packit d03632
whichsig_sv||5.015004|
Packit d03632
whichsig|||
Packit d03632
win32_croak_not_implemented|||n
Packit d03632
with_queued_errors|||
Packit d03632
wrap_op_checker||5.015008|
Packit d03632
write_to_stderr|||
Packit d03632
xmldump_all_perl|||
Packit d03632
xmldump_all|||
Packit d03632
xmldump_attr|||
Packit d03632
xmldump_eval|||
Packit d03632
xmldump_form|||
Packit d03632
xmldump_indent|||v
Packit d03632
xmldump_packsubs_perl|||
Packit d03632
xmldump_packsubs|||
Packit d03632
xmldump_sub_perl|||
Packit d03632
xmldump_sub|||
Packit d03632
xmldump_vindent|||
Packit d03632
xs_apiversion_bootcheck|||
Packit d03632
xs_version_bootcheck|||
Packit d03632
yyerror_pvn|||
Packit d03632
yyerror_pv|||
Packit d03632
yyerror|||
Packit d03632
yylex|||
Packit d03632
yyparse|||
Packit d03632
yyunlex|||
Packit d03632
yywarn|||
Packit d03632
);
Packit d03632
Packit d03632
if (exists $opt{'list-unsupported'}) {
Packit d03632
  my $f;
Packit d03632
  for $f (sort { lc $a cmp lc $b } keys %API) {
Packit d03632
    next unless $API{$f}{todo};
Packit d03632
    print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n";
Packit d03632
  }
Packit d03632
  exit 0;
Packit d03632
}
Packit d03632
Packit d03632
# Scan for possible replacement candidates
Packit d03632
Packit d03632
my(%replace, %need, %hints, %warnings, %depends);
Packit d03632
my $replace = 0;
Packit d03632
my($hint, $define, $function);
Packit d03632
Packit d03632
sub find_api
Packit d03632
{
Packit d03632
  my $code = shift;
Packit d03632
  $code =~ s{
Packit d03632
    / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
Packit d03632
  | "[^"\\]*(?:\\.[^"\\]*)*"
Packit d03632
  | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
Packit d03632
  grep { exists $API{$_} } $code =~ /(\w+)/mg;
Packit d03632
}
Packit d03632
Packit d03632
while (<DATA>) {
Packit d03632
  if ($hint) {
Packit d03632
    my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings;
Packit d03632
    if (m{^\s*\*\s(.*?)\s*$}) {
Packit d03632
      for (@{$hint->[1]}) {
Packit d03632
        $h->{$_} ||= '';  # suppress warning with older perls
Packit d03632
        $h->{$_} .= "$1\n";
Packit d03632
      }
Packit d03632
    }
Packit d03632
    else { undef $hint }
Packit d03632
  }
Packit d03632
Packit d03632
  $hint = [$1, [split /,?\s+/, $2]]
Packit d03632
      if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$};
Packit d03632
Packit d03632
  if ($define) {
Packit d03632
    if ($define->[1] =~ /\\$/) {
Packit d03632
      $define->[1] .= $_;
Packit d03632
    }
Packit d03632
    else {
Packit d03632
      if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) {
Packit d03632
        my @n = find_api($define->[1]);
Packit d03632
        push @{$depends{$define->[0]}}, @n if @n
Packit d03632
      }
Packit d03632
      undef $define;
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)};
Packit d03632
Packit d03632
  if ($function) {
Packit d03632
    if (/^}/) {
Packit d03632
      if (exists $API{$function->[0]}) {
Packit d03632
        my @n = find_api($function->[1]);
Packit d03632
        push @{$depends{$function->[0]}}, @n if @n
Packit d03632
      }
Packit d03632
      undef $function;
Packit d03632
    }
Packit d03632
    else {
Packit d03632
      $function->[1] .= $_;
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)};
Packit d03632
Packit d03632
  $replace     = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$};
Packit d03632
  $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)};
Packit d03632
  $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce};
Packit d03632
  $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$};
Packit d03632
Packit d03632
  if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) {
Packit d03632
    my @deps = map { s/\s+//g; $_ } split /,/, $3;
Packit d03632
    my $d;
Packit d03632
    for $d (map { s/\s+//g; $_ } split /,/, $1) {
Packit d03632
      push @{$depends{$d}}, @deps;
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)};
Packit d03632
}
Packit d03632
Packit d03632
for (values %depends) {
Packit d03632
  my %s;
Packit d03632
  $_ = [sort grep !$s{$_}++, @$_];
Packit d03632
}
Packit d03632
Packit d03632
if (exists $opt{'api-info'}) {
Packit d03632
  my $f;
Packit d03632
  my $count = 0;
Packit d03632
  my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$";
Packit d03632
  for $f (sort { lc $a cmp lc $b } keys %API) {
Packit d03632
    next unless $f =~ /$match/;
Packit d03632
    print "\n=== $f ===\n\n";
Packit d03632
    my $info = 0;
Packit d03632
    if ($API{$f}{base} || $API{$f}{todo}) {
Packit d03632
      my $base = format_version($API{$f}{base} || $API{$f}{todo});
Packit d03632
      print "Supported at least starting from perl-$base.\n";
Packit d03632
      $info++;
Packit d03632
    }
Packit d03632
    if ($API{$f}{provided}) {
Packit d03632
      my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003";
Packit d03632
      print "Support by $ppport provided back to perl-$todo.\n";
Packit d03632
      print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f};
Packit d03632
      print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f};
Packit d03632
      print "\n$hints{$f}" if exists $hints{$f};
Packit d03632
      print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f};
Packit d03632
      $info++;
Packit d03632
    }
Packit d03632
    print "No portability information available.\n" unless $info;
Packit d03632
    $count++;
Packit d03632
  }
Packit d03632
  $count or print "Found no API matching '$opt{'api-info'}'.";
Packit d03632
  print "\n";
Packit d03632
  exit 0;
Packit d03632
}
Packit d03632
Packit d03632
if (exists $opt{'list-provided'}) {
Packit d03632
  my $f;
Packit d03632
  for $f (sort { lc $a cmp lc $b } keys %API) {
Packit d03632
    next unless $API{$f}{provided};
Packit d03632
    my @flags;
Packit d03632
    push @flags, 'explicit' if exists $need{$f};
Packit d03632
    push @flags, 'depend'   if exists $depends{$f};
Packit d03632
    push @flags, 'hint'     if exists $hints{$f};
Packit d03632
    push @flags, 'warning'  if exists $warnings{$f};
Packit d03632
    my $flags = @flags ? '  ['.join(', ', @flags).']' : '';
Packit d03632
    print "$f$flags\n";
Packit d03632
  }
Packit d03632
  exit 0;
Packit d03632
}
Packit d03632
Packit d03632
my @files;
Packit d03632
my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc );
Packit d03632
my $srcext = join '|', map { quotemeta $_ } @srcext;
Packit d03632
Packit d03632
if (@ARGV) {
Packit d03632
  my %seen;
Packit d03632
  for (@ARGV) {
Packit d03632
    if (-e) {
Packit d03632
      if (-f) {
Packit d03632
        push @files, $_ unless $seen{$_}++;
Packit d03632
      }
Packit d03632
      else { warn "'$_' is not a file.\n" }
Packit d03632
    }
Packit d03632
    else {
Packit d03632
      my @new = grep { -f } glob $_
Packit d03632
          or warn "'$_' does not exist.\n";
Packit d03632
      push @files, grep { !$seen{$_}++ } @new;
Packit d03632
    }
Packit d03632
  }
Packit d03632
}
Packit d03632
else {
Packit d03632
  eval {
Packit d03632
    require File::Find;
Packit d03632
    File::Find::find(sub {
Packit d03632
      $File::Find::name =~ /($srcext)$/i
Packit d03632
          and push @files, $File::Find::name;
Packit d03632
    }, '.');
Packit d03632
  };
Packit d03632
  if ($@) {
Packit d03632
    @files = map { glob "*$_" } @srcext;
Packit d03632
  }
Packit d03632
}
Packit d03632
Packit d03632
if (!@ARGV || $opt{filter}) {
Packit d03632
  my(@in, @out);
Packit d03632
  my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files;
Packit d03632
  for (@files) {
Packit d03632
    my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i;
Packit d03632
    push @{ $out ? \@out : \@in }, $_;
Packit d03632
  }
Packit d03632
  if (@ARGV && @out) {
Packit d03632
    warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out);
Packit d03632
  }
Packit d03632
  @files = @in;
Packit d03632
}
Packit d03632
Packit d03632
die "No input files given!\n" unless @files;
Packit d03632
Packit d03632
my(%files, %global, %revreplace);
Packit d03632
%revreplace = reverse %replace;
Packit d03632
my $filename;
Packit d03632
my $patch_opened = 0;
Packit d03632
Packit d03632
for $filename (@files) {
Packit d03632
  unless (open IN, "<$filename") {
Packit d03632
    warn "Unable to read from $filename: $!\n";
Packit d03632
    next;
Packit d03632
  }
Packit d03632
Packit d03632
  info("Scanning $filename ...");
Packit d03632
Packit d03632
  my $c = do { local $/; <IN> };
Packit d03632
  close IN;
Packit d03632
Packit d03632
  my %file = (orig => $c, changes => 0);
Packit d03632
Packit d03632
  # Temporarily remove C/XS comments and strings from the code
Packit d03632
  my @ccom;
Packit d03632
Packit d03632
  $c =~ s{
Packit d03632
    ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]*
Packit d03632
    | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* )
Packit d03632
  | ( ^$HS*\#[^\r\n]*
Packit d03632
    | "[^"\\]*(?:\\.[^"\\]*)*"
Packit d03632
    | '[^'\\]*(?:\\.[^'\\]*)*'
Packit d03632
    | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) )
Packit d03632
  }{ defined $2 and push @ccom, $2;
Packit d03632
     defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex;
Packit d03632
Packit d03632
  $file{ccom} = \@ccom;
Packit d03632
  $file{code} = $c;
Packit d03632
  $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m;
Packit d03632
Packit d03632
  my $func;
Packit d03632
Packit d03632
  for $func (keys %API) {
Packit d03632
    my $match = $func;
Packit d03632
    $match .= "|$revreplace{$func}" if exists $revreplace{$func};
Packit d03632
    if ($c =~ /\b(?:Perl_)?($match)\b/) {
Packit d03632
      $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func};
Packit d03632
      $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/;
Packit d03632
      if (exists $API{$func}{provided}) {
Packit d03632
        $file{uses_provided}{$func}++;
Packit d03632
        if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) {
Packit d03632
          $file{uses}{$func}++;
Packit d03632
          my @deps = rec_depend($func);
Packit d03632
          if (@deps) {
Packit d03632
            $file{uses_deps}{$func} = \@deps;
Packit d03632
            for (@deps) {
Packit d03632
              $file{uses}{$_} = 0 unless exists $file{uses}{$_};
Packit d03632
            }
Packit d03632
          }
Packit d03632
          for ($func, @deps) {
Packit d03632
            $file{needs}{$_} = 'static' if exists $need{$_};
Packit d03632
          }
Packit d03632
        }
Packit d03632
      }
Packit d03632
      if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) {
Packit d03632
        if ($c =~ /\b$func\b/) {
Packit d03632
          $file{uses_todo}{$func}++;
Packit d03632
        }
Packit d03632
      }
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) {
Packit d03632
    if (exists $need{$2}) {
Packit d03632
      $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++;
Packit d03632
    }
Packit d03632
    else { warning("Possibly wrong #define $1 in $filename") }
Packit d03632
  }
Packit d03632
Packit d03632
  for (qw(uses needs uses_todo needed_global needed_static)) {
Packit d03632
    for $func (keys %{$file{$_}}) {
Packit d03632
      push @{$global{$_}{$func}}, $filename;
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  $files{$filename} = \%file;
Packit d03632
}
Packit d03632
Packit d03632
# Globally resolve NEED_'s
Packit d03632
my $need;
Packit d03632
for $need (keys %{$global{needs}}) {
Packit d03632
  if (@{$global{needs}{$need}} > 1) {
Packit d03632
    my @targets = @{$global{needs}{$need}};
Packit d03632
    my @t = grep $files{$_}{needed_global}{$need}, @targets;
Packit d03632
    @targets = @t if @t;
Packit d03632
    @t = grep /\.xs$/i, @targets;
Packit d03632
    @targets = @t if @t;
Packit d03632
    my $target = shift @targets;
Packit d03632
    $files{$target}{needs}{$need} = 'global';
Packit d03632
    for (@{$global{needs}{$need}}) {
Packit d03632
      $files{$_}{needs}{$need} = 'extern' if $_ ne $target;
Packit d03632
    }
Packit d03632
  }
Packit d03632
}
Packit d03632
Packit d03632
for $filename (@files) {
Packit d03632
  exists $files{$filename} or next;
Packit d03632
Packit d03632
  info("=== Analyzing $filename ===");
Packit d03632
Packit d03632
  my %file = %{$files{$filename}};
Packit d03632
  my $func;
Packit d03632
  my $c = $file{code};
Packit d03632
  my $warnings = 0;
Packit d03632
Packit d03632
  for $func (sort keys %{$file{uses_Perl}}) {
Packit d03632
    if ($API{$func}{varargs}) {
Packit d03632
      unless ($API{$func}{nothxarg}) {
Packit d03632
        my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))}
Packit d03632
                              { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge);
Packit d03632
        if ($changes) {
Packit d03632
          warning("Doesn't pass interpreter argument aTHX to Perl_$func");
Packit d03632
          $file{changes} += $changes;
Packit d03632
        }
Packit d03632
      }
Packit d03632
    }
Packit d03632
    else {
Packit d03632
      warning("Uses Perl_$func instead of $func");
Packit d03632
      $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*}
Packit d03632
                                {$func$1(}g);
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  for $func (sort keys %{$file{uses_replace}}) {
Packit d03632
    warning("Uses $func instead of $replace{$func}");
Packit d03632
    $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g);
Packit d03632
  }
Packit d03632
Packit d03632
  for $func (sort keys %{$file{uses_provided}}) {
Packit d03632
    if ($file{uses}{$func}) {
Packit d03632
      if (exists $file{uses_deps}{$func}) {
Packit d03632
        diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}}));
Packit d03632
      }
Packit d03632
      else {
Packit d03632
        diag("Uses $func");
Packit d03632
      }
Packit d03632
    }
Packit d03632
    $warnings += hint($func);
Packit d03632
  }
Packit d03632
Packit d03632
  unless ($opt{quiet}) {
Packit d03632
    for $func (sort keys %{$file{uses_todo}}) {
Packit d03632
      print "*** WARNING: Uses $func, which may not be portable below perl ",
Packit d03632
            format_version($API{$func}{todo}), ", even with '$ppport'\n";
Packit d03632
      $warnings++;
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  for $func (sort keys %{$file{needed_static}}) {
Packit d03632
    my $message = '';
Packit d03632
    if (not exists $file{uses}{$func}) {
Packit d03632
      $message = "No need to define NEED_$func if $func is never used";
Packit d03632
    }
Packit d03632
    elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') {
Packit d03632
      $message = "No need to define NEED_$func when already needed globally";
Packit d03632
    }
Packit d03632
    if ($message) {
Packit d03632
      diag($message);
Packit d03632
      $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg);
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  for $func (sort keys %{$file{needed_global}}) {
Packit d03632
    my $message = '';
Packit d03632
    if (not exists $global{uses}{$func}) {
Packit d03632
      $message = "No need to define NEED_${func}_GLOBAL if $func is never used";
Packit d03632
    }
Packit d03632
    elsif (exists $file{needs}{$func}) {
Packit d03632
      if ($file{needs}{$func} eq 'extern') {
Packit d03632
        $message = "No need to define NEED_${func}_GLOBAL when already needed globally";
Packit d03632
      }
Packit d03632
      elsif ($file{needs}{$func} eq 'static') {
Packit d03632
        $message = "No need to define NEED_${func}_GLOBAL when only used in this file";
Packit d03632
      }
Packit d03632
    }
Packit d03632
    if ($message) {
Packit d03632
      diag($message);
Packit d03632
      $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg);
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  $file{needs_inc_ppport} = keys %{$file{uses}};
Packit d03632
Packit d03632
  if ($file{needs_inc_ppport}) {
Packit d03632
    my $pp = '';
Packit d03632
Packit d03632
    for $func (sort keys %{$file{needs}}) {
Packit d03632
      my $type = $file{needs}{$func};
Packit d03632
      next if $type eq 'extern';
Packit d03632
      my $suffix = $type eq 'global' ? '_GLOBAL' : '';
Packit d03632
      unless (exists $file{"needed_$type"}{$func}) {
Packit d03632
        if ($type eq 'global') {
Packit d03632
          diag("Files [@{$global{needs}{$func}}] need $func, adding global request");
Packit d03632
        }
Packit d03632
        else {
Packit d03632
          diag("File needs $func, adding static request");
Packit d03632
        }
Packit d03632
        $pp .= "#define NEED_$func$suffix\n";
Packit d03632
      }
Packit d03632
    }
Packit d03632
Packit d03632
    if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) {
Packit d03632
      $pp = '';
Packit d03632
      $file{changes}++;
Packit d03632
    }
Packit d03632
Packit d03632
    unless ($file{has_inc_ppport}) {
Packit d03632
      diag("Needs to include '$ppport'");
Packit d03632
      $pp .= qq(#include "$ppport"\n)
Packit d03632
    }
Packit d03632
Packit d03632
    if ($pp) {
Packit d03632
      $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms)
Packit d03632
                     || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m)
Packit d03632
                     || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m)
Packit d03632
                     || ($c =~ s/^/$pp/);
Packit d03632
    }
Packit d03632
  }
Packit d03632
  else {
Packit d03632
    if ($file{has_inc_ppport}) {
Packit d03632
      diag("No need to include '$ppport'");
Packit d03632
      $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m);
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  # put back in our C comments
Packit d03632
  my $ix;
Packit d03632
  my $cppc = 0;
Packit d03632
  my @ccom = @{$file{ccom}};
Packit d03632
  for $ix (0 .. $#ccom) {
Packit d03632
    if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) {
Packit d03632
      $cppc++;
Packit d03632
      $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/;
Packit d03632
    }
Packit d03632
    else {
Packit d03632
      $c =~ s/$rccs$ix$rcce/$ccom[$ix]/;
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  if ($cppc) {
Packit d03632
    my $s = $cppc != 1 ? 's' : '';
Packit d03632
    warning("Uses $cppc C++ style comment$s, which is not portable");
Packit d03632
  }
Packit d03632
Packit d03632
  my $s = $warnings != 1 ? 's' : '';
Packit d03632
  my $warn = $warnings ? " ($warnings warning$s)" : '';
Packit d03632
  info("Analysis completed$warn");
Packit d03632
Packit d03632
  if ($file{changes}) {
Packit d03632
    if (exists $opt{copy}) {
Packit d03632
      my $newfile = "$filename$opt{copy}";
Packit d03632
      if (-e $newfile) {
Packit d03632
        error("'$newfile' already exists, refusing to write copy of '$filename'");
Packit d03632
      }
Packit d03632
      else {
Packit d03632
        local *F;
Packit d03632
        if (open F, ">$newfile") {
Packit d03632
          info("Writing copy of '$filename' with changes to '$newfile'");
Packit d03632
          print F $c;
Packit d03632
          close F;
Packit d03632
        }
Packit d03632
        else {
Packit d03632
          error("Cannot open '$newfile' for writing: $!");
Packit d03632
        }
Packit d03632
      }
Packit d03632
    }
Packit d03632
    elsif (exists $opt{patch} || $opt{changes}) {
Packit d03632
      if (exists $opt{patch}) {
Packit d03632
        unless ($patch_opened) {
Packit d03632
          if (open PATCH, ">$opt{patch}") {
Packit d03632
            $patch_opened = 1;
Packit d03632
          }
Packit d03632
          else {
Packit d03632
            error("Cannot open '$opt{patch}' for writing: $!");
Packit d03632
            delete $opt{patch};
Packit d03632
            $opt{changes} = 1;
Packit d03632
            goto fallback;
Packit d03632
          }
Packit d03632
        }
Packit d03632
        mydiff(\*PATCH, $filename, $c);
Packit d03632
      }
Packit d03632
      else {
Packit d03632
fallback:
Packit d03632
        info("Suggested changes:");
Packit d03632
        mydiff(\*STDOUT, $filename, $c);
Packit d03632
      }
Packit d03632
    }
Packit d03632
    else {
Packit d03632
      my $s = $file{changes} == 1 ? '' : 's';
Packit d03632
      info("$file{changes} potentially required change$s detected");
Packit d03632
    }
Packit d03632
  }
Packit d03632
  else {
Packit d03632
    info("Looks good");
Packit d03632
  }
Packit d03632
}
Packit d03632
Packit d03632
close PATCH if $patch_opened;
Packit d03632
Packit d03632
exit 0;
Packit d03632
Packit d03632
Packit d03632
sub try_use { eval "use @_;"; return $@ eq '' }
Packit d03632
Packit d03632
sub mydiff
Packit d03632
{
Packit d03632
  local *F = shift;
Packit d03632
  my($file, $str) = @_;
Packit d03632
  my $diff;
Packit d03632
Packit d03632
  if (exists $opt{diff}) {
Packit d03632
    $diff = run_diff($opt{diff}, $file, $str);
Packit d03632
  }
Packit d03632
Packit d03632
  if (!defined $diff and try_use('Text::Diff')) {
Packit d03632
    $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' });
Packit d03632
    $diff = <
Packit d03632
--- $file
Packit d03632
+++ $file.patched
Packit d03632
HEADER
Packit d03632
  }
Packit d03632
Packit d03632
  if (!defined $diff) {
Packit d03632
    $diff = run_diff('diff -u', $file, $str);
Packit d03632
  }
Packit d03632
Packit d03632
  if (!defined $diff) {
Packit d03632
    $diff = run_diff('diff', $file, $str);
Packit d03632
  }
Packit d03632
Packit d03632
  if (!defined $diff) {
Packit d03632
    error("Cannot generate a diff. Please install Text::Diff or use --copy.");
Packit d03632
    return;
Packit d03632
  }
Packit d03632
Packit d03632
  print F $diff;
Packit d03632
}
Packit d03632
Packit d03632
sub run_diff
Packit d03632
{
Packit d03632
  my($prog, $file, $str) = @_;
Packit d03632
  my $tmp = 'dppptemp';
Packit d03632
  my $suf = 'aaa';
Packit d03632
  my $diff = '';
Packit d03632
  local *F;
Packit d03632
Packit d03632
  while (-e "$tmp.$suf") { $suf++ }
Packit d03632
  $tmp = "$tmp.$suf";
Packit d03632
Packit d03632
  if (open F, ">$tmp") {
Packit d03632
    print F $str;
Packit d03632
    close F;
Packit d03632
Packit d03632
    if (open F, "$prog $file $tmp |") {
Packit d03632
      while (<F>) {
Packit d03632
        s/\Q$tmp\E/$file.patched/;
Packit d03632
        $diff .= $_;
Packit d03632
      }
Packit d03632
      close F;
Packit d03632
      unlink $tmp;
Packit d03632
      return $diff;
Packit d03632
    }
Packit d03632
Packit d03632
    unlink $tmp;
Packit d03632
  }
Packit d03632
  else {
Packit d03632
    error("Cannot open '$tmp' for writing: $!");
Packit d03632
  }
Packit d03632
Packit d03632
  return undef;
Packit d03632
}
Packit d03632
Packit d03632
sub rec_depend
Packit d03632
{
Packit d03632
  my($func, $seen) = @_;
Packit d03632
  return () unless exists $depends{$func};
Packit d03632
  $seen = {%{$seen||{}}};
Packit d03632
  return () if $seen->{$func}++;
Packit d03632
  my %s;
Packit d03632
  grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}};
Packit d03632
}
Packit d03632
Packit d03632
sub parse_version
Packit d03632
{
Packit d03632
  my $ver = shift;
Packit d03632
Packit d03632
  if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) {
Packit d03632
    return ($1, $2, $3);
Packit d03632
  }
Packit d03632
  elsif ($ver !~ /^\d+\.[\d_]+$/) {
Packit d03632
    die "cannot parse version '$ver'\n";
Packit d03632
  }
Packit d03632
Packit d03632
  $ver =~ s/_//g;
Packit d03632
  $ver =~ s/$/000000/;
Packit d03632
Packit d03632
  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
Packit d03632
Packit d03632
  $v = int $v;
Packit d03632
  $s = int $s;
Packit d03632
Packit d03632
  if ($r < 5 || ($r == 5 && $v < 6)) {
Packit d03632
    if ($s % 10) {
Packit d03632
      die "cannot parse version '$ver'\n";
Packit d03632
    }
Packit d03632
  }
Packit d03632
Packit d03632
  return ($r, $v, $s);
Packit d03632
}
Packit d03632
Packit d03632
sub format_version
Packit d03632
{
Packit d03632
  my $ver = shift;
Packit d03632
Packit d03632
  $ver =~ s/$/000000/;
Packit d03632
  my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/;
Packit d03632
Packit d03632
  $v = int $v;
Packit d03632
  $s = int $s;
Packit d03632
Packit d03632
  if ($r < 5 || ($r == 5 && $v < 6)) {
Packit d03632
    if ($s % 10) {
Packit d03632
      die "invalid version '$ver'\n";
Packit d03632
    }
Packit d03632
    $s /= 10;
Packit d03632
Packit d03632
    $ver = sprintf "%d.%03d", $r, $v;
Packit d03632
    $s > 0 and $ver .= sprintf "_%02d", $s;
Packit d03632
Packit d03632
    return $ver;
Packit d03632
  }
Packit d03632
Packit d03632
  return sprintf "%d.%d.%d", $r, $v, $s;
Packit d03632
}
Packit d03632
Packit d03632
sub info
Packit d03632
{
Packit d03632
  $opt{quiet} and return;
Packit d03632
  print @_, "\n";
Packit d03632
}
Packit d03632
Packit d03632
sub diag
Packit d03632
{
Packit d03632
  $opt{quiet} and return;
Packit d03632
  $opt{diag} and print @_, "\n";
Packit d03632
}
Packit d03632
Packit d03632
sub warning
Packit d03632
{
Packit d03632
  $opt{quiet} and return;
Packit d03632
  print "*** ", @_, "\n";
Packit d03632
}
Packit d03632
Packit d03632
sub error
Packit d03632
{
Packit d03632
  print "*** ERROR: ", @_, "\n";
Packit d03632
}
Packit d03632
Packit d03632
my %given_hints;
Packit d03632
my %given_warnings;
Packit d03632
sub hint
Packit d03632
{
Packit d03632
  $opt{quiet} and return;
Packit d03632
  my $func = shift;
Packit d03632
  my $rv = 0;
Packit d03632
  if (exists $warnings{$func} && !$given_warnings{$func}++) {
Packit d03632
    my $warn = $warnings{$func};
Packit d03632
    $warn =~ s!^!*** !mg;
Packit d03632
    print "*** WARNING: $func\n", $warn;
Packit d03632
    $rv++;
Packit d03632
  }
Packit d03632
  if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) {
Packit d03632
    my $hint = $hints{$func};
Packit d03632
    $hint =~ s/^/   /mg;
Packit d03632
    print "   --- hint for $func ---\n", $hint;
Packit d03632
  }
Packit d03632
  $rv;
Packit d03632
}
Packit d03632
Packit d03632
sub usage
Packit d03632
{
Packit d03632
  my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms;
Packit d03632
  my %M = ( 'I' => '*' );
Packit d03632
  $usage =~ s/^\s*perl\s+\S+/$^X $0/;
Packit d03632
  $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g;
Packit d03632
Packit d03632
  print <
Packit d03632
Packit d03632
Usage: $usage
Packit d03632
Packit d03632
See perldoc $0 for details.
Packit d03632
Packit d03632
ENDUSAGE
Packit d03632
Packit d03632
  exit 2;
Packit d03632
}
Packit d03632
Packit d03632
sub strip
Packit d03632
{
Packit d03632
  my $self = do { local(@ARGV,$/)=($0); <> };
Packit d03632
  my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms;
Packit d03632
  $copy =~ s/^(?=\S+)/    /gms;
Packit d03632
  $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms;
Packit d03632
  $self =~ s/^SKIP.*(?=^__DATA__)/SKIP
Packit d03632
if (\@ARGV && \$ARGV[0] eq '--unstrip') {
Packit d03632
  eval { require Devel::PPPort };
Packit d03632
  \$@ and die "Cannot require Devel::PPPort, please install.\\n";
Packit d03632
  if (eval \$Devel::PPPort::VERSION < $VERSION) {
Packit d03632
    die "$0 was originally generated with Devel::PPPort $VERSION.\\n"
Packit d03632
      . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n"
Packit d03632
      . "Please install a newer version, or --unstrip will not work.\\n";
Packit d03632
  }
Packit d03632
  Devel::PPPort::WriteFile(\$0);
Packit d03632
  exit 0;
Packit d03632
}
Packit d03632
print <
Packit d03632
Packit d03632
Sorry, but this is a stripped version of \$0.
Packit d03632
Packit d03632
To be able to use its original script and doc functionality,
Packit d03632
please try to regenerate this file using:
Packit d03632
Packit d03632
  \$^X \$0 --unstrip
Packit d03632
Packit d03632
END
Packit d03632
/ms;
Packit d03632
  my($pl, $c) = $self =~ /(.*^__DATA__)(.*)/ms;
Packit d03632
  $c =~ s{
Packit d03632
    / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
Packit d03632
  | ( "[^"\\]*(?:\\.[^"\\]*)*"
Packit d03632
    | '[^'\\]*(?:\\.[^'\\]*)*' )
Packit d03632
  | ($HS+) }{ defined $2 ? ' ' : ($1 || '') }gsex;
Packit d03632
  $c =~ s!\s+$!!mg;
Packit d03632
  $c =~ s!^$LF!!mg;
Packit d03632
  $c =~ s!^\s*#\s*!#!mg;
Packit d03632
  $c =~ s!^\s+!!mg;
Packit d03632
Packit d03632
  open OUT, ">$0" or die "cannot strip $0: $!\n";
Packit d03632
  print OUT "$pl$c\n";
Packit d03632
Packit d03632
  exit 0;
Packit d03632
}
Packit d03632
Packit d03632
__DATA__
Packit d03632
*/
Packit d03632
Packit d03632
#ifndef _P_P_PORTABILITY_H_
Packit d03632
#define _P_P_PORTABILITY_H_
Packit d03632
Packit d03632
#ifndef DPPP_NAMESPACE
Packit d03632
#  define DPPP_NAMESPACE DPPP_
Packit d03632
#endif
Packit d03632
Packit d03632
#define DPPP_CAT2(x,y) CAT2(x,y)
Packit d03632
#define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name)
Packit d03632
Packit d03632
#ifndef PERL_REVISION
Packit d03632
#  if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION))
Packit d03632
#    define PERL_PATCHLEVEL_H_IMPLICIT
Packit d03632
#    include <patchlevel.h>
Packit d03632
#  endif
Packit d03632
#  if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL)))
Packit d03632
#    include <could_not_find_Perl_patchlevel.h>
Packit d03632
#  endif
Packit d03632
#  ifndef PERL_REVISION
Packit d03632
#    define PERL_REVISION       (5)
Packit d03632
     /* Replace: 1 */
Packit d03632
#    define PERL_VERSION        PATCHLEVEL
Packit d03632
#    define PERL_SUBVERSION     SUBVERSION
Packit d03632
     /* Replace PERL_PATCHLEVEL with PERL_VERSION */
Packit d03632
     /* Replace: 0 */
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
Packit d03632
#define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION))
Packit d03632
Packit d03632
/* It is very unlikely that anyone will try to use this with Perl 6
Packit d03632
   (or greater), but who knows.
Packit d03632
 */
Packit d03632
#if PERL_REVISION != 5
Packit d03632
#  error ppport.h only works with Perl version 5
Packit d03632
#endif /* PERL_REVISION != 5 */
Packit d03632
#ifndef dTHR
Packit d03632
#  define dTHR                           dNOOP
Packit d03632
#endif
Packit d03632
#ifndef dTHX
Packit d03632
#  define dTHX                           dNOOP
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef dTHXa
Packit d03632
#  define dTHXa(x)                       dNOOP
Packit d03632
#endif
Packit d03632
#ifndef pTHX
Packit d03632
#  define pTHX                           void
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef pTHX_
Packit d03632
#  define pTHX_
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef aTHX
Packit d03632
#  define aTHX
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef aTHX_
Packit d03632
#  define aTHX_
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5006000)
Packit d03632
#  ifdef USE_THREADS
Packit d03632
#    define aTHXR  thr
Packit d03632
#    define aTHXR_ thr,
Packit d03632
#  else
Packit d03632
#    define aTHXR
Packit d03632
#    define aTHXR_
Packit d03632
#  endif
Packit d03632
#  define dTHXR  dTHR
Packit d03632
#else
Packit d03632
#  define aTHXR  aTHX
Packit d03632
#  define aTHXR_ aTHX_
Packit d03632
#  define dTHXR  dTHX
Packit d03632
#endif
Packit d03632
#ifndef dTHXoa
Packit d03632
#  define dTHXoa(x)                      dTHXa(x)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef I_LIMITS
Packit d03632
#  include <limits.h>
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UCHAR_MIN
Packit d03632
#  define PERL_UCHAR_MIN ((unsigned char)0)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UCHAR_MAX
Packit d03632
#  ifdef UCHAR_MAX
Packit d03632
#    define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX)
Packit d03632
#  else
Packit d03632
#    ifdef MAXUCHAR
Packit d03632
#      define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR)
Packit d03632
#    else
Packit d03632
#      define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0)
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_USHORT_MIN
Packit d03632
#  define PERL_USHORT_MIN ((unsigned short)0)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_USHORT_MAX
Packit d03632
#  ifdef USHORT_MAX
Packit d03632
#    define PERL_USHORT_MAX ((unsigned short)USHORT_MAX)
Packit d03632
#  else
Packit d03632
#    ifdef MAXUSHORT
Packit d03632
#      define PERL_USHORT_MAX ((unsigned short)MAXUSHORT)
Packit d03632
#    else
Packit d03632
#      ifdef USHRT_MAX
Packit d03632
#        define PERL_USHORT_MAX ((unsigned short)USHRT_MAX)
Packit d03632
#      else
Packit d03632
#        define PERL_USHORT_MAX ((unsigned short)~(unsigned)0)
Packit d03632
#      endif
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_SHORT_MAX
Packit d03632
#  ifdef SHORT_MAX
Packit d03632
#    define PERL_SHORT_MAX ((short)SHORT_MAX)
Packit d03632
#  else
Packit d03632
#    ifdef MAXSHORT    /* Often used in <values.h> */
Packit d03632
#      define PERL_SHORT_MAX ((short)MAXSHORT)
Packit d03632
#    else
Packit d03632
#      ifdef SHRT_MAX
Packit d03632
#        define PERL_SHORT_MAX ((short)SHRT_MAX)
Packit d03632
#      else
Packit d03632
#        define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1))
Packit d03632
#      endif
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_SHORT_MIN
Packit d03632
#  ifdef SHORT_MIN
Packit d03632
#    define PERL_SHORT_MIN ((short)SHORT_MIN)
Packit d03632
#  else
Packit d03632
#    ifdef MINSHORT
Packit d03632
#      define PERL_SHORT_MIN ((short)MINSHORT)
Packit d03632
#    else
Packit d03632
#      ifdef SHRT_MIN
Packit d03632
#        define PERL_SHORT_MIN ((short)SHRT_MIN)
Packit d03632
#      else
Packit d03632
#        define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3))
Packit d03632
#      endif
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UINT_MAX
Packit d03632
#  ifdef UINT_MAX
Packit d03632
#    define PERL_UINT_MAX ((unsigned int)UINT_MAX)
Packit d03632
#  else
Packit d03632
#    ifdef MAXUINT
Packit d03632
#      define PERL_UINT_MAX ((unsigned int)MAXUINT)
Packit d03632
#    else
Packit d03632
#      define PERL_UINT_MAX (~(unsigned int)0)
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UINT_MIN
Packit d03632
#  define PERL_UINT_MIN ((unsigned int)0)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_INT_MAX
Packit d03632
#  ifdef INT_MAX
Packit d03632
#    define PERL_INT_MAX ((int)INT_MAX)
Packit d03632
#  else
Packit d03632
#    ifdef MAXINT    /* Often used in <values.h> */
Packit d03632
#      define PERL_INT_MAX ((int)MAXINT)
Packit d03632
#    else
Packit d03632
#      define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1))
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_INT_MIN
Packit d03632
#  ifdef INT_MIN
Packit d03632
#    define PERL_INT_MIN ((int)INT_MIN)
Packit d03632
#  else
Packit d03632
#    ifdef MININT
Packit d03632
#      define PERL_INT_MIN ((int)MININT)
Packit d03632
#    else
Packit d03632
#      define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3))
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_ULONG_MAX
Packit d03632
#  ifdef ULONG_MAX
Packit d03632
#    define PERL_ULONG_MAX ((unsigned long)ULONG_MAX)
Packit d03632
#  else
Packit d03632
#    ifdef MAXULONG
Packit d03632
#      define PERL_ULONG_MAX ((unsigned long)MAXULONG)
Packit d03632
#    else
Packit d03632
#      define PERL_ULONG_MAX (~(unsigned long)0)
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_ULONG_MIN
Packit d03632
#  define PERL_ULONG_MIN ((unsigned long)0L)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_LONG_MAX
Packit d03632
#  ifdef LONG_MAX
Packit d03632
#    define PERL_LONG_MAX ((long)LONG_MAX)
Packit d03632
#  else
Packit d03632
#    ifdef MAXLONG
Packit d03632
#      define PERL_LONG_MAX ((long)MAXLONG)
Packit d03632
#    else
Packit d03632
#      define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1))
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_LONG_MIN
Packit d03632
#  ifdef LONG_MIN
Packit d03632
#    define PERL_LONG_MIN ((long)LONG_MIN)
Packit d03632
#  else
Packit d03632
#    ifdef MINLONG
Packit d03632
#      define PERL_LONG_MIN ((long)MINLONG)
Packit d03632
#    else
Packit d03632
#      define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3))
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if defined(HAS_QUAD) && (defined(convex) || defined(uts))
Packit d03632
#  ifndef PERL_UQUAD_MAX
Packit d03632
#    ifdef ULONGLONG_MAX
Packit d03632
#      define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX)
Packit d03632
#    else
Packit d03632
#      ifdef MAXULONGLONG
Packit d03632
#        define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG)
Packit d03632
#      else
Packit d03632
#        define PERL_UQUAD_MAX (~(unsigned long long)0)
Packit d03632
#      endif
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
Packit d03632
#  ifndef PERL_UQUAD_MIN
Packit d03632
#    define PERL_UQUAD_MIN ((unsigned long long)0L)
Packit d03632
#  endif
Packit d03632
Packit d03632
#  ifndef PERL_QUAD_MAX
Packit d03632
#    ifdef LONGLONG_MAX
Packit d03632
#      define PERL_QUAD_MAX ((long long)LONGLONG_MAX)
Packit d03632
#    else
Packit d03632
#      ifdef MAXLONGLONG
Packit d03632
#        define PERL_QUAD_MAX ((long long)MAXLONGLONG)
Packit d03632
#      else
Packit d03632
#        define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1))
Packit d03632
#      endif
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
Packit d03632
#  ifndef PERL_QUAD_MIN
Packit d03632
#    ifdef LONGLONG_MIN
Packit d03632
#      define PERL_QUAD_MIN ((long long)LONGLONG_MIN)
Packit d03632
#    else
Packit d03632
#      ifdef MINLONGLONG
Packit d03632
#        define PERL_QUAD_MIN ((long long)MINLONGLONG)
Packit d03632
#      else
Packit d03632
#        define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3))
Packit d03632
#      endif
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
/* This is based on code from 5.003 perl.h */
Packit d03632
#ifdef HAS_QUAD
Packit d03632
#  ifdef cray
Packit d03632
#ifndef IVTYPE
Packit d03632
#  define IVTYPE                         int
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IV_MIN
Packit d03632
#  define IV_MIN                         PERL_INT_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IV_MAX
Packit d03632
#  define IV_MAX                         PERL_INT_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UV_MIN
Packit d03632
#  define UV_MIN                         PERL_UINT_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UV_MAX
Packit d03632
#  define UV_MAX                         PERL_UINT_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#    ifdef INTSIZE
Packit d03632
#ifndef IVSIZE
Packit d03632
#  define IVSIZE                         INTSIZE
Packit d03632
#endif
Packit d03632
Packit d03632
#    endif
Packit d03632
#  else
Packit d03632
#    if defined(convex) || defined(uts)
Packit d03632
#ifndef IVTYPE
Packit d03632
#  define IVTYPE                         long long
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IV_MIN
Packit d03632
#  define IV_MIN                         PERL_QUAD_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IV_MAX
Packit d03632
#  define IV_MAX                         PERL_QUAD_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UV_MIN
Packit d03632
#  define UV_MIN                         PERL_UQUAD_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UV_MAX
Packit d03632
#  define UV_MAX                         PERL_UQUAD_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#      ifdef LONGLONGSIZE
Packit d03632
#ifndef IVSIZE
Packit d03632
#  define IVSIZE                         LONGLONGSIZE
Packit d03632
#endif
Packit d03632
Packit d03632
#      endif
Packit d03632
#    else
Packit d03632
#ifndef IVTYPE
Packit d03632
#  define IVTYPE                         long
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IV_MIN
Packit d03632
#  define IV_MIN                         PERL_LONG_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IV_MAX
Packit d03632
#  define IV_MAX                         PERL_LONG_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UV_MIN
Packit d03632
#  define UV_MIN                         PERL_ULONG_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UV_MAX
Packit d03632
#  define UV_MAX                         PERL_ULONG_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#      ifdef LONGSIZE
Packit d03632
#ifndef IVSIZE
Packit d03632
#  define IVSIZE                         LONGSIZE
Packit d03632
#endif
Packit d03632
Packit d03632
#      endif
Packit d03632
#    endif
Packit d03632
#  endif
Packit d03632
#ifndef IVSIZE
Packit d03632
#  define IVSIZE                         8
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef LONGSIZE
Packit d03632
#  define LONGSIZE                       8
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_QUAD_MIN
Packit d03632
#  define PERL_QUAD_MIN                  IV_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_QUAD_MAX
Packit d03632
#  define PERL_QUAD_MAX                  IV_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UQUAD_MIN
Packit d03632
#  define PERL_UQUAD_MIN                 UV_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UQUAD_MAX
Packit d03632
#  define PERL_UQUAD_MAX                 UV_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#else
Packit d03632
#ifndef IVTYPE
Packit d03632
#  define IVTYPE                         long
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef LONGSIZE
Packit d03632
#  define LONGSIZE                       4
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IV_MIN
Packit d03632
#  define IV_MIN                         PERL_LONG_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IV_MAX
Packit d03632
#  define IV_MAX                         PERL_LONG_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UV_MIN
Packit d03632
#  define UV_MIN                         PERL_ULONG_MIN
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UV_MAX
Packit d03632
#  define UV_MAX                         PERL_ULONG_MAX
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IVSIZE
Packit d03632
#  ifdef LONGSIZE
Packit d03632
#    define IVSIZE LONGSIZE
Packit d03632
#  else
Packit d03632
#    define IVSIZE 4 /* A bold guess, but the best we can make. */
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
#ifndef UVTYPE
Packit d03632
#  define UVTYPE                         unsigned IVTYPE
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UVSIZE
Packit d03632
#  define UVSIZE                         IVSIZE
Packit d03632
#endif
Packit d03632
#ifndef sv_setuv
Packit d03632
#  define sv_setuv(sv, uv)               \
Packit d03632
               STMT_START {                         \
Packit d03632
                 UV TeMpUv = uv;                    \
Packit d03632
                 if (TeMpUv <= IV_MAX)              \
Packit d03632
                   sv_setiv(sv, TeMpUv);            \
Packit d03632
                 else                               \
Packit d03632
                   sv_setnv(sv, (double)TeMpUv);    \
Packit d03632
               } STMT_END
Packit d03632
#endif
Packit d03632
#ifndef newSVuv
Packit d03632
#  define newSVuv(uv)                    ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
Packit d03632
#endif
Packit d03632
#ifndef sv_2uv
Packit d03632
#  define sv_2uv(sv)                     ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvUVX
Packit d03632
#  define SvUVX(sv)                      ((UV)SvIVX(sv))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvUVXx
Packit d03632
#  define SvUVXx(sv)                     SvUVX(sv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvUV
Packit d03632
#  define SvUV(sv)                       (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvUVx
Packit d03632
#  define SvUVx(sv)                      ((PL_Sv = (sv)), SvUV(PL_Sv))
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: sv_uv
Packit d03632
 * Always use the SvUVx() macro instead of sv_uv().
Packit d03632
 */
Packit d03632
#ifndef sv_uv
Packit d03632
#  define sv_uv(sv)                      SvUVx(sv)
Packit d03632
#endif
Packit d03632
Packit d03632
#if !defined(SvUOK) && defined(SvIOK_UV)
Packit d03632
#  define SvUOK(sv) SvIOK_UV(sv)
Packit d03632
#endif
Packit d03632
#ifndef XST_mUV
Packit d03632
#  define XST_mUV(i,v)                   (ST(i) = sv_2mortal(newSVuv(v))  )
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef XSRETURN_UV
Packit d03632
#  define XSRETURN_UV(v)                 STMT_START { XST_mUV(0,v);  XSRETURN(1); } STMT_END
Packit d03632
#endif
Packit d03632
#ifndef PUSHu
Packit d03632
#  define PUSHu(u)                       STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG;  } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef XPUSHu
Packit d03632
#  define XPUSHu(u)                      STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef HAS_MEMCMP
Packit d03632
#ifndef memNE
Packit d03632
#  define memNE(s1,s2,l)                 (memcmp(s1,s2,l))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef memEQ
Packit d03632
#  define memEQ(s1,s2,l)                 (!memcmp(s1,s2,l))
Packit d03632
#endif
Packit d03632
Packit d03632
#else
Packit d03632
#ifndef memNE
Packit d03632
#  define memNE(s1,s2,l)                 (bcmp(s1,s2,l))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef memEQ
Packit d03632
#  define memEQ(s1,s2,l)                 (!bcmp(s1,s2,l))
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
#ifndef memEQs
Packit d03632
#  define memEQs(s1, l, s2)              \
Packit d03632
                   (sizeof(s2)-1 == l && memEQ(s1, (s2 ""), (sizeof(s2)-1)))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef memNEs
Packit d03632
#  define memNEs(s1, l, s2)              !memEQs(s1, l, s2)
Packit d03632
#endif
Packit d03632
#ifndef MoveD
Packit d03632
#  define MoveD(s,d,n,t)                 memmove((char*)(d),(char*)(s), (n) * sizeof(t))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopyD
Packit d03632
#  define CopyD(s,d,n,t)                 memcpy((char*)(d),(char*)(s), (n) * sizeof(t))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef HAS_MEMSET
Packit d03632
#ifndef ZeroD
Packit d03632
#  define ZeroD(d,n,t)                   memzero((char*)(d), (n) * sizeof(t))
Packit d03632
#endif
Packit d03632
Packit d03632
#else
Packit d03632
#ifndef ZeroD
Packit d03632
#  define ZeroD(d,n,t)                   ((void)memzero((char*)(d), (n) * sizeof(t)), d)
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
#ifndef PoisonWith
Packit d03632
#  define PoisonWith(d,n,t,b)            (void)memset((char*)(d), (U8)(b), (n) * sizeof(t))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PoisonNew
Packit d03632
#  define PoisonNew(d,n,t)               PoisonWith(d,n,t,0xAB)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PoisonFree
Packit d03632
#  define PoisonFree(d,n,t)              PoisonWith(d,n,t,0xEF)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef Poison
Packit d03632
#  define Poison(d,n,t)                  PoisonFree(d,n,t)
Packit d03632
#endif
Packit d03632
#ifndef Newx
Packit d03632
#  define Newx(v,n,t)                    New(0,v,n,t)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef Newxc
Packit d03632
#  define Newxc(v,n,t,c)                 Newc(0,v,n,t,c)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef Newxz
Packit d03632
#  define Newxz(v,n,t)                   Newz(0,v,n,t)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UNUSED_DECL
Packit d03632
#  ifdef HASATTRIBUTE
Packit d03632
#    if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER)
Packit d03632
#      define PERL_UNUSED_DECL
Packit d03632
#    else
Packit d03632
#      define PERL_UNUSED_DECL __attribute__((unused))
Packit d03632
#    endif
Packit d03632
#  else
Packit d03632
#    define PERL_UNUSED_DECL
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UNUSED_ARG
Packit d03632
#  if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */
Packit d03632
#    include <note.h>
Packit d03632
#    define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x))
Packit d03632
#  else
Packit d03632
#    define PERL_UNUSED_ARG(x) ((void)x)
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UNUSED_VAR
Packit d03632
#  define PERL_UNUSED_VAR(x) ((void)x)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_UNUSED_CONTEXT
Packit d03632
#  ifdef USE_ITHREADS
Packit d03632
#    define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl)
Packit d03632
#  else
Packit d03632
#    define PERL_UNUSED_CONTEXT
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
#ifndef NOOP
Packit d03632
#  define NOOP                           /*EMPTY*/(void)0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef dNOOP
Packit d03632
#  define dNOOP                          extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef NVTYPE
Packit d03632
#  if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE)
Packit d03632
#    define NVTYPE long double
Packit d03632
#  else
Packit d03632
#    define NVTYPE double
Packit d03632
#  endif
Packit d03632
typedef NVTYPE NV;
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef INT2PTR
Packit d03632
#  if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE)
Packit d03632
#    define PTRV                  UV
Packit d03632
#    define INT2PTR(any,d)        (any)(d)
Packit d03632
#  else
Packit d03632
#    if PTRSIZE == LONGSIZE
Packit d03632
#      define PTRV                unsigned long
Packit d03632
#    else
Packit d03632
#      define PTRV                unsigned
Packit d03632
#    endif
Packit d03632
#    define INT2PTR(any,d)        (any)(PTRV)(d)
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PTR2ul
Packit d03632
#  if PTRSIZE == LONGSIZE
Packit d03632
#    define PTR2ul(p)     (unsigned long)(p)
Packit d03632
#  else
Packit d03632
#    define PTR2ul(p)     INT2PTR(unsigned long,p)
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
#ifndef PTR2nat
Packit d03632
#  define PTR2nat(p)                     (PTRV)(p)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef NUM2PTR
Packit d03632
#  define NUM2PTR(any,d)                 (any)PTR2nat(d)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PTR2IV
Packit d03632
#  define PTR2IV(p)                      INT2PTR(IV,p)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PTR2UV
Packit d03632
#  define PTR2UV(p)                      INT2PTR(UV,p)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PTR2NV
Packit d03632
#  define PTR2NV(p)                      NUM2PTR(NV,p)
Packit d03632
#endif
Packit d03632
Packit d03632
#undef START_EXTERN_C
Packit d03632
#undef END_EXTERN_C
Packit d03632
#undef EXTERN_C
Packit d03632
#ifdef __cplusplus
Packit d03632
#  define START_EXTERN_C extern "C" {
Packit d03632
#  define END_EXTERN_C }
Packit d03632
#  define EXTERN_C extern "C"
Packit d03632
#else
Packit d03632
#  define START_EXTERN_C
Packit d03632
#  define END_EXTERN_C
Packit d03632
#  define EXTERN_C extern
Packit d03632
#endif
Packit d03632
Packit d03632
#if defined(PERL_GCC_PEDANTIC)
Packit d03632
#  ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN
Packit d03632
#    define PERL_GCC_BRACE_GROUPS_FORBIDDEN
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus)
Packit d03632
#  ifndef PERL_USE_GCC_BRACE_GROUPS
Packit d03632
#    define PERL_USE_GCC_BRACE_GROUPS
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#undef STMT_START
Packit d03632
#undef STMT_END
Packit d03632
#ifdef PERL_USE_GCC_BRACE_GROUPS
Packit d03632
#  define STMT_START    (void)( /* gcc supports ``({ STATEMENTS; })'' */
Packit d03632
#  define STMT_END      )
Packit d03632
#else
Packit d03632
#  if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__)
Packit d03632
#    define STMT_START  if (1)
Packit d03632
#    define STMT_END    else (void)0
Packit d03632
#  else
Packit d03632
#    define STMT_START  do
Packit d03632
#    define STMT_END    while (0)
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
#ifndef boolSV
Packit d03632
#  define boolSV(b)                      ((b) ? &PL_sv_yes : &PL_sv_no)
Packit d03632
#endif
Packit d03632
Packit d03632
/* DEFSV appears first in 5.004_56 */
Packit d03632
#ifndef DEFSV
Packit d03632
#  define DEFSV                          GvSV(PL_defgv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SAVE_DEFSV
Packit d03632
#  define SAVE_DEFSV                     SAVESPTR(GvSV(PL_defgv))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef DEFSV_set
Packit d03632
#  define DEFSV_set(sv)                  (DEFSV = (sv))
Packit d03632
#endif
Packit d03632
Packit d03632
/* Older perls (<=5.003) lack AvFILLp */
Packit d03632
#ifndef AvFILLp
Packit d03632
#  define AvFILLp                        AvFILL
Packit d03632
#endif
Packit d03632
#ifndef ERRSV
Packit d03632
#  define ERRSV                          get_sv("@",FALSE)
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: gv_stashpvn
Packit d03632
 * This function's backport doesn't support the length parameter, but
Packit d03632
 * rather ignores it. Portability can only be ensured if the length
Packit d03632
 * parameter is used for speed reasons, but the length can always be
Packit d03632
 * correctly computed from the string argument.
Packit d03632
 */
Packit d03632
#ifndef gv_stashpvn
Packit d03632
#  define gv_stashpvn(str,len,create)    gv_stashpv(str,create)
Packit d03632
#endif
Packit d03632
Packit d03632
/* Replace: 1 */
Packit d03632
#ifndef get_cv
Packit d03632
#  define get_cv                         perl_get_cv
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef get_sv
Packit d03632
#  define get_sv                         perl_get_sv
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef get_av
Packit d03632
#  define get_av                         perl_get_av
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef get_hv
Packit d03632
#  define get_hv                         perl_get_hv
Packit d03632
#endif
Packit d03632
Packit d03632
/* Replace: 0 */
Packit d03632
#ifndef dUNDERBAR
Packit d03632
#  define dUNDERBAR                      dNOOP
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef UNDERBAR
Packit d03632
#  define UNDERBAR                       DEFSV
Packit d03632
#endif
Packit d03632
#ifndef dAX
Packit d03632
#  define dAX                            I32 ax = MARK - PL_stack_base + 1
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef dITEMS
Packit d03632
#  define dITEMS                         I32 items = SP - MARK
Packit d03632
#endif
Packit d03632
#ifndef dXSTARG
Packit d03632
#  define dXSTARG                        SV * targ = sv_newmortal()
Packit d03632
#endif
Packit d03632
#ifndef dAXMARK
Packit d03632
#  define dAXMARK                        I32 ax = POPMARK; \
Packit d03632
                               register SV ** const mark = PL_stack_base + ax++
Packit d03632
#endif
Packit d03632
#ifndef XSprePUSH
Packit d03632
#  define XSprePUSH                      (sp = PL_stack_base + ax - 1)
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5005000)
Packit d03632
#  undef XSRETURN
Packit d03632
#  define XSRETURN(off)                                   \
Packit d03632
      STMT_START {                                        \
Packit d03632
          PL_stack_sp = PL_stack_base + ax + ((off) - 1); \
Packit d03632
          return;                                         \
Packit d03632
      } STMT_END
Packit d03632
#endif
Packit d03632
#ifndef XSPROTO
Packit d03632
#  define XSPROTO(name)                  void name(pTHX_ CV* cv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SVfARG
Packit d03632
#  define SVfARG(p)                      ((void*)(p))
Packit d03632
#endif
Packit d03632
#ifndef PERL_ABS
Packit d03632
#  define PERL_ABS(x)                    ((x) < 0 ? -(x) : (x))
Packit d03632
#endif
Packit d03632
#ifndef dVAR
Packit d03632
#  define dVAR                           dNOOP
Packit d03632
#endif
Packit d03632
#ifndef SVf
Packit d03632
#  define SVf                            "_"
Packit d03632
#endif
Packit d03632
#ifndef UTF8_MAXBYTES
Packit d03632
#  define UTF8_MAXBYTES                  UTF8_MAXLEN
Packit d03632
#endif
Packit d03632
#ifndef CPERLscope
Packit d03632
#  define CPERLscope(x)                  x
Packit d03632
#endif
Packit d03632
#ifndef PERL_HASH
Packit d03632
#  define PERL_HASH(hash,str,len)        \
Packit d03632
     STMT_START { \
Packit d03632
        const char *s_PeRlHaSh = str; \
Packit d03632
        I32 i_PeRlHaSh = len; \
Packit d03632
        U32 hash_PeRlHaSh = 0; \
Packit d03632
        while (i_PeRlHaSh--) \
Packit d03632
            hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \
Packit d03632
        (hash) = hash_PeRlHaSh; \
Packit d03632
    } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERLIO_FUNCS_DECL
Packit d03632
# ifdef PERLIO_FUNCS_CONST
Packit d03632
#  define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs
Packit d03632
#  define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs)
Packit d03632
# else
Packit d03632
#  define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs
Packit d03632
#  define PERLIO_FUNCS_CAST(funcs) (funcs)
Packit d03632
# endif
Packit d03632
#endif
Packit d03632
Packit d03632
/* provide these typedefs for older perls */
Packit d03632
#if (PERL_BCDVERSION < 0x5009003)
Packit d03632
Packit d03632
# ifdef ARGSproto
Packit d03632
typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto);
Packit d03632
# else
Packit d03632
typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX);
Packit d03632
# endif
Packit d03632
Packit d03632
typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*);
Packit d03632
Packit d03632
#endif
Packit d03632
#ifndef isPSXSPC
Packit d03632
#  define isPSXSPC(c)                    (isSPACE(c) || (c) == '\v')
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isBLANK
Packit d03632
#  define isBLANK(c)                     ((c) == ' ' || (c) == '\t')
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef EBCDIC
Packit d03632
#ifndef isALNUMC
Packit d03632
#  define isALNUMC(c)                    isalnum(c)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isASCII
Packit d03632
#  define isASCII(c)                     isascii(c)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isCNTRL
Packit d03632
#  define isCNTRL(c)                     iscntrl(c)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isGRAPH
Packit d03632
#  define isGRAPH(c)                     isgraph(c)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isPRINT
Packit d03632
#  define isPRINT(c)                     isprint(c)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isPUNCT
Packit d03632
#  define isPUNCT(c)                     ispunct(c)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isXDIGIT
Packit d03632
#  define isXDIGIT(c)                    isxdigit(c)
Packit d03632
#endif
Packit d03632
Packit d03632
#else
Packit d03632
# if (PERL_BCDVERSION < 0x5010000)
Packit d03632
/* Hint: isPRINT
Packit d03632
 * The implementation in older perl versions includes all of the
Packit d03632
 * isSPACE() characters, which is wrong. The version provided by
Packit d03632
 * Devel::PPPort always overrides a present buggy version.
Packit d03632
 */
Packit d03632
#  undef isPRINT
Packit d03632
# endif
Packit d03632
Packit d03632
#ifdef HAS_QUAD
Packit d03632
# define WIDEST_UTYPE U64TYPE
Packit d03632
#else
Packit d03632
# define WIDEST_UTYPE U32
Packit d03632
#endif
Packit d03632
#ifndef isALNUMC
Packit d03632
#  define isALNUMC(c)                    (isALPHA(c) || isDIGIT(c))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isASCII
Packit d03632
#  define isASCII(c)                     ((WIDEST_UTYPE) (c) <= 127)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isCNTRL
Packit d03632
#  define isCNTRL(c)                     ((WIDEST_UTYPE) (c) < ' ' || (c) == 127)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isGRAPH
Packit d03632
#  define isGRAPH(c)                     (isALNUM(c) || isPUNCT(c))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isPRINT
Packit d03632
#  define isPRINT(c)                     (((c) >= 32 && (c) < 127))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isPUNCT
Packit d03632
#  define isPUNCT(c)                     (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64)  || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isXDIGIT
Packit d03632
#  define isXDIGIT(c)                    (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F'))
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_SIGNALS_UNSAFE_FLAG
Packit d03632
Packit d03632
#define PERL_SIGNALS_UNSAFE_FLAG 0x0001
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5008000)
Packit d03632
#  define D_PPP_PERL_SIGNALS_INIT   PERL_SIGNALS_UNSAFE_FLAG
Packit d03632
#else
Packit d03632
#  define D_PPP_PERL_SIGNALS_INIT   0
Packit d03632
#endif
Packit d03632
Packit d03632
#if defined(NEED_PL_signals)
Packit d03632
static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
Packit d03632
#elif defined(NEED_PL_signals_GLOBAL)
Packit d03632
U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT;
Packit d03632
#else
Packit d03632
extern U32 DPPP_(my_PL_signals);
Packit d03632
#endif
Packit d03632
#define PL_signals DPPP_(my_PL_signals)
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: PL_ppaddr
Packit d03632
 * Calling an op via PL_ppaddr requires passing a context argument
Packit d03632
 * for threaded builds. Since the context argument is different for
Packit d03632
 * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will
Packit d03632
 * automatically be defined as the correct argument.
Packit d03632
 */
Packit d03632
Packit d03632
#if (PERL_BCDVERSION <= 0x5005005)
Packit d03632
/* Replace: 1 */
Packit d03632
#  define PL_ppaddr                 ppaddr
Packit d03632
#  define PL_no_modify              no_modify
Packit d03632
/* Replace: 0 */
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION <= 0x5004005)
Packit d03632
/* Replace: 1 */
Packit d03632
#  define PL_DBsignal               DBsignal
Packit d03632
#  define PL_DBsingle               DBsingle
Packit d03632
#  define PL_DBsub                  DBsub
Packit d03632
#  define PL_DBtrace                DBtrace
Packit d03632
#  define PL_Sv                     Sv
Packit d03632
#  define PL_bufend                 bufend
Packit d03632
#  define PL_bufptr                 bufptr
Packit d03632
#  define PL_compiling              compiling
Packit d03632
#  define PL_copline                copline
Packit d03632
#  define PL_curcop                 curcop
Packit d03632
#  define PL_curstash               curstash
Packit d03632
#  define PL_debstash               debstash
Packit d03632
#  define PL_defgv                  defgv
Packit d03632
#  define PL_diehook                diehook
Packit d03632
#  define PL_dirty                  dirty
Packit d03632
#  define PL_dowarn                 dowarn
Packit d03632
#  define PL_errgv                  errgv
Packit d03632
#  define PL_error_count            error_count
Packit d03632
#  define PL_expect                 expect
Packit d03632
#  define PL_hexdigit               hexdigit
Packit d03632
#  define PL_hints                  hints
Packit d03632
#  define PL_in_my                  in_my
Packit d03632
#  define PL_laststatval            laststatval
Packit d03632
#  define PL_lex_state              lex_state
Packit d03632
#  define PL_lex_stuff              lex_stuff
Packit d03632
#  define PL_linestr                linestr
Packit d03632
#  define PL_na                     na
Packit d03632
#  define PL_perl_destruct_level    perl_destruct_level
Packit d03632
#  define PL_perldb                 perldb
Packit d03632
#  define PL_rsfp_filters           rsfp_filters
Packit d03632
#  define PL_rsfp                   rsfp
Packit d03632
#  define PL_stack_base             stack_base
Packit d03632
#  define PL_stack_sp               stack_sp
Packit d03632
#  define PL_statcache              statcache
Packit d03632
#  define PL_stdingv                stdingv
Packit d03632
#  define PL_sv_arenaroot           sv_arenaroot
Packit d03632
#  define PL_sv_no                  sv_no
Packit d03632
#  define PL_sv_undef               sv_undef
Packit d03632
#  define PL_sv_yes                 sv_yes
Packit d03632
#  define PL_tainted                tainted
Packit d03632
#  define PL_tainting               tainting
Packit d03632
#  define PL_tokenbuf               tokenbuf
Packit d03632
/* Replace: 0 */
Packit d03632
#endif
Packit d03632
Packit d03632
/* Warning: PL_parser
Packit d03632
 * For perl versions earlier than 5.9.5, this is an always
Packit d03632
 * non-NULL dummy. Also, it cannot be dereferenced. Don't
Packit d03632
 * use it if you can avoid is and unless you absolutely know
Packit d03632
 * what you're doing.
Packit d03632
 * If you always check that PL_parser is non-NULL, you can
Packit d03632
 * define DPPP_PL_parser_NO_DUMMY to avoid the creation of
Packit d03632
 * a dummy parser structure.
Packit d03632
 */
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5009005)
Packit d03632
# ifdef DPPP_PL_parser_NO_DUMMY
Packit d03632
#  define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
Packit d03632
                (croak("panic: PL_parser == NULL in %s:%d", \
Packit d03632
                       __FILE__, __LINE__), (yy_parser *) NULL))->var)
Packit d03632
# else
Packit d03632
#  ifdef DPPP_PL_parser_NO_DUMMY_WARNING
Packit d03632
#   define D_PPP_parser_dummy_warning(var)
Packit d03632
#  else
Packit d03632
#   define D_PPP_parser_dummy_warning(var) \
Packit d03632
             warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__),
Packit d03632
#  endif
Packit d03632
#  define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \
Packit d03632
                (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var)
Packit d03632
#if defined(NEED_PL_parser)
Packit d03632
static yy_parser DPPP_(dummy_PL_parser);
Packit d03632
#elif defined(NEED_PL_parser_GLOBAL)
Packit d03632
yy_parser DPPP_(dummy_PL_parser);
Packit d03632
#else
Packit d03632
extern yy_parser DPPP_(dummy_PL_parser);
Packit d03632
#endif
Packit d03632
Packit d03632
# endif
Packit d03632
Packit d03632
/* 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 */
Packit d03632
/* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf
Packit d03632
 * Do not use this variable unless you know exactly what you're
Packit d03632
 * doint. It is internal to the perl parser and may change or even
Packit d03632
 * be removed in the future. As of perl 5.9.5, you have to check
Packit d03632
 * for (PL_parser != NULL) for this variable to have any effect.
Packit d03632
 * An always non-NULL PL_parser dummy is provided for earlier
Packit d03632
 * perl versions.
Packit d03632
 * If PL_parser is NULL when you try to access this variable, a
Packit d03632
 * dummy is being accessed instead and a warning is issued unless
Packit d03632
 * you define DPPP_PL_parser_NO_DUMMY_WARNING.
Packit d03632
 * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access
Packit d03632
 * this variable will croak with a panic message.
Packit d03632
 */
Packit d03632
Packit d03632
# define PL_expect         D_PPP_my_PL_parser_var(expect)
Packit d03632
# define PL_copline        D_PPP_my_PL_parser_var(copline)
Packit d03632
# define PL_rsfp           D_PPP_my_PL_parser_var(rsfp)
Packit d03632
# define PL_rsfp_filters   D_PPP_my_PL_parser_var(rsfp_filters)
Packit d03632
# define PL_linestr        D_PPP_my_PL_parser_var(linestr)
Packit d03632
# define PL_bufptr         D_PPP_my_PL_parser_var(bufptr)
Packit d03632
# define PL_bufend         D_PPP_my_PL_parser_var(bufend)
Packit d03632
# define PL_lex_state      D_PPP_my_PL_parser_var(lex_state)
Packit d03632
# define PL_lex_stuff      D_PPP_my_PL_parser_var(lex_stuff)
Packit d03632
# define PL_tokenbuf       D_PPP_my_PL_parser_var(tokenbuf)
Packit d03632
# define PL_in_my          D_PPP_my_PL_parser_var(in_my)
Packit d03632
# define PL_in_my_stash    D_PPP_my_PL_parser_var(in_my_stash)
Packit d03632
# define PL_error_count    D_PPP_my_PL_parser_var(error_count)
Packit d03632
Packit d03632
Packit d03632
#else
Packit d03632
Packit d03632
/* ensure that PL_parser != NULL and cannot be dereferenced */
Packit d03632
# define PL_parser         ((void *) 1)
Packit d03632
Packit d03632
#endif
Packit d03632
#ifndef mPUSHs
Packit d03632
#  define mPUSHs(s)                      PUSHs(sv_2mortal(s))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PUSHmortal
Packit d03632
#  define PUSHmortal                     PUSHs(sv_newmortal())
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef mPUSHp
Packit d03632
#  define mPUSHp(p,l)                    sv_setpvn(PUSHmortal, (p), (l))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef mPUSHn
Packit d03632
#  define mPUSHn(n)                      sv_setnv(PUSHmortal, (NV)(n))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef mPUSHi
Packit d03632
#  define mPUSHi(i)                      sv_setiv(PUSHmortal, (IV)(i))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef mPUSHu
Packit d03632
#  define mPUSHu(u)                      sv_setuv(PUSHmortal, (UV)(u))
Packit d03632
#endif
Packit d03632
#ifndef mXPUSHs
Packit d03632
#  define mXPUSHs(s)                     XPUSHs(sv_2mortal(s))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef XPUSHmortal
Packit d03632
#  define XPUSHmortal                    XPUSHs(sv_newmortal())
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef mXPUSHp
Packit d03632
#  define mXPUSHp(p,l)                   STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef mXPUSHn
Packit d03632
#  define mXPUSHn(n)                     STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef mXPUSHi
Packit d03632
#  define mXPUSHi(i)                     STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef mXPUSHu
Packit d03632
#  define mXPUSHu(u)                     STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
/* Replace: 1 */
Packit d03632
#ifndef call_sv
Packit d03632
#  define call_sv                        perl_call_sv
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef call_pv
Packit d03632
#  define call_pv                        perl_call_pv
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef call_argv
Packit d03632
#  define call_argv                      perl_call_argv
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef call_method
Packit d03632
#  define call_method                    perl_call_method
Packit d03632
#endif
Packit d03632
#ifndef eval_sv
Packit d03632
#  define eval_sv                        perl_eval_sv
Packit d03632
#endif
Packit d03632
Packit d03632
/* Replace: 0 */
Packit d03632
#ifndef PERL_LOADMOD_DENY
Packit d03632
#  define PERL_LOADMOD_DENY              0x1
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_LOADMOD_NOIMPORT
Packit d03632
#  define PERL_LOADMOD_NOIMPORT          0x2
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_LOADMOD_IMPORT_OPS
Packit d03632
#  define PERL_LOADMOD_IMPORT_OPS        0x4
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef G_METHOD
Packit d03632
# define G_METHOD               64
Packit d03632
# ifdef call_sv
Packit d03632
#  undef call_sv
Packit d03632
# endif
Packit d03632
# if (PERL_BCDVERSION < 0x5006000)
Packit d03632
#  define call_sv(sv, flags)  ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \
Packit d03632
                                (flags) & ~G_METHOD) : perl_call_sv(sv, flags))
Packit d03632
# else
Packit d03632
#  define call_sv(sv, flags)  ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \
Packit d03632
                                (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags))
Packit d03632
# endif
Packit d03632
#endif
Packit d03632
Packit d03632
/* Replace perl_eval_pv with eval_pv */
Packit d03632
Packit d03632
#ifndef eval_pv
Packit d03632
#if defined(NEED_eval_pv)
Packit d03632
static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef eval_pv
Packit d03632
#  undef eval_pv
Packit d03632
#endif
Packit d03632
#define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b)
Packit d03632
#define Perl_eval_pv DPPP_(my_eval_pv)
Packit d03632
Packit d03632
#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL)
Packit d03632
Packit d03632
SV*
Packit d03632
DPPP_(my_eval_pv)(char *p, I32 croak_on_error)
Packit d03632
{
Packit d03632
    dSP;
Packit d03632
    SV* sv = newSVpv(p, 0);
Packit d03632
Packit d03632
    PUSHMARK(sp);
Packit d03632
    eval_sv(sv, G_SCALAR);
Packit d03632
    SvREFCNT_dec(sv);
Packit d03632
Packit d03632
    SPAGAIN;
Packit d03632
    sv = POPs;
Packit d03632
    PUTBACK;
Packit d03632
Packit d03632
    if (croak_on_error && SvTRUE(GvSV(errgv)))
Packit d03632
        croak(SvPVx(GvSV(errgv), na));
Packit d03632
Packit d03632
    return sv;
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef vload_module
Packit d03632
#if defined(NEED_vload_module)
Packit d03632
static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef vload_module
Packit d03632
#  undef vload_module
Packit d03632
#endif
Packit d03632
#define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d)
Packit d03632
#define Perl_vload_module DPPP_(my_vload_module)
Packit d03632
Packit d03632
#if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL)
Packit d03632
Packit d03632
void
Packit d03632
DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args)
Packit d03632
{
Packit d03632
    dTHR;
Packit d03632
    dVAR;
Packit d03632
    OP *veop, *imop;
Packit d03632
Packit d03632
    OP * const modname = newSVOP(OP_CONST, 0, name);
Packit d03632
    /* 5.005 has a somewhat hacky force_normal that doesn't croak on
Packit d03632
       SvREADONLY() if PL_compling is true. Current perls take care in
Packit d03632
       ck_require() to correctly turn off SvREADONLY before calling
Packit d03632
       force_normal_flags(). This seems a better fix than fudging PL_compling
Packit d03632
     */
Packit d03632
    SvREADONLY_off(((SVOP*)modname)->op_sv);
Packit d03632
    modname->op_private |= OPpCONST_BARE;
Packit d03632
    if (ver) {
Packit d03632
        veop = newSVOP(OP_CONST, 0, ver);
Packit d03632
    }
Packit d03632
    else
Packit d03632
        veop = NULL;
Packit d03632
    if (flags & PERL_LOADMOD_NOIMPORT) {
Packit d03632
        imop = sawparens(newNULLLIST());
Packit d03632
    }
Packit d03632
    else if (flags & PERL_LOADMOD_IMPORT_OPS) {
Packit d03632
        imop = va_arg(*args, OP*);
Packit d03632
    }
Packit d03632
    else {
Packit d03632
        SV *sv;
Packit d03632
        imop = NULL;
Packit d03632
        sv = va_arg(*args, SV*);
Packit d03632
        while (sv) {
Packit d03632
            imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv));
Packit d03632
            sv = va_arg(*args, SV*);
Packit d03632
        }
Packit d03632
    }
Packit d03632
    {
Packit d03632
        const line_t ocopline = PL_copline;
Packit d03632
        COP * const ocurcop = PL_curcop;
Packit d03632
        const int oexpect = PL_expect;
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000)
Packit d03632
        utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0),
Packit d03632
                veop, modname, imop);
Packit d03632
#else
Packit d03632
        utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(),
Packit d03632
                modname, imop);
Packit d03632
#endif
Packit d03632
        PL_expect = oexpect;
Packit d03632
        PL_copline = ocopline;
Packit d03632
        PL_curcop = ocurcop;
Packit d03632
    }
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef load_module
Packit d03632
#if defined(NEED_load_module)
Packit d03632
static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef load_module
Packit d03632
#  undef load_module
Packit d03632
#endif
Packit d03632
#define load_module DPPP_(my_load_module)
Packit d03632
#define Perl_load_module DPPP_(my_load_module)
Packit d03632
Packit d03632
#if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL)
Packit d03632
Packit d03632
void
Packit d03632
DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...)
Packit d03632
{
Packit d03632
    va_list args;
Packit d03632
    va_start(args, ver);
Packit d03632
    vload_module(flags, name, ver, &args);
Packit d03632
    va_end(args);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
#ifndef newRV_inc
Packit d03632
#  define newRV_inc(sv)                  newRV(sv)   /* Replace */
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef newRV_noinc
Packit d03632
#if defined(NEED_newRV_noinc)
Packit d03632
static SV * DPPP_(my_newRV_noinc)(SV *sv);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern SV * DPPP_(my_newRV_noinc)(SV *sv);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef newRV_noinc
Packit d03632
#  undef newRV_noinc
Packit d03632
#endif
Packit d03632
#define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a)
Packit d03632
#define Perl_newRV_noinc DPPP_(my_newRV_noinc)
Packit d03632
Packit d03632
#if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL)
Packit d03632
SV *
Packit d03632
DPPP_(my_newRV_noinc)(SV *sv)
Packit d03632
{
Packit d03632
  SV *rv = (SV *)newRV(sv);
Packit d03632
  SvREFCNT_dec(sv);
Packit d03632
  return rv;
Packit d03632
}
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: newCONSTSUB
Packit d03632
 * Returns a CV* as of perl-5.7.1. This return value is not supported
Packit d03632
 * by Devel::PPPort.
Packit d03632
 */
Packit d03632
Packit d03632
/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
Packit d03632
#if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005)
Packit d03632
#if defined(NEED_newCONSTSUB)
Packit d03632
static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef newCONSTSUB
Packit d03632
#  undef newCONSTSUB
Packit d03632
#endif
Packit d03632
#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c)
Packit d03632
#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB)
Packit d03632
Packit d03632
#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
Packit d03632
Packit d03632
/* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */
Packit d03632
/* (There's no PL_parser in perl < 5.005, so this is completely safe)     */
Packit d03632
#define D_PPP_PL_copline PL_copline
Packit d03632
Packit d03632
void
Packit d03632
DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv)
Packit d03632
{
Packit d03632
        U32 oldhints = PL_hints;
Packit d03632
        HV *old_cop_stash = PL_curcop->cop_stash;
Packit d03632
        HV *old_curstash = PL_curstash;
Packit d03632
        line_t oldline = PL_curcop->cop_line;
Packit d03632
        PL_curcop->cop_line = D_PPP_PL_copline;
Packit d03632
Packit d03632
        PL_hints &= ~HINT_BLOCK_SCOPE;
Packit d03632
        if (stash)
Packit d03632
                PL_curstash = PL_curcop->cop_stash = stash;
Packit d03632
Packit d03632
        newSUB(
Packit d03632
Packit d03632
#if   (PERL_BCDVERSION < 0x5003022)
Packit d03632
                start_subparse(),
Packit d03632
#elif (PERL_BCDVERSION == 0x5003022)
Packit d03632
                start_subparse(0),
Packit d03632
#else  /* 5.003_23  onwards */
Packit d03632
                start_subparse(FALSE, 0),
Packit d03632
#endif
Packit d03632
Packit d03632
                newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)),
Packit d03632
                newSVOP(OP_CONST, 0, &PL_sv_no),   /* SvPV(&PL_sv_no) == "" -- GMB */
Packit d03632
                newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv))
Packit d03632
        );
Packit d03632
Packit d03632
        PL_hints = oldhints;
Packit d03632
        PL_curcop->cop_stash = old_cop_stash;
Packit d03632
        PL_curstash = old_curstash;
Packit d03632
        PL_curcop->cop_line = oldline;
Packit d03632
}
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
/*
Packit d03632
 * Boilerplate macros for initializing and accessing interpreter-local
Packit d03632
 * data from C.  All statics in extensions should be reworked to use
Packit d03632
 * this, if you want to make the extension thread-safe.  See ext/re/re.xs
Packit d03632
 * for an example of the use of these macros.
Packit d03632
 *
Packit d03632
 * Code that uses these macros is responsible for the following:
Packit d03632
 * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts"
Packit d03632
 * 2. Declare a typedef named my_cxt_t that is a structure that contains
Packit d03632
 *    all the data that needs to be interpreter-local.
Packit d03632
 * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t.
Packit d03632
 * 4. Use the MY_CXT_INIT macro such that it is called exactly once
Packit d03632
 *    (typically put in the BOOT: section).
Packit d03632
 * 5. Use the members of the my_cxt_t structure everywhere as
Packit d03632
 *    MY_CXT.member.
Packit d03632
 * 6. Use the dMY_CXT macro (a declaration) in all the functions that
Packit d03632
 *    access MY_CXT.
Packit d03632
 */
Packit d03632
Packit d03632
#if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \
Packit d03632
    defined(PERL_CAPI)    || defined(PERL_IMPLICIT_CONTEXT)
Packit d03632
Packit d03632
#ifndef START_MY_CXT
Packit d03632
Packit d03632
/* This must appear in all extensions that define a my_cxt_t structure,
Packit d03632
 * right after the definition (i.e. at file scope).  The non-threads
Packit d03632
 * case below uses it to declare the data as static. */
Packit d03632
#define START_MY_CXT
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5004068)
Packit d03632
/* Fetches the SV that keeps the per-interpreter data. */
Packit d03632
#define dMY_CXT_SV \
Packit d03632
        SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE)
Packit d03632
#else /* >= perl5.004_68 */
Packit d03632
#define dMY_CXT_SV \
Packit d03632
        SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY,             \
Packit d03632
                                  sizeof(MY_CXT_KEY)-1, TRUE)
Packit d03632
#endif /* < perl5.004_68 */
Packit d03632
Packit d03632
/* This declaration should be used within all functions that use the
Packit d03632
 * interpreter-local data. */
Packit d03632
#define dMY_CXT \
Packit d03632
        dMY_CXT_SV;                                                     \
Packit d03632
        my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv))
Packit d03632
Packit d03632
/* Creates and zeroes the per-interpreter data.
Packit d03632
 * (We allocate my_cxtp in a Perl SV so that it will be released when
Packit d03632
 * the interpreter goes away.) */
Packit d03632
#define MY_CXT_INIT \
Packit d03632
        dMY_CXT_SV;                                                     \
Packit d03632
        /* newSV() allocates one more than needed */                    \
Packit d03632
        my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
Packit d03632
        Zero(my_cxtp, 1, my_cxt_t);                                     \
Packit d03632
        sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
Packit d03632
Packit d03632
/* This macro must be used to access members of the my_cxt_t structure.
Packit d03632
 * e.g. MYCXT.some_data */
Packit d03632
#define MY_CXT          (*my_cxtp)
Packit d03632
Packit d03632
/* Judicious use of these macros can reduce the number of times dMY_CXT
Packit d03632
 * is used.  Use is similar to pTHX, aTHX etc. */
Packit d03632
#define pMY_CXT         my_cxt_t *my_cxtp
Packit d03632
#define pMY_CXT_        pMY_CXT,
Packit d03632
#define _pMY_CXT        ,pMY_CXT
Packit d03632
#define aMY_CXT         my_cxtp
Packit d03632
#define aMY_CXT_        aMY_CXT,
Packit d03632
#define _aMY_CXT        ,aMY_CXT
Packit d03632
Packit d03632
#endif /* START_MY_CXT */
Packit d03632
Packit d03632
#ifndef MY_CXT_CLONE
Packit d03632
/* Clones the per-interpreter data. */
Packit d03632
#define MY_CXT_CLONE \
Packit d03632
        dMY_CXT_SV;                                                     \
Packit d03632
        my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\
Packit d03632
        Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\
Packit d03632
        sv_setuv(my_cxt_sv, PTR2UV(my_cxtp))
Packit d03632
#endif
Packit d03632
Packit d03632
#else /* single interpreter */
Packit d03632
Packit d03632
#ifndef START_MY_CXT
Packit d03632
Packit d03632
#define START_MY_CXT    static my_cxt_t my_cxt;
Packit d03632
#define dMY_CXT_SV      dNOOP
Packit d03632
#define dMY_CXT         dNOOP
Packit d03632
#define MY_CXT_INIT     NOOP
Packit d03632
#define MY_CXT          my_cxt
Packit d03632
Packit d03632
#define pMY_CXT         void
Packit d03632
#define pMY_CXT_
Packit d03632
#define _pMY_CXT
Packit d03632
#define aMY_CXT
Packit d03632
#define aMY_CXT_
Packit d03632
#define _aMY_CXT
Packit d03632
Packit d03632
#endif /* START_MY_CXT */
Packit d03632
Packit d03632
#ifndef MY_CXT_CLONE
Packit d03632
#define MY_CXT_CLONE    NOOP
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IVdf
Packit d03632
#  if IVSIZE == LONGSIZE
Packit d03632
#    define     IVdf      "ld"
Packit d03632
#    define     UVuf      "lu"
Packit d03632
#    define     UVof      "lo"
Packit d03632
#    define     UVxf      "lx"
Packit d03632
#    define     UVXf      "lX"
Packit d03632
#  elif IVSIZE == INTSIZE
Packit d03632
#    define   IVdf      "d"
Packit d03632
#    define   UVuf      "u"
Packit d03632
#    define   UVof      "o"
Packit d03632
#    define   UVxf      "x"
Packit d03632
#    define   UVXf      "X"
Packit d03632
#  else
Packit d03632
#    error "cannot define IV/UV formats"
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef NVef
Packit d03632
#  if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \
Packit d03632
      defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000)
Packit d03632
            /* Not very likely, but let's try anyway. */
Packit d03632
#    define NVef          PERL_PRIeldbl
Packit d03632
#    define NVff          PERL_PRIfldbl
Packit d03632
#    define NVgf          PERL_PRIgldbl
Packit d03632
#  else
Packit d03632
#    define NVef          "e"
Packit d03632
#    define NVff          "f"
Packit d03632
#    define NVgf          "g"
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvREFCNT_inc
Packit d03632
#  ifdef PERL_USE_GCC_BRACE_GROUPS
Packit d03632
#    define SvREFCNT_inc(sv)            \
Packit d03632
      ({                                \
Packit d03632
          SV * const _sv = (SV*)(sv);   \
Packit d03632
          if (_sv)                      \
Packit d03632
               (SvREFCNT(_sv))++;       \
Packit d03632
          _sv;                          \
Packit d03632
      })
Packit d03632
#  else
Packit d03632
#    define SvREFCNT_inc(sv)    \
Packit d03632
          ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvREFCNT_inc_simple
Packit d03632
#  ifdef PERL_USE_GCC_BRACE_GROUPS
Packit d03632
#    define SvREFCNT_inc_simple(sv)     \
Packit d03632
      ({                                        \
Packit d03632
          if (sv)                               \
Packit d03632
               (SvREFCNT(sv))++;                \
Packit d03632
          (SV *)(sv);                           \
Packit d03632
      })
Packit d03632
#  else
Packit d03632
#    define SvREFCNT_inc_simple(sv) \
Packit d03632
          ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvREFCNT_inc_NN
Packit d03632
#  ifdef PERL_USE_GCC_BRACE_GROUPS
Packit d03632
#    define SvREFCNT_inc_NN(sv)         \
Packit d03632
      ({                                        \
Packit d03632
          SV * const _sv = (SV*)(sv);   \
Packit d03632
          SvREFCNT(_sv)++;              \
Packit d03632
          _sv;                          \
Packit d03632
      })
Packit d03632
#  else
Packit d03632
#    define SvREFCNT_inc_NN(sv) \
Packit d03632
          (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvREFCNT_inc_void
Packit d03632
#  ifdef PERL_USE_GCC_BRACE_GROUPS
Packit d03632
#    define SvREFCNT_inc_void(sv)               \
Packit d03632
      ({                                        \
Packit d03632
          SV * const _sv = (SV*)(sv);   \
Packit d03632
          if (_sv)                      \
Packit d03632
              (void)(SvREFCNT(_sv)++);  \
Packit d03632
      })
Packit d03632
#  else
Packit d03632
#    define SvREFCNT_inc_void(sv) \
Packit d03632
          (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
#ifndef SvREFCNT_inc_simple_void
Packit d03632
#  define SvREFCNT_inc_simple_void(sv)   STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvREFCNT_inc_simple_NN
Packit d03632
#  define SvREFCNT_inc_simple_NN(sv)     (++SvREFCNT(sv), (SV*)(sv))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvREFCNT_inc_void_NN
Packit d03632
#  define SvREFCNT_inc_void_NN(sv)       (void)(++SvREFCNT((SV*)(sv)))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvREFCNT_inc_simple_void_NN
Packit d03632
#  define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef newSV_type
Packit d03632
Packit d03632
#if defined(NEED_newSV_type)
Packit d03632
static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef newSV_type
Packit d03632
#  undef newSV_type
Packit d03632
#endif
Packit d03632
#define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a)
Packit d03632
#define Perl_newSV_type DPPP_(my_newSV_type)
Packit d03632
Packit d03632
#if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL)
Packit d03632
Packit d03632
SV*
Packit d03632
DPPP_(my_newSV_type)(pTHX_ svtype const t)
Packit d03632
{
Packit d03632
  SV* const sv = newSV(0);
Packit d03632
  sv_upgrade(sv, t);
Packit d03632
  return sv;
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5006000)
Packit d03632
# define D_PPP_CONSTPV_ARG(x)  ((char *) (x))
Packit d03632
#else
Packit d03632
# define D_PPP_CONSTPV_ARG(x)  (x)
Packit d03632
#endif
Packit d03632
#ifndef newSVpvn
Packit d03632
#  define newSVpvn(data,len)             ((data)                                              \
Packit d03632
                                    ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \
Packit d03632
                                    : newSV(0))
Packit d03632
#endif
Packit d03632
#ifndef newSVpvn_utf8
Packit d03632
#  define newSVpvn_utf8(s, len, u)       newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0)
Packit d03632
#endif
Packit d03632
#ifndef SVf_UTF8
Packit d03632
#  define SVf_UTF8                       0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef newSVpvn_flags
Packit d03632
Packit d03632
#if defined(NEED_newSVpvn_flags)
Packit d03632
static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef newSVpvn_flags
Packit d03632
#  undef newSVpvn_flags
Packit d03632
#endif
Packit d03632
#define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c)
Packit d03632
#define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags)
Packit d03632
Packit d03632
#if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL)
Packit d03632
Packit d03632
SV *
Packit d03632
DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags)
Packit d03632
{
Packit d03632
  SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len);
Packit d03632
  SvFLAGS(sv) |= (flags & SVf_UTF8);
Packit d03632
  return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv;
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
/* Backwards compatibility stuff... :-( */
Packit d03632
#if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen)
Packit d03632
#  define NEED_sv_2pv_flags
Packit d03632
#endif
Packit d03632
#if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL)
Packit d03632
#  define NEED_sv_2pv_flags_GLOBAL
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: sv_2pv_nolen
Packit d03632
 * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen().
Packit d03632
 */
Packit d03632
#ifndef sv_2pv_nolen
Packit d03632
#  define sv_2pv_nolen(sv)               SvPV_nolen(sv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef SvPVbyte
Packit d03632
Packit d03632
/* Hint: SvPVbyte
Packit d03632
 * Does not work in perl-5.6.1, ppport.h implements a version
Packit d03632
 * borrowed from perl-5.7.3.
Packit d03632
 */
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5007000)
Packit d03632
Packit d03632
#if defined(NEED_sv_2pvbyte)
Packit d03632
static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef sv_2pvbyte
Packit d03632
#  undef sv_2pvbyte
Packit d03632
#endif
Packit d03632
#define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b)
Packit d03632
#define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte)
Packit d03632
Packit d03632
#if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL)
Packit d03632
Packit d03632
char *
Packit d03632
DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp)
Packit d03632
{
Packit d03632
  sv_utf8_downgrade(sv,0);
Packit d03632
  return SvPV(sv,*lp);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: sv_2pvbyte
Packit d03632
 * Use the SvPVbyte() macro instead of sv_2pvbyte().
Packit d03632
 */
Packit d03632
Packit d03632
#undef SvPVbyte
Packit d03632
Packit d03632
#define SvPVbyte(sv, lp)                                                \
Packit d03632
        ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK)                \
Packit d03632
         ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp))
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#else
Packit d03632
Packit d03632
#  define SvPVbyte          SvPV
Packit d03632
#  define sv_2pvbyte        sv_2pv
Packit d03632
Packit d03632
#endif
Packit d03632
#ifndef sv_2pvbyte_nolen
Packit d03632
#  define sv_2pvbyte_nolen(sv)           sv_2pv_nolen(sv)
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: sv_pvn
Packit d03632
 * Always use the SvPV() macro instead of sv_pvn().
Packit d03632
 */
Packit d03632
Packit d03632
/* Hint: sv_pvn_force
Packit d03632
 * Always use the SvPV_force() macro instead of sv_pvn_force().
Packit d03632
 */
Packit d03632
Packit d03632
/* If these are undefined, they're not handled by the core anyway */
Packit d03632
#ifndef SV_IMMEDIATE_UNREF
Packit d03632
#  define SV_IMMEDIATE_UNREF             0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SV_GMAGIC
Packit d03632
#  define SV_GMAGIC                      0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SV_COW_DROP_PV
Packit d03632
#  define SV_COW_DROP_PV                 0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SV_UTF8_NO_ENCODING
Packit d03632
#  define SV_UTF8_NO_ENCODING            0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SV_NOSTEAL
Packit d03632
#  define SV_NOSTEAL                     0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SV_CONST_RETURN
Packit d03632
#  define SV_CONST_RETURN                0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SV_MUTABLE_RETURN
Packit d03632
#  define SV_MUTABLE_RETURN              0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SV_SMAGIC
Packit d03632
#  define SV_SMAGIC                      0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SV_HAS_TRAILING_NUL
Packit d03632
#  define SV_HAS_TRAILING_NUL            0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SV_COW_SHARED_HASH_KEYS
Packit d03632
#  define SV_COW_SHARED_HASH_KEYS        0
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5007002)
Packit d03632
Packit d03632
#if defined(NEED_sv_2pv_flags)
Packit d03632
static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef sv_2pv_flags
Packit d03632
#  undef sv_2pv_flags
Packit d03632
#endif
Packit d03632
#define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c)
Packit d03632
#define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags)
Packit d03632
Packit d03632
#if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL)
Packit d03632
Packit d03632
char *
Packit d03632
DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
Packit d03632
{
Packit d03632
  STRLEN n_a = (STRLEN) flags;
Packit d03632
  return sv_2pv(sv, lp ? lp : &n_a);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#if defined(NEED_sv_pvn_force_flags)
Packit d03632
static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef sv_pvn_force_flags
Packit d03632
#  undef sv_pvn_force_flags
Packit d03632
#endif
Packit d03632
#define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c)
Packit d03632
#define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags)
Packit d03632
Packit d03632
#if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL)
Packit d03632
Packit d03632
char *
Packit d03632
DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags)
Packit d03632
{
Packit d03632
  STRLEN n_a = (STRLEN) flags;
Packit d03632
  return sv_pvn_force(sv, lp ? lp : &n_a);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) )
Packit d03632
# define DPPP_SVPV_NOLEN_LP_ARG &PL_na
Packit d03632
#else
Packit d03632
# define DPPP_SVPV_NOLEN_LP_ARG 0
Packit d03632
#endif
Packit d03632
#ifndef SvPV_const
Packit d03632
#  define SvPV_const(sv, lp)             SvPV_flags_const(sv, lp, SV_GMAGIC)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPV_mutable
Packit d03632
#  define SvPV_mutable(sv, lp)           SvPV_flags_mutable(sv, lp, SV_GMAGIC)
Packit d03632
#endif
Packit d03632
#ifndef SvPV_flags
Packit d03632
#  define SvPV_flags(sv, lp, flags)      \
Packit d03632
                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
Packit d03632
                  ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_flags_const
Packit d03632
#  define SvPV_flags_const(sv, lp, flags) \
Packit d03632
                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
Packit d03632
                  ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \
Packit d03632
                  (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_flags_const_nolen
Packit d03632
#  define SvPV_flags_const_nolen(sv, flags) \
Packit d03632
                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
Packit d03632
                  ? SvPVX_const(sv) : \
Packit d03632
                  (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_flags_mutable
Packit d03632
#  define SvPV_flags_mutable(sv, lp, flags) \
Packit d03632
                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
Packit d03632
                  ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \
Packit d03632
                  sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_force
Packit d03632
#  define SvPV_force(sv, lp)             SvPV_force_flags(sv, lp, SV_GMAGIC)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPV_force_nolen
Packit d03632
#  define SvPV_force_nolen(sv)           SvPV_force_flags_nolen(sv, SV_GMAGIC)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPV_force_mutable
Packit d03632
#  define SvPV_force_mutable(sv, lp)     SvPV_force_flags_mutable(sv, lp, SV_GMAGIC)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPV_force_nomg
Packit d03632
#  define SvPV_force_nomg(sv, lp)        SvPV_force_flags(sv, lp, 0)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPV_force_nomg_nolen
Packit d03632
#  define SvPV_force_nomg_nolen(sv)      SvPV_force_flags_nolen(sv, 0)
Packit d03632
#endif
Packit d03632
#ifndef SvPV_force_flags
Packit d03632
#  define SvPV_force_flags(sv, lp, flags) \
Packit d03632
                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
Packit d03632
                 ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_force_flags_nolen
Packit d03632
#  define SvPV_force_flags_nolen(sv, flags) \
Packit d03632
                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
Packit d03632
                 ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_force_flags_mutable
Packit d03632
#  define SvPV_force_flags_mutable(sv, lp, flags) \
Packit d03632
                 ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \
Packit d03632
                 ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \
Packit d03632
                  : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_nolen
Packit d03632
#  define SvPV_nolen(sv)                 \
Packit d03632
                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
Packit d03632
                  ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_nolen_const
Packit d03632
#  define SvPV_nolen_const(sv)           \
Packit d03632
                 ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
Packit d03632
                  ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_nomg
Packit d03632
#  define SvPV_nomg(sv, lp)              SvPV_flags(sv, lp, 0)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPV_nomg_const
Packit d03632
#  define SvPV_nomg_const(sv, lp)        SvPV_flags_const(sv, lp, 0)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPV_nomg_const_nolen
Packit d03632
#  define SvPV_nomg_const_nolen(sv)      SvPV_flags_const_nolen(sv, 0)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPV_nomg_nolen
Packit d03632
#  define SvPV_nomg_nolen(sv)            ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \
Packit d03632
                                    ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, 0))
Packit d03632
#endif
Packit d03632
#ifndef SvPV_renew
Packit d03632
#  define SvPV_renew(sv,n)               STMT_START { SvLEN_set(sv, n); \
Packit d03632
                 SvPV_set((sv), (char *) saferealloc(          \
Packit d03632
                       (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \
Packit d03632
               } STMT_END
Packit d03632
#endif
Packit d03632
#ifndef SvMAGIC_set
Packit d03632
#  define SvMAGIC_set(sv, val)           \
Packit d03632
                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
Packit d03632
                (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5009003)
Packit d03632
#ifndef SvPVX_const
Packit d03632
#  define SvPVX_const(sv)                ((const char*) (0 + SvPVX(sv)))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPVX_mutable
Packit d03632
#  define SvPVX_mutable(sv)              (0 + SvPVX(sv))
Packit d03632
#endif
Packit d03632
#ifndef SvRV_set
Packit d03632
#  define SvRV_set(sv, val)              \
Packit d03632
                STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
Packit d03632
                (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#else
Packit d03632
#ifndef SvPVX_const
Packit d03632
#  define SvPVX_const(sv)                ((const char*)((sv)->sv_u.svu_pv))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvPVX_mutable
Packit d03632
#  define SvPVX_mutable(sv)              ((sv)->sv_u.svu_pv)
Packit d03632
#endif
Packit d03632
#ifndef SvRV_set
Packit d03632
#  define SvRV_set(sv, val)              \
Packit d03632
                STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
Packit d03632
                ((sv)->sv_u.svu_rv = (val)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
#ifndef SvSTASH_set
Packit d03632
#  define SvSTASH_set(sv, val)           \
Packit d03632
                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
Packit d03632
                (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5004000)
Packit d03632
#ifndef SvUV_set
Packit d03632
#  define SvUV_set(sv, val)              \
Packit d03632
                STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
Packit d03632
                (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#else
Packit d03632
#ifndef SvUV_set
Packit d03632
#  define SvUV_set(sv, val)              \
Packit d03632
                STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
Packit d03632
                (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf)
Packit d03632
#if defined(NEED_vnewSVpvf)
Packit d03632
static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef vnewSVpvf
Packit d03632
#  undef vnewSVpvf
Packit d03632
#endif
Packit d03632
#define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b)
Packit d03632
#define Perl_vnewSVpvf DPPP_(my_vnewSVpvf)
Packit d03632
Packit d03632
#if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL)
Packit d03632
Packit d03632
SV *
Packit d03632
DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args)
Packit d03632
{
Packit d03632
  register SV *sv = newSV(0);
Packit d03632
  sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));
Packit d03632
  return sv;
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf)
Packit d03632
#  define sv_vcatpvf(sv, pat, args)  sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf)
Packit d03632
#  define sv_vsetpvf(sv, pat, args)  sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*))
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg)
Packit d03632
#if defined(NEED_sv_catpvf_mg)
Packit d03632
static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
Packit d03632
#endif
Packit d03632
Packit d03632
#define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg)
Packit d03632
Packit d03632
#if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL)
Packit d03632
Packit d03632
void
Packit d03632
DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
Packit d03632
{
Packit d03632
  va_list args;
Packit d03632
  va_start(args, pat);
Packit d03632
  sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
Packit d03632
  SvSETMAGIC(sv);
Packit d03632
  va_end(args);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef PERL_IMPLICIT_CONTEXT
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext)
Packit d03632
#if defined(NEED_sv_catpvf_mg_nocontext)
Packit d03632
static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...);
Packit d03632
#endif
Packit d03632
Packit d03632
#define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
Packit d03632
#define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext)
Packit d03632
Packit d03632
#if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL)
Packit d03632
Packit d03632
void
Packit d03632
DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...)
Packit d03632
{
Packit d03632
  dTHX;
Packit d03632
  va_list args;
Packit d03632
  va_start(args, pat);
Packit d03632
  sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
Packit d03632
  SvSETMAGIC(sv);
Packit d03632
  va_end(args);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
/* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */
Packit d03632
#ifndef sv_catpvf_mg
Packit d03632
#  ifdef PERL_IMPLICIT_CONTEXT
Packit d03632
#    define sv_catpvf_mg   Perl_sv_catpvf_mg_nocontext
Packit d03632
#  else
Packit d03632
#    define sv_catpvf_mg   Perl_sv_catpvf_mg
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg)
Packit d03632
#  define sv_vcatpvf_mg(sv, pat, args)                                     \
Packit d03632
   STMT_START {                                                            \
Packit d03632
     sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));  \
Packit d03632
     SvSETMAGIC(sv);                                                       \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg)
Packit d03632
#if defined(NEED_sv_setpvf_mg)
Packit d03632
static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...);
Packit d03632
#endif
Packit d03632
Packit d03632
#define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg)
Packit d03632
Packit d03632
#if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL)
Packit d03632
Packit d03632
void
Packit d03632
DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...)
Packit d03632
{
Packit d03632
  va_list args;
Packit d03632
  va_start(args, pat);
Packit d03632
  sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
Packit d03632
  SvSETMAGIC(sv);
Packit d03632
  va_end(args);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef PERL_IMPLICIT_CONTEXT
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext)
Packit d03632
#if defined(NEED_sv_setpvf_mg_nocontext)
Packit d03632
static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...);
Packit d03632
#endif
Packit d03632
Packit d03632
#define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
Packit d03632
#define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext)
Packit d03632
Packit d03632
#if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL)
Packit d03632
Packit d03632
void
Packit d03632
DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...)
Packit d03632
{
Packit d03632
  dTHX;
Packit d03632
  va_list args;
Packit d03632
  va_start(args, pat);
Packit d03632
  sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*));
Packit d03632
  SvSETMAGIC(sv);
Packit d03632
  va_end(args);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
/* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */
Packit d03632
#ifndef sv_setpvf_mg
Packit d03632
#  ifdef PERL_IMPLICIT_CONTEXT
Packit d03632
#    define sv_setpvf_mg   Perl_sv_setpvf_mg_nocontext
Packit d03632
#  else
Packit d03632
#    define sv_setpvf_mg   Perl_sv_setpvf_mg
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg)
Packit d03632
#  define sv_vsetpvf_mg(sv, pat, args)                                     \
Packit d03632
   STMT_START {                                                            \
Packit d03632
     sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*));  \
Packit d03632
     SvSETMAGIC(sv);                                                       \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: newSVpvn_share
Packit d03632
 * The SVs created by this function only mimic the behaviour of
Packit d03632
 * shared PVs without really being shared. Only use if you know
Packit d03632
 * what you're doing.
Packit d03632
 */
Packit d03632
Packit d03632
#ifndef newSVpvn_share
Packit d03632
Packit d03632
#if defined(NEED_newSVpvn_share)
Packit d03632
static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef newSVpvn_share
Packit d03632
#  undef newSVpvn_share
Packit d03632
#endif
Packit d03632
#define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c)
Packit d03632
#define Perl_newSVpvn_share DPPP_(my_newSVpvn_share)
Packit d03632
Packit d03632
#if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL)
Packit d03632
Packit d03632
SV *
Packit d03632
DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash)
Packit d03632
{
Packit d03632
  SV *sv;
Packit d03632
  if (len < 0)
Packit d03632
    len = -len;
Packit d03632
  if (!hash)
Packit d03632
    PERL_HASH(hash, (char*) src, len);
Packit d03632
  sv = newSVpvn((char *) src, len);
Packit d03632
  sv_upgrade(sv, SVt_PVIV);
Packit d03632
  SvIVX(sv) = hash;
Packit d03632
  SvREADONLY_on(sv);
Packit d03632
  SvPOK_on(sv);
Packit d03632
  return sv;
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#endif
Packit d03632
#ifndef SvSHARED_HASH
Packit d03632
#  define SvSHARED_HASH(sv)              (0 + SvUVX(sv))
Packit d03632
#endif
Packit d03632
#ifndef HvNAME_get
Packit d03632
#  define HvNAME_get(hv)                 HvNAME(hv)
Packit d03632
#endif
Packit d03632
#ifndef HvNAMELEN_get
Packit d03632
#  define HvNAMELEN_get(hv)              (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0)
Packit d03632
#endif
Packit d03632
#ifndef GvSVn
Packit d03632
#  define GvSVn(gv)                      GvSV(gv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef isGV_with_GP
Packit d03632
#  define isGV_with_GP(gv)               isGV(gv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef gv_fetchpvn_flags
Packit d03632
#  define gv_fetchpvn_flags(name, len, flags, svt) gv_fetchpv(name, flags, svt)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef gv_fetchsv
Packit d03632
#  define gv_fetchsv(name, flags, svt)   gv_fetchpv(SvPV_nolen_const(name), flags, svt)
Packit d03632
#endif
Packit d03632
#ifndef get_cvn_flags
Packit d03632
#  define get_cvn_flags(name, namelen, flags) get_cv(name, flags)
Packit d03632
#endif
Packit d03632
#ifndef WARN_ALL
Packit d03632
#  define WARN_ALL                       0
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_CLOSURE
Packit d03632
#  define WARN_CLOSURE                   1
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_DEPRECATED
Packit d03632
#  define WARN_DEPRECATED                2
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_EXITING
Packit d03632
#  define WARN_EXITING                   3
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_GLOB
Packit d03632
#  define WARN_GLOB                      4
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_IO
Packit d03632
#  define WARN_IO                        5
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_CLOSED
Packit d03632
#  define WARN_CLOSED                    6
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_EXEC
Packit d03632
#  define WARN_EXEC                      7
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_LAYER
Packit d03632
#  define WARN_LAYER                     8
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_NEWLINE
Packit d03632
#  define WARN_NEWLINE                   9
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_PIPE
Packit d03632
#  define WARN_PIPE                      10
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_UNOPENED
Packit d03632
#  define WARN_UNOPENED                  11
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_MISC
Packit d03632
#  define WARN_MISC                      12
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_NUMERIC
Packit d03632
#  define WARN_NUMERIC                   13
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_ONCE
Packit d03632
#  define WARN_ONCE                      14
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_OVERFLOW
Packit d03632
#  define WARN_OVERFLOW                  15
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_PACK
Packit d03632
#  define WARN_PACK                      16
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_PORTABLE
Packit d03632
#  define WARN_PORTABLE                  17
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_RECURSION
Packit d03632
#  define WARN_RECURSION                 18
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_REDEFINE
Packit d03632
#  define WARN_REDEFINE                  19
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_REGEXP
Packit d03632
#  define WARN_REGEXP                    20
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_SEVERE
Packit d03632
#  define WARN_SEVERE                    21
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_DEBUGGING
Packit d03632
#  define WARN_DEBUGGING                 22
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_INPLACE
Packit d03632
#  define WARN_INPLACE                   23
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_INTERNAL
Packit d03632
#  define WARN_INTERNAL                  24
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_MALLOC
Packit d03632
#  define WARN_MALLOC                    25
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_SIGNAL
Packit d03632
#  define WARN_SIGNAL                    26
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_SUBSTR
Packit d03632
#  define WARN_SUBSTR                    27
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_SYNTAX
Packit d03632
#  define WARN_SYNTAX                    28
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_AMBIGUOUS
Packit d03632
#  define WARN_AMBIGUOUS                 29
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_BAREWORD
Packit d03632
#  define WARN_BAREWORD                  30
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_DIGIT
Packit d03632
#  define WARN_DIGIT                     31
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_PARENTHESIS
Packit d03632
#  define WARN_PARENTHESIS               32
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_PRECEDENCE
Packit d03632
#  define WARN_PRECEDENCE                33
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_PRINTF
Packit d03632
#  define WARN_PRINTF                    34
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_PROTOTYPE
Packit d03632
#  define WARN_PROTOTYPE                 35
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_QW
Packit d03632
#  define WARN_QW                        36
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_RESERVED
Packit d03632
#  define WARN_RESERVED                  37
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_SEMICOLON
Packit d03632
#  define WARN_SEMICOLON                 38
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_TAINT
Packit d03632
#  define WARN_TAINT                     39
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_THREADS
Packit d03632
#  define WARN_THREADS                   40
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_UNINITIALIZED
Packit d03632
#  define WARN_UNINITIALIZED             41
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_UNPACK
Packit d03632
#  define WARN_UNPACK                    42
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_UNTIE
Packit d03632
#  define WARN_UNTIE                     43
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_UTF8
Packit d03632
#  define WARN_UTF8                      44
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_VOID
Packit d03632
#  define WARN_VOID                      45
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef WARN_ASSERTIONS
Packit d03632
#  define WARN_ASSERTIONS                46
Packit d03632
#endif
Packit d03632
#ifndef packWARN
Packit d03632
#  define packWARN(a)                    (a)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef ckWARN
Packit d03632
#  ifdef G_WARN_ON
Packit d03632
#    define  ckWARN(a)                  (PL_dowarn & G_WARN_ON)
Packit d03632
#  else
Packit d03632
#    define  ckWARN(a)                  PL_dowarn
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if (PERL_BCDVERSION >= 0x5004000) && !defined(warner)
Packit d03632
#if defined(NEED_warner)
Packit d03632
static void DPPP_(my_warner)(U32 err, const char *pat, ...);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern void DPPP_(my_warner)(U32 err, const char *pat, ...);
Packit d03632
#endif
Packit d03632
Packit d03632
#define Perl_warner DPPP_(my_warner)
Packit d03632
Packit d03632
#if defined(NEED_warner) || defined(NEED_warner_GLOBAL)
Packit d03632
Packit d03632
void
Packit d03632
DPPP_(my_warner)(U32 err, const char *pat, ...)
Packit d03632
{
Packit d03632
  SV *sv;
Packit d03632
  va_list args;
Packit d03632
Packit d03632
  PERL_UNUSED_ARG(err);
Packit d03632
Packit d03632
  va_start(args, pat);
Packit d03632
  sv = vnewSVpvf(pat, &args);
Packit d03632
  va_end(args);
Packit d03632
  sv_2mortal(sv);
Packit d03632
  warn("%s", SvPV_nolen(sv));
Packit d03632
}
Packit d03632
Packit d03632
#define warner  Perl_warner
Packit d03632
Packit d03632
#define Perl_warner_nocontext  Perl_warner
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
/* concatenating with "" ensures that only literal strings are accepted as argument
Packit d03632
 * note that STR_WITH_LEN() can't be used as argument to macros or functions that
Packit d03632
 * under some configurations might be macros
Packit d03632
 */
Packit d03632
#ifndef STR_WITH_LEN
Packit d03632
#  define STR_WITH_LEN(s)                (s ""), (sizeof(s)-1)
Packit d03632
#endif
Packit d03632
#ifndef newSVpvs
Packit d03632
#  define newSVpvs(str)                  newSVpvn(str "", sizeof(str) - 1)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef newSVpvs_flags
Packit d03632
#  define newSVpvs_flags(str, flags)     newSVpvn_flags(str "", sizeof(str) - 1, flags)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef newSVpvs_share
Packit d03632
#  define newSVpvs_share(str)            newSVpvn_share(str "", sizeof(str) - 1, 0)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_catpvs
Packit d03632
#  define sv_catpvs(sv, str)             sv_catpvn(sv, str "", sizeof(str) - 1)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_setpvs
Packit d03632
#  define sv_setpvs(sv, str)             sv_setpvn(sv, str "", sizeof(str) - 1)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef hv_fetchs
Packit d03632
#  define hv_fetchs(hv, key, lval)       hv_fetch(hv, key "", sizeof(key) - 1, lval)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef hv_stores
Packit d03632
#  define hv_stores(hv, key, val)        hv_store(hv, key "", sizeof(key) - 1, val, 0)
Packit d03632
#endif
Packit d03632
#ifndef gv_fetchpvs
Packit d03632
#  define gv_fetchpvs(name, flags, svt)  gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef gv_stashpvs
Packit d03632
#  define gv_stashpvs(name, flags)       gv_stashpvn(name "", sizeof(name) - 1, flags)
Packit d03632
#endif
Packit d03632
#ifndef get_cvs
Packit d03632
#  define get_cvs(name, flags)           get_cvn_flags(name "", sizeof(name)-1, flags)
Packit d03632
#endif
Packit d03632
#ifndef SvGETMAGIC
Packit d03632
#  define SvGETMAGIC(x)                  STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END
Packit d03632
#endif
Packit d03632
#ifndef PERL_MAGIC_sv
Packit d03632
#  define PERL_MAGIC_sv                  '\0'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_overload
Packit d03632
#  define PERL_MAGIC_overload            'A'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_overload_elem
Packit d03632
#  define PERL_MAGIC_overload_elem       'a'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_overload_table
Packit d03632
#  define PERL_MAGIC_overload_table      'c'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_bm
Packit d03632
#  define PERL_MAGIC_bm                  'B'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_regdata
Packit d03632
#  define PERL_MAGIC_regdata             'D'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_regdatum
Packit d03632
#  define PERL_MAGIC_regdatum            'd'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_env
Packit d03632
#  define PERL_MAGIC_env                 'E'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_envelem
Packit d03632
#  define PERL_MAGIC_envelem             'e'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_fm
Packit d03632
#  define PERL_MAGIC_fm                  'f'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_regex_global
Packit d03632
#  define PERL_MAGIC_regex_global        'g'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_isa
Packit d03632
#  define PERL_MAGIC_isa                 'I'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_isaelem
Packit d03632
#  define PERL_MAGIC_isaelem             'i'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_nkeys
Packit d03632
#  define PERL_MAGIC_nkeys               'k'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_dbfile
Packit d03632
#  define PERL_MAGIC_dbfile              'L'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_dbline
Packit d03632
#  define PERL_MAGIC_dbline              'l'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_mutex
Packit d03632
#  define PERL_MAGIC_mutex               'm'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_shared
Packit d03632
#  define PERL_MAGIC_shared              'N'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_shared_scalar
Packit d03632
#  define PERL_MAGIC_shared_scalar       'n'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_collxfrm
Packit d03632
#  define PERL_MAGIC_collxfrm            'o'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_tied
Packit d03632
#  define PERL_MAGIC_tied                'P'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_tiedelem
Packit d03632
#  define PERL_MAGIC_tiedelem            'p'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_tiedscalar
Packit d03632
#  define PERL_MAGIC_tiedscalar          'q'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_qr
Packit d03632
#  define PERL_MAGIC_qr                  'r'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_sig
Packit d03632
#  define PERL_MAGIC_sig                 'S'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_sigelem
Packit d03632
#  define PERL_MAGIC_sigelem             's'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_taint
Packit d03632
#  define PERL_MAGIC_taint               't'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_uvar
Packit d03632
#  define PERL_MAGIC_uvar                'U'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_uvar_elem
Packit d03632
#  define PERL_MAGIC_uvar_elem           'u'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_vstring
Packit d03632
#  define PERL_MAGIC_vstring             'V'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_vec
Packit d03632
#  define PERL_MAGIC_vec                 'v'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_utf8
Packit d03632
#  define PERL_MAGIC_utf8                'w'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_substr
Packit d03632
#  define PERL_MAGIC_substr              'x'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_defelem
Packit d03632
#  define PERL_MAGIC_defelem             'y'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_glob
Packit d03632
#  define PERL_MAGIC_glob                '*'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_arylen
Packit d03632
#  define PERL_MAGIC_arylen              '#'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_pos
Packit d03632
#  define PERL_MAGIC_pos                 '.'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_backref
Packit d03632
#  define PERL_MAGIC_backref             '<'
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_MAGIC_ext
Packit d03632
#  define PERL_MAGIC_ext                 '~'
Packit d03632
#endif
Packit d03632
Packit d03632
/* That's the best we can do... */
Packit d03632
#ifndef sv_catpvn_nomg
Packit d03632
#  define sv_catpvn_nomg                 sv_catpvn
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_catsv_nomg
Packit d03632
#  define sv_catsv_nomg                  sv_catsv
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_setsv_nomg
Packit d03632
#  define sv_setsv_nomg                  sv_setsv
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_pvn_nomg
Packit d03632
#  define sv_pvn_nomg                    sv_pvn
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvIV_nomg
Packit d03632
#  define SvIV_nomg                      SvIV
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef SvUV_nomg
Packit d03632
#  define SvUV_nomg                      SvUV
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_catpv_mg
Packit d03632
#  define sv_catpv_mg(sv, ptr)          \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = sv;                   \
Packit d03632
     sv_catpv(TeMpSv,ptr);              \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_catpvn_mg
Packit d03632
#  define sv_catpvn_mg(sv, ptr, len)    \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = sv;                   \
Packit d03632
     sv_catpvn(TeMpSv,ptr,len);         \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_catsv_mg
Packit d03632
#  define sv_catsv_mg(dsv, ssv)         \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = dsv;                  \
Packit d03632
     sv_catsv(TeMpSv,ssv);              \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_setiv_mg
Packit d03632
#  define sv_setiv_mg(sv, i)            \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = sv;                   \
Packit d03632
     sv_setiv(TeMpSv,i);                \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_setnv_mg
Packit d03632
#  define sv_setnv_mg(sv, num)          \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = sv;                   \
Packit d03632
     sv_setnv(TeMpSv,num);              \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_setpv_mg
Packit d03632
#  define sv_setpv_mg(sv, ptr)          \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = sv;                   \
Packit d03632
     sv_setpv(TeMpSv,ptr);              \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_setpvn_mg
Packit d03632
#  define sv_setpvn_mg(sv, ptr, len)    \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = sv;                   \
Packit d03632
     sv_setpvn(TeMpSv,ptr,len);         \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_setsv_mg
Packit d03632
#  define sv_setsv_mg(dsv, ssv)         \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = dsv;                  \
Packit d03632
     sv_setsv(TeMpSv,ssv);              \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_setuv_mg
Packit d03632
#  define sv_setuv_mg(sv, i)            \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = sv;                   \
Packit d03632
     sv_setuv(TeMpSv,i);                \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef sv_usepvn_mg
Packit d03632
#  define sv_usepvn_mg(sv, ptr, len)    \
Packit d03632
   STMT_START {                         \
Packit d03632
     SV *TeMpSv = sv;                   \
Packit d03632
     sv_usepvn(TeMpSv,ptr,len);         \
Packit d03632
     SvSETMAGIC(TeMpSv);                \
Packit d03632
   } STMT_END
Packit d03632
#endif
Packit d03632
#ifndef SvVSTRING_mg
Packit d03632
#  define SvVSTRING_mg(sv)               (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL)
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: sv_magic_portable
Packit d03632
 * This is a compatibility function that is only available with
Packit d03632
 * Devel::PPPort. It is NOT in the perl core.
Packit d03632
 * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when
Packit d03632
 * it is being passed a name pointer with namlen == 0. In that
Packit d03632
 * case, perl 5.8.0 and later store the pointer, not a copy of it.
Packit d03632
 * The compatibility can be provided back to perl 5.004. With
Packit d03632
 * earlier versions, the code will not compile.
Packit d03632
 */
Packit d03632
Packit d03632
#if (PERL_BCDVERSION < 0x5004000)
Packit d03632
Packit d03632
  /* code that uses sv_magic_portable will not compile */
Packit d03632
Packit d03632
#elif (PERL_BCDVERSION < 0x5008000)
Packit d03632
Packit d03632
#  define sv_magic_portable(sv, obj, how, name, namlen)     \
Packit d03632
   STMT_START {                                             \
Packit d03632
     SV *SvMp_sv = (sv);                                    \
Packit d03632
     char *SvMp_name = (char *) (name);                     \
Packit d03632
     I32 SvMp_namlen = (namlen);                            \
Packit d03632
     if (SvMp_name && SvMp_namlen == 0)                     \
Packit d03632
     {                                                      \
Packit d03632
       MAGIC *mg;                                           \
Packit d03632
       sv_magic(SvMp_sv, obj, how, 0, 0);                   \
Packit d03632
       mg = SvMAGIC(SvMp_sv);                               \
Packit d03632
       mg->mg_len = -42; /* XXX: this is the tricky part */ \
Packit d03632
       mg->mg_ptr = SvMp_name;                              \
Packit d03632
     }                                                      \
Packit d03632
     else                                                   \
Packit d03632
     {                                                      \
Packit d03632
       sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \
Packit d03632
     }                                                      \
Packit d03632
   } STMT_END
Packit d03632
Packit d03632
#else
Packit d03632
Packit d03632
#  define sv_magic_portable(a, b, c, d, e)  sv_magic(a, b, c, d, e)
Packit d03632
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef USE_ITHREADS
Packit d03632
#ifndef CopFILE
Packit d03632
#  define CopFILE(c)                     ((c)->cop_file)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopFILEGV
Packit d03632
#  define CopFILEGV(c)                   (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopFILE_set
Packit d03632
#  define CopFILE_set(c,pv)              ((c)->cop_file = savepv(pv))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopFILESV
Packit d03632
#  define CopFILESV(c)                   (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopFILEAV
Packit d03632
#  define CopFILEAV(c)                   (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASHPV
Packit d03632
#  define CopSTASHPV(c)                  ((c)->cop_stashpv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASHPV_set
Packit d03632
#  define CopSTASHPV_set(c,pv)           ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASH
Packit d03632
#  define CopSTASH(c)                    (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASH_set
Packit d03632
#  define CopSTASH_set(c,hv)             CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASH_eq
Packit d03632
#  define CopSTASH_eq(c,hv)              ((hv) && (CopSTASHPV(c) == HvNAME(hv) \
Packit d03632
                                        || (CopSTASHPV(c) && HvNAME(hv) \
Packit d03632
                                        && strEQ(CopSTASHPV(c), HvNAME(hv)))))
Packit d03632
#endif
Packit d03632
Packit d03632
#else
Packit d03632
#ifndef CopFILEGV
Packit d03632
#  define CopFILEGV(c)                   ((c)->cop_filegv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopFILEGV_set
Packit d03632
#  define CopFILEGV_set(c,gv)            ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopFILE_set
Packit d03632
#  define CopFILE_set(c,pv)              CopFILEGV_set((c), gv_fetchfile(pv))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopFILESV
Packit d03632
#  define CopFILESV(c)                   (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopFILEAV
Packit d03632
#  define CopFILEAV(c)                   (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopFILE
Packit d03632
#  define CopFILE(c)                     (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASH
Packit d03632
#  define CopSTASH(c)                    ((c)->cop_stash)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASH_set
Packit d03632
#  define CopSTASH_set(c,hv)             ((c)->cop_stash = (hv))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASHPV
Packit d03632
#  define CopSTASHPV(c)                  (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASHPV_set
Packit d03632
#  define CopSTASHPV_set(c,pv)           CopSTASH_set((c), gv_stashpv(pv,GV_ADD))
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef CopSTASH_eq
Packit d03632
#  define CopSTASH_eq(c,hv)              (CopSTASH(c) == (hv))
Packit d03632
#endif
Packit d03632
Packit d03632
#endif /* USE_ITHREADS */
Packit d03632
#ifndef IN_PERL_COMPILETIME
Packit d03632
#  define IN_PERL_COMPILETIME            (PL_curcop == &PL_compiling)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IN_LOCALE_RUNTIME
Packit d03632
#  define IN_LOCALE_RUNTIME              (PL_curcop->op_private & HINT_LOCALE)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IN_LOCALE_COMPILETIME
Packit d03632
#  define IN_LOCALE_COMPILETIME          (PL_hints & HINT_LOCALE)
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IN_LOCALE
Packit d03632
#  define IN_LOCALE                      (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME)
Packit d03632
#endif
Packit d03632
#ifndef IS_NUMBER_IN_UV
Packit d03632
#  define IS_NUMBER_IN_UV                0x01
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IS_NUMBER_GREATER_THAN_UV_MAX
Packit d03632
#  define IS_NUMBER_GREATER_THAN_UV_MAX  0x02
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IS_NUMBER_NOT_INT
Packit d03632
#  define IS_NUMBER_NOT_INT              0x04
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IS_NUMBER_NEG
Packit d03632
#  define IS_NUMBER_NEG                  0x08
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IS_NUMBER_INFINITY
Packit d03632
#  define IS_NUMBER_INFINITY             0x10
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef IS_NUMBER_NAN
Packit d03632
#  define IS_NUMBER_NAN                  0x20
Packit d03632
#endif
Packit d03632
#ifndef GROK_NUMERIC_RADIX
Packit d03632
#  define GROK_NUMERIC_RADIX(sp, send)   grok_numeric_radix(sp, send)
Packit d03632
#endif
Packit d03632
#ifndef PERL_SCAN_GREATER_THAN_UV_MAX
Packit d03632
#  define PERL_SCAN_GREATER_THAN_UV_MAX  0x02
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_SCAN_SILENT_ILLDIGIT
Packit d03632
#  define PERL_SCAN_SILENT_ILLDIGIT      0x04
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_SCAN_ALLOW_UNDERSCORES
Packit d03632
#  define PERL_SCAN_ALLOW_UNDERSCORES    0x01
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_SCAN_DISALLOW_PREFIX
Packit d03632
#  define PERL_SCAN_DISALLOW_PREFIX      0x02
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef grok_numeric_radix
Packit d03632
#if defined(NEED_grok_numeric_radix)
Packit d03632
static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef grok_numeric_radix
Packit d03632
#  undef grok_numeric_radix
Packit d03632
#endif
Packit d03632
#define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b)
Packit d03632
#define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix)
Packit d03632
Packit d03632
#if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL)
Packit d03632
bool
Packit d03632
DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send)
Packit d03632
{
Packit d03632
#ifdef USE_LOCALE_NUMERIC
Packit d03632
#ifdef PL_numeric_radix_sv
Packit d03632
    if (PL_numeric_radix_sv && IN_LOCALE) {
Packit d03632
        STRLEN len;
Packit d03632
        char* radix = SvPV(PL_numeric_radix_sv, len);
Packit d03632
        if (*sp + len <= send && memEQ(*sp, radix, len)) {
Packit d03632
            *sp += len;
Packit d03632
            return TRUE;
Packit d03632
        }
Packit d03632
    }
Packit d03632
#else
Packit d03632
    /* older perls don't have PL_numeric_radix_sv so the radix
Packit d03632
     * must manually be requested from locale.h
Packit d03632
     */
Packit d03632
#include <locale.h>
Packit d03632
    dTHR;  /* needed for older threaded perls */
Packit d03632
    struct lconv *lc = localeconv();
Packit d03632
    char *radix = lc->decimal_point;
Packit d03632
    if (radix && IN_LOCALE) {
Packit d03632
        STRLEN len = strlen(radix);
Packit d03632
        if (*sp + len <= send && memEQ(*sp, radix, len)) {
Packit d03632
            *sp += len;
Packit d03632
            return TRUE;
Packit d03632
        }
Packit d03632
    }
Packit d03632
#endif
Packit d03632
#endif /* USE_LOCALE_NUMERIC */
Packit d03632
    /* always try "." if numeric radix didn't match because
Packit d03632
     * we may have data from different locales mixed */
Packit d03632
    if (*sp < send && **sp == '.') {
Packit d03632
        ++*sp;
Packit d03632
        return TRUE;
Packit d03632
    }
Packit d03632
    return FALSE;
Packit d03632
}
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef grok_number
Packit d03632
#if defined(NEED_grok_number)
Packit d03632
static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef grok_number
Packit d03632
#  undef grok_number
Packit d03632
#endif
Packit d03632
#define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c)
Packit d03632
#define Perl_grok_number DPPP_(my_grok_number)
Packit d03632
Packit d03632
#if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL)
Packit d03632
int
Packit d03632
DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep)
Packit d03632
{
Packit d03632
  const char *s = pv;
Packit d03632
  const char *send = pv + len;
Packit d03632
  const UV max_div_10 = UV_MAX / 10;
Packit d03632
  const char max_mod_10 = UV_MAX % 10;
Packit d03632
  int numtype = 0;
Packit d03632
  int sawinf = 0;
Packit d03632
  int sawnan = 0;
Packit d03632
Packit d03632
  while (s < send && isSPACE(*s))
Packit d03632
    s++;
Packit d03632
  if (s == send) {
Packit d03632
    return 0;
Packit d03632
  } else if (*s == '-') {
Packit d03632
    s++;
Packit d03632
    numtype = IS_NUMBER_NEG;
Packit d03632
  }
Packit d03632
  else if (*s == '+')
Packit d03632
  s++;
Packit d03632
Packit d03632
  if (s == send)
Packit d03632
    return 0;
Packit d03632
Packit d03632
  /* next must be digit or the radix separator or beginning of infinity */
Packit d03632
  if (isDIGIT(*s)) {
Packit d03632
    /* UVs are at least 32 bits, so the first 9 decimal digits cannot
Packit d03632
       overflow.  */
Packit d03632
    UV value = *s - '0';
Packit d03632
    /* This construction seems to be more optimiser friendly.
Packit d03632
       (without it gcc does the isDIGIT test and the *s - '0' separately)
Packit d03632
       With it gcc on arm is managing 6 instructions (6 cycles) per digit.
Packit d03632
       In theory the optimiser could deduce how far to unroll the loop
Packit d03632
       before checking for overflow.  */
Packit d03632
    if (++s < send) {
Packit d03632
      int digit = *s - '0';
Packit d03632
      if (digit >= 0 && digit <= 9) {
Packit d03632
        value = value * 10 + digit;
Packit d03632
        if (++s < send) {
Packit d03632
          digit = *s - '0';
Packit d03632
          if (digit >= 0 && digit <= 9) {
Packit d03632
            value = value * 10 + digit;
Packit d03632
            if (++s < send) {
Packit d03632
              digit = *s - '0';
Packit d03632
              if (digit >= 0 && digit <= 9) {
Packit d03632
                value = value * 10 + digit;
Packit d03632
                if (++s < send) {
Packit d03632
                  digit = *s - '0';
Packit d03632
                  if (digit >= 0 && digit <= 9) {
Packit d03632
                    value = value * 10 + digit;
Packit d03632
                    if (++s < send) {
Packit d03632
                      digit = *s - '0';
Packit d03632
                      if (digit >= 0 && digit <= 9) {
Packit d03632
                        value = value * 10 + digit;
Packit d03632
                        if (++s < send) {
Packit d03632
                          digit = *s - '0';
Packit d03632
                          if (digit >= 0 && digit <= 9) {
Packit d03632
                            value = value * 10 + digit;
Packit d03632
                            if (++s < send) {
Packit d03632
                              digit = *s - '0';
Packit d03632
                              if (digit >= 0 && digit <= 9) {
Packit d03632
                                value = value * 10 + digit;
Packit d03632
                                if (++s < send) {
Packit d03632
                                  digit = *s - '0';
Packit d03632
                                  if (digit >= 0 && digit <= 9) {
Packit d03632
                                    value = value * 10 + digit;
Packit d03632
                                    if (++s < send) {
Packit d03632
                                      /* Now got 9 digits, so need to check
Packit d03632
                                         each time for overflow.  */
Packit d03632
                                      digit = *s - '0';
Packit d03632
                                      while (digit >= 0 && digit <= 9
Packit d03632
                                             && (value < max_div_10
Packit d03632
                                                 || (value == max_div_10
Packit d03632
                                                     && digit <= max_mod_10))) {
Packit d03632
                                        value = value * 10 + digit;
Packit d03632
                                        if (++s < send)
Packit d03632
                                          digit = *s - '0';
Packit d03632
                                        else
Packit d03632
                                          break;
Packit d03632
                                      }
Packit d03632
                                      if (digit >= 0 && digit <= 9
Packit d03632
                                          && (s < send)) {
Packit d03632
                                        /* value overflowed.
Packit d03632
                                           skip the remaining digits, don't
Packit d03632
                                           worry about setting *valuep.  */
Packit d03632
                                        do {
Packit d03632
                                          s++;
Packit d03632
                                        } while (s < send && isDIGIT(*s));
Packit d03632
                                        numtype |=
Packit d03632
                                          IS_NUMBER_GREATER_THAN_UV_MAX;
Packit d03632
                                        goto skip_value;
Packit d03632
                                      }
Packit d03632
                                    }
Packit d03632
                                  }
Packit d03632
                                }
Packit d03632
                              }
Packit d03632
                            }
Packit d03632
                          }
Packit d03632
                        }
Packit d03632
                      }
Packit d03632
                    }
Packit d03632
                  }
Packit d03632
                }
Packit d03632
              }
Packit d03632
            }
Packit d03632
          }
Packit d03632
        }
Packit d03632
      }
Packit d03632
    }
Packit d03632
    numtype |= IS_NUMBER_IN_UV;
Packit d03632
    if (valuep)
Packit d03632
      *valuep = value;
Packit d03632
Packit d03632
  skip_value:
Packit d03632
    if (GROK_NUMERIC_RADIX(&s, send)) {
Packit d03632
      numtype |= IS_NUMBER_NOT_INT;
Packit d03632
      while (s < send && isDIGIT(*s))  /* optional digits after the radix */
Packit d03632
        s++;
Packit d03632
    }
Packit d03632
  }
Packit d03632
  else if (GROK_NUMERIC_RADIX(&s, send)) {
Packit d03632
    numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */
Packit d03632
    /* no digits before the radix means we need digits after it */
Packit d03632
    if (s < send && isDIGIT(*s)) {
Packit d03632
      do {
Packit d03632
        s++;
Packit d03632
      } while (s < send && isDIGIT(*s));
Packit d03632
      if (valuep) {
Packit d03632
        /* integer approximation is valid - it's 0.  */
Packit d03632
        *valuep = 0;
Packit d03632
      }
Packit d03632
    }
Packit d03632
    else
Packit d03632
      return 0;
Packit d03632
  } else if (*s == 'I' || *s == 'i') {
Packit d03632
    s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
Packit d03632
    s++; if (s == send || (*s != 'F' && *s != 'f')) return 0;
Packit d03632
    s++; if (s < send && (*s == 'I' || *s == 'i')) {
Packit d03632
      s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
Packit d03632
      s++; if (s == send || (*s != 'I' && *s != 'i')) return 0;
Packit d03632
      s++; if (s == send || (*s != 'T' && *s != 't')) return 0;
Packit d03632
      s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0;
Packit d03632
      s++;
Packit d03632
    }
Packit d03632
    sawinf = 1;
Packit d03632
  } else if (*s == 'N' || *s == 'n') {
Packit d03632
    /* XXX TODO: There are signaling NaNs and quiet NaNs. */
Packit d03632
    s++; if (s == send || (*s != 'A' && *s != 'a')) return 0;
Packit d03632
    s++; if (s == send || (*s != 'N' && *s != 'n')) return 0;
Packit d03632
    s++;
Packit d03632
    sawnan = 1;
Packit d03632
  } else
Packit d03632
    return 0;
Packit d03632
Packit d03632
  if (sawinf) {
Packit d03632
    numtype &= IS_NUMBER_NEG; /* Keep track of sign  */
Packit d03632
    numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT;
Packit d03632
  } else if (sawnan) {
Packit d03632
    numtype &= IS_NUMBER_NEG; /* Keep track of sign  */
Packit d03632
    numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT;
Packit d03632
  } else if (s < send) {
Packit d03632
    /* we can have an optional exponent part */
Packit d03632
    if (*s == 'e' || *s == 'E') {
Packit d03632
      /* The only flag we keep is sign.  Blow away any "it's UV"  */
Packit d03632
      numtype &= IS_NUMBER_NEG;
Packit d03632
      numtype |= IS_NUMBER_NOT_INT;
Packit d03632
      s++;
Packit d03632
      if (s < send && (*s == '-' || *s == '+'))
Packit d03632
        s++;
Packit d03632
      if (s < send && isDIGIT(*s)) {
Packit d03632
        do {
Packit d03632
          s++;
Packit d03632
        } while (s < send && isDIGIT(*s));
Packit d03632
      }
Packit d03632
      else
Packit d03632
      return 0;
Packit d03632
    }
Packit d03632
  }
Packit d03632
  while (s < send && isSPACE(*s))
Packit d03632
    s++;
Packit d03632
  if (s >= send)
Packit d03632
    return numtype;
Packit d03632
  if (len == 10 && memEQ(pv, "0 but true", 10)) {
Packit d03632
    if (valuep)
Packit d03632
      *valuep = 0;
Packit d03632
    return IS_NUMBER_IN_UV;
Packit d03632
  }
Packit d03632
  return 0;
Packit d03632
}
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
/*
Packit d03632
 * The grok_* routines have been modified to use warn() instead of
Packit d03632
 * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit,
Packit d03632
 * which is why the stack variable has been renamed to 'xdigit'.
Packit d03632
 */
Packit d03632
Packit d03632
#ifndef grok_bin
Packit d03632
#if defined(NEED_grok_bin)
Packit d03632
static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef grok_bin
Packit d03632
#  undef grok_bin
Packit d03632
#endif
Packit d03632
#define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d)
Packit d03632
#define Perl_grok_bin DPPP_(my_grok_bin)
Packit d03632
Packit d03632
#if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL)
Packit d03632
UV
Packit d03632
DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
Packit d03632
{
Packit d03632
    const char *s = start;
Packit d03632
    STRLEN len = *len_p;
Packit d03632
    UV value = 0;
Packit d03632
    NV value_nv = 0;
Packit d03632
Packit d03632
    const UV max_div_2 = UV_MAX / 2;
Packit d03632
    bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
Packit d03632
    bool overflowed = FALSE;
Packit d03632
Packit d03632
    if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
Packit d03632
        /* strip off leading b or 0b.
Packit d03632
           for compatibility silently suffer "b" and "0b" as valid binary
Packit d03632
           numbers. */
Packit d03632
        if (len >= 1) {
Packit d03632
            if (s[0] == 'b') {
Packit d03632
                s++;
Packit d03632
                len--;
Packit d03632
            }
Packit d03632
            else if (len >= 2 && s[0] == '0' && s[1] == 'b') {
Packit d03632
                s+=2;
Packit d03632
                len-=2;
Packit d03632
            }
Packit d03632
        }
Packit d03632
    }
Packit d03632
Packit d03632
    for (; len-- && *s; s++) {
Packit d03632
        char bit = *s;
Packit d03632
        if (bit == '0' || bit == '1') {
Packit d03632
            /* Write it in this wonky order with a goto to attempt to get the
Packit d03632
               compiler to make the common case integer-only loop pretty tight.
Packit d03632
               With gcc seems to be much straighter code than old scan_bin.  */
Packit d03632
          redo:
Packit d03632
            if (!overflowed) {
Packit d03632
                if (value <= max_div_2) {
Packit d03632
                    value = (value << 1) | (bit - '0');
Packit d03632
                    continue;
Packit d03632
                }
Packit d03632
                /* Bah. We're just overflowed.  */
Packit d03632
                warn("Integer overflow in binary number");
Packit d03632
                overflowed = TRUE;
Packit d03632
                value_nv = (NV) value;
Packit d03632
            }
Packit d03632
            value_nv *= 2.0;
Packit d03632
            /* If an NV has not enough bits in its mantissa to
Packit d03632
             * represent a UV this summing of small low-order numbers
Packit d03632
             * is a waste of time (because the NV cannot preserve
Packit d03632
             * the low-order bits anyway): we could just remember when
Packit d03632
             * did we overflow and in the end just multiply value_nv by the
Packit d03632
             * right amount. */
Packit d03632
            value_nv += (NV)(bit - '0');
Packit d03632
            continue;
Packit d03632
        }
Packit d03632
        if (bit == '_' && len && allow_underscores && (bit = s[1])
Packit d03632
            && (bit == '0' || bit == '1'))
Packit d03632
            {
Packit d03632
                --len;
Packit d03632
                ++s;
Packit d03632
                goto redo;
Packit d03632
            }
Packit d03632
        if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
Packit d03632
            warn("Illegal binary digit '%c' ignored", *s);
Packit d03632
        break;
Packit d03632
    }
Packit d03632
Packit d03632
    if (   ( overflowed && value_nv > 4294967295.0)
Packit d03632
#if UVSIZE > 4
Packit d03632
        || (!overflowed && value > 0xffffffff  )
Packit d03632
#endif
Packit d03632
        ) {
Packit d03632
        warn("Binary number > 0b11111111111111111111111111111111 non-portable");
Packit d03632
    }
Packit d03632
    *len_p = s - start;
Packit d03632
    if (!overflowed) {
Packit d03632
        *flags = 0;
Packit d03632
        return value;
Packit d03632
    }
Packit d03632
    *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
Packit d03632
    if (result)
Packit d03632
        *result = value_nv;
Packit d03632
    return UV_MAX;
Packit d03632
}
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef grok_hex
Packit d03632
#if defined(NEED_grok_hex)
Packit d03632
static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef grok_hex
Packit d03632
#  undef grok_hex
Packit d03632
#endif
Packit d03632
#define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d)
Packit d03632
#define Perl_grok_hex DPPP_(my_grok_hex)
Packit d03632
Packit d03632
#if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL)
Packit d03632
UV
Packit d03632
DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
Packit d03632
{
Packit d03632
    const char *s = start;
Packit d03632
    STRLEN len = *len_p;
Packit d03632
    UV value = 0;
Packit d03632
    NV value_nv = 0;
Packit d03632
Packit d03632
    const UV max_div_16 = UV_MAX / 16;
Packit d03632
    bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
Packit d03632
    bool overflowed = FALSE;
Packit d03632
    const char *xdigit;
Packit d03632
Packit d03632
    if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) {
Packit d03632
        /* strip off leading x or 0x.
Packit d03632
           for compatibility silently suffer "x" and "0x" as valid hex numbers.
Packit d03632
        */
Packit d03632
        if (len >= 1) {
Packit d03632
            if (s[0] == 'x') {
Packit d03632
                s++;
Packit d03632
                len--;
Packit d03632
            }
Packit d03632
            else if (len >= 2 && s[0] == '0' && s[1] == 'x') {
Packit d03632
                s+=2;
Packit d03632
                len-=2;
Packit d03632
            }
Packit d03632
        }
Packit d03632
    }
Packit d03632
Packit d03632
    for (; len-- && *s; s++) {
Packit d03632
        xdigit = strchr((char *) PL_hexdigit, *s);
Packit d03632
        if (xdigit) {
Packit d03632
            /* Write it in this wonky order with a goto to attempt to get the
Packit d03632
               compiler to make the common case integer-only loop pretty tight.
Packit d03632
               With gcc seems to be much straighter code than old scan_hex.  */
Packit d03632
          redo:
Packit d03632
            if (!overflowed) {
Packit d03632
                if (value <= max_div_16) {
Packit d03632
                    value = (value << 4) | ((xdigit - PL_hexdigit) & 15);
Packit d03632
                    continue;
Packit d03632
                }
Packit d03632
                warn("Integer overflow in hexadecimal number");
Packit d03632
                overflowed = TRUE;
Packit d03632
                value_nv = (NV) value;
Packit d03632
            }
Packit d03632
            value_nv *= 16.0;
Packit d03632
            /* If an NV has not enough bits in its mantissa to
Packit d03632
             * represent a UV this summing of small low-order numbers
Packit d03632
             * is a waste of time (because the NV cannot preserve
Packit d03632
             * the low-order bits anyway): we could just remember when
Packit d03632
             * did we overflow and in the end just multiply value_nv by the
Packit d03632
             * right amount of 16-tuples. */
Packit d03632
            value_nv += (NV)((xdigit - PL_hexdigit) & 15);
Packit d03632
            continue;
Packit d03632
        }
Packit d03632
        if (*s == '_' && len && allow_underscores && s[1]
Packit d03632
                && (xdigit = strchr((char *) PL_hexdigit, s[1])))
Packit d03632
            {
Packit d03632
                --len;
Packit d03632
                ++s;
Packit d03632
                goto redo;
Packit d03632
            }
Packit d03632
        if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
Packit d03632
            warn("Illegal hexadecimal digit '%c' ignored", *s);
Packit d03632
        break;
Packit d03632
    }
Packit d03632
Packit d03632
    if (   ( overflowed && value_nv > 4294967295.0)
Packit d03632
#if UVSIZE > 4
Packit d03632
        || (!overflowed && value > 0xffffffff  )
Packit d03632
#endif
Packit d03632
        ) {
Packit d03632
        warn("Hexadecimal number > 0xffffffff non-portable");
Packit d03632
    }
Packit d03632
    *len_p = s - start;
Packit d03632
    if (!overflowed) {
Packit d03632
        *flags = 0;
Packit d03632
        return value;
Packit d03632
    }
Packit d03632
    *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
Packit d03632
    if (result)
Packit d03632
        *result = value_nv;
Packit d03632
    return UV_MAX;
Packit d03632
}
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef grok_oct
Packit d03632
#if defined(NEED_grok_oct)
Packit d03632
static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef grok_oct
Packit d03632
#  undef grok_oct
Packit d03632
#endif
Packit d03632
#define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d)
Packit d03632
#define Perl_grok_oct DPPP_(my_grok_oct)
Packit d03632
Packit d03632
#if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL)
Packit d03632
UV
Packit d03632
DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result)
Packit d03632
{
Packit d03632
    const char *s = start;
Packit d03632
    STRLEN len = *len_p;
Packit d03632
    UV value = 0;
Packit d03632
    NV value_nv = 0;
Packit d03632
Packit d03632
    const UV max_div_8 = UV_MAX / 8;
Packit d03632
    bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES;
Packit d03632
    bool overflowed = FALSE;
Packit d03632
Packit d03632
    for (; len-- && *s; s++) {
Packit d03632
         /* gcc 2.95 optimiser not smart enough to figure that this subtraction
Packit d03632
            out front allows slicker code.  */
Packit d03632
        int digit = *s - '0';
Packit d03632
        if (digit >= 0 && digit <= 7) {
Packit d03632
            /* Write it in this wonky order with a goto to attempt to get the
Packit d03632
               compiler to make the common case integer-only loop pretty tight.
Packit d03632
            */
Packit d03632
          redo:
Packit d03632
            if (!overflowed) {
Packit d03632
                if (value <= max_div_8) {
Packit d03632
                    value = (value << 3) | digit;
Packit d03632
                    continue;
Packit d03632
                }
Packit d03632
                /* Bah. We're just overflowed.  */
Packit d03632
                warn("Integer overflow in octal number");
Packit d03632
                overflowed = TRUE;
Packit d03632
                value_nv = (NV) value;
Packit d03632
            }
Packit d03632
            value_nv *= 8.0;
Packit d03632
            /* If an NV has not enough bits in its mantissa to
Packit d03632
             * represent a UV this summing of small low-order numbers
Packit d03632
             * is a waste of time (because the NV cannot preserve
Packit d03632
             * the low-order bits anyway): we could just remember when
Packit d03632
             * did we overflow and in the end just multiply value_nv by the
Packit d03632
             * right amount of 8-tuples. */
Packit d03632
            value_nv += (NV)digit;
Packit d03632
            continue;
Packit d03632
        }
Packit d03632
        if (digit == ('_' - '0') && len && allow_underscores
Packit d03632
            && (digit = s[1] - '0') && (digit >= 0 && digit <= 7))
Packit d03632
            {
Packit d03632
                --len;
Packit d03632
                ++s;
Packit d03632
                goto redo;
Packit d03632
            }
Packit d03632
        /* Allow \octal to work the DWIM way (that is, stop scanning
Packit d03632
         * as soon as non-octal characters are seen, complain only iff
Packit d03632
         * someone seems to want to use the digits eight and nine). */
Packit d03632
        if (digit == 8 || digit == 9) {
Packit d03632
            if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT))
Packit d03632
                warn("Illegal octal digit '%c' ignored", *s);
Packit d03632
        }
Packit d03632
        break;
Packit d03632
    }
Packit d03632
Packit d03632
    if (   ( overflowed && value_nv > 4294967295.0)
Packit d03632
#if UVSIZE > 4
Packit d03632
        || (!overflowed && value > 0xffffffff  )
Packit d03632
#endif
Packit d03632
        ) {
Packit d03632
        warn("Octal number > 037777777777 non-portable");
Packit d03632
    }
Packit d03632
    *len_p = s - start;
Packit d03632
    if (!overflowed) {
Packit d03632
        *flags = 0;
Packit d03632
        return value;
Packit d03632
    }
Packit d03632
    *flags = PERL_SCAN_GREATER_THAN_UV_MAX;
Packit d03632
    if (result)
Packit d03632
        *result = value_nv;
Packit d03632
    return UV_MAX;
Packit d03632
}
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if !defined(my_snprintf)
Packit d03632
#if defined(NEED_my_snprintf)
Packit d03632
static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...);
Packit d03632
#endif
Packit d03632
Packit d03632
#define my_snprintf DPPP_(my_my_snprintf)
Packit d03632
#define Perl_my_snprintf DPPP_(my_my_snprintf)
Packit d03632
Packit d03632
#if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL)
Packit d03632
Packit d03632
int
Packit d03632
DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...)
Packit d03632
{
Packit d03632
    dTHX;
Packit d03632
    int retval;
Packit d03632
    va_list ap;
Packit d03632
    va_start(ap, format);
Packit d03632
#ifdef HAS_VSNPRINTF
Packit d03632
    retval = vsnprintf(buffer, len, format, ap);
Packit d03632
#else
Packit d03632
    retval = vsprintf(buffer, format, ap);
Packit d03632
#endif
Packit d03632
    va_end(ap);
Packit d03632
    if (retval < 0 || (len > 0 && (Size_t)retval >= len))
Packit d03632
        Perl_croak(aTHX_ "panic: my_snprintf buffer overflow");
Packit d03632
    return retval;
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if !defined(my_sprintf)
Packit d03632
#if defined(NEED_my_sprintf)
Packit d03632
static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...);
Packit d03632
#endif
Packit d03632
Packit d03632
#define my_sprintf DPPP_(my_my_sprintf)
Packit d03632
#define Perl_my_sprintf DPPP_(my_my_sprintf)
Packit d03632
Packit d03632
#if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL)
Packit d03632
Packit d03632
int
Packit d03632
DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...)
Packit d03632
{
Packit d03632
    va_list args;
Packit d03632
    va_start(args, pat);
Packit d03632
    vsprintf(buffer, pat, args);
Packit d03632
    va_end(args);
Packit d03632
    return strlen(buffer);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef NO_XSLOCKS
Packit d03632
#  ifdef dJMPENV
Packit d03632
#    define dXCPT             dJMPENV; int rEtV = 0
Packit d03632
#    define XCPT_TRY_START    JMPENV_PUSH(rEtV); if (rEtV == 0)
Packit d03632
#    define XCPT_TRY_END      JMPENV_POP;
Packit d03632
#    define XCPT_CATCH        if (rEtV != 0)
Packit d03632
#    define XCPT_RETHROW      JMPENV_JUMP(rEtV)
Packit d03632
#  else
Packit d03632
#    define dXCPT             Sigjmp_buf oldTOP; int rEtV = 0
Packit d03632
#    define XCPT_TRY_START    Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0)
Packit d03632
#    define XCPT_TRY_END      Copy(oldTOP, top_env, 1, Sigjmp_buf);
Packit d03632
#    define XCPT_CATCH        if (rEtV != 0)
Packit d03632
#    define XCPT_RETHROW      Siglongjmp(top_env, rEtV)
Packit d03632
#  endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if !defined(my_strlcat)
Packit d03632
#if defined(NEED_my_strlcat)
Packit d03632
static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size);
Packit d03632
#endif
Packit d03632
Packit d03632
#define my_strlcat DPPP_(my_my_strlcat)
Packit d03632
#define Perl_my_strlcat DPPP_(my_my_strlcat)
Packit d03632
Packit d03632
#if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL)
Packit d03632
Packit d03632
Size_t
Packit d03632
DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size)
Packit d03632
{
Packit d03632
    Size_t used, length, copy;
Packit d03632
Packit d03632
    used = strlen(dst);
Packit d03632
    length = strlen(src);
Packit d03632
    if (size > 0 && used < size - 1) {
Packit d03632
        copy = (length >= size - used) ? size - used - 1 : length;
Packit d03632
        memcpy(dst + used, src, copy);
Packit d03632
        dst[used + copy] = '\0';
Packit d03632
    }
Packit d03632
    return used + length;
Packit d03632
}
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#if !defined(my_strlcpy)
Packit d03632
#if defined(NEED_my_strlcpy)
Packit d03632
static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size);
Packit d03632
#endif
Packit d03632
Packit d03632
#define my_strlcpy DPPP_(my_my_strlcpy)
Packit d03632
#define Perl_my_strlcpy DPPP_(my_my_strlcpy)
Packit d03632
Packit d03632
#if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL)
Packit d03632
Packit d03632
Size_t
Packit d03632
DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size)
Packit d03632
{
Packit d03632
    Size_t length, copy;
Packit d03632
Packit d03632
    length = strlen(src);
Packit d03632
    if (size > 0) {
Packit d03632
        copy = (length >= size) ? size - 1 : length;
Packit d03632
        memcpy(dst, src, copy);
Packit d03632
        dst[copy] = '\0';
Packit d03632
    }
Packit d03632
    return length;
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
#ifndef PERL_PV_ESCAPE_QUOTE
Packit d03632
#  define PERL_PV_ESCAPE_QUOTE           0x0001
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_PRETTY_QUOTE
Packit d03632
#  define PERL_PV_PRETTY_QUOTE           PERL_PV_ESCAPE_QUOTE
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_PRETTY_ELLIPSES
Packit d03632
#  define PERL_PV_PRETTY_ELLIPSES        0x0002
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_PRETTY_LTGT
Packit d03632
#  define PERL_PV_PRETTY_LTGT            0x0004
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_ESCAPE_FIRSTCHAR
Packit d03632
#  define PERL_PV_ESCAPE_FIRSTCHAR       0x0008
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_ESCAPE_UNI
Packit d03632
#  define PERL_PV_ESCAPE_UNI             0x0100
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_ESCAPE_UNI_DETECT
Packit d03632
#  define PERL_PV_ESCAPE_UNI_DETECT      0x0200
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_ESCAPE_ALL
Packit d03632
#  define PERL_PV_ESCAPE_ALL             0x1000
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_ESCAPE_NOBACKSLASH
Packit d03632
#  define PERL_PV_ESCAPE_NOBACKSLASH     0x2000
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_ESCAPE_NOCLEAR
Packit d03632
#  define PERL_PV_ESCAPE_NOCLEAR         0x4000
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_ESCAPE_RE
Packit d03632
#  define PERL_PV_ESCAPE_RE              0x8000
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_PRETTY_NOCLEAR
Packit d03632
#  define PERL_PV_PRETTY_NOCLEAR         PERL_PV_ESCAPE_NOCLEAR
Packit d03632
#endif
Packit d03632
#ifndef PERL_PV_PRETTY_DUMP
Packit d03632
#  define PERL_PV_PRETTY_DUMP            PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef PERL_PV_PRETTY_REGPROP
Packit d03632
#  define PERL_PV_PRETTY_REGPROP         PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE
Packit d03632
#endif
Packit d03632
Packit d03632
/* Hint: pv_escape
Packit d03632
 * Note that unicode functionality is only backported to
Packit d03632
 * those perl versions that support it. For older perl
Packit d03632
 * versions, the implementation will fall back to bytes.
Packit d03632
 */
Packit d03632
Packit d03632
#ifndef pv_escape
Packit d03632
#if defined(NEED_pv_escape)
Packit d03632
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);
Packit d03632
static
Packit d03632
#else
Packit d03632
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);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef pv_escape
Packit d03632
#  undef pv_escape
Packit d03632
#endif
Packit d03632
#define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f)
Packit d03632
#define Perl_pv_escape DPPP_(my_pv_escape)
Packit d03632
Packit d03632
#if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL)
Packit d03632
Packit d03632
char *
Packit d03632
DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str,
Packit d03632
  const STRLEN count, const STRLEN max,
Packit d03632
  STRLEN * const escaped, const U32 flags)
Packit d03632
{
Packit d03632
    const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\';
Packit d03632
    const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc;
Packit d03632
    char octbuf[32] = "%123456789ABCDF";
Packit d03632
    STRLEN wrote = 0;
Packit d03632
    STRLEN chsize = 0;
Packit d03632
    STRLEN readsize = 1;
Packit d03632
#if defined(is_utf8_string) && defined(utf8_to_uvchr)
Packit d03632
    bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0;
Packit d03632
#endif
Packit d03632
    const char *pv  = str;
Packit d03632
    const char * const end = pv + count;
Packit d03632
    octbuf[0] = esc;
Packit d03632
Packit d03632
    if (!(flags & PERL_PV_ESCAPE_NOCLEAR))
Packit d03632
        sv_setpvs(dsv, "");
Packit d03632
Packit d03632
#if defined(is_utf8_string) && defined(utf8_to_uvchr)
Packit d03632
    if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count))
Packit d03632
        isuni = 1;
Packit d03632
#endif
Packit d03632
Packit d03632
    for (; pv < end && (!max || wrote < max) ; pv += readsize) {
Packit d03632
        const UV u =
Packit d03632
#if defined(is_utf8_string) && defined(utf8_to_uvchr)
Packit d03632
                     isuni ? utf8_to_uvchr((U8*)pv, &readsize) :
Packit d03632
#endif
Packit d03632
                             (U8)*pv;
Packit d03632
        const U8 c = (U8)u & 0xFF;
Packit d03632
Packit d03632
        if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) {
Packit d03632
            if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
Packit d03632
                chsize = my_snprintf(octbuf, sizeof octbuf,
Packit d03632
                                      "%"UVxf, u);
Packit d03632
            else
Packit d03632
                chsize = my_snprintf(octbuf, sizeof octbuf,
Packit d03632
                                      "%cx{%"UVxf"}", esc, u);
Packit d03632
        } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) {
Packit d03632
            chsize = 1;
Packit d03632
        } else {
Packit d03632
            if (c == dq || c == esc || !isPRINT(c)) {
Packit d03632
                chsize = 2;
Packit d03632
                switch (c) {
Packit d03632
                case '\\' : /* fallthrough */
Packit d03632
                case '%'  : if (c == esc)
Packit d03632
                                octbuf[1] = esc;
Packit d03632
                            else
Packit d03632
                                chsize = 1;
Packit d03632
                            break;
Packit d03632
                case '\v' : octbuf[1] = 'v'; break;
Packit d03632
                case '\t' : octbuf[1] = 't'; break;
Packit d03632
                case '\r' : octbuf[1] = 'r'; break;
Packit d03632
                case '\n' : octbuf[1] = 'n'; break;
Packit d03632
                case '\f' : octbuf[1] = 'f'; break;
Packit d03632
                case '"'  : if (dq == '"')
Packit d03632
                                octbuf[1] = '"';
Packit d03632
                            else
Packit d03632
                                chsize = 1;
Packit d03632
                            break;
Packit d03632
                default:    chsize = my_snprintf(octbuf, sizeof octbuf,
Packit d03632
                                pv < end && isDIGIT((U8)*(pv+readsize))
Packit d03632
                                ? "%c%03o" : "%c%o", esc, c);
Packit d03632
                }
Packit d03632
            } else {
Packit d03632
                chsize = 1;
Packit d03632
            }
Packit d03632
        }
Packit d03632
        if (max && wrote + chsize > max) {
Packit d03632
            break;
Packit d03632
        } else if (chsize > 1) {
Packit d03632
            sv_catpvn(dsv, octbuf, chsize);
Packit d03632
            wrote += chsize;
Packit d03632
        } else {
Packit d03632
            char tmp[2];
Packit d03632
            my_snprintf(tmp, sizeof tmp, "%c", c);
Packit d03632
            sv_catpvn(dsv, tmp, 1);
Packit d03632
            wrote++;
Packit d03632
        }
Packit d03632
        if (flags & PERL_PV_ESCAPE_FIRSTCHAR)
Packit d03632
            break;
Packit d03632
    }
Packit d03632
    if (escaped != NULL)
Packit d03632
        *escaped= pv - str;
Packit d03632
    return SvPVX(dsv);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef pv_pretty
Packit d03632
#if defined(NEED_pv_pretty)
Packit d03632
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);
Packit d03632
static
Packit d03632
#else
Packit d03632
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);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef pv_pretty
Packit d03632
#  undef pv_pretty
Packit d03632
#endif
Packit d03632
#define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g)
Packit d03632
#define Perl_pv_pretty DPPP_(my_pv_pretty)
Packit d03632
Packit d03632
#if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL)
Packit d03632
Packit d03632
char *
Packit d03632
DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count,
Packit d03632
  const STRLEN max, char const * const start_color, char const * const end_color,
Packit d03632
  const U32 flags)
Packit d03632
{
Packit d03632
    const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%';
Packit d03632
    STRLEN escaped;
Packit d03632
Packit d03632
    if (!(flags & PERL_PV_PRETTY_NOCLEAR))
Packit d03632
        sv_setpvs(dsv, "");
Packit d03632
Packit d03632
    if (dq == '"')
Packit d03632
        sv_catpvs(dsv, "\"");
Packit d03632
    else if (flags & PERL_PV_PRETTY_LTGT)
Packit d03632
        sv_catpvs(dsv, "<");
Packit d03632
Packit d03632
    if (start_color != NULL)
Packit d03632
        sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color));
Packit d03632
Packit d03632
    pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR);
Packit d03632
Packit d03632
    if (end_color != NULL)
Packit d03632
        sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color));
Packit d03632
Packit d03632
    if (dq == '"')
Packit d03632
        sv_catpvs(dsv, "\"");
Packit d03632
    else if (flags & PERL_PV_PRETTY_LTGT)
Packit d03632
        sv_catpvs(dsv, ">");
Packit d03632
Packit d03632
    if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count)
Packit d03632
        sv_catpvs(dsv, "...");
Packit d03632
Packit d03632
    return SvPVX(dsv);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#ifndef pv_display
Packit d03632
#if defined(NEED_pv_display)
Packit d03632
static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
Packit d03632
static
Packit d03632
#else
Packit d03632
extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim);
Packit d03632
#endif
Packit d03632
Packit d03632
#ifdef pv_display
Packit d03632
#  undef pv_display
Packit d03632
#endif
Packit d03632
#define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e)
Packit d03632
#define Perl_pv_display DPPP_(my_pv_display)
Packit d03632
Packit d03632
#if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL)
Packit d03632
Packit d03632
char *
Packit d03632
DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
Packit d03632
{
Packit d03632
    pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP);
Packit d03632
    if (len > cur && pv[cur] == '\0')
Packit d03632
        sv_catpvs(dsv, "\\0");
Packit d03632
    return SvPVX(dsv);
Packit d03632
}
Packit d03632
Packit d03632
#endif
Packit d03632
#endif
Packit d03632
Packit d03632
#endif /* _P_P_PORTABILITY_H_ */
Packit d03632
Packit d03632
/* End of File ppport.h */