Algorithm-AM
view release on metacpan or search on metacpan
#if 0
my $void = <<'SKIP';
#endif
/*
----------------------------------------------------------------------
ppport.h -- Perl/Pollution/Portability Version 3.62
Automatically created by Devel::PPPort running under perl 5.032001.
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.62
=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 API that isn't supported all the way
back
--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_07, and has been tested up to 5.33.1.
=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
automagically 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_07. 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 FULLY supported by F<ppport.h>,
and below which version of Perl they probably won't be available or work.
By FULLY, we mean that support isn't provided all the way back to the first
version of Perl that F<ppport.h> supports at all.
=head2 --api-info=I<name>
Show portability information for elements matching I<name>.
If I<name> is surrounded by slashes, it is interpreted as a regular
expression.
Normally, only API elements are shown, but if there are no matching API
elements but there are some other matching elements, those are shown. This
allows you to conveniently find when functions internal to the core
implementation were added; only people working on the core are likely to find
this last part useful.
=head1 DESCRIPTION
In order for a Perl extension (XS) module to be as portable as possible
FALSE|5.003007||Viu
FATAL_ABOVE_FF_MSG|5.027010||Viu
F_atan2_amg|5.004000||Viu
FBMcf_TAIL|5.006000||Viu
FBMcf_TAIL_DOLLAR|5.006000||Viu
FBMcf_TAIL_DOLLARM|5.006000||Viu
FBMcf_TAIL_Z|5.006000||Viu
FBMcf_TAIL_z|5.006000||Viu
fbm_compile|5.005000|5.005000|
fbm_instr|5.005000|5.005000|
FBMrf_MULTILINE|5.006000||Viu
fclose|5.003007||Viu
fcntl|5.006000||Viu
FCNTL_CAN_LOCK|5.007001|5.007001|Vn
F_cos_amg|5.004000||Viu
FD_CLR|5.008000||Viu
FD_ISSET|5.008000||Viu
fdopen|5.003007||Viu
FD_SET|5.008000||Viu
fd_set|5.008000||Viu
FD_ZERO|5.008000||Viu
FEATURE_BITWISE_BIT|5.031006||Viu
FEATURE_BITWISE_IS_ENABLED|5.021009||Viu
FEATURE_BUNDLE_510|5.015007||Viu
FEATURE_BUNDLE_511|5.015007||Viu
FEATURE_BUNDLE_515|5.015007||Viu
FEATURE_BUNDLE_523|5.023001||Viu
FEATURE_BUNDLE_527|5.027008||Viu
FEATURE_BUNDLE_CUSTOM|5.015007||Viu
FEATURE_BUNDLE_DEFAULT|5.015007||Viu
FEATURE_EVALBYTES_BIT|5.031006||Viu
FEATURE_EVALBYTES_IS_ENABLED|5.015007||Viu
FEATURE_FC_BIT|5.031006||Viu
FEATURE_FC_IS_ENABLED|5.015008||Viu
FEATURE_INDIRECT_BIT|5.031009||Viu
FEATURE_INDIRECT_IS_ENABLED|5.031009||Viu
FEATURE_ISA_BIT|5.031007||Viu
FEATURE_ISA_IS_ENABLED|5.031007||Viu
FEATURE_IS_ENABLED_MASK|5.031006||Viu
FEATURE_MYREF_BIT|5.031006||Viu
FEATURE_MYREF_IS_ENABLED|5.025003||Viu
FEATURE_POSTDEREF_QQ_BIT|5.031006||Viu
FEATURE_POSTDEREF_QQ_IS_ENABLED|5.019005||Viu
FEATURE_REFALIASING_BIT|5.031006||Viu
FEATURE_REFALIASING_IS_ENABLED|5.021005||Viu
FEATURE_SAY_BIT|5.031006||Viu
FEATURE_SAY_IS_ENABLED|5.015007||Viu
FEATURE_SIGNATURES_BIT|5.031006||Viu
FEATURE_SIGNATURES_IS_ENABLED|5.019009||Viu
FEATURE_STATE_BIT|5.031006||Viu
FEATURE_STATE_IS_ENABLED|5.015007||Viu
FEATURE___SUB___BIT|5.031006||Viu
FEATURE___SUB___IS_ENABLED|5.015007||Viu
FEATURE_SWITCH_BIT|5.031006||Viu
FEATURE_SWITCH_IS_ENABLED|5.015007||Viu
FEATURE_UNICODE_BIT|5.031006||Viu
FEATURE_UNICODE_IS_ENABLED|5.015007||Viu
FEATURE_UNIEVAL_BIT|5.031006||Viu
FEATURE_UNIEVAL_IS_ENABLED|5.015007||Viu
feof|5.003007||Viu
ferror|5.003007||Viu
FETCHFEATUREBITSHH|5.031006||Viu
F_exp_amg|5.004000||Viu
FF_0DECIMAL|5.007001||Viu
FF_BLANK|5.003007||Viu
FF_CHECKCHOP|5.003007||Viu
FF_CHECKNL|5.003007||Viu
FF_CHOP|5.003007||Viu
FF_DECIMAL|5.003007||Viu
FF_END|5.003007||Viu
FF_FETCH|5.003007||Viu
FF_HALFSPACE|5.003007||Viu
FF_ITEM|5.003007||Viu
FF_LINEGLOB|5.003007||Viu
FF_LINEMARK|5.003007||Viu
FF_LINESNGL|5.009001||Viu
FF_LITERAL|5.003007||Viu
Fflush|5.003007||Viu
fflush|5.003007||Viu
FFLUSH_NULL|5.006000|5.006000|Vn
FF_MORE|5.003007||Viu
FF_NEWLINE|5.003007||Viu
FF_SKIP|5.003007||Viu
FF_SPACE|5.003007||Viu
fgetc|5.003007||Viu
fgetpos|5.003007||Viu
fgets|5.003007||Viu
FILE|5.003007||Viu
FILE_base|5.003007|5.003007|Vn
FILE_bufsiz|5.003007|5.003007|Vn
FILE_cnt|5.003007|5.003007|Vn
fileno|5.003007||Viu
FILE_ptr|5.003007|5.003007|Vn
FILL_ADVANCE_NODE_2L_ARG|5.021005||Viu
FILL_ADVANCE_NODE|5.005000||Viu
FILL_ADVANCE_NODE_ARG|5.005000||Viu
FILL_ADVANCE_NODE_ARGp|5.031009||Viu
FILL_NODE|5.029004||Viu
filter_add|5.003007|5.003007|
FILTER_DATA|5.003007||Viu
filter_del|5.003007|5.003007|u
filter_gets|5.005000||Viu
FILTER_ISREADER|5.003007||Viu
filter_read|5.003007|5.003007|
FILTER_READ|5.003007||Viu
finalize_op|5.015002||Viu
finalize_optree|5.015002||Vi
find_and_forget_pmops|5.009005||Viu
find_array_subscript|5.009004||Viu
find_beginning|5.005000||Viu
find_byclass|5.006000||Viu
find_default_stash|5.019004||Viu
find_first_differing_byte_pos|5.031007||Vniu
find_hash_subscript|5.009004||Viu
find_in_my_stash|5.006001||Viu
find_lexical_cv|5.019001||Viu
find_next_masked|5.027009||Vniu
find_runcv|5.008001|5.008001|
FIND_RUNCV_level_eq|5.017002||Viu
FIND_RUNCV_padid_eq|5.017004||Viu
find_runcv_where|5.017002||Viu
multideref_stringify|5.021009||cViu
MULTILINE_PAT_MOD|5.009005||Viu
MULTIPLICITY|5.006000|5.006000|Vn
MUTABLE_AV|5.010001|5.010001|p
MUTABLE_CV|5.010001|5.010001|p
MUTABLE_GV|5.010001|5.010001|p
MUTABLE_HV|5.010001|5.010001|p
MUTABLE_IO|5.010001|5.010001|p
MUTABLE_PTR|5.010001|5.003007|p
MUTABLE_SV|5.010001|5.003007|p
MUTEX_DESTROY|5.005000||Viu
MUTEX_INIT|5.005000||Viu
MUTEX_INIT_NEEDS_MUTEX_ZEROED|5.005003||Viu
MUTEX_LOCK|5.005000||Viu
MUTEX_UNLOCK|5.005000||Viu
mXPUSHi|5.009002|5.003007|p
mXPUSHn|5.009002|5.003007|p
mXPUSHp|5.009002|5.003007|p
mXPUSHs|5.010001|5.003007|p
mXPUSHu|5.009002|5.003007|p
my|5.011000||Viu
my_atof2|5.029000||cVu
my_atof3|5.029000||cVu
my_atof|5.006000|5.006000|
my_attrs|5.006000||Viu
my_binmode|5.006000||Viu
my_bytes_to_utf8|5.021009||Vniu
my_chsize|5.003007||Vu
my_clearenv|5.009003||Viu
MY_CXT|5.009000|5.009000|p
MY_CXT_CLONE|5.009002|5.009000|p
MY_CXT_INDEX|5.009005||Viu
MY_CXT_INIT|5.009000|5.009000|p
my_cxt_init|5.010000|5.010000|u
MY_CXT_INIT_ARG|5.013005||Viu
MY_CXT_INIT_INTERP|5.009003||Viu
my_dirfd|5.009005|5.009005|nu
my_exit|5.003007|5.003007|
my_exit_jump|5.005000||Viu
my_failure_exit|5.004000|5.004000|u
my_fflush_all|5.006000|5.006000|u
my_fork|5.007003|5.007003|nu
my_kid|5.006000||Viu
my_lstat|5.013003||Viu
my_lstat_flags|5.013003||cViu
my_memrchr|5.027006||Vniu
my_mkostemp_cloexec|||niu
my_mkostemp|||niu
my_mkstemp_cloexec|||niu
my_mkstemp|||niu
my_nl_langinfo|5.027006||Vniu
my_pclose|5.003007|5.003007|u
my_popen|5.003007|5.003007|u
my_popen_list|5.007001|5.007001|u
my_setenv|5.003007|5.003007|
my_snprintf|5.009004|5.003007|pvn
my_socketpair|5.007003|5.007003|nu
my_sprintf|5.009003|5.003007|pdn
my_stat|5.013003||Viu
my_stat_flags|5.013003||cViu
my_strerror|5.021001||Viu
my_strftime|5.007002|5.007002|
my_strlcat|5.009004|5.003007|pn
my_strlcpy|5.009004|5.003007|pn
my_strnlen|5.027006|5.003007|pn
my_strtod|5.029010|5.029010|n
my_unexec|5.003007||Viu
my_vsnprintf|5.009004|5.009004|n
N0|5.029001||Viu
N10|5.029001||Viu
N11|5.029001||Viu
N1|5.029001||Viu
N2|5.029001||Viu
N3|5.029001||Viu
N4|5.029001||Viu
N5|5.029001||Viu
N6|5.029001||Viu
N7|5.029001||Viu
N8|5.029001||Viu
N9|5.029001||Viu
NAN_COMPARE_BROKEN|5.021005||Viu
NANYOFM|5.029005||Viu
NATIVE8_TO_UNI|5.011000||Viu
NATIVE_BYTE_IS_INVARIANT|5.019004||Viu
NATIVE_SKIP|5.019004||Viu
NATIVE_TO_ASCII|5.007001||Viu
NATIVE_TO_I8|5.015006||Viu
NATIVE_TO_LATIN1|5.019004|5.003007|p
NATIVE_TO_NEED|5.019004||dcVnu
NATIVE_TO_UNI|5.007001|5.003007|p
NATIVE_TO_UTF|5.007001||Viu
NATIVE_UTF8_TO_I8|5.019004||Viu
nBIT_MASK|5.033001||Viu
nBIT_UMAX|5.033001||Viu
NBOUND|5.003007||Viu
NBOUNDA|5.013009||Viu
NBOUNDL|5.004000||Viu
NBOUNDU|5.013009||Viu
NBSP_NATIVE|5.021001||Viu
NBSP_UTF8|5.021001||Viu
NDBM_H_USES_PROTOTYPES|5.031006|5.031006|Vn
NDEBUG|5.021007||Viu
NEED_PTHREAD_INIT|5.005000||Viu
need_utf8|5.009003||Vniu
NEED_VA_COPY|5.007001|5.007001|Vn
NEGATIVE_INDICES_VAR|5.008001||Viu
Netdb_hlen_t|5.005000|5.005000|Vn
Netdb_host_t|5.005000|5.005000|Vn
Netdb_name_t|5.005000|5.005000|Vn
Netdb_net_t|5.005000|5.005000|Vn
NETDB_R_OBSOLETE|5.008000||Viu
New|5.003007||Viu
newANONATTRSUB|5.006000|5.006000|u
newANONHASH|5.003007|5.003007|u
newANONLIST|5.003007|5.003007|u
newANONSUB|5.003007|5.003007|u
newASSIGNOP|5.003007|5.003007|
newATTRSUB|5.006000|5.006000|
newATTRSUB_x|5.019008||cVi
newAV|5.003007|5.003007|
newAVREF|5.003007|5.003007|u
PERLDB_NAMEEVAL|5.006000||Viu
PERLDB_NOOPT|5.004002||Viu
PERLDB_SAVESRC|5.010001||Viu
PERLDB_SAVESRC_INVALID|5.010001||Viu
PERLDB_SAVESRC_NOSUBS|5.010001||Viu
PERLDB_SINGLE|5.004002||Viu
PERLDB_SUB|5.004002||Viu
PERLDB_SUBLINE|5.004002||Viu
PERLDB_SUB_NN|5.004005||Viu
PERL_DEB2|5.021007||Viu
PERL_DEB|5.008001||Viu
PERL_DEBUG|5.008001||Viu
Perl_debug_log|5.003007||Viu
PERL_DEBUG_PAD|5.007003||Viu
PERL_DEBUG_PAD_ZERO|5.007003||Viu
PERL_DECIMAL_VERSION|5.019008||Viu
PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION|5.009003||Viu
perl_destruct|5.007003|5.007003|n
PerlDir_chdir|5.005000||Viu
PerlDir_close|5.005000||Viu
PerlDir_mapA|5.006000||Viu
PerlDir_mapW|5.006000||Viu
PerlDir_mkdir|5.005000||Viu
PerlDir_open|5.005000||Viu
PerlDir_read|5.005000||Viu
PerlDir_rewind|5.005000||Viu
PerlDir_rmdir|5.005000||Viu
PerlDir_seek|5.005000||Viu
PerlDir_tell|5.005000||Viu
PERL_DONT_CREATE_GVSV|5.009003||Viu
Perl_drand48|5.019004||Viu
Perl_drand48_init|5.019004||Viu
PERL_DRAND48_QUAD|5.019004||Viu
PERL_DTRACE_PROBE_ENTRY|5.023009||Viu
PERL_DTRACE_PROBE_FILE_LOADED|5.023009||Viu
PERL_DTRACE_PROBE_FILE_LOADING|5.023009||Viu
PERL_DTRACE_PROBE_OP|5.023009||Viu
PERL_DTRACE_PROBE_PHASE|5.023009||Viu
PERL_DTRACE_PROBE_RETURN|5.023009||Viu
PERL_EBCDIC_TABLES_H|5.027001||Viu
PERL_ENABLE_EXPERIMENTAL_REGEX_OPTIMISATIONS|5.009004||Viu
PERL_ENABLE_EXTENDED_TRIE_OPTIMISATION|5.009004||Viu
PERL_ENABLE_POSITIVE_ASSERTION_STUDY|5.009005||Viu
PERL_ENABLE_TRIE_OPTIMISATION|5.009004||Viu
PerlEnv_clearenv|5.006000||Viu
PerlEnv_ENVgetenv|5.006000||Viu
PerlEnv_ENVgetenv_len|5.006000||Viu
PerlEnv_free_childdir|5.006000||Viu
PerlEnv_free_childenv|5.006000||Viu
PerlEnv_get_childdir|5.006000||Viu
PerlEnv_get_childenv|5.006000||Viu
PerlEnv_get_child_IO|5.006000||Viu
PerlEnv_getenv|5.005000||Viu
PerlEnv_getenv_len|5.006000||Viu
PerlEnv_lib_path|5.005000||Viu
PerlEnv_os_id|5.006000||Viu
PerlEnv_putenv|5.005000||Viu
PerlEnv_sitelib_path|5.005000||Viu
PerlEnv_uname|5.005004||Viu
PerlEnv_vendorlib_path|5.006000||Viu
Perl_error_log|5.006000||Viu
Perl_eval_pv||5.003007|onu
Perl_eval_sv||5.003007|onu
PERL_EXIT_ABORT|5.019003|5.019003|
PERL_EXIT_DESTRUCT_END|5.007003|5.007003|
PERL_EXIT_EXPECTED|5.006000|5.006000|
PERL_EXIT_WARN|5.019003|5.019003|
Perl_exp|5.006000||Viu
PERL_FEATURE_H|5.029006||Viu
PERL_FILE_IS_ABSOLUTE|5.006000||Viu
PERL_FILTER_EXISTS|5.009005||Viu
Perl_floor|5.006000||Viu
PERL_FLUSHALL_FOR_CHILD|5.006000||Viu
Perl_fmod|5.006000||Viu
Perl_fp_class|5.007003||Viu
Perl_fp_class_denorm|5.007003||Viu
Perl_fp_class_inf|5.007003||Viu
Perl_fp_class_nan|5.007003||Viu
Perl_fp_class_ndenorm|5.007003||Viu
Perl_fp_class_ninf|5.007003||Viu
Perl_fp_class_nnorm|5.007003||Viu
Perl_fp_class_norm|5.007003||Viu
Perl_fp_class_nzero|5.007003||Viu
Perl_fp_class_pdenorm|5.007003||Viu
Perl_fp_class_pinf|5.007003||Viu
Perl_fp_class_pnorm|5.007003||Viu
Perl_fp_class_pzero|5.007003||Viu
Perl_fp_class_qnan|5.007003||Viu
Perl_fp_class_snan|5.007003||Viu
Perl_fp_class_zero|5.007003||Viu
PERL_FPU_INIT|5.007002||Viu
PERL_FPU_POST_EXEC|5.008001||Viu
PERL_FPU_PRE_EXEC|5.008001||Viu
perl_free|5.003007|5.003007|n
Perl_free_c_backtrace|5.021001||Viu
Perl_frexp|5.006000||Viu
PERL_FS_VER_FMT|5.006000||Viu
PERL_FS_VERSION|5.010001||Viu
PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||Viu
PERL_GET_CONTEXT|5.006000||Viu
PERL_GET_INTERP|5.006000||Viu
PERL_GET_THX|5.006000||Viu
PERL_GIT_UNCOMMITTED_CHANGES|5.033000||Viu
PERL_GIT_UNPUSHED_COMMITS|5.010001||Viu
PERL_GPROF_MONCONTROL|5.007002||Viu
PERL_HANDY_H|5.027001||Viu
PERL_HASH|5.003007|5.003007|p
PERL_HASH_DEFAULT_HvMAX|5.017011||Viu
PERL_HASH_FUNC|5.017006||Viu
PERL_HASH_FUNC_STADTX|5.027001||Viu
PERL_HASH_FUNC_ZAPHOD32|5.027001||Viu
PERL_HASH_INTERNAL|5.008002||Viu
PERL_HASH_ITER_BUCKET|5.018000||Viu
PERL_HASH_RANDOMIZE_KEYS|5.018000||Viu
PERL_HASH_SEED|5.008001||Viu
PERL_HASH_SEED_BYTES|5.017006||Viu
PERL_HASH_SEED_STATE|5.027001||Viu
PERL_HASH_STATE_BYTES|5.027001||Viu
PERL_HASH_USE_SBOX32_ALSO|5.027001||Viu
PERL_HASH_WITH_SEED|5.021001||Viu
PERL_HASH_WITH_STATE|5.027001||Viu
PERL_HV_ALLOC_AUX_SIZE|5.019010||Viu
PERL_HV_ARRAY_ALLOC_BYTES|5.006000||Viu
PERL___I|5.009005||Viu
PERL_IMPLICIT_CONTEXT|5.006000||Viu
PERL_INC_VERSION_LIST|5.033000|5.033000|Vn
Perl_internal_drand48|5.027004||Viu
PERL_INTERPRETER_SIZE_UPTO_MEMBER|5.010000||Viu
PERL_INT_MAX|5.003007|5.003007|p
PERL_INT_MIN|5.003007|5.003007|p
PERL_INVLIST_INLINE_H|5.029006||Viu
PerlIO|5.003007||Viu
PerlIO_apply_layers|5.007001|5.007001|
PerlIOArg|5.007001||Viu
PerlIOBase|5.007001||Viu
PerlIO_binmode|5.007001|5.007001|
PERLIOBUF_DEFAULT_BUFSIZ|5.013007||Viu
PerlIO_canset_cnt|5.003007|5.003007|n
PerlIO_clearerr|5.007003|5.007003|
PerlIO_close|5.007003|5.007003|
PerlIO_context_layers|5.009004|5.009004|u
PerlIO_debug|5.007001|5.007001|
PERLIO_DUP_CLONE|5.007003||Viu
PERLIO_DUP_FD|5.007003||Viu
PerlIO_eof|5.007003|5.007003|
PerlIO_error|5.007003|5.007003|
PerlIO_exportFILE|5.003007|5.003007|n
PERLIO_F_APPEND|5.007001||Viu
PerlIO_fast_gets|5.003007|5.003007|n
PERLIO_F_CANREAD|5.007001||Viu
PERLIO_F_CANWRITE|5.007001||Viu
PERLIO_F_CLEARED|5.013008||Viu
PERLIO_F_CRLF|5.007001||Viu
PerlIO_fdopen|5.003007|5.003007|n
PERLIO_F_EOF|5.007001||Viu
PERLIO_F_ERROR|5.007001||Viu
PERLIO_F_FASTGETS|5.007001||Viu
PerlIO_fileno|5.007003|5.007003|
PerlIO_fill|5.007003|5.007003|u
PerlIO_findFILE|5.003007|5.003007|n
PERLIO_F_LINEBUF|5.007001||Viu
PerlIO_flush|5.007003|5.007003|
PERLIO_F_NOTREG|5.008001||Viu
PERLIO_F_OPEN|5.007001||Viu
PERLIO_F_RDBUF|5.007001||Viu
PERLIO_F_TEMP|5.007001||Viu
PERLIO_F_TRUNCATE|5.007001||Viu
PERLIO_F_TTY|5.007001||Viu
PERLIO_F_UNBUF|5.007001||Viu
PERLIO_FUNCS_CAST|5.009003|5.007001|p
PERLIO_FUNCS_DECL|5.009003|5.009003|pV
PERLIO_F_UTF8|5.007001||Viu
PERLIO_F_WRBUF|5.007001||Viu
PerlIO_get_base|5.007003|5.007003|
PerlIO_get_bufsiz|5.007003|5.007003|
PerlIO_getc|5.003007|5.003007|n
PerlIO_get_cnt|5.007003|5.007003|
PerlIO_getpos|5.003007|5.003007|n
PerlIO_get_ptr|5.007003|5.007003|
PERLIO_H|5.027001||Viu
PerlIO_has_base|5.003007|5.003007|n
PerlIO_has_cntptr|5.003007|5.003007|n
PerlIO_importFILE|5.003007|5.003007|n
PERLIO_INIT|5.009005||Viu
PERLIO_K_BUFFERED|5.007001||Viu
PERLIO_K_CANCRLF|5.007001||Viu
PERLIO_K_DESTRUCT|5.007001||Viu
PERLIO_K_DUMMY|5.007001||Viu
PERLIO_K_FASTGETS|5.007001||Viu
PERLIO_K_MULTIARG|5.007003||Viu
PERLIO_K_RAW|5.007001||Viu
PERLIO_K_UTF8|5.007001||Viu
PERLIO_LAYERS|5.007001||Viu
PERLIOL_H|5.027001||Viu
PerlIONext|5.007001||Viu
PERLIO_NOT_STDIO|5.003007||Viu
PerlIO_open|5.003007|5.003007|n
PerlIO_printf|5.006000|5.003007|
PerlIO_putc|5.003007|5.003007|n
PerlIO_puts|5.003007|5.003007|n
PerlIO_read|5.007003|5.007003|
PerlIO_releaseFILE|5.003007|5.003007|n
PerlIO_reopen|5.003007|5.003007|
PerlIO_restore_errno|5.021006||cViu
PerlIO_rewind|5.003007|5.003007|n
PerlIO_save_errno|5.021006||cViu
PERL_REENTR_USING_GMTIME_R|5.031010||Viu
PERL_REENTR_USING_LOCALTIME_R|5.031010||Viu
PERL_REENTR_USING_READDIR64_R|5.031010||Viu
PERL_REENTR_USING_READDIR_R|5.031010||Viu
PERL_REENTR_USING_SETGRENT_R|5.031010||Viu
PERL_REENTR_USING_SETHOSTENT_R|5.031010||Viu
PERL_REENTR_USING_SETLOCALE_R|5.031010||Viu
PERL_REENTR_USING_SETNETENT_R|5.031010||Viu
PERL_REENTR_USING_SETPROTOENT_R|5.031010||Viu
PERL_REENTR_USING_SETPWENT_R|5.031010||Viu
PERL_REENTR_USING_SETSERVENT_R|5.031010||Viu
PERL_REENTR_USING_STRERROR_R|5.031010||Viu
PERL_REENTR_USING_TMPNAM_R|5.031010||Viu
PERL_REENTR_USING_TTYNAME_R|5.031010||Viu
PERL_REGCHARCLASS_H|5.027001||Viu
PERL_REGCOMP_H|5.029006||Viu
PERL_REGMATCH_SLAB_SLOTS|5.009004||Viu
PERL_RELOCATABLE_INC|5.017002|5.017002|Vn
PERL_REVISION|5.006000|5.006000|d
perl_run|5.003007|5.003007|n
PERL_RVS_TO_DECIMAL|5.033000||Viu
Perl_safesysmalloc_size|5.010001||Viu
PERL_SAWAMPERSAND|5.017010||Viu
PERL_SCAN_ALLOW_MEDIAL_UNDERSCORES|5.031009||Viu
PERL_SCAN_ALLOW_UNDERSCORES|5.007003|5.003007|p
PERL_SCAN_DISALLOW_PREFIX|5.007003|5.003007|p
PERL_SCAN_GREATER_THAN_UV_MAX|5.007003|5.003007|p
PERL_SCAN_NOTIFY_ILLDIGIT|5.031008||Viu
PERL_SCAN_SILENT_ILLDIGIT|5.008001|5.003007|p
PERL_SCAN_SILENT_NON_PORTABLE|5.015001||Viu
PERL_SCAN_SILENT_OVERFLOW|5.031009||Viu
PERL_SCAN_TRAILING|5.021002|5.021002|
PERL_SCNfldbl|5.006001|5.006001|Vn
PERL_SCRIPT_MODE|5.004005||Viu
PERL_SEEN_HV_FUNC_H|5.017010||Viu
PERL_SEEN_HV_MACRO_H|5.027001||Viu
PERL_SET_CONTEXT|5.006000||Viu
PERL_SET_INTERP|5.006000||Viu
Perl_setlocale|5.027002|5.027002|n
PERL_SET_PHASE|5.015001||Viu
PERL_SET_THX|5.006000||Viu
Perl_sharepvn|5.006000||Viu
PERL_SHORT_MAX|5.003007|5.003007|p
PERL_SHORT_MIN|5.003007|5.003007|p
PERLSI_DESTROY|5.005000||Viu
PERLSI_DIEHOOK|5.005000||Viu
PERL_SIGNALS_UNSAFE_FLAG|5.008001|5.003007|p
Perl_signbit|5.009005|5.009005|xn
PERLSI_MAGIC|5.005000||Viu
PERLSI_MAIN|5.005000||Viu
PERLSI_MULTICALL|5.023000||Viu
Perl_sin|5.006000||Viu
Perl_sinh|5.021004||Viu
PerlSIO_canset_cnt|5.007001||Viu
PerlSIO_clearerr|5.007001||Viu
PerlSIO_fast_gets|5.007001||Viu
PerlSIO_fclose|5.007001||Viu
PerlSIO_fdopen|5.007001||Viu
PerlSIO_fdupopen|5.007001||Viu
PerlSIO_feof|5.007001||Viu
PerlSIO_ferror|5.007001||Viu
PerlSIO_fflush|5.007001||Viu
PerlSIO_fgetc|5.007001||Viu
PerlSIO_fgetpos|5.007001||Viu
PerlSIO_fgets|5.007001||Viu
PerlSIO_fileno|5.007001||Viu
PerlSIO_fopen|5.007001||Viu
PerlSIO_fputc|5.007001||Viu
PerlSIO_fputs|5.007001||Viu
PerlSIO_fread|5.007001||Viu
PerlSIO_freopen|5.007001||Viu
PerlSIO_fseek|5.007001||Viu
PerlSIO_fsetpos|5.007001||Viu
PerlSIO_ftell|5.007001||Viu
PerlSIO_fwrite|5.007001||Viu
PerlSIO_get_base|5.007001||Viu
PerlSIO_get_bufsiz|5.007001||Viu
PerlSIO_get_cnt|5.007001||Viu
PerlSIO_get_ptr|5.007001||Viu
PerlSIO_has_base|5.007001||Viu
PerlSIO_has_cntptr|5.007001||Viu
PerlSIO_init|5.007001||Viu
PerlSIO_printf|5.007001||Viu
PerlSIO_rewind|5.007001||Viu
PerlSIO_setbuf|5.007001||Viu
PerlSIO_set_cnt|5.007001||Viu
PerlSIO_setlinebuf|5.007001||Viu
PerlSIO_set_ptr|5.007001||Viu
PerlSIO_setvbuf|5.007001||Viu
PerlSIO_stderr|5.007001||Viu
PerlSIO_stdin|5.007001||Viu
PerlSIO_stdout|5.007001||Viu
PerlSIO_stdoutf|5.007001||Viu
PerlSIO_tmpfile|5.007001||Viu
PerlSIO_ungetc|5.007001||Viu
PERLSI_OVERLOAD|5.005000||Viu
PerlSIO_vprintf|5.007001||Viu
PERL_SIPHASH_FNC|5.025008||Viu
PERLSI_REGCOMP|5.031010||Viu
PERLSI_REQUIRE|5.005000||Viu
PERLSI_SIGNAL|5.005000||Viu
PERLSI_SORT|5.005000||Viu
PERLSI_UNDEF|5.005000||Viu
PERLSI_UNKNOWN|5.005000||Viu
PERLSI_WARNHOOK|5.005000||Viu
PERL_SMALL_MACRO_BUFFER|5.023008||Viu
PERL_SNPRINTF_CHECK|5.021002||Viu
PerlSock_accept|5.005000||Viu
PerlSock_accept_cloexec|5.027008||Viu
PerlSock_bind|5.005000||Viu
PerlSock_closesocket|5.006000||Viu
PerlSock_connect|5.005000||Viu
PerlSock_endhostent|5.005000||Viu
PerlSock_endnetent|5.005000||Viu
PerlSock_endprotoent|5.005000||Viu
PerlSock_endservent|5.005000||Viu
PerlSock_gethostbyaddr|5.005000||Viu
PerlSock_gethostbyname|5.005000||Viu
PerlSock_gethostent|5.005000||Viu
PerlSock_gethostname|5.005000||Viu
PerlSock_getnetbyaddr|5.005000||Viu
PL_constpadix|5.021004||Viu
PL_copline||5.003007|ponu
PL_cop_seqmax|5.005000||Viu
PL_cryptseen|5.005000||Viu
PL_cshlen|5.005000||Viu
PL_curcop|5.004005|5.003007|p
PL_curcopdb|5.005000||Viu
PL_curlocales|5.027009||Viu
PL_curpad|5.005000|5.005000|x
PL_curpm|5.005000||Viu
PL_curpm_under|5.025007||Viu
PL_curstack|5.005000||Viu
PL_curstackinfo|5.005000||Viu
PL_curstash|5.004005|5.003007|p
PL_curstname|5.005000||Viu
PL_custom_op_descs|5.007003||Viu
PL_custom_op_names|5.007003||Viu
PL_custom_ops|5.013007||Viu
PL_cv_has_eval|5.009000||Viu
PL_dbargs|5.005000||Viu
PL_DBcontrol|5.021005||Viu
PL_DBcv|5.005000||Viu
PL_DBgv|5.005000||Viu
PL_DBline|5.005000||Viu
PL_DBsignal|5.005000|5.003007|poVnu
PL_DBsignal_iv|5.021005||Viu
PL_DBsingle|5.005000|5.003007|poV
PL_DBsingle_iv|5.021005||Viu
PL_DBsub|5.005000|5.003007|poV
PL_DBtrace|5.005000|5.003007|poV
PL_DBtrace_iv|5.021005||Viu
PL_debstash|5.005000|5.003007|poVnu
PL_debug|5.005000||Viu
PL_debug_pad|5.007003||Viu
PL_defgv|5.004005|5.003007|p
PL_def_layerlist|5.007003||Viu
PL_defoutgv|5.005000||Viu
PL_defstash|5.005000||Viu
PL_delaymagic|5.005000||Viu
PL_delaymagic_egid|5.015008||Viu
PL_delaymagic_euid|5.015008||Viu
PL_delaymagic_gid|5.015008||Viu
PL_delaymagic_uid|5.015008||Viu
PL_destroyhook|5.010000||Viu
PL_diehook|5.005000|5.003007|poVnu
PL_Dir|5.006000||Viu
PL_dirty|5.005000|5.003007|poVnu
PL_doswitches|5.005000||Viu
PL_dowarn|5.005000|5.003007|poV
PL_dumper_fd|5.009003||Viu
PL_dumpindent|5.006000||Viu
PL_dump_re_max_len|5.023008||Viu
PL_efloatbuf|5.006000||Viu
PL_efloatsize|5.006000||Viu
PL_E_FORMAT_PRECISION|5.029000||Viu
PL_encoding|5.007003||Viu
PL_endav|5.005000||Viu
PL_Env|5.006000||Viu
PL_envgv|5.005000||Viu
PL_errgv|5.004005|5.003007|p
PL_error_count||5.003007|ponu
PL_errors|5.006000||Viu
PL_e_script|5.005000||Viu
PL_eval_root|5.005000||Viu
PL_evalseq|5.005000||Viu
PL_eval_start|5.005000||Viu
PL_exit_flags|5.006000|5.006000|
PL_exitlist|5.005000||Viu
PL_exitlistlen|5.005000||Viu
PL_expect||5.003007|ponu
PL_fdpid|5.005000||Viu
PL_filemode|5.005000||Viu
PL_firstgv|5.005000||Viu
PL_forkprocess|5.005000||Viu
PL_formtarget|5.005000||Viu
PL_GCB_invlist|5.021009||Viu
PL_generation|5.005000||Viu
PL_gensym|5.005000||Viu
PL_globalstash|5.005000||Viu
PL_globhook|5.015005||Viu
PL_hash_rand_bits|5.017010||Viu
PL_HASH_RAND_BITS_ENABLED|5.018000||Viu
PL_hash_rand_bits_enabled|5.018000||Viu
PL_HasMultiCharFold|5.017005||Viu
PL_hexdigit||5.003007|pn
PL_hintgv|5.005000||Viu
PL_hints|5.005000|5.003007|poVnu
PL_hv_fetch_ent_mh|5.005000||Viu
PL_incgv|5.005000||Viu
PL_in_clean_all|5.005000||Viu
PL_in_clean_objs|5.005000||Viu
PL_in_eval|5.005000||Viu
PL_initav|5.005000||Viu
PL_in_load_module|5.008001||Viu
PL_in_my||5.003007|ponu
PL_in_my_stash||5.005000|ponu
PL_inplace|5.005000||Viu
PL_in_some_fold|5.029007||Viu
PL_internal_random_state|5.027004||Viu
PL_in_utf8_COLLATE_locale|5.025002||Viu
PL_in_utf8_CTYPE_locale|5.019009||Viu
PL_in_utf8_turkic_locale|5.029008||Viu
PL_isarev|5.009005||Viu
PL_keyword_plugin|5.011002|5.011002|x
PL_known_layers|5.007003||Viu
PL_langinfo_buf|5.027004||Viu
PL_langinfo_bufsize|5.027004||Viu
PL_lastfd|5.005000||Viu
PL_lastgotoprobe|5.005000||Viu
PL_last_in_gv|5.005000||Vi
PL_laststatval|5.005000|5.003007|poVnu
PL_laststype|5.005000||Viu
PL_Latin1|5.015008||Viu
PL_LB_invlist|5.023007||Viu
PL_lc_numeric_mutex_depth|5.027009||Viu
PL_lex_state||5.003007|ponu
PL_lex_stuff||5.003007|ponu
PL_linestr||5.003007|ponu
PL_LIO|5.006000||Viu
PL_locale_utf8ness|5.027009||Viu
PL_localizing|5.005000||Viu
PL_localpatches|5.005000||Viu
pTHX_5|5.009003||Viu
pTHX_6|5.009003||Viu
pTHX_7|5.009003||Viu
pTHX_8|5.009003||Viu
pTHX_9|5.009003||Viu
pTHX__FORMAT|5.009002||Viu
pTHX_FORMAT|5.009002||Viu
pTHXo|5.006000||Viu
pTHX__VALUE|5.009002||Viu
pTHX_VALUE|5.009002||Viu
pTHXx|5.006000||Viu
PTR2IV|5.006000|5.003007|p
PTR2nat|5.009003|5.003007|p
PTR2NV|5.006000|5.003007|p
PTR2ul|5.007001|5.003007|p
PTR2UV|5.006000|5.003007|p
Ptrdiff_t|5.029003||Viu
ptr_hash|5.017010||Vniu
PTRSIZE|5.005000|5.005000|Vn
ptr_table_clear|5.009005|5.009005|du
ptr_table_fetch|5.009005|5.009005|u
ptr_table_find|5.009004||Vniu
ptr_table_free|5.009005|5.009005|u
ptr_table_new|5.009005|5.009005|u
ptr_table_split|5.009005|5.009005|u
ptr_table_store|5.009005|5.009005|u
PTRV|5.006000|5.003007|pV
PUSHi|5.003007|5.003007|
PUSHMARK|5.003007|5.003007|
PUSHmortal|5.009002|5.003007|p
PUSH_MULTICALL|5.011000|5.011000|
PUSH_MULTICALL_FLAGS|5.018000||Viu
PUSHn|5.006000|5.003007|
PUSHp|5.003007|5.003007|
PUSHs|5.003007|5.003007|
push_scope|5.003007|5.003007|u
PUSHSTACK|5.005000||Viu
PUSHSTACKi|5.005000||Viu
PUSHSTACK_INIT_HWM|5.027002||Viu
PUSHTARG|5.003007||Viu
PUSHu|5.004000|5.003007|p
PUTBACK|5.003007|5.003007|
putc|5.003007||Viu
put_charclass_bitmap_innards|5.021004||Viu
put_charclass_bitmap_innards_common|5.023008||Viu
put_charclass_bitmap_innards_invlist|5.023008||Viu
put_code_point|5.021004||Viu
putc_unlocked|5.003007||Viu
putenv|5.005000||Viu
put_range|5.019009||Viu
putw|5.003007||Viu
pv_display|5.006000|5.003007|p
pv_escape|5.009004|5.003007|p
pv_pretty|5.009004|5.003007|p
pv_uni_display|5.007003|5.007003|
pWARN_ALL|5.006000||Viu
pWARN_NONE|5.006000||Viu
pWARN_STD|5.006000||Viu
PWGECOS|5.004005|5.004005|Vn
PWPASSWD|5.005000|5.005000|Vn
qerror|5.006000||cViu
QR_PAT_MODS|5.009005||Viu
QUAD_IS_INT|5.006000|5.006000|Vn
QUAD_IS___INT64|5.015003|5.015003|Vn
QUAD_IS_INT64_T|5.006000|5.006000|Vn
QUAD_IS_LONG|5.006000|5.006000|Vn
QUAD_IS_LONG_LONG|5.006000|5.006000|Vn
QUADKIND|5.006000|5.006000|Vn
quadmath_format_needed|5.021004||Vni
quadmath_format_valid|5.031007||Vni
Quad_t|5.003007|5.003007|Vn
QUESTION_MARK_CTRL|5.021001||Viu
RADIXCHAR|5.027010||Viu
RANDBITS|5.003007|5.003007|Vn
RANDOM_R_PROTO|5.008000|5.008000|Vn
Rand_seed_t|5.006000|5.006000|Vn
RANGE_INDICATOR|5.031007||Viu
rck_elide_nothing|5.032000||Viu
RD_NODATA|5.003007|5.003007|Vn
read|5.005000||Viu
readdir|5.005000||Viu
readdir64|5.009000||Viu
READDIR64_R_PROTO|5.008000|5.008000|Vn
READDIR_R_PROTO|5.008000|5.008000|Vn
READ_XDIGIT|5.017006|5.017006|
realloc|5.007002|5.007002|n
ReANY|5.017006||cVnu
re_compile|5.009005|5.009005|u
RE_COMPILE_RECURSION_INIT|5.029009||Viu
RE_COMPILE_RECURSION_LIMIT|5.029009||Viu
re_croak|||iu
recv|5.006000||Viu
recvfrom|5.005000||Viu
RE_DEBUG_COMPILE_DUMP|5.009004||Viu
RE_DEBUG_COMPILE_FLAGS|5.009005||Viu
RE_DEBUG_COMPILE_MASK|5.009004||Viu
RE_DEBUG_COMPILE_OPTIMISE|5.009004||Viu
RE_DEBUG_COMPILE_PARSE|5.009004||Viu
RE_DEBUG_COMPILE_TEST|5.021005||Viu
RE_DEBUG_COMPILE_TRIE|5.009004||Viu
RE_DEBUG_EXECUTE_INTUIT|5.009004||Viu
RE_DEBUG_EXECUTE_MASK|5.009004||Viu
RE_DEBUG_EXECUTE_MATCH|5.009004||Viu
RE_DEBUG_EXECUTE_TRIE|5.009004||Viu
RE_DEBUG_EXTRA_BUFFERS|5.009005||Viu
RE_DEBUG_EXTRA_DUMP_PRE_OPTIMIZE|5.031004||Viu
RE_DEBUG_EXTRA_GPOS|5.011000||Viu
RE_DEBUG_EXTRA_MASK|5.009004||Viu
RE_DEBUG_EXTRA_OFFDEBUG|5.009005||Viu
RE_DEBUG_EXTRA_OFFSETS|5.009004||Viu
RE_DEBUG_EXTRA_OPTIMISE|5.009005||Viu
RE_DEBUG_EXTRA_STACK|5.009005||Viu
RE_DEBUG_EXTRA_STATE|5.009004||Viu
RE_DEBUG_EXTRA_TRIE|5.009004||Viu
RE_DEBUG_EXTRA_WILDCARD|5.031010||Viu
RE_DEBUG_FLAG|5.009004||Viu
RE_DEBUG_FLAGS|5.009002||Viu
re_dup_guts|5.011000|5.011000|
reentrant_free|5.008000||cVu
reentrant_init|5.008000||cVu
REENTRANT_PROTO_B_B|5.008000||Viu
STADTX_HASH_H|5.027001||Viu
STADTX_K0_U64|5.027001||Viu
STADTX_K1_U64|5.027001||Viu
STADTX_K2_U32|5.027001||Viu
STADTX_K2_U64|5.027001||Viu
STADTX_K3_U32|5.027001||Viu
STADTX_K3_U64|5.027001||Viu
STADTX_K4_U32|5.027001||Viu
STADTX_K5_U32|5.027001||Viu
STADTX_SCRAMBLE64|5.027001||Viu
STADTX_STATIC_INLINE|5.027001||Viu
STANDARD_C|5.003007||Viu
STAR|5.003007||Viu
START_EXTERN_C|5.005000|5.003007|pV
start_glob|||xi
START_MY_CXT|5.010000|5.010000|p
STARTPERL|5.003007|5.003007|Vn
start_subparse|5.004000|5.003007|pu
StashHANDLER|5.007001||Viu
Stat|5.003007||Viu
stat|5.005000||Viu
STATIC|5.005000||Viu
STATIC_ASSERT_1|5.021007||Viu
STATIC_ASSERT_2|5.021007||Viu
STATIC_ASSERT_DECL|5.027001||Viu
STATIC_ASSERT_STMT|5.021007||Viu
Stat_t|5.004005||Viu
STATUS_ALL_FAILURE|5.004000||Viu
STATUS_ALL_SUCCESS|5.004000||Viu
STATUS_CURRENT|5.004000||Viu
STATUS_EXIT|5.009003||Viu
STATUS_EXIT_SET|5.009003||Viu
STATUS_NATIVE|5.004000||Viu
STATUS_NATIVE_CHILD_SET|5.009003||Viu
STATUS_UNIX|5.009003||Viu
STATUS_UNIX_EXIT_SET|5.009003||Viu
STATUS_UNIX_SET|5.009003||Viu
STDCHAR|5.003007|5.003007|Vn
stderr|5.003007||Viu
stdin|5.003007||Viu
STDIO_PTR_LVAL_SETS_CNT|5.007001|5.007001|Vn
STDIO_PTR_LVALUE|5.006000|5.006000|Vn
STDIO_STREAM_ARRAY|5.006000|5.006000|Vn
stdize_locale|5.007001||Viu
stdout|5.003007||Viu
stdoutf|5.005000||Viu
STD_PAT_MODS|5.009005||Viu
STD_PMMOD_FLAGS_CLEAR|5.013006||Viu
ST_INO_SIGN|5.015002|5.015002|Vn
ST_INO_SIZE|5.015002|5.015002|Vn
STMT_END|5.003007|5.003007|pV
STMT_START|5.003007|5.003007|pV
STOREFEATUREBITSHH|5.031006||Viu
STORE_LC_NUMERIC_FORCE_TO_UNDERLYING|5.021010|5.021010|
STORE_LC_NUMERIC_SET_STANDARD|5.027009||pViu
STORE_LC_NUMERIC_SET_TO_NEEDED|5.021010|5.021010|
STORE_LC_NUMERIC_SET_TO_NEEDED_IN|5.031003|5.031003|
STORE_NUMERIC_SET_STANDARD|5.027009||pViu
strBEGINs|5.027006||Viu
strEQ|5.003007|5.003007|
Strerror|5.003007||Viu
strerror|5.009000||Viu
STRERROR_R_PROTO|5.008000|5.008000|Vn
strGE|5.003007|5.003007|
strGT|5.003007|5.003007|
STRING|5.006000||Viu
STRINGIFY|5.003007|5.003007|Vn
STRINGl|5.031005||Viu
STRINGs|5.031005||Viu
strip_return|5.009003||Viu
strLE|5.003007|5.003007|
STR_LEN|5.006000||Viu
STRLEN|5.027001||Viu
STR_LENl|5.031005||Viu
STR_LENs|5.031005||Viu
strLT|5.003007|5.003007|
strNE|5.003007|5.003007|
strnEQ|5.003007|5.003007|
strnNE|5.003007|5.003007|
STR_SZ|5.006000||Viu
Strtod|5.029010|5.029010|n
Strtol|5.006000|5.006000|n
strtoll|5.006000||Viu
Strtoul|5.006000|5.006000|n
strtoull|5.006000||Viu
str_to_version|5.006000||cVu
StructCopy|5.003007|5.003007|V
STRUCT_OFFSET|5.004000||Viu
STRUCT_SV|5.007001||Viu
STR_WITH_LEN|5.009003|5.003007|pV
study_chunk|5.005000||Viu
sub_crush_depth|5.004000||Viu
sublex_done|5.005000||Viu
sublex_push|5.005000||Viu
sublex_start|5.005000||Viu
SUBST_TAINT_BOOLRET|5.013010||Viu
SUBST_TAINT_PAT|5.013010||Viu
SUBST_TAINT_REPL|5.013010||Viu
SUBST_TAINT_RETAINT|5.013010||Viu
SUBST_TAINT_STR|5.013010||Viu
SUBVERSION|5.003007||Viu
SUCCEED|5.003007||Viu
SUSPEND|5.005000||Viu
sv_2bool|5.013006||cV
sv_2bool_flags|5.013006||cV
sv_2bool_nomg|5.017002||Viu
sv_2cv|5.003007|5.003007|
sv_2io|5.003007|5.003007|
sv_2iuv_common|5.009004||Viu
sv_2iuv_non_preserve|5.007001||Viu
sv_2iv|5.009001||cVu
sv_2iv_flags|5.009001|5.009001|
sv_2mortal|5.003007|5.003007|
sv_2num|5.010000||xVi
sv_2nv|5.013001||Viu
sv_2nv_flags|5.013001|5.013001|
sv_2pv|5.005000||cVu
sv_2pvbyte|5.006000|5.003007|p
sv_2pvbyte_flags|5.031004|5.031004|
sv_2pvbyte_nolen|5.009003|5.003007|pocV
sv_2pv_flags|5.007002|5.003007|pocV
sv_2pv_nolen|5.009003|5.003007|pocV
UTF8_ALLOW_FE_FF|5.027009||Viu
UTF8_ALLOW_FFFF|5.007001||Viu
UTF8_ALLOW_LONG|5.007001||Viu
UTF8_ALLOW_LONG_AND_ITS_VALUE|5.025009||Viu
UTF8_ALLOW_NON_CONTINUATION|5.007001||Viu
UTF8_ALLOW_OVERFLOW|5.025009||Viu
UTF8_ALLOW_SHORT|5.007001||Viu
UTF8_ALLOW_SURROGATE|5.007001||Viu
UTF8_CHECK_ONLY|5.007001|5.007001|
UTF8_CHK_SKIP|5.031006|5.006000|p
UTF8_DISALLOW_ABOVE_31_BIT|5.023006||Viu
UTF8_DISALLOW_FE_FF|5.013009||Viu
UTF8_DISALLOW_ILLEGAL_C9_INTERCHANGE|5.025005|5.025005|
UTF8_DISALLOW_ILLEGAL_INTERCHANGE|5.013009|5.013009|
UTF8_DISALLOW_NONCHAR|5.013009|5.013009|
UTF8_DISALLOW_PERL_EXTENDED|5.027002|5.027002|
UTF8_DISALLOW_SUPER|5.013009|5.013009|
UTF8_DISALLOW_SURROGATE|5.013009|5.013009|
utf8_distance|5.006000|5.006000|
UTF8_EIGHT_BIT_HI|5.007001||Viu
UTF8_EIGHT_BIT_LO|5.007001||Viu
UTF8f|5.019001|5.003007|p
UTF8fARG|5.019002|5.003007|p
UTF8_GOT_ABOVE_31_BIT|5.025006||Viu
UTF8_GOT_CONTINUATION|5.025006||Viu
UTF8_GOT_EMPTY|5.025006||Viu
UTF8_GOT_LONG|5.025006||Viu
UTF8_GOT_NONCHAR|5.025006||Viu
UTF8_GOT_NON_CONTINUATION|5.025006||Viu
UTF8_GOT_OVERFLOW|5.025006||Viu
UTF8_GOT_PERL_EXTENDED|5.027002||Viu
UTF8_GOT_SHORT|5.025006||Viu
UTF8_GOT_SUPER|5.025006||Viu
UTF8_GOT_SURROGATE|5.025006||Viu
utf8_hop|5.006000|5.006000|n
utf8_hop_back|5.025007|5.025007|n
utf8_hop_forward|5.025007|5.025007|n
utf8_hop_safe|5.025007|5.025007|n
UTF8_IS_ABOVE_LATIN1|5.017004||Viu
UTF8_IS_ABOVE_LATIN1_START|5.023003||Viu
UTF8_IS_CONTINUATION|5.007001||Viu
UTF8_IS_CONTINUED|5.007001||Viu
UTF8_IS_DOWNGRADEABLE_START|5.007001||Viu
UTF8_IS_INVARIANT|5.007001|5.003007|p
UTF8_IS_NEXT_CHAR_DOWNGRADEABLE|5.017006||Viu
UTF8_IS_NONCHAR|5.023002|5.023002|
UTF8_IS_NONCHAR_GIVEN_THAT_NON_SUPER_AND_GE_PROBLEMATIC|5.013009||Viu
UTF8_IS_REPLACEMENT|5.017000||Viu
UTF8_IS_START|5.007001||Viu
UTF8_IS_START_base|5.031007||Viu
UTF8_IS_SUPER|5.023002|5.023002|
UTF8_IS_SURROGATE|5.023002|5.023002|
utf8_length|5.007001|5.007001|
UTF8_MAXBYTES|5.009002|5.006000|p
UTF8_MAXBYTES_CASE|5.009002|5.003007|p
UTF8_MAX_FOLD_CHAR_EXPAND|5.013009||Viu
UTF8_MAXLEN|5.006000||Viu
utf8_mg_len_cache_update|5.013003||Viu
utf8_mg_pos_cache_update|5.009004||Viu
utf8n_to_uvchr|5.007001|5.007001|n
utf8n_to_uvchr_error|5.025006|5.025006|n
utf8n_to_uvchr_msgs|5.027009|5.027009|n
_utf8n_to_uvchr_msgs_helper|5.029001||cVnu
utf8n_to_uvuni|5.007001||dcV
UTF8_SAFE_SKIP|5.029009|5.006000|p
UTF8SKIP|5.006000|5.006000|
UTF8_SKIP|5.023002|5.006000|p
utf8_to_bytes|5.006001|5.006001|x
utf8_to_uvchr|5.007001|5.006001|pd
utf8_to_uvchr_buf|5.015009|5.006001|p
utf8_to_uvchr_buf_helper|5.031004||cVu
utf8_to_uvuni|5.007001||dcV
utf8_to_uvuni_buf|5.015009||dcV
UTF8_TWO_BYTE_HI|5.011002||Viu
UTF8_TWO_BYTE_HI_nocast|5.011002||Viu
UTF8_TWO_BYTE_LO|5.011002||Viu
UTF8_TWO_BYTE_LO_nocast|5.011002||Viu
UTF8_WARN_ABOVE_31_BIT|5.023006||Viu
UTF8_WARN_FE_FF|5.013009||Viu
UTF8_WARN_ILLEGAL_C9_INTERCHANGE|5.025005|5.025005|
UTF8_WARN_ILLEGAL_INTERCHANGE|5.013009|5.013009|
UTF8_WARN_NONCHAR|5.013009|5.013009|
UTF8_WARN_PERL_EXTENDED|5.027002|5.027002|
UTF8_WARN_SUPER|5.013009|5.013009|
UTF8_WARN_SURROGATE|5.013009|5.013009|
UTF_ACCUMULATION_SHIFT|5.007001||Viu
UTF_CONTINUATION_MARK|5.007001||Viu
UTF_CONTINUATION_MASK|5.007001||Viu
UTF_IS_CONTINUATION_MASK|5.023006||Viu
UTF_MIN_ABOVE_LATIN1_BYTE|5.031006||Viu
UTF_MIN_START_BYTE|5.031006||Viu
UTF_START_MARK|5.007001||Viu
UTF_START_MASK|5.007001||Viu
UTF_TO_NATIVE|5.007001||Viu
utilize|5.003007||Viu
utime|5.005000||Viu
U_V|5.003007||Viu
UVCHR_IS_INVARIANT|5.019004|5.003007|p
UVCHR_SKIP|5.022000|5.003007|p
uvchr_to_utf8|5.007001|5.007001|
uvchr_to_utf8_flags|5.007003|5.007003|
uvchr_to_utf8_flags_msgs|5.027009|5.027009|
UV_DIG|5.006000||Viu
UVf|5.007001||Viu
UV_IS_QUAD|5.006000||Viu
UV_MAX|5.003007|5.003007|oVnu
UV_MAX_P1|5.007002||Viu
UV_MAX_P1_HALF|5.007002||Viu
UV_MIN|5.003007|5.003007|oVnu
UVof|5.006000|5.003007|p
uvoffuni_to_utf8_flags|5.027009||cV
uvoffuni_to_utf8_flags_msgs|5.027009||cVu
UVSIZE|5.006000|5.003007|poVn
UVTYPE|5.006000|5.003007|poVn
UVuf|5.006000|5.003007|p
uvuni_to_utf8|5.019004||cVu
uvuni_to_utf8_flags|5.007003||dcV
UVxf|5.006000|5.003007|p
UVXf|5.007001|5.007001|poVn
VAL_EAGAIN|5.003007|5.003007|Vn
validate_proto|5.019002||xcVi
WARN_REGEXP|5.006000|5.003007|p
WARN_RESERVED|5.006000|5.003007|p
WARN_SEMICOLON|5.006000|5.003007|p
WARN_SEVERE|5.006000|5.003007|p
WARN_SHADOW|5.027007|5.027007|
WARNshift|5.011001||Viu
WARN_SIGNAL|5.006000|5.003007|p
WARNsize|5.006000||Viu
WARN_SUBSTR|5.006000|5.003007|p
WARN_SURROGATE|5.013010|5.013010|
warn_sv|5.013001|5.003007|p
WARN_SYNTAX|5.006000|5.003007|p
WARN_SYSCALLS|5.019004|5.019004|
WARN_TAINT|5.006000|5.003007|p
WARN_THREADS|5.008000|5.003007|p
WARN_UNINITIALIZED|5.006000|5.003007|p
WARN_UNOPENED|5.006000|5.003007|p
WARN_UNPACK|5.006000|5.003007|p
WARN_UNTIE|5.006000|5.003007|p
WARN_UTF8|5.006000|5.003007|p
WARN_VOID|5.006000|5.003007|p
was_lvalue_sub|||ciu
watch|5.003007||Viu
WB_BREAKABLE|5.023008||Viu
WB_DQ_then_HL|5.023008||Viu
WB_Ex_or_FO_or_ZWJ_then_foo|5.025003||Viu
WB_HL_then_DQ|5.023008||Viu
WB_hs_then_hs|5.023008||Viu
WB_LE_or_HL_then_MB_or_ML_or_SQ|5.023008||Viu
WB_MB_or_ML_or_SQ_then_LE_or_HL|5.023008||Viu
WB_MB_or_MN_or_SQ_then_NU|5.023008||Viu
WB_NOBREAK|5.023008||Viu
WB_NU_then_MB_or_MN_or_SQ|5.023008||Viu
WB_RI_then_RI|5.025003||Viu
WEXITSTATUS|5.008001||Viu
whichsig|5.003007|5.003007|
whichsig_pv|5.015004|5.015004|
whichsig_pvn|5.015004|5.015004|
whichsig_sv|5.015004|5.015004|
WHILEM|5.003007||Viu
WHILEM_A_max|5.009005||Viu
WHILEM_A_max_fail|5.009005||Viu
WHILEM_A_min|5.009005||Viu
WHILEM_A_min_fail|5.009005||Viu
WHILEM_A_pre|5.009005||Viu
WHILEM_A_pre_fail|5.009005||Viu
WHILEM_B_max|5.009005||Viu
WHILEM_B_max_fail|5.009005||Viu
WHILEM_B_min|5.009005||Viu
WHILEM_B_min_fail|5.009005||Viu
WIDEST_UTYPE|5.015004|5.003007|p
WIFEXITED|5.008001||Viu
WIFSIGNALED|5.008001||Viu
WIFSTOPPED|5.008001||Viu
win32_croak_not_implemented|5.017006||Vniu
WIN32SCK_IS_STDSCK|5.007001||Viu
win32_setlocale|5.027006||Viu
withinCOUNT|5.031004||Viu
WITH_LC_NUMERIC_SET_TO_NEEDED|5.031003|5.031003|
WITH_LC_NUMERIC_SET_TO_NEEDED_IN|5.031003|5.031003|
with_queued_errors|5.013001||Viu
WNOHANG|5.008001||Viu
wrap_keyword_plugin|5.027006|5.027006|x
wrap_op_checker|5.015008|5.015008|
write|5.005000||Viu
write_to_stderr|5.008001||Viu
WSTOPSIG|5.008001||Viu
WTERMSIG|5.008001||Viu
WUNTRACED|5.008001||Viu
XCPT_CATCH|5.009002|5.003007|p
XCPT_RETHROW|5.009002|5.003007|p
XCPT_TRY_END|5.009002|5.003007|p
XCPT_TRY_START|5.009002|5.003007|p
XDIGIT_VALUE|5.019008||Viu
XHvTOTALKEYS|5.007003||Viu
xio_any|5.006001||Viu
xio_dirp|5.006001||Viu
xiv_iv|5.009003||Viu
xlv_targoff|5.019004||Viu
XopDISABLE|5.013007|5.013007|V
XOPd_xop_class|5.013007||Viu
XOPd_xop_desc|5.013007||Viu
XOPd_xop_name|5.013007||Viu
XOPd_xop_peep|5.013007||Viu
XopENABLE|5.013007|5.013007|V
XopENTRY|5.013007|5.013007|V
XopENTRYCUSTOM|5.019006|5.013007|V
XopENTRY_set|5.013007|5.013007|V
XopFLAGS|5.013007|5.013007|
XOPf_xop_class|5.013007||Viu
XOPf_xop_desc|5.013007||Viu
XOPf_xop_name|5.013007||Viu
XOPf_xop_peep|5.013007||Viu
XORSHIFT128_set|5.027001||Viu
XORSHIFT96_set|5.027001||Viu
XPUSHi|5.003007|5.003007|
XPUSHmortal|5.009002|5.003007|p
XPUSHn|5.006000|5.003007|
XPUSHp|5.003007|5.003007|
XPUSHs|5.003007|5.003007|
XPUSHTARG|5.003007||Viu
XPUSHu|5.004000|5.003007|p
XPUSHundef|5.006000||Viu
xpv_len|5.017006||Viu
XS|5.003007|5.003007|V
XSANY|5.003007||Viu
XS_APIVERSION_BOOTCHECK|5.013004|5.013004|
XS_APIVERSION_POPMARK_BOOTCHECK|5.021006||Viu
XS_APIVERSION_SETXSUBFN_POPMARK_BOOTCHECK|5.021006||Viu
xs_boot_epilog|5.021006||cViu
XS_BOTHVERSION_BOOTCHECK|5.021006||Viu
XS_BOTHVERSION_POPMARK_BOOTCHECK|5.021006||Viu
XS_BOTHVERSION_SETXSUBFN_POPMARK_BOOTCHECK|5.021006||Viu
XS_DYNAMIC_FILENAME|5.009004||Viu
XS_EXTERNAL|5.015002|5.015002|V
xs_handshake|||vcniu
XSINTERFACE_CVT|5.005000||Viu
XSINTERFACE_CVT_ANON|5.010000||Viu
XSINTERFACE_FUNC|5.005000||Viu
XSINTERFACE_FUNC_SET|5.005000||Viu
XS_INTERNAL|5.015002|5.015002|V
XSprePUSH|5.006000|5.003007|poVnu
XSPROTO|5.010000|5.003007|pV
XSRETURN|5.003007|5.003007|p
XSRETURN_EMPTY|5.003007|5.003007|
XSRETURN_IV|5.003007|5.003007|
XSRETURN_NO|5.003007|5.003007|
XSRETURN_NV|5.006000|5.003007|
XSRETURN_PV|5.003007|5.003007|
XSRETURN_PVN|5.006000||Viu
XSRETURN_UNDEF|5.003007|5.003007|
XSRETURN_UV|5.008001|5.003007|p
XSRETURN_YES|5.003007|5.003007|
XS_SETXSUBFN_POPMARK|5.021006||Viu
XST_mIV|5.003007|5.003007|
XST_mNO|5.003007|5.003007|
XST_mNV|5.006000|5.003007|
XST_mPV|5.003007|5.003007|
XST_mPVN|5.006000||Viu
XST_mUNDEF|5.003007|5.003007|
XST_mUV|5.008001|5.003007|p
XST_mYES|5.003007|5.003007|
XS_VERSION|5.003007|5.003007|
XS_VERSION_BOOTCHECK|5.003007|5.003007|
xs_version_bootcheck|||iu
XTENDED_PAT_MOD|5.009005||Viu
xuv_uv|5.009003||Viu
YESEXPR|5.027010||Viu
YESSTR|5.027010||Viu
YIELD|5.005000||Viu
YYDEBUG|5.025006||Viu
YYEMPTY|5.009005||Viu
yyerror|5.003007||Viu
yyerror_pv|5.016000||Viu
yyerror_pvn|5.016000||Viu
yylex|5.003007||cViu
yyparse|5.003007||Viu
yyquit|5.025010||Viu
YYSTYPE_IS_DECLARED|5.009001||Viu
YYSTYPE_IS_TRIVIAL|5.009001||Viu
YYTOKENTYPE|5.009001||Viu
yyunlex|5.013005||Viu
yywarn|5.003007||Viu
ZAPHOD32_FINALIZE|5.027001||Viu
ZAPHOD32_MIX|5.027001||Viu
ZAPHOD32_SCRAMBLE32|5.027001||Viu
ZAPHOD32_STATIC_INLINE|5.027001||Viu
ZAPHOD32_WARN2|5.027001||Viu
ZAPHOD32_WARN3|5.027001||Viu
ZAPHOD32_WARN4|5.027001||Viu
ZAPHOD32_WARN5|5.027001||Viu
ZAPHOD32_WARN6|5.027001||Viu
Zero|5.003007|5.003007|
ZeroD|5.009002|5.003007|p
);
if (exists $opt{'list-unsupported'}) {
my $f;
for $f (sort dictionary_order keys %API) {
next if $API{$f}{core_only};
next if $API{$f}{beyond_depr};
next if $API{$f}{inaccessible};
next if $API{$f}{experimental};
next unless $API{$f}{todo};
next if int_parse_version($API{$f}{todo}) <= $int_min_perl;
my $repeat = 40 - length($f);
$repeat = 0 if $repeat < 0;
print "$f ", '.'x $repeat, " ", format_version($API{$f}{todo}), "\n";
}
exit 0;
}
# Scan for hints, possible replacement candidates, etc.
my(%replace, %need, %hints, %warnings, %depends);
my $replace = 0;
my($hint, $define, $function);
sub find_api
{
BEGIN { 'warnings'->unimport('uninitialized') if "$]" > '5.006' }
my $code = shift;
$code =~ s{
/ (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*)
| "[^"\\]*(?:\\.[^"\\]*)*"
| '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx;
grep { exists $API{$_} } $code =~ /(\w+)/mg;
}
while (<DATA>) {
if ($hint) {
# Here, we are in the middle of accumulating a hint or warning.
my $end_of_hint = 0;
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 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 || 0;
}
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;
$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)
#define D_PPP_RELEASE_DATE 1602806400 /* 2020-10-16 */
#if ! defined(PERL_REVISION) && ! defined(PERL_VERSION_MAJOR)
# if ! defined(__PATCHLEVEL_H_INCLUDED__) \
&& ! ( defined(PATCHLEVEL) && defined(SUBVERSION))
# define PERL_PATCHLEVEL_H_IMPLICIT
# include <patchlevel.h>
# endif
# if ! defined(PERL_VERSION) \
&& ! defined(PERL_VERSION_MAJOR) \
&& ( ! defined(SUBVERSION) || ! defined(PATCHLEVEL) )
# include <could_not_find_Perl_patchlevel.h>
# endif
#endif
#ifdef PERL_VERSION_MAJOR
# define D_PPP_MAJOR PERL_VERSION_MAJOR
#elif defined(PERL_REVISION)
# define D_PPP_MAJOR PERL_REVISION
#else
# define D_PPP_MAJOR 5
#endif
#ifdef PERL_VERSION_MINOR
# define D_PPP_MINOR PERL_VERSION_MINOR
#elif defined(PERL_VERSION)
# define D_PPP_MINOR PERL_VERSION
#elif defined(PATCHLEVEL)
# define D_PPP_MINOR PATCHLEVEL
# define PERL_VERSION PATCHLEVEL /* back-compat */
#else
# error Could not find a source for PERL_VERSION_MINOR
#endif
#ifdef PERL_VERSION_PATCH
# define D_PPP_PATCH PERL_VERSION_PATCH
#elif defined(PERL_SUBVERSION)
# define D_PPP_PATCH PERL_SUBVERSION
#elif defined(SUBVERSION)
# define D_PPP_PATCH SUBVERSION
# define PERL_SUBVERSION SUBVERSION /* back-compat */
#else
# error Could not find a source for PERL_VERSION_PATCH
#endif
#if D_PPP_MAJOR < 5 || D_PPP_MAJOR == 6
# error Devel::PPPort works only on Perl 5, Perl 7, ...
#elif D_PPP_MAJOR != 5
/* Perl 7 and above: the old forms are deprecated, set up so that they
* assume Perl 5, and will make this look like 5.201.201.
*
* 201 is used so will be well above anything that would come from a 5
* series if we unexpectedly have to continue it, but still gives plenty of
* room, up to 255, of numbers that will fit into a byte in case there is
* something else unforeseen */
# undef PERL_REVISION
# undef PERL_VERSION
# undef PERL_SUBVERSION
# define D_PPP_REVISION 5
# define D_PPP_VERSION 201
# define D_PPP_SUBVERSION 201
# if (defined(__clang__) /* _Pragma here doesn't work with gcc */ \
&& ( (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L) \
|| defined(_STDC_C99) \
|| defined(__c99)))
# define D_PPP_STRINGIFY(x) #x
# define D_PPP_deprecate(xyz) _Pragma(D_PPP_STRINGIFY(GCC warning(D_PPP_STRINGIFY(xyz) " is deprecated")))
# define PERL_REVISION (D_PPP_REVISION D_PPP_deprecate(PERL_REVISION))
# define PERL_VERSION (D_PPP_REVISION D_PPP_deprecate(PERL_VERSION))
# define PERL_SUBVERSION (D_PPP_SUBVERSION D_PPP_deprecate(PERL_SUBVERSION))
# else
# define PERL_REVISION D_PPP_REVISION
# define PERL_VERSION D_PPP_REVISION
# define PERL_SUBVERSION D_PPP_SUBVERSION
# endif
#endif
/* Warning: PERL_PATCHLEVEL PATCHLEVEL SUBVERSION PERL_REVISION PERL_VERSION
* PERL_SUBVERSION PERL_BCDVERSION
*
* You should be using PERL_VERSION_xy(maj,min,ptch) instead of this, where xy
* is one of EQ, NE, LE, GT, LT, GE
*/
/* Replace PERL_PATCHLEVEL with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
/* Replace PATCHLEVEL with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
/* Replace SUBVERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
/* Replace PERL_REVISION with PERL_VERSION_xy(a,b,c) (where xy is EQ,LT,GT...) */
/* Replace PERL_VERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
/* Replace PERL_SUBVERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
/* Replace PERL_BCDVERSION with PERL_VERSION_xy(5,a,b) (where xy is EQ,LT,GT...) */
#define D_PPP_DEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10))
#define D_PPP_JNP_TO_BCD(j,n,p) ((D_PPP_DEC2BCD(j)<<24)|(D_PPP_DEC2BCD(n)<<12)|D_PPP_DEC2BCD(p))
#define PERL_BCDVERSION D_PPP_JNP_TO_BCD(D_PPP_MAJOR, \
D_PPP_MINOR, \
D_PPP_PATCH)
/* These differ from the versions outside D:P in using PERL_BCDVERSION instead
* of PERL_DECIMAL_VERSION. The formats printing in this module assume BCD, so
* always use it */
#undef PERL_VERSION_EQ
#undef PERL_VERSION_NE
#undef PERL_VERSION_LT
#undef PERL_VERSION_GE
#undef PERL_VERSION_LE
#undef PERL_VERSION_GT
#ifndef UVSIZE
# define UVSIZE IVSIZE
#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_Xpv Xpv
# 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
# define PL_mess_sv mess_sv
/* 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 it, 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
* doing. 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
#if (PERL_BCDVERSION <= 0x5003022)
# undef start_subparse
# if (PERL_BCDVERSION < 0x5003022)
#ifndef start_subparse
# define start_subparse(a, b) Perl_start_subparse()
#endif
# else
#ifndef start_subparse
# define start_subparse(a, b) Perl_start_subparse(b)
#endif
# endif
#if (PERL_BCDVERSION < 0x5003007)
foo
#endif
#endif
/* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */
#if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005)
/* And before that, we need to make sure this gets compiled for the functions
* that rely on it */
#define NEED_newCONSTSUB
#if defined(NEED_newCONSTSUB)
static CV * DPPP_(my_newCONSTSUB)(HV * stash, const char * name, SV * sv);
static
#else
extern CV * DPPP_(my_newCONSTSUB)(HV * stash, const char * name, SV * sv);
#endif
#if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL)
#ifdef newCONSTSUB
# undef newCONSTSUB
#endif
#define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c)
#define Perl_newCONSTSUB DPPP_(my_newCONSTSUB)
/* 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
CV *
DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv)
{
CV *cv;
U32 oldhints = PL_hints;
# define OpHAS_SIBLING(o) (cBOOL((o)->op_sibling))
#endif
#ifndef OpSIBLING
# define OpSIBLING(o) (0 + (o)->op_sibling)
#endif
#ifndef OpMORESIB_set
# define OpMORESIB_set(o, sib) ((o)->op_sibling = (sib))
#endif
#ifndef OpLASTSIB_set
# define OpLASTSIB_set(o, parent) ((o)->op_sibling = NULL)
#endif
#ifndef OpMAYBESIB_set
# define OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib))
#endif
#ifndef HEf_SVKEY
# define HEf_SVKEY -2
#endif
#if defined(DEBUGGING) && !defined(__COVERITY__)
#ifndef __ASSERT_
# define __ASSERT_(statement) assert(statement),
#endif
#else
#ifndef __ASSERT_
# define __ASSERT_(statement)
#endif
#endif
#ifndef WIDEST_UTYPE
# ifdef QUADKIND
# ifdef U64TYPE
# define WIDEST_UTYPE U64TYPE
# else
# define WIDEST_UTYPE unsigned Quad_t
# endif
# else
# define WIDEST_UTYPE U32
# endif
#endif
/* These could become provided if/when they become part of the public API */
#ifndef withinCOUNT
# define withinCOUNT(c, l, n) \
(((WIDEST_UTYPE) (((c)) - ((l) | 0))) <= (((WIDEST_UTYPE) ((n) | 0))))
#endif
#ifndef inRANGE
# define inRANGE(c, l, u) \
( (sizeof(c) == sizeof(U8)) ? withinCOUNT(((U8) (c)), (l), ((u) - (l))) \
: (sizeof(c) == sizeof(U32)) ? withinCOUNT(((U32) (c)), (l), ((u) - (l))) \
: (withinCOUNT(((WIDEST_UTYPE) (c)), (l), ((u) - (l)))))
#endif
/* The '| 0' part ensures a compiler error if c is not integer (like e.g., a
* pointer) */
#undef FITS_IN_8_BITS /* handy.h version uses a core-only constant */
#ifndef FITS_IN_8_BITS
# define FITS_IN_8_BITS(c) ( (sizeof(c) == 1) \
|| !(((WIDEST_UTYPE)((c) | 0)) & ~0xFF))
#endif
/* Create the macro for "is'macro'_utf8_safe(s, e)". For code points below
* 256, it calls the equivalent _L1 macro by converting the UTF-8 to code
* point. That is so that it can automatically get the bug fixes done in this
* file. */
#define D_PPP_IS_GENERIC_UTF8_SAFE(s, e, macro) \
(((e) - (s)) <= 0 \
? 0 \
: UTF8_IS_INVARIANT((s)[0]) \
? is ## macro ## _L1((s)[0]) \
: (((e) - (s)) < UTF8SKIP(s)) \
? 0 \
: UTF8_IS_DOWNGRADEABLE_START((s)[0]) \
/* The cast in the line below is only to silence warnings */ \
? is ## macro ## _L1((WIDEST_UTYPE) LATIN1_TO_NATIVE( \
UTF8_ACCUMULATE(NATIVE_UTF8_TO_I8((s)[0]) \
& UTF_START_MASK(2), \
(s)[1]))) \
: is ## macro ## _utf8(s))
/* Create the macro for "is'macro'_LC_utf8_safe(s, e)". For code points below
* 256, it calls the equivalent _L1 macro by converting the UTF-8 to code
* point. That is so that it can automatically get the bug fixes done in this
* file. */
#define D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, macro) \
(((e) - (s)) <= 0 \
? 0 \
: UTF8_IS_INVARIANT((s)[0]) \
? is ## macro ## _LC((s)[0]) \
: (((e) - (s)) < UTF8SKIP(s)) \
? 0 \
: UTF8_IS_DOWNGRADEABLE_START((s)[0]) \
/* The cast in the line below is only to silence warnings */ \
? is ## macro ## _LC((WIDEST_UTYPE) LATIN1_TO_NATIVE( \
UTF8_ACCUMULATE(NATIVE_UTF8_TO_I8((s)[0]) \
& UTF_START_MASK(2), \
(s)[1]))) \
: is ## macro ## _utf8(s))
/* A few of the early functions are broken. For these and the non-LC case,
* machine generated code is substituted. But that code doesn't work for
* locales. This is just like the above macro, but at the end, we call the
* macro we've generated for the above 255 case, which is correct since locale
* isn't involved. This will generate extra code to handle the 0-255 inputs,
* but hopefully it will be optimized out by the C compiler. But just in case
* it isn't, this macro is only used on the few versions that are broken */
#define D_PPP_IS_GENERIC_LC_UTF8_SAFE_BROKEN(s, e, macro) \
(((e) - (s)) <= 0 \
? 0 \
: UTF8_IS_INVARIANT((s)[0]) \
? is ## macro ## _LC((s)[0]) \
: (((e) - (s)) < UTF8SKIP(s)) \
? 0 \
# define isBLANK_utf8_safe(s,e) \
( ( LIKELY((e) > (s)) ) ? /* Machine generated */ \
( ( 0x09 == ((const U8*)s)[0] || 0x20 == ((const U8*)s)[0] ) ? 1 \
: ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ? \
( ( 0xC2 == ((const U8*)s)[0] ) ? \
( ( 0xA0 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xE1 == ((const U8*)s)[0] ) ? \
( ( ( 0x9A == ((const U8*)s)[1] ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xE2 == ((const U8*)s)[0] ) ? \
( ( 0x80 == ((const U8*)s)[1] ) ? \
( ( inRANGE(((const U8*)s)[2], 0x80, 0x8A ) || 0xAF == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( ( 0x81 == ((const U8*)s)[1] ) && ( 0x9F == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( ( ( 0xE3 == ((const U8*)s)[0] ) && ( 0x80 == ((const U8*)s)[1] ) ) && ( 0x80 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: 0 ) \
: 0 )
#endif
# elif 'A' == 193 && '^' == 95 /* EBCDIC 1047 */
#ifndef isBLANK_utf8_safe
# define isBLANK_utf8_safe(s,e) \
( ( LIKELY((e) > (s)) ) ? \
( ( 0x05 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1 \
: ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ? \
( ( 0x80 == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xBC == ((const U8*)s)[0] ) ? \
( ( ( 0x63 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 ) \
: ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x73 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: 0 ) \
: 0 )
#endif
# elif 'A' == 193 && '^' == 176 /* EBCDIC 037 */
#ifndef isBLANK_utf8_safe
# define isBLANK_utf8_safe(s,e) \
( ( LIKELY((e) > (s)) ) ? \
( ( 0x05 == ((const U8*)s)[0] || 0x40 == ((const U8*)s)[0] ) ? 1 \
: ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) ? \
( ( 0x78 == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? 2 : 0 ) \
: ( 0xBD == ((const U8*)s)[0] ) ? \
( ( ( 0x62 == ((const U8*)s)[1] ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( 0xCA == ((const U8*)s)[0] ) ? \
( ( 0x41 == ((const U8*)s)[1] ) ? \
( ( inRANGE(((const U8*)s)[2], 0x41, 0x4A ) || 0x51 == ((const U8*)s)[2] ) ? 3 : 0 )\
: ( 0x42 == ((const U8*)s)[1] ) ? \
( ( 0x56 == ((const U8*)s)[2] ) ? 3 : 0 ) \
: ( ( 0x43 == ((const U8*)s)[1] ) && ( 0x72 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: ( ( ( 0xCE == ((const U8*)s)[0] ) && ( 0x41 == ((const U8*)s)[1] ) ) && ( 0x41 == ((const U8*)s)[2] ) ) ? 3 : 0 )\
: 0 ) \
: 0 )
#endif
# else
# error Unknown character set
# endif
#ifndef isCNTRL_utf8_safe
# define isCNTRL_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, CNTRL)
#endif
#ifndef isDIGIT_utf8_safe
# define isDIGIT_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, DIGIT)
#endif
#ifndef isGRAPH_utf8_safe
# define isGRAPH_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, GRAPH)
#endif
# ifdef isIDCONT_utf8
#ifndef isIDCONT_utf8_safe
# define isIDCONT_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, IDCONT)
#endif
# else
#ifndef isIDCONT_utf8_safe
# define isIDCONT_utf8_safe(s,e) isWORDCHAR_utf8_safe(s,e)
#endif
# endif
#ifndef isIDFIRST_utf8_safe
# define isIDFIRST_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, IDFIRST)
#endif
#ifndef isLOWER_utf8_safe
# define isLOWER_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, LOWER)
#endif
#ifndef isPRINT_utf8_safe
# define isPRINT_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, PRINT)
#endif
# undef isPSXSPC_utf8_safe /* Use the modern definition */
#ifndef isPSXSPC_utf8_safe
# define isPSXSPC_utf8_safe(s,e) isSPACE_utf8_safe(s,e)
#endif
#ifndef isPUNCT_utf8_safe
# define isPUNCT_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, PUNCT)
#endif
#ifndef isSPACE_utf8_safe
# define isSPACE_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, SPACE)
#endif
#ifndef isUPPER_utf8_safe
# define isUPPER_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, UPPER)
#endif
# ifdef isWORDCHAR_utf8
#ifndef isWORDCHAR_utf8_safe
# define isWORDCHAR_utf8_safe(s,e) D_PPP_IS_GENERIC_UTF8_SAFE(s, e, WORDCHAR)
#endif
# else
#ifndef isWORDCHAR_utf8_safe
# define isWORDCHAR_utf8_safe(s,e) \
(isALPHANUMERIC_utf8_safe(s,e) || (*(s)) == '_')
#endif
# endif
/* This was broken before 5.12, and just use this instead of worrying about
* which releases the official works on */
# if 'A' == 65
#ifndef isXDIGIT_utf8_safe
# define isXDIGIT_utf8_safe(s,e) \
( ( LIKELY((e) > (s)) ) ? \
( ( inRANGE(((const U8*)s)[0], 0x30, 0x39 ) || inRANGE(((const U8*)s)[0], 0x41, 0x46 ) || inRANGE(((const U8*)s)[0], 0x61, 0x66 ) ) ? 1\
: ( ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xEF == ((const U8*)s)[0] ) ) ? ( ( 0xBC == ((const U8*)s)[1] ) ?\
( ( inRANGE(((const U8*)s)[2], 0x90, 0x99 ) || inRANGE(((const U8*)s)[2], 0xA1, 0xA6 ) ) ? 3 : 0 )\
: ( ( 0xBD == ((const U8*)s)[1] ) && ( inRANGE(((const U8*)s)[2], 0x81, 0x86 ) ) ) ? 3 : 0 ) : 0 )\
: 0 )
#endif
# elif 'A' == 193 && '^' == 95 /* EBCDIC 1047 */
#ifndef isXDIGIT_utf8_safe
# define isXDIGIT_utf8_safe(s,e) \
( ( LIKELY((e) > (s)) ) ? \
( ( inRANGE(((const U8*)s)[0], 0x81, 0x86 ) || inRANGE(((const U8*)s)[0], 0xC1, 0xC6 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) ) ? 1\
: ( ( ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( 0x73 == ((const U8*)s)[1] ) ) ? ( ( 0x67 == ((const U8*)s)[2] ) ?\
( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || inRANGE(((const U8*)s)[3], 0x62, 0x68 ) ) ? 4 : 0 )\
: ( ( inRANGE(((const U8*)s)[2], 0x68, 0x69 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )\
: 0 )
#endif
# elif 'A' == 193 && '^' == 176 /* EBCDIC 037 */
#ifndef isXDIGIT_utf8_safe
# define isXDIGIT_utf8_safe(s,e) \
( ( LIKELY((e) > (s)) ) ? \
( ( inRANGE(((const U8*)s)[0], 0x81, 0x86 ) || inRANGE(((const U8*)s)[0], 0xC1, 0xC6 ) || inRANGE(((const U8*)s)[0], 0xF0, 0xF9 ) ) ? 1\
: ( ( ( LIKELY(((e) - (s)) >= UTF8SKIP(s)) ) && ( 0xDD == ((const U8*)s)[0] ) ) && ( 0x72 == ((const U8*)s)[1] ) ) ? ( ( 0x66 == ((const U8*)s)[2] ) ?\
( ( inRANGE(((const U8*)s)[3], 0x57, 0x59 ) || 0x5F == ((const U8*)s)[3] || inRANGE(((const U8*)s)[3], 0x62, 0x67 ) ) ? 4 : 0 )\
: ( ( inRANGE(((const U8*)s)[2], 0x67, 0x68 ) ) && ( inRANGE(((const U8*)s)[3], 0x42, 0x47 ) ) ) ? 4 : 0 ) : 0 )\
: 0 )
#endif
# else
# error Unknown character set
# endif
#ifndef isALPHA_LC_utf8_safe
# define isALPHA_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, ALPHA)
#endif
# ifdef isALPHANUMERIC_utf8
#ifndef isALPHANUMERIC_LC_utf8_safe
# define isALPHANUMERIC_LC_utf8_safe(s,e) \
D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, ALPHANUMERIC)
#endif
# else
#ifndef isALPHANUMERIC_LC_utf8_safe
# define isALPHANUMERIC_LC_utf8_safe(s,e) \
(isALPHA_LC_utf8_safe(s,e) || isDIGIT_LC_utf8_safe(s,e))
#endif
# endif
#ifndef isBLANK_LC_utf8_safe
# define isBLANK_LC_utf8_safe(s,e) \
D_PPP_IS_GENERIC_LC_UTF8_SAFE_BROKEN(s, e, BLANK)
#endif
#ifndef isCNTRL_LC_utf8_safe
# define isCNTRL_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, CNTRL)
#endif
#ifndef isDIGIT_LC_utf8_safe
# define isDIGIT_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, DIGIT)
#endif
#ifndef isGRAPH_LC_utf8_safe
# define isGRAPH_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, GRAPH)
#endif
# ifdef isIDCONT_utf8
#ifndef isIDCONT_LC_utf8_safe
# define isIDCONT_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, IDCONT)
#endif
# else
#ifndef isIDCONT_LC_utf8_safe
# define isIDCONT_LC_utf8_safe(s,e) isWORDCHAR_LC_utf8_safe(s,e)
#endif
# endif
#ifndef isIDFIRST_LC_utf8_safe
# define isIDFIRST_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, IDFIRST)
#endif
#ifndef isLOWER_LC_utf8_safe
# define isLOWER_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, LOWER)
#endif
#ifndef isPRINT_LC_utf8_safe
# define isPRINT_LC_utf8_safe(s,e) D_PPP_IS_GENERIC_LC_UTF8_SAFE(s, e, PRINT)
#endif
# undef isPSXSPC_LC_utf8_safe /* Use the modern definition */
#ifndef isPSXSPC_LC_utf8_safe
va_start(args, pat);
vwarner(err, pat, &args);
va_end(args);
}
# define ck_warner Perl_ck_warner
# endif
#endif
#if (PERL_BCDVERSION >= 0x5004000) && !defined(ck_warner_d)
# if defined(NEED_ck_warner_d)
static void DPPP_(my_ck_warner_d)(pTHX_ U32 err, const char * pat, ...);
static
#else
extern void DPPP_(my_ck_warner_d)(pTHX_ U32 err, const char * pat, ...);
#endif
#if defined(NEED_ck_warner_d) || defined(NEED_ck_warner_d_GLOBAL)
#define Perl_ck_warner_d DPPP_(my_ck_warner_d)
void
DPPP_(my_ck_warner_d)(pTHX_ U32 err, const char *pat, ...)
{
va_list args;
if ( ! ckWARN_d((err ) & 0xFF)
&& ! ckWARN_d((err >> 8) & 0xFF)
&& ! ckWARN_d((err >> 16) & 0xFF)
&& ! ckWARN_d((err >> 24) & 0xFF))
{
return;
}
va_start(args, pat);
vwarner(err, pat, &args);
va_end(args);
}
# define ck_warner_d Perl_ck_warner_d
# 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 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
#if defined(PERL_USE_GCC_BRACE_GROUPS)
#ifndef sv_2uv
# define sv_2uv(sv) ({ SV *_sv = (sv); (UV) (SvNOK(_sv) ? SvNV(_sv) : sv_2nv(_sv)); })
#endif
#else
#ifndef sv_2uv
# define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
#endif
#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
#if defined(PERL_USE_GCC_BRACE_GROUPS)
#ifndef SvUVx
# define SvUVx(sv) ({ SV *_sv = (sv)); SvUV(_sv); })
#endif
#else
#ifndef SvUVx
#endif
/* Replace: 0 */
#if (PERL_BCDVERSION < 0x5006000)
#ifndef Perl_eval_sv
# define Perl_eval_sv perl_eval_sv
#endif
#if (PERL_BCDVERSION >= 0x5003098)
#ifndef Perl_eval_pv
# define Perl_eval_pv perl_eval_pv
#endif
#endif
#endif
#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
#if defined(PERL_USE_GCC_BRACE_GROUPS)
# define D_PPP_CROAK_IF_ERROR(cond) ({ SV *_errsv; ((cond) && (_errsv = ERRSV) && (SvROK(_errsv) || SvTRUE(_errsv)) && (croak_sv(_errsv), 1)); })
#else
# define D_PPP_CROAK_IF_ERROR(cond) ((cond) && (SvROK(ERRSV) || SvTRUE(ERRSV)) && (croak_sv(ERRSV), 1))
#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
#ifndef G_RETHROW
# define G_RETHROW 8192
# ifdef eval_sv
# undef eval_sv
# endif
# if defined(PERL_USE_GCC_BRACE_GROUPS)
# define eval_sv(sv, flags) ({ I32 _flags = (flags); I32 _ret = Perl_eval_sv(aTHX_ sv, (_flags & ~G_RETHROW)); D_PPP_CROAK_IF_ERROR(_flags & G_RETHROW); _ret; })
# else
# define eval_sv(sv, flags) ((PL_na = Perl_eval_sv(aTHX_ sv, ((flags) & ~G_RETHROW))), D_PPP_CROAK_IF_ERROR((flags) & G_RETHROW), (I32)PL_na)
# endif
#endif
/* Older Perl versions have broken croak_on_error=1 */
#if (PERL_BCDVERSION < 0x5031002)
# ifdef eval_pv
# undef eval_pv
# if defined(PERL_USE_GCC_BRACE_GROUPS)
# define eval_pv(p, croak_on_error) ({ SV *_sv = Perl_eval_pv(aTHX_ p, 0); D_PPP_CROAK_IF_ERROR(croak_on_error); _sv; })
# else
# define eval_pv(p, croak_on_error) ((PL_Sv = Perl_eval_pv(aTHX_ p, 0)), D_PPP_CROAK_IF_ERROR(croak_on_error), PL_Sv)
# endif
# endif
#endif
/* This is backport for Perl 5.3.97d and older which do not provide perl_eval_pv */
#ifndef eval_pv
#if defined(NEED_eval_pv)
static SV * DPPP_(my_eval_pv)(const char * p, I32 croak_on_error);
static
#else
extern SV * DPPP_(my_eval_pv)(const char * p, I32 croak_on_error);
#endif
#if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL)
#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)
SV*
DPPP_(my_eval_pv)(const 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;
D_PPP_CROAK_IF_ERROR(croak_on_error);
return sv;
}
#endif
#endif
#if ! defined(vload_module) && defined(start_subparse)
#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
#if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL)
#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)
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*);
}
}
{
#ifdef is_ascii_string
#ifndef is_invariant_string
# define is_invariant_string(s,l) is_ascii_string(s,l)
#endif
#ifndef is_utf8_invariant_string
# define is_utf8_invariant_string(s,l) is_ascii_string(s,l)
#endif
/* Hint: is_ascii_string, is_invariant_string
is_utf8_invariant_string() does the same thing and is preferred because its
name is more accurate as to what it does */
#endif
#ifdef ibcmp_utf8
#ifndef foldEQ_utf8
# define foldEQ_utf8(s1,pe1,l1,u1,s2,pe2,l2,u2) \
cBOOL(! ibcmp_utf8(s1,pe1,l1,u1,s2,pe2,l2,u2))
#endif
#endif
#if defined(is_utf8_string) && defined(UTF8SKIP)
#ifndef isUTF8_CHAR
# define isUTF8_CHAR(s, e) ( \
(e) <= (s) || ! is_utf8_string(s, UTF8_SAFE_SKIP(s, e)) \
? 0 \
: UTF8SKIP(s))
#endif
#endif
#if 'A' == 65
#ifndef BOM_UTF8
# define BOM_UTF8 "\xEF\xBB\xBF"
#endif
#ifndef REPLACEMENT_CHARACTER_UTF8
# define REPLACEMENT_CHARACTER_UTF8 "\xEF\xBF\xBD"
#endif
#elif '^' == 95
#ifndef BOM_UTF8
# define BOM_UTF8 "\xDD\x73\x66\x73"
#endif
#ifndef REPLACEMENT_CHARACTER_UTF8
# define REPLACEMENT_CHARACTER_UTF8 "\xDD\x73\x73\x71"
#endif
#elif '^' == 176
#ifndef BOM_UTF8
# define BOM_UTF8 "\xDD\x72\x65\x72"
#endif
#ifndef REPLACEMENT_CHARACTER_UTF8
# define REPLACEMENT_CHARACTER_UTF8 "\xDD\x72\x72\x70"
#endif
#else
# error Unknown character set
#endif
#if (PERL_BCDVERSION < 0x5031004)
/* Versions prior to this accepted things that are now considered
* malformations, and didn't return -1 on error with warnings enabled
* */
# undef utf8_to_uvchr_buf
#endif
/* This implementation brings modern, generally more restricted standards to
* utf8_to_uvchr_buf. Some of these are security related, and clearly must
* be done. But its arguable that the others need not, and hence should not.
* The reason they're here is that a module that intends to play with the
* latest perls should be able to work the same in all releases. An example is
* that perl no longer accepts any UV for a code point, but limits them to
* IV_MAX or below. This is for future internal use of the larger code points.
* If it turns out that some of these changes are breaking code that isn't
* intended to work with modern perls, the tighter restrictions could be
* relaxed. khw thinks this is unlikely, but has been wrong in the past. */
/* 5.6.0 is the first release with UTF-8, and we don't implement this function
* there due to its likely lack of still being in use, and the underlying
* implementation is very different from later ones, without the later
* safeguards, so would require extra work to deal with */
#if (PERL_BCDVERSION >= 0x5006001) && ! defined(utf8_to_uvchr_buf)
/* Choose which underlying implementation to use. At least one must be
* present or the perl is too early to handle this function */
# if defined(utf8n_to_uvchr) || defined(utf8_to_uvchr) || defined(utf8_to_uv)
# if defined(utf8n_to_uvchr) /* This is the preferred implementation */
# define D_PPP_utf8_to_uvchr_buf_callee utf8n_to_uvchr
# elif /* Must be at least 5.6.1 from #if above; \
If have both regular and _simple, regular has all args */ \
defined(utf8_to_uv) && defined(utf8_to_uv_simple)
# define D_PPP_utf8_to_uvchr_buf_callee utf8_to_uv
# elif defined(utf8_to_uvchr) /* The below won't work well on error input */
# define D_PPP_utf8_to_uvchr_buf_callee(s, curlen, retlen, flags) \
utf8_to_uvchr((U8 *)(s), (retlen))
# else
# define D_PPP_utf8_to_uvchr_buf_callee(s, curlen, retlen, flags) \
utf8_to_uv((U8 *)(s), (retlen))
# endif
# endif
# if defined(NEED_utf8_to_uvchr_buf)
static UV DPPP_(my_utf8_to_uvchr_buf)(pTHX_ const U8 * s, const U8 * send, STRLEN * retlen);
static
#else
extern UV DPPP_(my_utf8_to_uvchr_buf)(pTHX_ const U8 * s, const U8 * send, STRLEN * retlen);
#endif
#if defined(NEED_utf8_to_uvchr_buf) || defined(NEED_utf8_to_uvchr_buf_GLOBAL)
#ifdef utf8_to_uvchr_buf
# undef utf8_to_uvchr_buf
#endif
#define utf8_to_uvchr_buf(a,b,c) DPPP_(my_utf8_to_uvchr_buf)(aTHX_ a,b,c)
#define Perl_utf8_to_uvchr_buf DPPP_(my_utf8_to_uvchr_buf)
UV
DPPP_(my_utf8_to_uvchr_buf)(pTHX_ const U8 *s, const U8 *send, STRLEN *retlen)
{
UV ret;
STRLEN curlen;
bool overflows = 0;
const U8 *cur_s = s;
const bool do_warnings = ckWARN_d(WARN_UTF8);
# if (PERL_BCDVERSION < 0x5026000) && ! defined(EBCDIC)
STRLEN overflow_length = 0;
# endif
if (send > s) {
curlen = send - s;
}
else {
assert(0); /* Modern perls die under this circumstance */
curlen = 0;
if (! do_warnings) { /* Handle empty here if no warnings needed */
if (retlen) *retlen = 0;
return UNICODE_REPLACEMENT;
}
}
# if (PERL_BCDVERSION < 0x5026000) && ! defined(EBCDIC)
/* Perl did not properly detect overflow for much of its history on
* non-EBCDIC platforms, often returning an overlong value which may or may
* not have been tolerated in the call. Also, earlier versions, when they
* did detect overflow, may have disallowed it completely. Modern ones can
* replace it with the REPLACEMENT CHARACTER, depending on calling
* parameters. Therefore detect it ourselves in releases it was
* problematic in. */
if (curlen > 0 && UNLIKELY(*s >= 0xFE)) {
/* If this byte is larger than the corresponding highest UTF-8
* byte, the sequence overflows; otherwise the byte is less
* than (as we handled the equality case above), and so the
* sequence doesn't overflow */
overflows = *cur_s > *cur_h;
break;
}
/* Here, either we set the bool and broke out of the loop, or got
* to the end and all bytes are the same which indicates it doesn't
* overflow. If it did overflow, it would be this number of bytes
* */
overflow_length = 13;
}
}
if (UNLIKELY(overflows)) {
ret = 0;
if (! do_warnings && retlen) {
*retlen = overflow_length;
}
}
else
# endif /* < 5.26 */
/* Here, we are either in a release that properly detects overflow, or
* we have checked for overflow and the next statement is executing as
* part of the above conditional where we know we don't have overflow.
*
* The modern versions allow anything that evaluates to a legal UV, but
* not overlongs nor an empty input */
ret = D_PPP_utf8_to_uvchr_buf_callee(
(U8 *) /* Early perls: no const */
s, curlen, retlen, (UTF8_ALLOW_ANYUV
& ~(UTF8_ALLOW_LONG|UTF8_ALLOW_EMPTY)));
# if (PERL_BCDVERSION >= 0x5026000) && (PERL_BCDVERSION < 0x5028000)
/* But actually, more modern versions restrict the UV to being no more than
* what an IV can hold, so it could still have gotten it wrong about
* overflowing. */
if (UNLIKELY(ret > IV_MAX)) {
overflows = 1;
}
# endif
if (UNLIKELY(overflows)) {
if (! do_warnings) {
if (retlen) {
*retlen = D_PPP_MIN(*retlen, UTF8SKIP(s));
*retlen = D_PPP_MIN(*retlen, curlen);
}
return UNICODE_REPLACEMENT;
}
else {
/* We use the error message in use from 5.8-5.26 */
Perl_warner(aTHX_ packWARN(WARN_UTF8),
"Malformed UTF-8 character (overflow at 0x%" UVxf
", byte 0x%02x, after start byte 0x%02x)",
ret, *cur_s, *s);
if (retlen) {
*retlen = (STRLEN) -1;
}
return 0;
}
}
/* Here, did not overflow, but if it failed for some other reason, and
* warnings are off, to emulate the behavior of the real utf8_to_uvchr(),
* try again, allowing anything. (Note a return of 0 is ok if the input
* was '\0') */
if (UNLIKELY(ret == 0 && (curlen == 0 || *s != '\0'))) {
/* If curlen is 0, we already handled the case where warnings are
* disabled, so this 'if' will be true, and so later on, we know that
* 's' is dereferencible */
if (do_warnings) {
*retlen = (STRLEN) -1;
}
else {
ret = D_PPP_utf8_to_uvchr_buf_callee(
(U8 *) /* Early perls: no const */
s, curlen, retlen, UTF8_ALLOW_ANY);
/* Override with the REPLACEMENT character, as that is what the
* modern version of this function returns */
ret = UNICODE_REPLACEMENT;
# if (PERL_BCDVERSION < 0x5016000)
/* Versions earlier than this don't necessarily return the proper
* length. It should not extend past the end of string, nor past
* what the first byte indicates the length is, nor past the
* continuation characters */
if (retlen && (IV) *retlen >= 0) {
unsigned int i = 1;
*retlen = D_PPP_MIN(*retlen, curlen);
*retlen = D_PPP_MIN(*retlen, UTF8SKIP(s));
do {
# ifdef UTF8_IS_CONTINUATION
if (! UTF8_IS_CONTINUATION(s[i]))
# else /* Versions without the above don't support EBCDIC anyway */
if (s[i] < 0x80 || s[i] > 0xBF)
# endif
{
*retlen = i;
break;
}
} while (++i < *retlen);
}
# endif
}
}
( run in 0.510 second using v1.01-cache-2.11-cpan-7e98afdb40f )