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