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