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