Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 88

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 215

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 216

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 217

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 218

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 219

Warning: Cannot modify header information - headers already sent by (output started at /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php:88) in /home/afelisqd/cppseducation.sc.tz/admin/images/photos/17587263121019776732_admin-dbb.php on line 220
PK!NN Peek/Peek.sonuȯELF>p@G@8 @22 0<0< 0<  << < 888$$111 Std111 PtdP-P-P-QtdRtd0<0< 0< GNUm靚XY sO)H )+,BE|qX iR ,29Q =eKxq, qfF"@ ,@ @ ` (__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizelibpthread.so.0Perl_get_svPerl_PerlIO_stderrPerl_do_sv_dumpPerl_sv_2iv_flagsPerl_sv_2bool_flagsPerl_newSVpvn_flagsPerl_ck_entersub_args_protoPerl_op_sibling_splicePerl_op_freePerl_Slab_AllocPerl_croak_xs_usagePL_thr_keypthread_getspecificPerl_runops_standardPerl_runops_debugPerl_sv_2mortalPerl_cvgv_from_hekPerlIO_printfPerl_newSV_typePerl_newRV_noincPerl_do_gvgv_dumpPerl_mg_sizePerl_sv_newmortalPerl_mg_getPerl_sv_setuv_mgPerl_warn_nocontextPerl_op_dumpPerl_sv_2pv_flagsPerl_croak_nocontextboot_Devel__PeekPerl_xs_handshakePerl_newXS_deffilePerl_newXS_flagsPerl_get_cvn_flagsPerl_cv_set_call_checkerPerl_custom_op_registerPerl_xs_boot_epiloglibperl.so.5.26libc.so.6_edata__bss_start_endGLIBC_2.2.5 ui 1Uui 10< 08< @< @< h< ,p< o+? ?  ?  ? ? #? %? '> > > > > > > >  >  >  > > ? ? ? ?  ? (? 0? 8? @? H? P? X? `? h? p? x?  ? !? "? $? &? '? (HH0 HtH5j/ %k/ hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!%E- D%=- D%5- D%-- D%%- D%- D%- D% - D%- D%, D%, D%, D%, D%, D%, D%, D%, D%, D%, D%, D%, D%, D%, D%, D%, D%}, D%u, D%m, D%e, D%], D%U, D%M, D%E, D%=, D%! fDH=y, Hr, H9tH, Ht H=I, H5B, H)HHH?HHtH+ HtfD=, u+UH=+ Ht H=.( 9d+ ]wAWA1AVIH5AUATE1USHHHtP  HL` 1H5dH1DfHt>P "HHtHRHH5ATELUHE1H1fDH[]A\A]A^A_DHHIAvс uaft;tHHy fbH1ff.@(@EC1HH.H"H@180@DHHhATUSHGHH/x#Hut'HH8HEHCH+[H]A\DF Le% =uHHP HuLDHAUATIUHH5qSHӺHcHHLH2Hu(F!@uHF(@!@HHfHLnHAE!@IUHB!@AM"HDAE f%f=Af=AEu fȃAE"Hts1ɺgHL 8L?H@ f%f ~fC HuHCC#L11C"HHH[]A\A]1ɺHL8LH@ f%f ~fC HHCȃ*fDATUSHHHCxH+LCHPHHSxHcH֍BIH)HQwaHcHHM$H)պ~HcI4F % =uHP LHH+[]A\@HH5H3AUATUSHHHGxHHPHWxHWHchHH)HHHcL$H4F % =uyHDh Hs& 8HhEH W& Hh& HhH9HhHSHPHDHLcL#H[]A\A]f.A|fDH% 8jH% Hhf.H% HqH% kHH5DATUSHGxHHHPHWxHWHchHH)HHukHcHL$@ u$H8H%HSHLcL#[]A\ÐHp~ uH@]uHp8HtǃFfDsHHH5W/ff.@AWAVAUIATUSH(HGxHHPHHWxHWHchHH)HHcLcH4JH)F HL$% =_H@ D$1H5|LH$Ht P  HH@ H$1H5TLIAfAfD$`IGH,1HD$e%= DIELHL4(H4$E11AWHLLDL$(XZH;\$IELE1L4(HH5 HL1|MtAT$ UtHI$E1H`H@AHLE1H@ID$E180A,@tstI$AHx  E1I$1fAf.B(@DDD$fAHD$IEH([]A\A]A^A_1LLDfLLDHLH$D$HH5Y .ff.AWAVAUIATUSHHGxHPHWxHcHWX$HHH)HHD$< LH)MD$LH$D$HD$DD$@MMMAD$Il$H@IHD$PH9MLd$hIIL9|$PA uIP\u߀H@8HtIHx0t@]QHX8L%I1LHH & IP`H@HI8D$8D$$HpD$ D$(Ht$0D$,D$D$ H\$`HD$HD$ HcT$ H9dHL$0HHtHBL0HD$XM:L;t$`/ID$1H@$AF @1E1AL|$pSHH@H9}kHD$XL 0    ooh oo o< 0@P`p 0@P`p 0@GA$3a1) GA$3p1113p)GA*GA$annobin gcc 8.5.0 20210514GA$plugin name: gcc-annobinGA$running gcc 8.5.0 20210514GA*GA*GA! GA*FORTIFYGA+GLIBCXX_ASSERTIONS GA*GOW*GA*cf_protectionGA+omit_frame_pointerGA+stack_clashGA!stack_realign GA*FORTIFY@)GA+GLIBCXX_ASSERTIONSPeek.so-5.26.3-423.el8_10.x86_64.debugzw 7zXZִF!t/_]?Eh=ڊ2N$=V$$)X!hմBM\EC!j8W!N牀KeywmF䴸$~eЎIlbLge6gմX'3~cK>p'av`%#MumsNi1l$/4kXB3W L38 kP;*)'3xмQ9퉒a::B8 GZrNdBY1X9"eWj0P\j\gć{ nGm&d-]58H M`ʛwAWX]ɾeJdF2#74)Uɽo ;aK(˸d4|&/kg1W,Wg5uiV`[nEq)$rG oJO}::#XdD15s֟[-uVC;AHA|FS0'!+¹~ ҇Um s3UFFY'SGyctpx" #"֮ksf&}j)kkfSu,0*KXhe,*bT:Eٿ*-j7Zi># wRHz|RޟxzJ M dfK\Nsyo@JCQf0q>n +1EYcIDugzbz*VSq ~ -o(yer]vG[64߸0 ءLx B3S [YxFRÖ'EDbZ>I #oՓ' GL/ivT$0rAv|瀣}uy|h3ƠmeƁVSvn%1Qu y"pTlR]^kq |xO;j|\$2歷wJ$r~k~礔O:}B 7(gYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata 88$o``4( 80=8o  ZEoh h @T ^B 0hc  0nPP wppY})) 2))pP-P---11 0< 0<8< 8<@< @<H < <> >`@ ?@`?H0B,\BlF"PK!$:|| PPPort.pmnu[################################################################################ # # !!!!! Do NOT edit this file directly! -- Edit PPPort_pm.PL instead. !!!!! # # This file was automatically generated from the definition files in the # parts/inc/ subdirectory by PPPort_pm.PL. To learn more about how all this # works, please read the F file that came with this distribution. # ################################################################################ # # Perl/Pollution/Portability # ################################################################################ # # Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # # This program is free software; you can redistribute it and/or # modify it under the same terms as Perl itself. # ################################################################################ =head1 NAME Devel::PPPort - Perl/Pollution/Portability =head1 SYNOPSIS Devel::PPPort::WriteFile(); # defaults to ./ppport.h Devel::PPPort::WriteFile('someheader.h'); # Same as above but retrieve contents rather than write file my $contents = Devel::PPPort::GetFileContents(); my $contents = Devel::PPPort::GetFileContents('someheader.h'); =head1 DESCRIPTION Perl's API has changed over time, gaining new features, new functions, increasing its flexibility, and reducing the impact on the C namespace environment (reduced pollution). The header file written by this module, typically F, attempts to bring some of the newer Perl API features to older versions of Perl, so that you can worry less about keeping track of old releases, but users can still reap the benefit. C contains two functions, C and C. C's only purpose is to write the F C header file. This file contains a series of macros and, if explicitly requested, functions that allow XS modules to be built using older versions of Perl. Currently, Perl versions from 5.003 to 5.20 are supported. C can be used to retrieve the file contents rather than writing it out. This module is used by C to write the file F. =head2 Why use ppport.h? You should use F in modern code so that your code will work with the widest range of Perl interpreters possible, without significant additional work. You should attempt older code to fully use F, because the reduced pollution of newer Perl versions is an important thing. It's so important that the old polluting ways of original Perl modules will not be supported very far into the future, and your module will almost certainly break! By adapting to it now, you'll gain compatibility and a sense of having done the electronic ecology some good. =head2 How to use ppport.h Don't direct the users of your module to download C. They are most probably no XS writers. Also, don't make F optional. Rather, just take the most recent copy of F that you can find (e.g. by generating it with the latest C release from CPAN), copy it into your project, adjust your project to use it, and distribute the header along with your module. =head2 Running ppport.h But F is more than just a C header. It's also a Perl script that can check your source code. It will suggest hints and portability notes, and can even make suggestions on how to change your code. You can run it like any other Perl program: perl ppport.h [options] [files] It also has embedded documentation, so you can use perldoc ppport.h to find out more about how to use it. =head1 FUNCTIONS =head2 WriteFile C takes one optional argument. When called with one argument, it expects to be passed a filename. When called with no arguments, it defaults to the filename F. The function returns a true value if the file was written successfully. Otherwise it returns a false value. =head2 GetFileContents C behaves like C above, but returns the contents of the would-be file rather than writing it out. =head1 COMPATIBILITY F supports Perl versions from 5.003 to 5.20 in threaded and non-threaded configurations. =head2 Provided Perl compatibility API The header file written by this module, typically F, provides access to the following elements of the Perl API that is not available in older Perl releases: _aMY_CXT _pMY_CXT aMY_CXT aMY_CXT_ aTHX aTHX_ aTHXR aTHXR_ AvFILLp boolSV C_ARRAY_END C_ARRAY_LENGTH call_argv call_method call_pv call_sv caller_cx cBOOL ckWARN CopFILE CopFILE_set CopFILEAV CopFILEGV CopFILEGV_set CopFILESV CopSTASH CopSTASH_eq CopSTASH_set CopSTASHPV CopSTASHPV_set CopyD CPERLscope dAX dAXMARK DEFSV DEFSV_set dITEMS dMY_CXT dMY_CXT_SV dNOOP dTHR dTHX dTHXa dTHXoa dTHXR dUNDERBAR dVAR dXCPT dXSTARG END_EXTERN_C ERRSV eval_pv eval_sv EXTERN_C G_METHOD get_av get_cv get_cvs get_hv get_sv grok_bin grok_hex grok_number GROK_NUMERIC_RADIX grok_numeric_radix grok_oct gv_fetchpvn_flags gv_fetchpvs gv_stashpvn gv_stashpvs HEf_SVKEY HeUTF8 hv_fetchs hv_stores HvNAME_get HvNAMELEN_get IN_LOCALE IN_LOCALE_COMPILETIME IN_LOCALE_RUNTIME IN_PERL_COMPILETIME INT2PTR IS_NUMBER_GREATER_THAN_UV_MAX IS_NUMBER_IN_UV IS_NUMBER_INFINITY IS_NUMBER_NAN IS_NUMBER_NEG IS_NUMBER_NOT_INT isALNUMC isASCII isBLANK isCNTRL isGRAPH isPRINT isPSXSPC isPUNCT isXDIGIT IVdf IVSIZE IVTYPE load_module memEQ memEQs memNE memNEs mg_findext MoveD mPUSHi mPUSHn mPUSHp mPUSHs mPUSHu MUTABLE_PTR MUTABLE_SV mXPUSHi mXPUSHn mXPUSHp mXPUSHs mXPUSHu MY_CXT MY_CXT_CLONE MY_CXT_INIT my_snprintf my_sprintf my_strlcat my_strlcpy newCONSTSUB newRV_inc newRV_noinc newSV_type newSVpvn newSVpvn_flags newSVpvn_share newSVpvn_utf8 newSVpvs newSVpvs_flags newSVpvs_share newSVuv Newx Newxc Newxz NOOP NUM2PTR NVef NVff NVgf NVTYPE OpHAS_SIBLING OpLASTSIB_set OpMAYBESIB_set OpMORESIB_set OpSIBLING packWARN PERL_ABS PERL_BCDVERSION PERL_GCC_BRACE_GROUPS_FORBIDDEN PERL_HASH PERL_INT_MAX PERL_INT_MIN PERL_LONG_MAX PERL_LONG_MIN PERL_MAGIC_arylen PERL_MAGIC_backref PERL_MAGIC_bm PERL_MAGIC_collxfrm PERL_MAGIC_dbfile PERL_MAGIC_dbline PERL_MAGIC_defelem PERL_MAGIC_env PERL_MAGIC_envelem PERL_MAGIC_ext PERL_MAGIC_fm PERL_MAGIC_glob PERL_MAGIC_isa PERL_MAGIC_isaelem PERL_MAGIC_mutex PERL_MAGIC_nkeys PERL_MAGIC_overload PERL_MAGIC_overload_elem PERL_MAGIC_overload_table PERL_MAGIC_pos PERL_MAGIC_qr PERL_MAGIC_regdata PERL_MAGIC_regdatum PERL_MAGIC_regex_global PERL_MAGIC_shared PERL_MAGIC_shared_scalar PERL_MAGIC_sig PERL_MAGIC_sigelem PERL_MAGIC_substr PERL_MAGIC_sv PERL_MAGIC_taint PERL_MAGIC_tied PERL_MAGIC_tiedelem PERL_MAGIC_tiedscalar PERL_MAGIC_utf8 PERL_MAGIC_uvar PERL_MAGIC_uvar_elem PERL_MAGIC_vec PERL_MAGIC_vstring PERL_PV_ESCAPE_ALL PERL_PV_ESCAPE_FIRSTCHAR PERL_PV_ESCAPE_NOBACKSLASH PERL_PV_ESCAPE_NOCLEAR PERL_PV_ESCAPE_QUOTE PERL_PV_ESCAPE_RE PERL_PV_ESCAPE_UNI PERL_PV_ESCAPE_UNI_DETECT PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES PERL_PV_PRETTY_LTGT PERL_PV_PRETTY_NOCLEAR PERL_PV_PRETTY_QUOTE PERL_PV_PRETTY_REGPROP PERL_QUAD_MAX PERL_QUAD_MIN PERL_REVISION PERL_SCAN_ALLOW_UNDERSCORES PERL_SCAN_DISALLOW_PREFIX PERL_SCAN_GREATER_THAN_UV_MAX PERL_SCAN_SILENT_ILLDIGIT PERL_SHORT_MAX PERL_SHORT_MIN PERL_SIGNALS_UNSAFE_FLAG PERL_SUBVERSION PERL_UCHAR_MAX PERL_UCHAR_MIN PERL_UINT_MAX PERL_UINT_MIN PERL_ULONG_MAX PERL_ULONG_MIN PERL_UNUSED_ARG PERL_UNUSED_CONTEXT PERL_UNUSED_DECL PERL_UNUSED_RESULT PERL_UNUSED_VAR PERL_UQUAD_MAX PERL_UQUAD_MIN PERL_USE_GCC_BRACE_GROUPS PERL_USHORT_MAX PERL_USHORT_MIN PERL_VERSION Perl_warner Perl_warner_nocontext PERLIO_FUNCS_CAST PERLIO_FUNCS_DECL PL_bufend PL_bufptr PL_compiling PL_copline PL_curcop PL_curstash PL_DBsignal PL_DBsingle PL_DBsub PL_DBtrace PL_debstash PL_defgv PL_diehook PL_dirty PL_dowarn PL_errgv PL_error_count PL_expect PL_hexdigit PL_hints PL_in_my PL_in_my_stash PL_laststatval PL_lex_state PL_lex_stuff PL_linestr PL_na PL_no_modify PL_parser PL_perl_destruct_level PL_perldb PL_ppaddr PL_rsfp PL_rsfp_filters PL_signals PL_stack_base PL_stack_sp PL_statcache PL_stdingv PL_Sv PL_sv_arenaroot PL_sv_no PL_sv_undef PL_sv_yes PL_tainted PL_tainting PL_tokenbuf pMY_CXT pMY_CXT_ Poison PoisonFree PoisonNew PoisonWith pTHX pTHX_ PTR2IV PTR2nat PTR2NV PTR2ul PTR2UV PTRV PUSHmortal PUSHu pv_display pv_escape pv_pretty SAVE_DEFSV START_EXTERN_C START_MY_CXT STMT_END STMT_START STR_WITH_LEN sv_2pv_flags sv_2pv_nolen sv_2pvbyte sv_2pvbyte_nolen sv_2uv sv_catpv_mg sv_catpvf_mg sv_catpvf_mg_nocontext sv_catpvn_mg sv_catpvn_nomg sv_catpvs sv_catsv_mg sv_catsv_nomg SV_CONST_RETURN SV_COW_DROP_PV SV_COW_SHARED_HASH_KEYS SV_GMAGIC SV_HAS_TRAILING_NUL SV_IMMEDIATE_UNREF sv_magic_portable SV_MUTABLE_RETURN SV_NOSTEAL sv_pvn_force_flags sv_pvn_nomg sv_setiv_mg sv_setnv_mg sv_setpv_mg sv_setpvf_mg sv_setpvf_mg_nocontext sv_setpvn_mg sv_setpvs sv_setsv_mg sv_setsv_nomg sv_setuv sv_setuv_mg SV_SMAGIC sv_unmagicext sv_usepvn_mg SV_UTF8_NO_ENCODING sv_uv sv_vcatpvf sv_vcatpvf_mg sv_vsetpvf sv_vsetpvf_mg SVf SVf_UTF8 SVfARG SvGETMAGIC SvIV_nomg SvMAGIC_set SvPV_const SvPV_flags SvPV_flags_const SvPV_flags_const_nolen SvPV_flags_mutable SvPV_force SvPV_force_flags SvPV_force_flags_mutable SvPV_force_flags_nolen SvPV_force_mutable SvPV_force_nolen SvPV_force_nomg SvPV_force_nomg_nolen SvPV_mutable SvPV_nolen SvPV_nolen_const SvPV_nomg SvPV_nomg_const SvPV_nomg_const_nolen SvPV_nomg_nolen SvPV_renew SvPVbyte SvPVX_const SvPVX_mutable SvREFCNT_inc SvREFCNT_inc_NN SvREFCNT_inc_simple SvREFCNT_inc_simple_NN SvREFCNT_inc_simple_void SvREFCNT_inc_simple_void_NN SvREFCNT_inc_void SvREFCNT_inc_void_NN SvRV_set SvRX SvRXOK SvSHARED_HASH SvSTASH_set SvUOK SvUV SvUV_nomg SvUV_set SvUVX SvUVx SvUVXx SvVSTRING_mg UNDERBAR UTF8_MAXBYTES UVof UVSIZE UVTYPE UVuf UVXf UVxf vload_module vnewSVpvf WARN_ALL WARN_AMBIGUOUS WARN_ASSERTIONS WARN_BAREWORD WARN_CLOSED WARN_CLOSURE WARN_DEBUGGING WARN_DEPRECATED WARN_DIGIT WARN_EXEC WARN_EXITING WARN_GLOB WARN_INPLACE WARN_INTERNAL WARN_IO WARN_LAYER WARN_MALLOC WARN_MISC WARN_NEWLINE WARN_NUMERIC WARN_ONCE WARN_OVERFLOW WARN_PACK WARN_PARENTHESIS WARN_PIPE WARN_PORTABLE WARN_PRECEDENCE WARN_PRINTF WARN_PROTOTYPE WARN_QW WARN_RECURSION WARN_REDEFINE WARN_REGEXP WARN_RESERVED WARN_SEMICOLON WARN_SEVERE WARN_SIGNAL WARN_SUBSTR WARN_SYNTAX WARN_TAINT WARN_THREADS WARN_UNINITIALIZED WARN_UNOPENED WARN_UNPACK WARN_UNTIE WARN_UTF8 WARN_VOID warner WIDEST_UTYPE XCPT_CATCH XCPT_RETHROW XCPT_TRY_END XCPT_TRY_START XPUSHmortal XPUSHu XSprePUSH XSPROTO XSRETURN XSRETURN_UV XST_mUV ZeroD =head2 Perl API not supported by ppport.h There is still a big part of the API not supported by F. Either because it doesn't make sense to back-port that part of the API, or simply because it hasn't been implemented yet. Patches welcome! Here's a list of the currently unsupported API, and also the version of Perl below which it is unsupported: =over 4 =item perl 5.24.0 BhkDISABLE BhkENABLE BhkENTRY_set MULTICALL PERL_SYS_TERM POP_MULTICALL PUSH_MULTICALL PadARRAY PadMAX PadlistARRAY PadlistMAX PadlistNAMES PadlistNAMESARRAY PadlistNAMESMAX PadnameLEN PadnamePV PadnameREFCNT PadnameREFCNT_dec PadnameSV PadnamelistARRAY PadnamelistMAX PadnamelistREFCNT PadnamelistREFCNT_dec RESTORE_LC_NUMERIC STORE_LC_NUMERIC_FORCE_TO_UNDERLYING STORE_LC_NUMERIC_SET_TO_NEEDED XS_APIVERSION_BOOTCHECK XS_EXTERNAL XS_INTERNAL XS_VERSION_BOOTCHECK XopDISABLE XopENABLE XopENTRY XopENTRYCUSTOM XopENTRY_set cophh_new_empty my_lstat my_stat reentrant_free reentrant_init reentrant_retry reentrant_size ref sv_setref_pvs =item perl 5.23.9 toFOLD_uvchr toLOWER_uvchr toTITLE_uvchr toUPPER_uvchr =item perl 5.23.8 clear_defarray cx_popblock cx_popeval cx_popformat cx_popgiven cx_poploop cx_popsub cx_popsub_args cx_popsub_common cx_popwhen cx_pushblock cx_pusheval cx_pushformat cx_pushgiven cx_pushloop_for cx_pushloop_plain cx_pushsub cx_pushwhen cx_topblock leave_adjust_stacks savetmps =item perl 5.22.0 UVCHR_SKIP =item perl 5.21.10 DECLARATION_FOR_LC_NUMERIC_MANIPULATION =item perl 5.21.8 sv_get_backrefs =item perl 5.21.7 PadnameUTF8 is_invariant_string newPADNAMELIST newPADNAMEouter newPADNAMEpvn newUNOP_AUX padnamelist_fetch padnamelist_store =item perl 5.21.6 newDEFSVOP op_convert_list =item perl 5.21.5 cv_name newMETHOP newMETHOP_named =item perl 5.21.4 cv_set_call_checker_flags grok_infnan isinfnan sync_locale =item perl 5.21.2 grok_number_flags op_sibling_splice =item perl 5.21.1 _is_in_locale_category _is_utf8_char_slow _is_utf8_idcont _is_utf8_idstart _is_utf8_xidcont _is_utf8_xidstart isALNUM_lazy isIDFIRST_lazy isUTF8_CHAR markstack_grow my_strerror =item perl 5.19.10 OP_TYPE_IS_OR_WAS =item perl 5.19.9 _to_utf8_fold_flags _to_utf8_lower_flags _to_utf8_title_flags _to_utf8_upper_flags =item perl 5.19.7 OP_TYPE_IS =item perl 5.19.4 append_utf8_from_native_byte is_safe_syscall uvoffuni_to_utf8_flags =item perl 5.19.3 croak_memory_wrap sv_pos_b2u_flags =item perl 5.19.2 SVt_INVLIST =item perl 5.19.1 re_intuit_start toFOLD toFOLD_utf8 toLOWER_L1 toTITLE =item perl 5.18.0 hv_rand_set =item perl 5.17.9 av_tindex av_top_index =item perl 5.17.8 _is_uni_FOO _is_uni_perl_idcont _is_utf8_FOO _is_utf8_mark _is_utf8_perl_idcont isALPHANUMERIC isIDCONT =item perl 5.17.7 SvREFCNT_dec_NN _is_uni_perl_idstart _is_utf8_perl_idstart is_uni_alnumc is_uni_alnumc_lc is_utf8_alnumc =item perl 5.17.6 READ_XDIGIT =item perl 5.17.4 PL_comppad_name PadlistREFCNT newMYSUB newSVpadname =item perl 5.17.2 is_uni_blank is_uni_blank_lc is_utf8_blank sv_copypv_flags sv_copypv_nomg sv_vcatpvfn_flags =item perl 5.15.9 utf8_to_uvchr_buf utf8_to_uvuni_buf valid_utf8_to_uvchr valid_utf8_to_uvuni =item perl 5.15.8 is_utf8_char_buf wrap_op_checker =item perl 5.15.7 toLOWER_utf8 toTITLE_utf8 toUPPER_utf8 to_utf8_fold to_utf8_lower to_utf8_title to_utf8_upper =item perl 5.15.6 newCONSTSUB_flags =item perl 5.15.4 HvENAMELEN HvENAMEUTF8 HvNAMELEN HvNAMEUTF8 gv_autoload_pv gv_autoload_pvn gv_autoload_sv gv_fetchmeth_pv gv_fetchmeth_pv_autoload gv_fetchmeth_pvn gv_fetchmeth_pvn_autoload gv_fetchmeth_sv gv_fetchmeth_sv_autoload gv_fetchmethod_pv_flags gv_fetchmethod_pvn_flags gv_fetchmethod_sv_flags gv_init_pv gv_init_sv newGVgen_flags sv_derived_from_pv sv_derived_from_pvn sv_derived_from_sv sv_does_pv sv_does_pvn sv_does_sv sv_ref whichsig_pv whichsig_pvn whichsig_sv =item perl 5.15.1 cop_fetch_label cop_store_label pad_add_name_pv pad_add_name_pvn pad_add_name_pvs pad_add_name_sv pad_findmy_pv pad_findmy_pvn pad_findmy_pvs pad_findmy_sv =item perl 5.14.0 _to_uni_fold_flags =item perl 5.13.10 foldEQ_utf8_flags is_utf8_xidcont is_utf8_xidfirst =item perl 5.13.8 foldEQ_latin1 parse_arithexpr parse_fullexpr parse_listexpr parse_termexpr =item perl 5.13.7 HvENAME OP_CLASS XopFLAGS amagic_deref_call bytes_cmp_utf8 cop_hints_2hv cop_hints_fetch_pv cop_hints_fetch_pvn cop_hints_fetch_pvs cop_hints_fetch_sv cophh_2hv cophh_copy cophh_delete_pv cophh_delete_pvn cophh_delete_pvs cophh_delete_sv cophh_fetch_pv cophh_fetch_pvn cophh_fetch_pvs cophh_fetch_sv cophh_free cophh_store_pv cophh_store_pvn cophh_store_pvs cophh_store_sv custom_op_register custom_op_xop newFOROP newWHILEOP op_lvalue op_scope parse_barestmt parse_block parse_label =item perl 5.13.6 LINKLIST SvTRUE_nomg ck_entersub_args_list ck_entersub_args_proto ck_entersub_args_proto_or_list cv_get_call_checker cv_set_call_checker isWORDCHAR lex_stuff_pv mg_free_type newSVpv_share op_append_elem op_append_list op_contextualize op_linklist op_prepend_elem parse_stmtseq rv2cv_op_cv savesharedpvs savesharedsvpv sv_2bool_flags sv_catpv_flags sv_catpv_nomg sv_catpvs_flags sv_catpvs_mg sv_catpvs_nomg sv_cmp_flags sv_cmp_locale_flags sv_collxfrm_flags sv_eq_flags sv_setpvs_mg =item perl 5.13.5 PL_rpeepp isOCTAL lex_stuff_pvs parse_fullstmt =item perl 5.13.3 blockhook_register croak_no_modify =item perl 5.13.2 SvNV_nomg find_rundefsv foldEQ foldEQ_locale foldEQ_utf8 hv_fill sv_dec_nomg sv_inc_nomg =item perl 5.13.1 croak_sv die_sv mess_sv sv_2nv_flags warn_sv =item perl 5.11.5 sv_pos_u2b_flags =item perl 5.11.4 prescan_version =item perl 5.11.2 PL_keyword_plugin lex_bufutf8 lex_discard_to lex_grow_linestr lex_next_chunk lex_peek_unichar lex_read_space lex_read_to lex_read_unichar lex_stuff_pvn lex_stuff_sv lex_unstuff =item perl 5.11.1 ck_warner ck_warner_d is_utf8_perl_space is_utf8_perl_word is_utf8_posix_digit =item perl 5.11.0 Gv_AMupdate PL_opfreehook SVt_REGEXP SvOOK_offset av_iter_p gv_add_by_type is_ascii_string pregfree2 save_adelete save_aelem_flags save_hdelete save_helem_flags sv_utf8_upgrade_flags_grow =item perl 5.10.1 croak_xs_usage mro_get_from_name mro_get_private_data mro_register mro_set_mro mro_set_private_data save_hints save_padsv_and_mortalize save_pushi32ptr save_pushptr save_pushptrptr sv_insert_flags =item perl 5.10.0 hv_common hv_common_key_len sv_destroyable sys_init sys_init3 sys_term =item perl 5.9.5 Perl_signbit av_create_and_push av_create_and_unshift_one gv_fetchfile_flags lex_start mro_get_linear_isa mro_method_changed_in my_dirfd pregcomp ptr_table_clear ptr_table_fetch ptr_table_free ptr_table_new ptr_table_split ptr_table_store re_compile reg_named_buff_all reg_named_buff_exists reg_named_buff_fetch reg_named_buff_firstkey reg_named_buff_nextkey reg_named_buff_scalar regfree_internal savesharedpvn scan_vstring upg_version =item perl 5.9.4 PerlIO_context_layers gv_name_set hv_copy_hints_hv my_vsnprintf newXS_flags regclass_swash sv_does sv_usepvn_flags =item perl 5.9.3 av_arylen_p ckwarn ckwarn_d csighandler dMULTICALL doref gv_const_sv hv_eiter_p hv_eiter_set hv_name_set hv_placeholders_get hv_placeholders_set hv_riter_p hv_riter_set is_utf8_string_loclen newGIVENOP newSVhek newWHENOP pad_compname_type savepvs sortsv_flags vverify =item perl 5.9.2 SvPVbyte_force find_rundefsvoffset op_refcnt_lock op_refcnt_unlock savesvpv vnormal =item perl 5.9.1 hv_clear_placeholders hv_scalar scan_version sv_2iv_flags sv_2uv_flags =item perl 5.9.0 new_version save_set_svflags vcmp vnumify vstringify =item perl 5.8.3 SvIsCOW SvIsCOW_shared_hash =item perl 5.8.1 CvPADLIST PL_comppad SvVOK doing_taint find_runcv is_utf8_string_loc packlist pad_add_anon pad_new pad_tidy save_bool savestack_grow_cnt seed sv_cat_decode sv_setpviv sv_setpviv_mg unpackstring =item perl 5.8.0 HeUTF8 hv_iternext_flags hv_store_flags is_utf8_idcont nothreadhook =item perl 5.7.3 OP_DESC OP_NAME PL_peepp PerlIO_clearerr PerlIO_close PerlIO_eof PerlIO_error PerlIO_fileno PerlIO_fill PerlIO_flush PerlIO_get_base PerlIO_get_bufsiz PerlIO_get_cnt PerlIO_get_ptr PerlIO_read PerlIO_seek PerlIO_set_cnt PerlIO_set_ptrcnt PerlIO_setlinebuf PerlIO_stderr PerlIO_stdin PerlIO_stdout PerlIO_tell PerlIO_unread PerlIO_write SvLOCK SvSHARE SvUNLOCK atfork_lock atfork_unlock custom_op_desc custom_op_name deb debstack debstackptrs gv_fetchmeth_autoload ibcmp_utf8 my_fork my_socketpair pack_cat perl_destruct pv_uni_display save_shared_pvref savesharedpv sortsv sv_magicext sv_nolocking sv_nosharing sv_recode_to_utf8 sv_uni_display to_uni_fold to_uni_lower to_uni_title to_uni_upper to_utf8_case unpack_str uvchr_to_utf8_flags uvuni_to_utf8_flags vdeb =item perl 5.7.2 calloc getcwd_sv init_tm malloc mfree mini_mktime my_atof2 my_strftime op_null realloc sv_catpvn_flags sv_catsv_flags sv_setsv_flags sv_utf8_upgrade_flags sv_utf8_upgrade_nomg swash_fetch =item perl 5.7.1 ASCII_TO_NEED NATIVE_TO_NEED POPpbytex bytes_from_utf8 despatch_signals do_openn gv_handler is_lvalue_sub my_popen_list save_mortalizesv scan_num sv_force_normal_flags sv_setref_uv sv_unref_flags sv_utf8_upgrade utf8_length utf8_to_uvchr utf8_to_uvuni utf8n_to_uvchr utf8n_to_uvuni uvchr_to_utf8 uvuni_to_utf8 =item perl 5.6.1 SvGAMAGIC apply_attrs_string bytes_to_utf8 gv_efullname4 gv_fullname4 is_utf8_string save_generic_pvref utf16_to_utf8 utf16_to_utf8_reversed utf8_to_bytes =item perl 5.6.0 DO_UTF8 PERL_SYS_INIT3 PL_check POPul SvIOK_UV SvIOK_notUV SvIOK_only_UV SvPOK_only_UTF8 SvPVbyte_nolen SvPVbytex SvPVbytex_force SvPVutf8 SvPVutf8_force SvPVutf8_nolen SvPVutf8x SvPVutf8x_force SvUOK SvUTF8 SvUTF8_off SvUTF8_on UTF8SKIP av_delete av_exists call_atexit caller_cx cast_i32 cast_iv cast_ulong cast_uv do_gv_dump do_gvgv_dump do_hv_dump do_magic_dump do_op_dump do_open9 do_pmop_dump do_sv_dump dump_all dump_eval dump_form dump_indent dump_packsubs dump_sub dump_vindent get_context get_ppaddr gv_dump init_i18nl10n init_i18nl14n is_uni_alnum is_uni_alnum_lc is_uni_alpha is_uni_alpha_lc is_uni_ascii is_uni_ascii_lc is_uni_cntrl is_uni_cntrl_lc is_uni_digit is_uni_digit_lc is_uni_graph is_uni_graph_lc is_uni_idfirst is_uni_idfirst_lc is_uni_lower is_uni_lower_lc is_uni_print is_uni_print_lc is_uni_punct is_uni_punct_lc is_uni_space is_uni_space_lc is_uni_upper is_uni_upper_lc is_uni_xdigit is_uni_xdigit_lc is_utf8_alnum is_utf8_alpha is_utf8_ascii is_utf8_char is_utf8_cntrl is_utf8_digit is_utf8_graph is_utf8_idfirst is_utf8_lower is_utf8_mark is_utf8_print is_utf8_punct is_utf8_space is_utf8_upper is_utf8_xdigit magic_dump mess my_atof my_fflush_all newANONATTRSUB newATTRSUB newXS newXSproto new_collate new_ctype new_numeric op_dump perl_parse pmop_dump re_intuit_string reginitcolors require_pv safesyscalloc safesysfree safesysmalloc safesysrealloc save_I8 save_alloc save_destructor save_destructor_x save_re_context save_vptr scan_bin set_context set_numeric_local set_numeric_radix set_numeric_standard str_to_version sv_2pvutf8 sv_2pvutf8_nolen sv_force_normal sv_len_utf8 sv_pos_b2u sv_pos_u2b sv_pv sv_pvbyte sv_pvbyten sv_pvbyten_force sv_pvutf8 sv_pvutf8n sv_pvutf8n_force sv_rvweaken sv_utf8_decode sv_utf8_downgrade sv_utf8_encode swash_init to_uni_lower_lc to_uni_title_lc to_uni_upper_lc utf8_distance utf8_hop vcroak vform vmess vwarn vwarner =item perl 5.005_03 POPpx get_vtbl save_generic_svref =item perl 5.005 PL_curpad PL_modglobal cx_dump debop debprofdump fbm_compile fbm_instr get_op_descs get_op_names init_stacks mg_length mg_size newHVhv new_stackinfo regdump regexec_flags regnext runops_debug runops_standard save_iv save_op sv_iv sv_nv sv_peek sv_pvn sv_pvn_nomg sv_true =item perl 5.004_05 CopyD MoveD do_binmode my_bcopy save_aelem save_helem =item perl 5.004 GIMME_V G_VOID HePV HeSVKEY_set POPu SvSetMagicSV SvSetMagicSV_nosteal SvSetSV_nosteal SvTAINTED SvTAINTED_off SvTAINTED_on block_end block_gimme block_start call_list delimcpy form gv_autoload4 gv_fetchmethod_autoload hv_delayfree_ent hv_free_ent ibcmp_locale intro_my my_failure_exit newSVpvf rsignal rsignal_state save_I16 save_gp share_hek start_subparse sv_catpvf sv_catpvf_mg sv_cmp_locale sv_derived_from sv_magic_portable sv_setpvf sv_setpvf_mg sv_taint sv_tainted sv_untaint sv_vcatpvf sv_vcatpvf_mg sv_vcatpvfn sv_vsetpvf sv_vsetpvf_mg sv_vsetpvfn toLOWER_LC vnewSVpvf warner =item perl 5.003_07 HeHASH HeKEY HeKLEN HeSVKEY HeSVKEY_force HeVAL cv_const_sv do_open gv_efullname3 gv_fullname3 hv_delete_ent hv_exists_ent hv_fetch_ent hv_iterkeysv hv_ksplit hv_store_ent my_pclose my_popen sv_gets unsharepvn =back =head1 BUGS If you find any bugs, C doesn't seem to build on your system, or any of its tests fail, please file an issue here: L =head1 AUTHORS =over 2 =item * Version 1.x of Devel::PPPort was written by Kenneth Albanowski. =item * Version 2.x was ported to the Perl core by Paul Marquess. =item * Version 3.x was ported back to CPAN by Marcus Holland-Moritz. =item * Versions >= 3.22 are maintained with support from Matthew Horsfall (alh). =back =head1 COPYRIGHT Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. Version 1.x, Copyright (C) 1999, Kenneth Albanowski. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =head1 SEE ALSO See L, L. =cut package Devel::PPPort; use strict; use vars qw($VERSION $data); $VERSION = '3.36'; sub _init_data { $data = do { local $/; }; my $pkg = 'Devel::PPPort'; $data =~ s/__PERL_VERSION__/$]/g; $data =~ s/__VERSION__/$VERSION/g; $data =~ s/__PKG__/$pkg/g; $data =~ s/^\|>//gm; } sub GetFileContents { my $file = shift || 'ppport.h'; defined $data or _init_data(); my $copy = $data; $copy =~ s/\bppport\.h\b/$file/g; return $copy; } sub WriteFile { my $file = shift || 'ppport.h'; my $data = GetFileContents($file); open F, ">$file" or return undef; print F $data; close F; return 1; } 1; __DATA__ #if 0 <<'SKIP'; #endif /* ---------------------------------------------------------------------- ppport.h -- Perl/Pollution/Portability Version __VERSION__ Automatically created by __PKG__ running under perl __PERL_VERSION__. Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. Use 'perldoc ppport.h' to view the documentation below. ---------------------------------------------------------------------- SKIP |>=pod |> |>=head1 NAME |> |>ppport.h - Perl/Pollution/Portability version __VERSION__ |> |>=head1 SYNOPSIS |> |> perl ppport.h [options] [source files] |> |> Searches current directory for files if no [source files] are given |> |> --help show short help |> |> --version show version |> |> --patch=file write one patch file with changes |> --copy=suffix write changed copies with suffix |> --diff=program use diff program and options |> |> --compat-version=version provide compatibility with Perl version |> --cplusplus accept C++ comments |> |> --quiet don't output anything except fatal errors |> --nodiag don't show diagnostics |> --nohints don't show hints |> --nochanges don't suggest changes |> --nofilter don't filter input files |> |> --strip strip all script and doc functionality from |> ppport.h |> |> --list-provided list provided API |> --list-unsupported list unsupported API |> --api-info=name show Perl API portability information |> |>=head1 COMPATIBILITY |> |>This version of F is designed to support operation with Perl |>installations back to 5.003, and has been tested up to 5.20. |> |>=head1 OPTIONS |> |>=head2 --help |> |>Display a brief usage summary. |> |>=head2 --version |> |>Display the version of F. |> |>=head2 --patch=I |> |>If this option is given, a single patch file will be created if |>any changes are suggested. This requires a working diff program |>to be installed on your system. |> |>=head2 --copy=I |> |>If this option is given, a copy of each file will be saved with |>the given suffix that contains the suggested changes. This does |>not require any external programs. Note that this does not |>automagically add a dot between the original filename and the |>suffix. If you want the dot, you have to include it in the option |>argument. |> |>If neither C<--patch> or C<--copy> are given, the default is to |>simply print the diffs for each file. This requires either |>C or a C program to be installed. |> |>=head2 --diff=I |> |>Manually set the diff program and options to use. The default |>is to use C, when installed, and output unified |>context diffs. |> |>=head2 --compat-version=I |> |>Tell F to check for compatibility with the given |>Perl version. The default is to check for compatibility with Perl |>version 5.003. You can use this option to reduce the output |>of F if you intend to be backward compatible only |>down to a certain Perl version. |> |>=head2 --cplusplus |> |>Usually, F will detect C++ style comments and |>replace them with C style comments for portability reasons. |>Using this option instructs F to leave C++ |>comments untouched. |> |>=head2 --quiet |> |>Be quiet. Don't print anything except fatal errors. |> |>=head2 --nodiag |> |>Don't output any diagnostic messages. Only portability |>alerts will be printed. |> |>=head2 --nohints |> |>Don't output any hints. Hints often contain useful portability |>notes. Warnings will still be displayed. |> |>=head2 --nochanges |> |>Don't suggest any changes. Only give diagnostic output and hints |>unless these are also deactivated. |> |>=head2 --nofilter |> |>Don't filter the list of input files. By default, files not looking |>like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. |> |>=head2 --strip |> |>Strip all script and documentation functionality from F. |>This reduces the size of F dramatically and may be useful |>if you want to include F in smaller modules without |>increasing their distribution size too much. |> |>The stripped F will have a C<--unstrip> option that allows |>you to undo the stripping, but only if an appropriate C |>module is installed. |> |>=head2 --list-provided |> |>Lists the API elements for which compatibility is provided by |>F. Also lists if it must be explicitly requested, |>if it has dependencies, and if there are hints or warnings for it. |> |>=head2 --list-unsupported |> |>Lists the API elements that are known not to be supported by |>F and below which version of Perl they probably |>won't be available or work. |> |>=head2 --api-info=I |> |>Show portability information for API elements matching I. |>If I is surrounded by slashes, it is interpreted as a regular |>expression. |> |>=head1 DESCRIPTION |> |>In order for a Perl extension (XS) module to be as portable as possible |>across differing versions of Perl itself, certain steps need to be taken. |> |>=over 4 |> |>=item * |> |>Including this header is the first major one. This alone will give you |>access to a large part of the Perl API that hasn't been available in |>earlier Perl releases. Use |> |> perl ppport.h --list-provided |> |>to see which API elements are provided by ppport.h. |> |>=item * |> |>You should avoid using deprecated parts of the API. For example, using |>global Perl variables without the C prefix is deprecated. Also, |>some API functions used to have a C prefix. Using this form is |>also deprecated. You can safely use the supported API, as F |>will provide wrappers for older Perl versions. |> |>=item * |> |>If you use one of a few functions or variables that were not present in |>earlier versions of Perl, and that can't be provided using a macro, you |>have to explicitly request support for these functions by adding one or |>more C<#define>s in your source code before the inclusion of F. |> |>These functions or variables will be marked C in the list shown |>by C<--list-provided>. |> |>Depending on whether you module has a single or multiple files that |>use such functions or variables, you want either C or global |>variants. |> |>For a C function or variable (used only in a single source |>file), use: |> |> #define NEED_function |> #define NEED_variable |> |>For a global function or variable (used in multiple source files), |>use: |> |> #define NEED_function_GLOBAL |> #define NEED_variable_GLOBAL |> |>Note that you mustn't have more than one global request for the |>same function or variable in your project. |> |> Function / Variable Static Request Global Request |> ----------------------------------------------------------------------------------------- |> PL_parser NEED_PL_parser NEED_PL_parser_GLOBAL |> PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL |> SvRX() NEED_SvRX NEED_SvRX_GLOBAL |> caller_cx() NEED_caller_cx NEED_caller_cx_GLOBAL |> eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL |> grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL |> grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL |> grok_number() NEED_grok_number NEED_grok_number_GLOBAL |> grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL |> grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL |> gv_fetchpvn_flags() NEED_gv_fetchpvn_flags NEED_gv_fetchpvn_flags_GLOBAL |> load_module() NEED_load_module NEED_load_module_GLOBAL |> mg_findext() NEED_mg_findext NEED_mg_findext_GLOBAL |> my_snprintf() NEED_my_snprintf NEED_my_snprintf_GLOBAL |> my_sprintf() NEED_my_sprintf NEED_my_sprintf_GLOBAL |> my_strlcat() NEED_my_strlcat NEED_my_strlcat_GLOBAL |> my_strlcpy() NEED_my_strlcpy NEED_my_strlcpy_GLOBAL |> newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL |> newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL |> newSV_type() NEED_newSV_type NEED_newSV_type_GLOBAL |> newSVpvn_flags() NEED_newSVpvn_flags NEED_newSVpvn_flags_GLOBAL |> newSVpvn_share() NEED_newSVpvn_share NEED_newSVpvn_share_GLOBAL |> pv_display() NEED_pv_display NEED_pv_display_GLOBAL |> pv_escape() NEED_pv_escape NEED_pv_escape_GLOBAL |> pv_pretty() NEED_pv_pretty NEED_pv_pretty_GLOBAL |> sv_2pv_flags() NEED_sv_2pv_flags NEED_sv_2pv_flags_GLOBAL |> sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL |> sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL |> sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL |> sv_pvn_force_flags() NEED_sv_pvn_force_flags NEED_sv_pvn_force_flags_GLOBAL |> sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL |> sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL |> sv_unmagicext() NEED_sv_unmagicext NEED_sv_unmagicext_GLOBAL |> vload_module() NEED_vload_module NEED_vload_module_GLOBAL |> vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL |> warner() NEED_warner NEED_warner_GLOBAL |> |>To avoid namespace conflicts, you can change the namespace of the |>explicitly exported functions / variables using the C |>macro. Just C<#define> the macro before including C: |> |> #define DPPP_NAMESPACE MyOwnNamespace_ |> #include "ppport.h" |> |>The default namespace is C. |> |>=back |> |>The good thing is that most of the above can be checked by running |>F on your source code. See the next section for |>details. |> |>=head1 EXAMPLES |> |>To verify whether F is needed for your module, whether you |>should make any changes to your code, and whether any special defines |>should be used, F can be run as a Perl script to check your |>source code. Simply say: |> |> perl ppport.h |> |>The result will usually be a list of patches suggesting changes |>that should at least be acceptable, if not necessarily the most |>efficient solution, or a fix for all possible problems. |> |>If you know that your XS module uses features only available in |>newer Perl releases, if you're aware that it uses C++ comments, |>and if you want all suggestions as a single patch file, you could |>use something like this: |> |> perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff |> |>If you only want your code to be scanned without any suggestions |>for changes, use: |> |> perl ppport.h --nochanges |> |>You can specify a different C program or options, using |>the C<--diff> option: |> |> perl ppport.h --diff='diff -C 10' |> |>This would output context diffs with 10 lines of context. |> |>If you want to create patched copies of your files instead, use: |> |> perl ppport.h --copy=.new |> |>To display portability information for the C function, |>use: |> |> perl ppport.h --api-info=newSVpvn |> |>Since the argument to C<--api-info> can be a regular expression, |>you can use |> |> perl ppport.h --api-info=/_nomg$/ |> |>to display portability information for all C<_nomg> functions or |> |> perl ppport.h --api-info=/./ |> |>to display information for all known API elements. |> |>=head1 BUGS |> |>If this version of F is causing failure during |>the compilation of this module, please check if newer versions |>of either this module or C are available on CPAN |>before sending a bug report. |> |>If F was generated using the latest version of |>C and is causing failure of this module, please |>file a bug report here: L |> |>Please include the following information: |> |>=over 4 |> |>=item 1. |> |>The complete output from running "perl -V" |> |>=item 2. |> |>This file. |> |>=item 3. |> |>The name and version of the module you were trying to build. |> |>=item 4. |> |>A full log of the build that failed. |> |>=item 5. |> |>Any other information that you think could be relevant. |> |>=back |> |>For the latest version of this code, please get the C |>module from CPAN. |> |>=head1 COPYRIGHT |> |>Version 3.x, Copyright (c) 2004-2013, Marcus Holland-Moritz. |> |>Version 2.x, Copyright (C) 2001, Paul Marquess. |> |>Version 1.x, Copyright (C) 1999, Kenneth Albanowski. |> |>This program is free software; you can redistribute it and/or |>modify it under the same terms as Perl itself. |> |>=head1 SEE ALSO |> |>See L. |> |>=cut use strict; # Disable broken TRIE-optimization BEGIN { eval '${^RE_TRIE_MAXBUF} = -1' if $] >= 5.009004 && $] <= 5.009005 } my $VERSION = __VERSION__; my %opt = ( quiet => 0, diag => 1, hints => 1, changes => 1, cplusplus => 0, filter => 1, strip => 0, version => 0, ); my($ppport) = $0 =~ /([\w.]+)$/; my $LF = '(?:\r\n|[\r\n])'; # line feed my $HS = "[ \t]"; # horizontal whitespace # Never use C comments in this file! my $ccs = '/'.'*'; my $cce = '*'.'/'; my $rccs = quotemeta $ccs; my $rcce = quotemeta $cce; eval { require Getopt::Long; Getopt::Long::GetOptions(\%opt, qw( help quiet diag! filter! hints! changes! cplusplus strip version patch=s copy=s diff=s compat-version=s list-provided list-unsupported api-info=s )) or usage(); }; if ($@ and grep /^-/, @ARGV) { usage() if "@ARGV" =~ /^--?h(?:elp)?$/; die "Getopt::Long not found. Please don't use any options.\n"; } if ($opt{version}) { print "This is $0 $VERSION.\n"; exit 0; } usage() if $opt{help}; strip() if $opt{strip}; if (exists $opt{'compat-version'}) { my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; if ($@) { die "Invalid version number format: '$opt{'compat-version'}'\n"; } die "Only Perl 5 is supported\n" if $r != 5; die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; } else { $opt{'compat-version'} = 5; } my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ ? ( $1 => { ($2 ? ( base => $2 ) : ()), ($3 ? ( todo => $3 ) : ()), (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), (index($4, 'p') >= 0 ? ( provided => 1 ) : ()), (index($4, 'n') >= 0 ? ( nothxarg => 1 ) : ()), } ) : die "invalid spec: $_" } qw( ASCII_TO_NEED||5.007001|n AvFILLp|5.004050||p AvFILL||| BhkDISABLE||5.024000| BhkENABLE||5.024000| BhkENTRY_set||5.024000| BhkENTRY||| BhkFLAGS||| CALL_BLOCK_HOOKS||| CLASS|||n CPERLscope|5.005000||p CX_CURPAD_SAVE||| CX_CURPAD_SV||| C_ARRAY_END|5.013002||p C_ARRAY_LENGTH|5.008001||p CopFILEAV|5.006000||p CopFILEGV_set|5.006000||p CopFILEGV|5.006000||p CopFILESV|5.006000||p CopFILE_set|5.006000||p CopFILE|5.006000||p CopSTASHPV_set|5.006000||p CopSTASHPV|5.006000||p CopSTASH_eq|5.006000||p CopSTASH_set|5.006000||p CopSTASH|5.006000||p CopyD|5.009002|5.004050|p Copy||| CvPADLIST||5.008001| CvSTASH||| CvWEAKOUTSIDE||| DECLARATION_FOR_LC_NUMERIC_MANIPULATION||5.021010|n DEFSV_set|5.010001||p DEFSV|5.004050||p DO_UTF8||5.006000| END_EXTERN_C|5.005000||p ENTER||| ERRSV|5.004050||p EXTEND||| EXTERN_C|5.005000||p F0convert|||n FREETMPS||| GIMME_V||5.004000|n GIMME|||n GROK_NUMERIC_RADIX|5.007002||p G_ARRAY||| G_DISCARD||| G_EVAL||| G_METHOD|5.006001||p G_NOARGS||| G_SCALAR||| G_VOID||5.004000| GetVars||| GvAV||| GvCV||| GvHV||| GvSV||| Gv_AMupdate||5.011000| HEf_SVKEY|5.003070||p HeHASH||5.003070| HeKEY||5.003070| HeKLEN||5.003070| HePV||5.004000| HeSVKEY_force||5.003070| HeSVKEY_set||5.004000| HeSVKEY||5.003070| HeUTF8|5.010001|5.008000|p HeVAL||5.003070| HvENAMELEN||5.015004| HvENAMEUTF8||5.015004| HvENAME||5.013007| HvNAMELEN_get|5.009003||p HvNAMELEN||5.015004| HvNAMEUTF8||5.015004| HvNAME_get|5.009003||p HvNAME||| INT2PTR|5.006000||p IN_LOCALE_COMPILETIME|5.007002||p IN_LOCALE_RUNTIME|5.007002||p IN_LOCALE|5.007002||p IN_PERL_COMPILETIME|5.008001||p IS_NUMBER_GREATER_THAN_UV_MAX|5.007002||p IS_NUMBER_INFINITY|5.007002||p IS_NUMBER_IN_UV|5.007002||p IS_NUMBER_NAN|5.007003||p IS_NUMBER_NEG|5.007002||p IS_NUMBER_NOT_INT|5.007002||p IVSIZE|5.006000||p IVTYPE|5.006000||p IVdf|5.006000||p LEAVE||| LINKLIST||5.013006| LVRET||| MARK||| MULTICALL||5.024000| MUTABLE_PTR|5.010001||p MUTABLE_SV|5.010001||p MY_CXT_CLONE|5.009002||p MY_CXT_INIT|5.007003||p MY_CXT|5.007003||p MoveD|5.009002|5.004050|p Move||| NATIVE_TO_NEED||5.007001|n NOOP|5.005000||p NUM2PTR|5.006000||p NVTYPE|5.006000||p NVef|5.006001||p NVff|5.006001||p NVgf|5.006001||p Newxc|5.009003||p Newxz|5.009003||p Newx|5.009003||p Nullav||| Nullch||| Nullcv||| Nullhv||| Nullsv||| OP_CLASS||5.013007| OP_DESC||5.007003| OP_NAME||5.007003| OP_TYPE_IS_OR_WAS||5.019010| OP_TYPE_IS||5.019007| ORIGMARK||| OpHAS_SIBLING|5.021007||p OpLASTSIB_set|5.021011||p OpMAYBESIB_set|5.021011||p OpMORESIB_set|5.021011||p OpSIBLING|5.021007||p PAD_BASE_SV||| PAD_CLONE_VARS||| PAD_COMPNAME_FLAGS||| PAD_COMPNAME_GEN_set||| PAD_COMPNAME_GEN||| PAD_COMPNAME_OURSTASH||| PAD_COMPNAME_PV||| PAD_COMPNAME_TYPE||| PAD_RESTORE_LOCAL||| PAD_SAVE_LOCAL||| PAD_SAVE_SETNULLPAD||| PAD_SETSV||| PAD_SET_CUR_NOSAVE||| PAD_SET_CUR||| PAD_SVl||| PAD_SV||| PERLIO_FUNCS_CAST|5.009003||p PERLIO_FUNCS_DECL|5.009003||p PERL_ABS|5.008001||p PERL_BCDVERSION|5.024000||p PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p PERL_HASH|5.003070||p PERL_INT_MAX|5.003070||p PERL_INT_MIN|5.003070||p PERL_LONG_MAX|5.003070||p PERL_LONG_MIN|5.003070||p PERL_MAGIC_arylen|5.007002||p PERL_MAGIC_backref|5.007002||p PERL_MAGIC_bm|5.007002||p PERL_MAGIC_collxfrm|5.007002||p PERL_MAGIC_dbfile|5.007002||p PERL_MAGIC_dbline|5.007002||p PERL_MAGIC_defelem|5.007002||p PERL_MAGIC_envelem|5.007002||p PERL_MAGIC_env|5.007002||p PERL_MAGIC_ext|5.007002||p PERL_MAGIC_fm|5.007002||p PERL_MAGIC_glob|5.024000||p PERL_MAGIC_isaelem|5.007002||p PERL_MAGIC_isa|5.007002||p PERL_MAGIC_mutex|5.024000||p PERL_MAGIC_nkeys|5.007002||p PERL_MAGIC_overload_elem|5.024000||p PERL_MAGIC_overload_table|5.007002||p PERL_MAGIC_overload|5.024000||p PERL_MAGIC_pos|5.007002||p PERL_MAGIC_qr|5.007002||p PERL_MAGIC_regdata|5.007002||p PERL_MAGIC_regdatum|5.007002||p PERL_MAGIC_regex_global|5.007002||p PERL_MAGIC_shared_scalar|5.007003||p PERL_MAGIC_shared|5.007003||p PERL_MAGIC_sigelem|5.007002||p PERL_MAGIC_sig|5.007002||p PERL_MAGIC_substr|5.007002||p PERL_MAGIC_sv|5.007002||p PERL_MAGIC_taint|5.007002||p PERL_MAGIC_tiedelem|5.007002||p PERL_MAGIC_tiedscalar|5.007002||p PERL_MAGIC_tied|5.007002||p PERL_MAGIC_utf8|5.008001||p PERL_MAGIC_uvar_elem|5.007003||p PERL_MAGIC_uvar|5.007002||p PERL_MAGIC_vec|5.007002||p PERL_MAGIC_vstring|5.008001||p PERL_PV_ESCAPE_ALL|5.009004||p PERL_PV_ESCAPE_FIRSTCHAR|5.009004||p PERL_PV_ESCAPE_NOBACKSLASH|5.009004||p PERL_PV_ESCAPE_NOCLEAR|5.009004||p PERL_PV_ESCAPE_QUOTE|5.009004||p PERL_PV_ESCAPE_RE|5.009005||p PERL_PV_ESCAPE_UNI_DETECT|5.009004||p PERL_PV_ESCAPE_UNI|5.009004||p PERL_PV_PRETTY_DUMP|5.009004||p PERL_PV_PRETTY_ELLIPSES|5.010000||p PERL_PV_PRETTY_LTGT|5.009004||p PERL_PV_PRETTY_NOCLEAR|5.010000||p PERL_PV_PRETTY_QUOTE|5.009004||p PERL_PV_PRETTY_REGPROP|5.009004||p PERL_QUAD_MAX|5.003070||p PERL_QUAD_MIN|5.003070||p PERL_REVISION|5.006000||p PERL_SCAN_ALLOW_UNDERSCORES|5.007003||p PERL_SCAN_DISALLOW_PREFIX|5.007003||p PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p PERL_SCAN_SILENT_ILLDIGIT|5.008001||p PERL_SHORT_MAX|5.003070||p PERL_SHORT_MIN|5.003070||p PERL_SIGNALS_UNSAFE_FLAG|5.008001||p PERL_SUBVERSION|5.006000||p PERL_SYS_INIT3||5.006000| PERL_SYS_INIT||| PERL_SYS_TERM||5.024000| PERL_UCHAR_MAX|5.003070||p PERL_UCHAR_MIN|5.003070||p PERL_UINT_MAX|5.003070||p PERL_UINT_MIN|5.003070||p PERL_ULONG_MAX|5.003070||p PERL_ULONG_MIN|5.003070||p PERL_UNUSED_ARG|5.009003||p PERL_UNUSED_CONTEXT|5.009004||p PERL_UNUSED_DECL|5.007002||p PERL_UNUSED_RESULT|5.021001||p PERL_UNUSED_VAR|5.007002||p PERL_UQUAD_MAX|5.003070||p PERL_UQUAD_MIN|5.003070||p PERL_USE_GCC_BRACE_GROUPS|5.009004||p PERL_USHORT_MAX|5.003070||p PERL_USHORT_MIN|5.003070||p PERL_VERSION|5.006000||p PL_DBsignal|5.005000||p PL_DBsingle|||pn PL_DBsub|||pn PL_DBtrace|||pn PL_Sv|5.005000||p PL_bufend|5.024000||p PL_bufptr|5.024000||p PL_check||5.006000| PL_compiling|5.004050||p PL_comppad_name||5.017004| PL_comppad||5.008001| PL_copline|5.024000||p PL_curcop|5.004050||p PL_curpad||5.005000| PL_curstash|5.004050||p PL_debstash|5.004050||p PL_defgv|5.004050||p PL_diehook|5.004050||p PL_dirty|5.004050||p PL_dowarn|||pn PL_errgv|5.004050||p PL_error_count|5.024000||p PL_expect|5.024000||p PL_hexdigit|5.005000||p PL_hints|5.005000||p PL_in_my_stash|5.024000||p PL_in_my|5.024000||p PL_keyword_plugin||5.011002| PL_last_in_gv|||n PL_laststatval|5.005000||p PL_lex_state|5.024000||p PL_lex_stuff|5.024000||p PL_linestr|5.024000||p PL_modglobal||5.005000|n PL_na|5.004050||pn PL_no_modify|5.006000||p PL_ofsgv|||n PL_opfreehook||5.011000|n PL_parser|5.009005||p PL_peepp||5.007003|n PL_perl_destruct_level|5.004050||p PL_perldb|5.004050||p PL_ppaddr|5.006000||p PL_rpeepp||5.013005|n PL_rsfp_filters|5.024000||p PL_rsfp|5.024000||p PL_rs|||n PL_signals|5.008001||p PL_stack_base|5.004050||p PL_stack_sp|5.004050||p PL_statcache|5.005000||p PL_stdingv|5.004050||p PL_sv_arenaroot|5.004050||p PL_sv_no|5.004050||pn PL_sv_undef|5.004050||pn PL_sv_yes|5.004050||pn PL_tainted|5.004050||p PL_tainting|5.004050||p PL_tokenbuf|5.024000||p POP_MULTICALL||5.024000| POPi|||n POPl|||n POPn|||n POPpbytex||5.007001|n POPpx||5.005030|n POPp|||n POPs|||n POPul||5.006000|n POPu||5.004000|n PTR2IV|5.006000||p PTR2NV|5.006000||p PTR2UV|5.006000||p PTR2nat|5.009003||p PTR2ul|5.007001||p PTRV|5.006000||p PUSHMARK||| PUSH_MULTICALL||5.024000| PUSHi||| PUSHmortal|5.009002||p PUSHn||| PUSHp||| PUSHs||| PUSHu|5.004000||p PUTBACK||| PadARRAY||5.024000| PadMAX||5.024000| PadlistARRAY||5.024000| PadlistMAX||5.024000| PadlistNAMESARRAY||5.024000| PadlistNAMESMAX||5.024000| PadlistNAMES||5.024000| PadlistREFCNT||5.017004| PadnameIsOUR||| PadnameIsSTATE||| PadnameLEN||5.024000| PadnameOURSTASH||| PadnameOUTER||| PadnamePV||5.024000| PadnameREFCNT_dec||5.024000| PadnameREFCNT||5.024000| PadnameSV||5.024000| PadnameTYPE||| PadnameUTF8||5.021007| PadnamelistARRAY||5.024000| PadnamelistMAX||5.024000| PadnamelistREFCNT_dec||5.024000| PadnamelistREFCNT||5.024000| PerlIO_clearerr||5.007003| PerlIO_close||5.007003| PerlIO_context_layers||5.009004| PerlIO_eof||5.007003| PerlIO_error||5.007003| PerlIO_fileno||5.007003| PerlIO_fill||5.007003| PerlIO_flush||5.007003| PerlIO_get_base||5.007003| PerlIO_get_bufsiz||5.007003| PerlIO_get_cnt||5.007003| PerlIO_get_ptr||5.007003| PerlIO_read||5.007003| PerlIO_restore_errno||| PerlIO_save_errno||| PerlIO_seek||5.007003| PerlIO_set_cnt||5.007003| PerlIO_set_ptrcnt||5.007003| PerlIO_setlinebuf||5.007003| PerlIO_stderr||5.007003| PerlIO_stdin||5.007003| PerlIO_stdout||5.007003| PerlIO_tell||5.007003| PerlIO_unread||5.007003| PerlIO_write||5.007003| Perl_signbit||5.009005|n PoisonFree|5.009004||p PoisonNew|5.009004||p PoisonWith|5.009004||p Poison|5.008000||p READ_XDIGIT||5.017006| RESTORE_LC_NUMERIC||5.024000| RETVAL|||n Renewc||| Renew||| SAVECLEARSV||| SAVECOMPPAD||| SAVEPADSV||| SAVETMPS||| SAVE_DEFSV|5.004050||p SPAGAIN||| SP||| START_EXTERN_C|5.005000||p START_MY_CXT|5.007003||p STMT_END|||p STMT_START|||p STORE_LC_NUMERIC_FORCE_TO_UNDERLYING||5.024000| STORE_LC_NUMERIC_SET_TO_NEEDED||5.024000| STR_WITH_LEN|5.009003||p ST||| SV_CONST_RETURN|5.009003||p SV_COW_DROP_PV|5.008001||p SV_COW_SHARED_HASH_KEYS|5.009005||p SV_GMAGIC|5.007002||p SV_HAS_TRAILING_NUL|5.009004||p SV_IMMEDIATE_UNREF|5.007001||p SV_MUTABLE_RETURN|5.009003||p SV_NOSTEAL|5.009002||p SV_SMAGIC|5.009003||p SV_UTF8_NO_ENCODING|5.008001||p SVfARG|5.009005||p SVf_UTF8|5.006000||p SVf|5.006000||p SVt_INVLIST||5.019002| SVt_IV||| SVt_NULL||| SVt_NV||| SVt_PVAV||| SVt_PVCV||| SVt_PVFM||| SVt_PVGV||| SVt_PVHV||| SVt_PVIO||| SVt_PVIV||| SVt_PVLV||| SVt_PVMG||| SVt_PVNV||| SVt_PV||| SVt_REGEXP||5.011000| Safefree||| Slab_Alloc||| Slab_Free||| Slab_to_ro||| Slab_to_rw||| StructCopy||| SvCUR_set||| SvCUR||| SvEND||| SvGAMAGIC||5.006001| SvGETMAGIC|5.004050||p SvGROW||| SvIOK_UV||5.006000| SvIOK_notUV||5.006000| SvIOK_off||| SvIOK_only_UV||5.006000| SvIOK_only||| SvIOK_on||| SvIOKp||| SvIOK||| SvIVX||| SvIV_nomg|5.009001||p SvIV_set||| SvIVx||| SvIV||| SvIsCOW_shared_hash||5.008003| SvIsCOW||5.008003| SvLEN_set||| SvLEN||| SvLOCK||5.007003| SvMAGIC_set|5.009003||p SvNIOK_off||| SvNIOKp||| SvNIOK||| SvNOK_off||| SvNOK_only||| SvNOK_on||| SvNOKp||| SvNOK||| SvNVX||| SvNV_nomg||5.013002| SvNV_set||| SvNVx||| SvNV||| SvOK||| SvOOK_offset||5.011000| SvOOK||| SvPOK_off||| SvPOK_only_UTF8||5.006000| SvPOK_only||| SvPOK_on||| SvPOKp||| SvPOK||| SvPVX_const|5.009003||p SvPVX_mutable|5.009003||p SvPVX||| SvPV_const|5.009003||p SvPV_flags_const_nolen|5.009003||p SvPV_flags_const|5.009003||p SvPV_flags_mutable|5.009003||p SvPV_flags|5.007002||p SvPV_force_flags_mutable|5.009003||p SvPV_force_flags_nolen|5.009003||p SvPV_force_flags|5.007002||p SvPV_force_mutable|5.009003||p SvPV_force_nolen|5.009003||p SvPV_force_nomg_nolen|5.009003||p SvPV_force_nomg|5.007002||p SvPV_force|||p SvPV_mutable|5.009003||p SvPV_nolen_const|5.009003||p SvPV_nolen|5.006000||p SvPV_nomg_const_nolen|5.009003||p SvPV_nomg_const|5.009003||p SvPV_nomg_nolen|5.013007||p SvPV_nomg|5.007002||p SvPV_renew|5.009003||p SvPV_set||| SvPVbyte_force||5.009002| SvPVbyte_nolen||5.006000| SvPVbytex_force||5.006000| SvPVbytex||5.006000| SvPVbyte|5.006000||p SvPVutf8_force||5.006000| SvPVutf8_nolen||5.006000| SvPVutf8x_force||5.006000| SvPVutf8x||5.006000| SvPVutf8||5.006000| SvPVx||| SvPV||| SvREFCNT_dec_NN||5.017007| SvREFCNT_dec||| SvREFCNT_inc_NN|5.009004||p SvREFCNT_inc_simple_NN|5.009004||p SvREFCNT_inc_simple_void_NN|5.009004||p SvREFCNT_inc_simple_void|5.009004||p SvREFCNT_inc_simple|5.009004||p SvREFCNT_inc_void_NN|5.009004||p SvREFCNT_inc_void|5.009004||p SvREFCNT_inc|||p SvREFCNT||| SvROK_off||| SvROK_on||| SvROK||| SvRV_set|5.009003||p SvRV||| SvRXOK|5.009005||p SvRX|5.009005||p SvSETMAGIC||| SvSHARED_HASH|5.009003||p SvSHARE||5.007003| SvSTASH_set|5.009003||p SvSTASH||| SvSetMagicSV_nosteal||5.004000| SvSetMagicSV||5.004000| SvSetSV_nosteal||5.004000| SvSetSV||| SvTAINTED_off||5.004000| SvTAINTED_on||5.004000| SvTAINTED||5.004000| SvTAINT||| SvTHINKFIRST||| SvTRUE_nomg||5.013006| SvTRUE||| SvTYPE||| SvUNLOCK||5.007003| SvUOK|5.007001|5.006000|p SvUPGRADE||| SvUTF8_off||5.006000| SvUTF8_on||5.006000| SvUTF8||5.006000| SvUVXx|5.004000||p SvUVX|5.004000||p SvUV_nomg|5.009001||p SvUV_set|5.009003||p SvUVx|5.004000||p SvUV|5.004000||p SvVOK||5.008001| SvVSTRING_mg|5.009004||p THIS|||n UNDERBAR|5.009002||p UTF8SKIP||5.006000| UTF8_MAXBYTES|5.009002||p UVCHR_SKIP||5.022000| UVSIZE|5.006000||p UVTYPE|5.006000||p UVXf|5.007001||p UVof|5.006000||p UVuf|5.006000||p UVxf|5.006000||p WARN_ALL|5.006000||p WARN_AMBIGUOUS|5.006000||p WARN_ASSERTIONS|5.024000||p WARN_BAREWORD|5.006000||p WARN_CLOSED|5.006000||p WARN_CLOSURE|5.006000||p WARN_DEBUGGING|5.006000||p WARN_DEPRECATED|5.006000||p WARN_DIGIT|5.006000||p WARN_EXEC|5.006000||p WARN_EXITING|5.006000||p WARN_GLOB|5.006000||p WARN_INPLACE|5.006000||p WARN_INTERNAL|5.006000||p WARN_IO|5.006000||p WARN_LAYER|5.008000||p WARN_MALLOC|5.006000||p WARN_MISC|5.006000||p WARN_NEWLINE|5.006000||p WARN_NUMERIC|5.006000||p WARN_ONCE|5.006000||p WARN_OVERFLOW|5.006000||p WARN_PACK|5.006000||p WARN_PARENTHESIS|5.006000||p WARN_PIPE|5.006000||p WARN_PORTABLE|5.006000||p WARN_PRECEDENCE|5.006000||p WARN_PRINTF|5.006000||p WARN_PROTOTYPE|5.006000||p WARN_QW|5.006000||p WARN_RECURSION|5.006000||p WARN_REDEFINE|5.006000||p WARN_REGEXP|5.006000||p WARN_RESERVED|5.006000||p WARN_SEMICOLON|5.006000||p WARN_SEVERE|5.006000||p WARN_SIGNAL|5.006000||p WARN_SUBSTR|5.006000||p WARN_SYNTAX|5.006000||p WARN_TAINT|5.006000||p WARN_THREADS|5.008000||p WARN_UNINITIALIZED|5.006000||p WARN_UNOPENED|5.006000||p WARN_UNPACK|5.006000||p WARN_UNTIE|5.006000||p WARN_UTF8|5.006000||p WARN_VOID|5.006000||p WIDEST_UTYPE|5.015004||p XCPT_CATCH|5.009002||p XCPT_RETHROW|5.009002||p XCPT_TRY_END|5.009002||p XCPT_TRY_START|5.009002||p XPUSHi||| XPUSHmortal|5.009002||p XPUSHn||| XPUSHp||| XPUSHs||| XPUSHu|5.004000||p XSPROTO|5.010000||p XSRETURN_EMPTY||| XSRETURN_IV||| XSRETURN_NO||| XSRETURN_NV||| XSRETURN_PV||| XSRETURN_UNDEF||| XSRETURN_UV|5.008001||p XSRETURN_YES||| XSRETURN|||p XST_mIV||| XST_mNO||| XST_mNV||| XST_mPV||| XST_mUNDEF||| XST_mUV|5.008001||p XST_mYES||| XS_APIVERSION_BOOTCHECK||5.024000| XS_EXTERNAL||5.024000| XS_INTERNAL||5.024000| XS_VERSION_BOOTCHECK||5.024000| XS_VERSION||| XSprePUSH|5.006000||p XS||| XopDISABLE||5.024000| XopENABLE||5.024000| XopENTRYCUSTOM||5.024000| XopENTRY_set||5.024000| XopENTRY||5.024000| XopFLAGS||5.013007| ZeroD|5.009002||p Zero||| _aMY_CXT|5.007003||p _add_range_to_invlist||| _append_range_to_invlist||| _core_swash_init||| _get_encoding||| _get_regclass_nonbitmap_data||| _get_swash_invlist||| _invlistEQ||| _invlist_array_init|||n _invlist_contains_cp|||n _invlist_dump||| _invlist_intersection_maybe_complement_2nd||| _invlist_intersection||| _invlist_invert||| _invlist_len|||n _invlist_populate_swatch|||n _invlist_search|||n _invlist_subtract||| _invlist_union_maybe_complement_2nd||| _invlist_union||| _is_cur_LC_category_utf8||| _is_in_locale_category||5.021001| _is_uni_FOO||5.017008| _is_uni_perl_idcont||5.017008| _is_uni_perl_idstart||5.017007| _is_utf8_FOO||5.017008| _is_utf8_char_slow||5.021001|n _is_utf8_idcont||5.021001| _is_utf8_idstart||5.021001| _is_utf8_mark||5.017008| _is_utf8_perl_idcont||5.017008| _is_utf8_perl_idstart||5.017007| _is_utf8_xidcont||5.021001| _is_utf8_xidstart||5.021001| _load_PL_utf8_foldclosures||| _make_exactf_invlist||| _new_invlist_C_array||| _new_invlist||| _pMY_CXT|5.007003||p _setlocale_debug_string|||n _setup_canned_invlist||| _swash_inversion_hash||| _swash_to_invlist||| _to_fold_latin1||| _to_uni_fold_flags||5.014000| _to_upper_title_latin1||| _to_utf8_case||| _to_utf8_fold_flags||5.019009| _to_utf8_lower_flags||5.019009| _to_utf8_title_flags||5.019009| _to_utf8_upper_flags||5.019009| _warn_problematic_locale|||n aMY_CXT_|5.007003||p aMY_CXT|5.007003||p aTHXR_|5.024000||p aTHXR|5.024000||p aTHX_|5.006000||p aTHX|5.006000||p add_above_Latin1_folds||| add_cp_to_invlist||| add_data|||n add_multi_match||| add_utf16_textfilter||| adjust_size_and_find_bucket|||n advance_one_LB||| advance_one_SB||| advance_one_WB||| alloc_maybe_populate_EXACT||| alloccopstash||| allocmy||| amagic_call||| amagic_cmp_locale||| amagic_cmp||| amagic_deref_call||5.013007| amagic_i_ncmp||| amagic_is_enabled||| amagic_ncmp||| anonymise_cv_maybe||| any_dup||| ao||| append_utf8_from_native_byte||5.019004|n apply_attrs_my||| apply_attrs_string||5.006001| apply_attrs||| apply||| assert_uft8_cache_coherent||| assignment_type||| atfork_lock||5.007003|n atfork_unlock||5.007003|n av_arylen_p||5.009003| av_clear||| av_create_and_push||5.009005| av_create_and_unshift_one||5.009005| av_delete||5.006000| av_exists||5.006000| av_extend_guts||| av_extend||| av_fetch||| av_fill||| av_iter_p||5.011000| av_len||| av_make||| av_pop||| av_push||| av_reify||| av_shift||| av_store||| av_tindex||5.017009| av_top_index||5.017009| av_undef||| av_unshift||| ax|||n backup_one_LB||| backup_one_SB||| backup_one_WB||| bad_type_gv||| bad_type_pv||| bind_match||| block_end||5.004000| block_gimme||5.004000| block_start||5.004000| blockhook_register||5.013003| boolSV|5.004000||p boot_core_PerlIO||| boot_core_UNIVERSAL||| boot_core_mro||| bytes_cmp_utf8||5.013007| bytes_from_utf8||5.007001| bytes_to_utf8||5.006001| cBOOL|5.013000||p call_argv|5.006000||p call_atexit||5.006000| call_list||5.004000| call_method|5.006000||p call_pv|5.006000||p call_sv|5.006000||p caller_cx|5.013005|5.006000|p calloc||5.007002|n cando||| cast_i32||5.006000|n cast_iv||5.006000|n cast_ulong||5.006000|n cast_uv||5.006000|n check_locale_boundary_crossing||| check_type_and_open||| check_uni||| check_utf8_print||| checkcomma||| ckWARN|5.006000||p ck_entersub_args_core||| ck_entersub_args_list||5.013006| ck_entersub_args_proto_or_list||5.013006| ck_entersub_args_proto||5.013006| ck_warner_d||5.011001|v ck_warner||5.011001|v ckwarn_common||| ckwarn_d||5.009003| ckwarn||5.009003| clear_defarray||5.023008| clear_placeholders||| clear_special_blocks||| clone_params_del|||n clone_params_new|||n closest_cop||| cntrl_to_mnemonic|||n compute_EXACTish|||n construct_ahocorasick_from_trie||| cop_fetch_label||5.015001| cop_free||| cop_hints_2hv||5.013007| cop_hints_fetch_pvn||5.013007| cop_hints_fetch_pvs||5.013007| cop_hints_fetch_pv||5.013007| cop_hints_fetch_sv||5.013007| cop_store_label||5.015001| cophh_2hv||5.013007| cophh_copy||5.013007| cophh_delete_pvn||5.013007| cophh_delete_pvs||5.013007| cophh_delete_pv||5.013007| cophh_delete_sv||5.013007| cophh_fetch_pvn||5.013007| cophh_fetch_pvs||5.013007| cophh_fetch_pv||5.013007| cophh_fetch_sv||5.013007| cophh_free||5.013007| cophh_new_empty||5.024000| cophh_store_pvn||5.013007| cophh_store_pvs||5.013007| cophh_store_pv||5.013007| cophh_store_sv||5.013007| core_prototype||| coresub_op||| cr_textfilter||| create_eval_scope||| croak_memory_wrap||5.019003|n croak_no_mem|||n croak_no_modify||5.013003|n croak_nocontext|||vn croak_popstack|||n croak_sv||5.013001| croak_xs_usage||5.010001|n croak|||v csighandler||5.009003|n current_re_engine||| curse||| custom_op_desc||5.007003| custom_op_get_field||| custom_op_name||5.007003| custom_op_register||5.013007| custom_op_xop||5.013007| cv_ckproto_len_flags||| cv_clone_into||| cv_clone||| cv_const_sv_or_av|||n cv_const_sv||5.003070|n cv_dump||| cv_forget_slab||| cv_get_call_checker||5.013006| cv_name||5.021005| cv_set_call_checker_flags||5.021004| cv_set_call_checker||5.013006| cv_undef_flags||| cv_undef||| cvgv_from_hek||| cvgv_set||| cvstash_set||| cx_dump||5.005000| cx_dup||| cx_popblock||5.023008| cx_popeval||5.023008| cx_popformat||5.023008| cx_popgiven||5.023008| cx_poploop||5.023008| cx_popsub_args||5.023008| cx_popsub_common||5.023008| cx_popsub||5.023008| cx_popwhen||5.023008| cx_pushblock||5.023008| cx_pusheval||5.023008| cx_pushformat||5.023008| cx_pushgiven||5.023008| cx_pushloop_for||5.023008| cx_pushloop_plain||5.023008| cx_pushsub||5.023008| cx_pushwhen||5.023008| cx_topblock||5.023008| cxinc||| dAXMARK|5.009003||p dAX|5.007002||p dITEMS|5.007002||p dMARK||| dMULTICALL||5.009003| dMY_CXT_SV|5.007003||p dMY_CXT|5.007003||p dNOOP|5.006000||p dORIGMARK||| dSP||| dTHR|5.004050||p dTHXR|5.024000||p dTHXa|5.006000||p dTHXoa|5.006000||p dTHX|5.006000||p dUNDERBAR|5.009002||p dVAR|5.009003||p dXCPT|5.009002||p dXSARGS||| dXSI32||| dXSTARG|5.006000||p deb_curcv||| deb_nocontext|||vn deb_stack_all||| deb_stack_n||| debop||5.005000| debprofdump||5.005000| debprof||| debstackptrs||5.007003| debstack||5.007003| debug_start_match||| deb||5.007003|v defelem_target||| del_sv||| delete_eval_scope||| delimcpy||5.004000|n deprecate_commaless_var_list||| despatch_signals||5.007001| destroy_matcher||| die_nocontext|||vn die_sv||5.013001| die_unwind||| die|||v dirp_dup||| div128||| djSP||| do_aexec5||| do_aexec||| do_aspawn||| do_binmode||5.004050| do_chomp||| do_close||| do_delete_local||| do_dump_pad||| do_eof||| do_exec3||| do_execfree||| do_exec||| do_gv_dump||5.006000| do_gvgv_dump||5.006000| do_hv_dump||5.006000| do_ipcctl||| do_ipcget||| do_join||| do_magic_dump||5.006000| do_msgrcv||| do_msgsnd||| do_ncmp||| do_oddball||| do_op_dump||5.006000| do_open6||| do_open9||5.006000| do_open_raw||| do_openn||5.007001| do_open||5.003070| do_pmop_dump||5.006000| do_print||| do_readline||| do_seek||| do_semop||| do_shmio||| do_smartmatch||| do_spawn_nowait||| do_spawn||| do_sprintf||| do_sv_dump||5.006000| do_sysseek||| do_tell||| do_trans_complex_utf8||| do_trans_complex||| do_trans_count_utf8||| do_trans_count||| do_trans_simple_utf8||| do_trans_simple||| do_trans||| do_vecget||| do_vecset||| do_vop||| docatch||| doeval_compile||| dofile||| dofindlabel||| doform||| doing_taint||5.008001|n dooneliner||| doopen_pm||| doparseform||| dopoptoeval||| dopoptogivenfor||| dopoptolabel||| dopoptoloop||| dopoptosub_at||| dopoptowhen||| doref||5.009003| dounwind||| dowantarray||| drand48_init_r|||n drand48_r|||n dtrace_probe_call||| dtrace_probe_load||| dtrace_probe_op||| dtrace_probe_phase||| dump_all_perl||| dump_all||5.006000| dump_c_backtrace||| dump_eval||5.006000| dump_exec_pos||| dump_form||5.006000| dump_indent||5.006000|v dump_mstats||| dump_packsubs_perl||| dump_packsubs||5.006000| dump_sub_perl||| dump_sub||5.006000| dump_sv_child||| dump_trie_interim_list||| dump_trie_interim_table||| dump_trie||| dump_vindent||5.006000| dumpuntil||| dup_attrlist||| edit_distance|||n emulate_cop_io||| eval_pv|5.006000||p eval_sv|5.006000||p exec_failed||| expect_number||| fbm_compile||5.005000| fbm_instr||5.005000| feature_is_enabled||| filter_add||| filter_del||| filter_gets||| filter_read||| finalize_optree||| finalize_op||| find_and_forget_pmops||| find_array_subscript||| find_beginning||| find_byclass||| find_default_stash||| find_hash_subscript||| find_in_my_stash||| find_lexical_cv||| find_runcv_where||| find_runcv||5.008001| find_rundefsvoffset||5.009002| find_rundefsv||5.013002| find_script||| find_uninit_var||| first_symbol|||n fixup_errno_string||| foldEQ_latin1||5.013008|n foldEQ_locale||5.013002|n foldEQ_utf8_flags||5.013010| foldEQ_utf8||5.013002| foldEQ||5.013002|n fold_constants||| forbid_setid||| force_ident_maybe_lex||| force_ident||| force_list||| force_next||| force_strict_version||| force_version||| force_word||| forget_pmop||| form_nocontext|||vn form_short_octal_warning||| form||5.004000|v fp_dup||| fprintf_nocontext|||vn free_c_backtrace||| free_global_struct||| free_tied_hv_pool||| free_tmps||| gen_constant_list||| get_ANYOF_cp_list_for_ssc||| get_and_check_backslash_N_name||| get_aux_mg||| get_av|5.006000||p get_c_backtrace_dump||| get_c_backtrace||| get_context||5.006000|n get_cvn_flags||| get_cvs|5.011000||p get_cv|5.006000||p get_db_sub||| get_debug_opts||| get_hash_seed||| get_hv|5.006000||p get_invlist_iter_addr|||n get_invlist_offset_addr|||n get_invlist_previous_index_addr|||n get_mstats||| get_no_modify||| get_num||| get_op_descs||5.005000| get_op_names||5.005000| get_opargs||| get_ppaddr||5.006000| get_re_arg||| get_sv|5.006000||p get_vtbl||5.005030| getcwd_sv||5.007002| getenv_len||| glob_2number||| glob_assign_glob||| gp_dup||| gp_free||| gp_ref||| grok_atoUV|||n grok_bin|5.007003||p grok_bslash_N||| grok_bslash_c||| grok_bslash_o||| grok_bslash_x||| grok_hex|5.007003||p grok_infnan||5.021004| grok_number_flags||5.021002| grok_number|5.007002||p grok_numeric_radix|5.007002||p grok_oct|5.007003||p group_end||| gv_AVadd||| gv_HVadd||| gv_IOadd||| gv_SVadd||| gv_add_by_type||5.011000| gv_autoload4||5.004000| gv_autoload_pvn||5.015004| gv_autoload_pv||5.015004| gv_autoload_sv||5.015004| gv_check||| gv_const_sv||5.009003| gv_dump||5.006000| gv_efullname3||5.003070| gv_efullname4||5.006001| gv_efullname||| gv_fetchfile_flags||5.009005| gv_fetchfile||| gv_fetchmeth_autoload||5.007003| gv_fetchmeth_internal||| gv_fetchmeth_pv_autoload||5.015004| gv_fetchmeth_pvn_autoload||5.015004| gv_fetchmeth_pvn||5.015004| gv_fetchmeth_pv||5.015004| gv_fetchmeth_sv_autoload||5.015004| gv_fetchmeth_sv||5.015004| gv_fetchmethod_autoload||5.004000| gv_fetchmethod_pv_flags||5.015004| gv_fetchmethod_pvn_flags||5.015004| gv_fetchmethod_sv_flags||5.015004| gv_fetchmethod||| gv_fetchmeth||| gv_fetchpvn_flags|5.009002||p gv_fetchpvs|5.009004||p gv_fetchpv||| gv_fetchsv||| gv_fullname3||5.003070| gv_fullname4||5.006001| gv_fullname||| gv_handler||5.007001| gv_init_pvn||| gv_init_pv||5.015004| gv_init_svtype||| gv_init_sv||5.015004| gv_init||| gv_is_in_main||| gv_magicalize_isa||| gv_magicalize||| gv_name_set||5.009004| gv_override||| gv_setref||| gv_stashpvn_internal||| gv_stashpvn|5.003070||p gv_stashpvs|5.009003||p gv_stashpv||| gv_stashsvpvn_cached||| gv_stashsv||| gv_try_downgrade||| handle_named_backref||| handle_possible_posix||| handle_regex_sets||| he_dup||| hek_dup||| hfree_next_entry||| hfreeentries||| hsplit||| hv_assert||| hv_auxinit_internal|||n hv_auxinit||| hv_backreferences_p||| hv_clear_placeholders||5.009001| hv_clear||| hv_common_key_len||5.010000| hv_common||5.010000| hv_copy_hints_hv||5.009004| hv_delayfree_ent||5.004000| hv_delete_common||| hv_delete_ent||5.003070| hv_delete||| hv_eiter_p||5.009003| hv_eiter_set||5.009003| hv_ename_add||| hv_ename_delete||| hv_exists_ent||5.003070| hv_exists||| hv_fetch_ent||5.003070| hv_fetchs|5.009003||p hv_fetch||| hv_fill||5.013002| hv_free_ent_ret||| hv_free_ent||5.004000| hv_iterinit||| hv_iterkeysv||5.003070| hv_iterkey||| hv_iternext_flags||5.008000| hv_iternextsv||| hv_iternext||| hv_iterval||| hv_kill_backrefs||| hv_ksplit||5.003070| hv_magic_check|||n hv_magic||| hv_name_set||5.009003| hv_notallowed||| hv_placeholders_get||5.009003| hv_placeholders_p||| hv_placeholders_set||5.009003| hv_rand_set||5.018000| hv_riter_p||5.009003| hv_riter_set||5.009003| hv_scalar||5.009001| hv_store_ent||5.003070| hv_store_flags||5.008000| hv_stores|5.009004||p hv_store||| hv_undef_flags||| hv_undef||| ibcmp_locale||5.004000| ibcmp_utf8||5.007003| ibcmp||| incline||| incpush_if_exists||| incpush_use_sep||| incpush||| ingroup||| init_argv_symbols||| init_constants||| init_dbargs||| init_debugger||| init_global_struct||| init_i18nl10n||5.006000| init_i18nl14n||5.006000| init_ids||| init_interp||| init_main_stash||| init_perllib||| init_postdump_symbols||| init_predump_symbols||| init_stacks||5.005000| init_tm||5.007002| inplace_aassign||| instr|||n intro_my||5.004000| intuit_method||| intuit_more||| invert||| invlist_array|||n invlist_clear||| invlist_clone||| invlist_contents||| invlist_extend||| invlist_highest|||n invlist_is_iterating|||n invlist_iterfinish|||n invlist_iterinit|||n invlist_iternext|||n invlist_max|||n invlist_previous_index|||n invlist_replace_list_destroys_src||| invlist_set_len||| invlist_set_previous_index|||n invlist_trim|||n invoke_exception_hook||| io_close||| isALNUMC|5.006000||p isALNUM_lazy||5.021001| isALPHANUMERIC||5.017008| isALPHA||| isASCII|5.006000||p isBLANK|5.006001||p isCNTRL|5.006000||p isDIGIT||| isFOO_lc||| isFOO_utf8_lc||| isGCB|||n isGRAPH|5.006000||p isIDCONT||5.017008| isIDFIRST_lazy||5.021001| isIDFIRST||| isLB||| isLOWER||| isOCTAL||5.013005| isPRINT|5.004000||p isPSXSPC|5.006001||p isPUNCT|5.006000||p isSB||| isSPACE||| isUPPER||| isUTF8_CHAR||5.021001| isWB||| isWORDCHAR||5.013006| isXDIGIT|5.006000||p is_an_int||| is_ascii_string||5.011000| is_handle_constructor|||n is_invariant_string||5.021007|n is_lvalue_sub||5.007001| is_safe_syscall||5.019004| is_ssc_worth_it|||n is_uni_alnum_lc||5.006000| is_uni_alnumc_lc||5.017007| is_uni_alnumc||5.017007| is_uni_alnum||5.006000| is_uni_alpha_lc||5.006000| is_uni_alpha||5.006000| is_uni_ascii_lc||5.006000| is_uni_ascii||5.006000| is_uni_blank_lc||5.017002| is_uni_blank||5.017002| is_uni_cntrl_lc||5.006000| is_uni_cntrl||5.006000| is_uni_digit_lc||5.006000| is_uni_digit||5.006000| is_uni_graph_lc||5.006000| is_uni_graph||5.006000| is_uni_idfirst_lc||5.006000| is_uni_idfirst||5.006000| is_uni_lower_lc||5.006000| is_uni_lower||5.006000| is_uni_print_lc||5.006000| is_uni_print||5.006000| is_uni_punct_lc||5.006000| is_uni_punct||5.006000| is_uni_space_lc||5.006000| is_uni_space||5.006000| is_uni_upper_lc||5.006000| is_uni_upper||5.006000| is_uni_xdigit_lc||5.006000| is_uni_xdigit||5.006000| is_utf8_alnumc||5.017007| is_utf8_alnum||5.006000| is_utf8_alpha||5.006000| is_utf8_ascii||5.006000| is_utf8_blank||5.017002| is_utf8_char_buf||5.015008|n is_utf8_char||5.006000|n is_utf8_cntrl||5.006000| is_utf8_common||| is_utf8_digit||5.006000| is_utf8_graph||5.006000| is_utf8_idcont||5.008000| is_utf8_idfirst||5.006000| is_utf8_lower||5.006000| is_utf8_mark||5.006000| is_utf8_perl_space||5.011001| is_utf8_perl_word||5.011001| is_utf8_posix_digit||5.011001| is_utf8_print||5.006000| is_utf8_punct||5.006000| is_utf8_space||5.006000| is_utf8_string_loclen||5.009003|n is_utf8_string_loc||5.008001|n is_utf8_string||5.006001|n is_utf8_upper||5.006000| is_utf8_xdigit||5.006000| is_utf8_xidcont||5.013010| is_utf8_xidfirst||5.013010| isa_lookup||| isinfnansv||| isinfnan||5.021004|n items|||n ix|||n jmaybe||| join_exact||| keyword_plugin_standard||| keyword||| leave_adjust_stacks||5.023008| leave_scope||| lex_bufutf8||5.011002| lex_discard_to||5.011002| lex_grow_linestr||5.011002| lex_next_chunk||5.011002| lex_peek_unichar||5.011002| lex_read_space||5.011002| lex_read_to||5.011002| lex_read_unichar||5.011002| lex_start||5.009005| lex_stuff_pvn||5.011002| lex_stuff_pvs||5.013005| lex_stuff_pv||5.013006| lex_stuff_sv||5.011002| lex_unstuff||5.011002| listkids||| list||| load_module_nocontext|||vn load_module|5.006000||pv localize||| looks_like_bool||| looks_like_number||| lop||| mPUSHi|5.009002||p mPUSHn|5.009002||p mPUSHp|5.009002||p mPUSHs|5.010001||p mPUSHu|5.009002||p mXPUSHi|5.009002||p mXPUSHn|5.009002||p mXPUSHp|5.009002||p mXPUSHs|5.010001||p mXPUSHu|5.009002||p magic_clear_all_env||| magic_cleararylen_p||| magic_clearenv||| magic_clearhints||| magic_clearhint||| magic_clearisa||| magic_clearpack||| magic_clearsig||| magic_copycallchecker||| magic_dump||5.006000| magic_existspack||| magic_freearylen_p||| magic_freeovrld||| magic_getarylen||| magic_getdebugvar||| magic_getdefelem||| magic_getnkeys||| magic_getpack||| magic_getpos||| magic_getsig||| magic_getsubstr||| magic_gettaint||| magic_getuvar||| magic_getvec||| magic_get||| magic_killbackrefs||| magic_methcall1||| magic_methcall|||v magic_methpack||| magic_nextpack||| magic_regdata_cnt||| magic_regdatum_get||| magic_regdatum_set||| magic_scalarpack||| magic_set_all_env||| magic_setarylen||| magic_setcollxfrm||| magic_setdbline||| magic_setdebugvar||| magic_setdefelem||| magic_setenv||| magic_sethint||| magic_setisa||| magic_setlvref||| magic_setmglob||| magic_setnkeys||| magic_setpack||| magic_setpos||| magic_setregexp||| magic_setsig||| magic_setsubstr||| magic_settaint||| magic_setutf8||| magic_setuvar||| magic_setvec||| magic_set||| magic_sizepack||| magic_wipepack||| make_matcher||| make_trie||| malloc_good_size|||n malloced_size|||n malloc||5.007002|n markstack_grow||5.021001| matcher_matches_sv||| maybe_multimagic_gv||| mayberelocate||| measure_struct||| memEQs|5.009005||p memEQ|5.004000||p memNEs|5.009005||p memNE|5.004000||p mem_collxfrm||| mem_log_alloc|||n mem_log_common|||n mem_log_free|||n mem_log_realloc|||n mess_alloc||| mess_nocontext|||vn mess_sv||5.013001| mess||5.006000|v mfree||5.007002|n mg_clear||| mg_copy||| mg_dup||| mg_find_mglob||| mg_findext|5.013008||pn mg_find|||n mg_free_type||5.013006| mg_free||| mg_get||| mg_length||5.005000| mg_localize||| mg_magical|||n mg_set||| mg_size||5.005000| mini_mktime||5.007002|n minus_v||| missingterm||| mode_from_discipline||| modkids||| more_bodies||| more_sv||| moreswitches||| move_proto_attr||| mro_clean_isarev||| mro_gather_and_rename||| mro_get_from_name||5.010001| mro_get_linear_isa_dfs||| mro_get_linear_isa||5.009005| mro_get_private_data||5.010001| mro_isa_changed_in||| mro_meta_dup||| mro_meta_init||| mro_method_changed_in||5.009005| mro_package_moved||| mro_register||5.010001| mro_set_mro||5.010001| mro_set_private_data||5.010001| mul128||| mulexp10|||n multideref_stringify||| my_atof2||5.007002| my_atof||5.006000| my_attrs||| my_bcopy||5.004050|n my_bytes_to_utf8|||n my_bzero|||n my_chsize||| my_clearenv||| my_cxt_index||| my_cxt_init||| my_dirfd||5.009005|n my_exit_jump||| my_exit||| my_failure_exit||5.004000| my_fflush_all||5.006000| my_fork||5.007003|n my_kid||| my_lstat_flags||| my_lstat||5.024000| my_memcmp|||n my_memset|||n my_pclose||5.003070| my_popen_list||5.007001| my_popen||5.003070| my_setenv||| my_setlocale||| my_snprintf|5.009004||pvn my_socketpair||5.007003|n my_sprintf|5.009003||pvn my_stat_flags||| my_stat||5.024000| my_strerror||5.021001| my_strftime||5.007002| my_strlcat|5.009004||pn my_strlcpy|5.009004||pn my_unexec||| my_vsnprintf||5.009004|n need_utf8|||n newANONATTRSUB||5.006000| newANONHASH||| newANONLIST||| newANONSUB||| newASSIGNOP||| newATTRSUB_x||| newATTRSUB||5.006000| newAVREF||| newAV||| newBINOP||| newCONDOP||| newCONSTSUB_flags||5.015006| newCONSTSUB|5.004050||p newCVREF||| newDEFSVOP||5.021006| newFORM||| newFOROP||5.013007| newGIVENOP||5.009003| newGIVWHENOP||| newGP||| newGVOP||| newGVREF||| newGVgen_flags||5.015004| newGVgen||| newHVREF||| newHVhv||5.005000| newHV||| newIO||| newLISTOP||| newLOGOP||| newLOOPEX||| newLOOPOP||| newMETHOP_internal||| newMETHOP_named||5.021005| newMETHOP||5.021005| newMYSUB||5.017004| newNULLLIST||| newOP||| newPADNAMELIST||5.021007|n newPADNAMEouter||5.021007|n newPADNAMEpvn||5.021007|n newPADOP||| newPMOP||| newPROG||| newPVOP||| newRANGE||| newRV_inc|5.004000||p newRV_noinc|5.004000||p newRV||| newSLICEOP||| newSTATEOP||| newSTUB||| newSUB||| newSVOP||| newSVREF||| newSV_type|5.009005||p newSVavdefelem||| newSVhek||5.009003| newSViv||| newSVnv||| newSVpadname||5.017004| newSVpv_share||5.013006| newSVpvf_nocontext|||vn newSVpvf||5.004000|v newSVpvn_flags|5.010001||p newSVpvn_share|5.007001||p newSVpvn_utf8|5.010001||p newSVpvn|5.004050||p newSVpvs_flags|5.010001||p newSVpvs_share|5.009003||p newSVpvs|5.009003||p newSVpv||| newSVrv||| newSVsv||| newSVuv|5.006000||p newSV||| newUNOP_AUX||5.021007| newUNOP||| newWHENOP||5.009003| newWHILEOP||5.013007| newXS_deffile||| newXS_flags||5.009004| newXS_len_flags||| newXSproto||5.006000| newXS||5.006000| new_collate||5.006000| new_constant||| new_ctype||5.006000| new_he||| new_logop||| new_numeric||5.006000| new_stackinfo||5.005000| new_version||5.009000| new_warnings_bitfield||| next_symbol||| nextargv||| nextchar||| ninstr|||n no_bareword_allowed||| no_fh_allowed||| no_op||| noperl_die|||vn not_a_number||| not_incrementable||| nothreadhook||5.008000| nuke_stacks||| num_overflow|||n oopsAV||| oopsHV||| op_append_elem||5.013006| op_append_list||5.013006| op_clear||| op_contextualize||5.013006| op_convert_list||5.021006| op_dump||5.006000| op_free||| op_integerize||| op_linklist||5.013006| op_lvalue_flags||| op_lvalue||5.013007| op_null||5.007002| op_parent|||n op_prepend_elem||5.013006| op_refcnt_dec||| op_refcnt_inc||| op_refcnt_lock||5.009002| op_refcnt_unlock||5.009002| op_relocate_sv||| op_scope||5.013007| op_sibling_splice||5.021002|n op_std_init||| op_unscope||| open_script||| openn_cleanup||| openn_setup||| opmethod_stash||| opslab_force_free||| opslab_free_nopad||| opslab_free||| output_or_return_posix_warnings||| pMY_CXT_|5.007003||p pMY_CXT|5.007003||p pTHX_|5.006000||p pTHX|5.006000||p packWARN|5.007003||p pack_cat||5.007003| pack_rec||| package_version||| package||| packlist||5.008001| pad_add_anon||5.008001| pad_add_name_pvn||5.015001| pad_add_name_pvs||5.015001| pad_add_name_pv||5.015001| pad_add_name_sv||5.015001| pad_add_weakref||| pad_alloc_name||| pad_alloc||| pad_block_start||| pad_check_dup||| pad_compname_type||5.009003| pad_findlex||| pad_findmy_pvn||5.015001| pad_findmy_pvs||5.015001| pad_findmy_pv||5.015001| pad_findmy_sv||5.015001| pad_fixup_inner_anons||| pad_free||| pad_leavemy||| pad_new||5.008001| pad_push||| pad_reset||| pad_setsv||| pad_sv||| pad_swipe||| pad_tidy||5.008001| padlist_dup||| padlist_store||| padname_dup||| padname_free||| padnamelist_dup||| padnamelist_fetch||5.021007|n padnamelist_free||| padnamelist_store||5.021007| parse_arithexpr||5.013008| parse_barestmt||5.013007| parse_block||5.013007| parse_body||| parse_fullexpr||5.013008| parse_fullstmt||5.013005| parse_gv_stash_name||| parse_ident||| parse_label||5.013007| parse_listexpr||5.013008| parse_lparen_question_flags||| parse_stmtseq||5.013006| parse_subsignature||| parse_termexpr||5.013008| parse_unicode_opts||| parser_dup||| parser_free_nexttoke_ops||| parser_free||| path_is_searchable|||n peep||| pending_ident||| perl_alloc_using|||n perl_alloc|||n perl_clone_using|||n perl_clone|||n perl_construct|||n perl_destruct||5.007003|n perl_free|||n perl_parse||5.006000|n perl_run|||n pidgone||| pm_description||| pmop_dump||5.006000| pmruntime||| pmtrans||| pop_scope||| populate_ANYOF_from_invlist||| populate_isa|||v pregcomp||5.009005| pregexec||| pregfree2||5.011000| pregfree||| prescan_version||5.011004| printbuf||| printf_nocontext|||vn process_special_blocks||| ptr_hash|||n ptr_table_clear||5.009005| ptr_table_fetch||5.009005| ptr_table_find|||n ptr_table_free||5.009005| ptr_table_new||5.009005| ptr_table_split||5.009005| ptr_table_store||5.009005| push_scope||| put_charclass_bitmap_innards_common||| put_charclass_bitmap_innards_invlist||| put_charclass_bitmap_innards||| put_code_point||| put_range||| pv_display|5.006000||p pv_escape|5.009004||p pv_pretty|5.009004||p pv_uni_display||5.007003| qerror||| qsortsvu||| quadmath_format_needed|||n quadmath_format_single|||n re_compile||5.009005| re_croak2||| re_dup_guts||| re_exec_indentf|||v re_indentf|||v re_intuit_start||5.019001| re_intuit_string||5.006000| re_op_compile||| re_printf|||v realloc||5.007002|n reentrant_free||5.024000| reentrant_init||5.024000| reentrant_retry||5.024000|vn reentrant_size||5.024000| ref_array_or_hash||| refcounted_he_chain_2hv||| refcounted_he_fetch_pvn||| refcounted_he_fetch_pvs||| refcounted_he_fetch_pv||| refcounted_he_fetch_sv||| refcounted_he_free||| refcounted_he_inc||| refcounted_he_new_pvn||| refcounted_he_new_pvs||| refcounted_he_new_pv||| refcounted_he_new_sv||| refcounted_he_value||| refkids||| refto||| ref||5.024000| reg2Lanode||| reg_check_named_buff_matched|||n reg_named_buff_all||5.009005| reg_named_buff_exists||5.009005| reg_named_buff_fetch||5.009005| reg_named_buff_firstkey||5.009005| reg_named_buff_iter||| reg_named_buff_nextkey||5.009005| reg_named_buff_scalar||5.009005| reg_named_buff||| reg_node||| reg_numbered_buff_fetch||| reg_numbered_buff_length||| reg_numbered_buff_store||| reg_qr_package||| reg_recode||| reg_scan_name||| reg_skipcomment|||n reg_temp_copy||| reganode||| regatom||| regbranch||| regclass_swash||5.009004| regclass||| regcppop||| regcppush||| regcurly|||n regdump_extflags||| regdump_intflags||| regdump||5.005000| regdupe_internal||| regex_set_precedence|||n regexec_flags||5.005000| regfree_internal||5.009005| reghop3|||n reghop4|||n reghopmaybe3|||n reginclass||| reginitcolors||5.006000| reginsert||| regmatch||| regnext||5.005000| regnode_guts||| regpiece||| regprop||| regrepeat||| regtail_study||| regtail||| regtry||| reg||| repeatcpy|||n report_evil_fh||| report_redefined_cv||| report_uninit||| report_wrongway_fh||| require_pv||5.006000| require_tie_mod||| restore_magic||| rninstr|||n rpeep||| rsignal_restore||| rsignal_save||| rsignal_state||5.004000| rsignal||5.004000| run_body||| run_user_filter||| runops_debug||5.005000| runops_standard||5.005000| rv2cv_op_cv||5.013006| rvpv_dup||| rxres_free||| rxres_restore||| rxres_save||| safesyscalloc||5.006000|n safesysfree||5.006000|n safesysmalloc||5.006000|n safesysrealloc||5.006000|n same_dirent||| save_I16||5.004000| save_I32||| save_I8||5.006000| save_adelete||5.011000| save_aelem_flags||5.011000| save_aelem||5.004050| save_alloc||5.006000| save_aptr||| save_ary||| save_bool||5.008001| save_clearsv||| save_delete||| save_destructor_x||5.006000| save_destructor||5.006000| save_freeop||| save_freepv||| save_freesv||| save_generic_pvref||5.006001| save_generic_svref||5.005030| save_gp||5.004000| save_hash||| save_hdelete||5.011000| save_hek_flags|||n save_helem_flags||5.011000| save_helem||5.004050| save_hints||5.010001| save_hptr||| save_int||| save_item||| save_iv||5.005000| save_lines||| save_list||| save_long||| save_magic_flags||| save_mortalizesv||5.007001| save_nogv||| save_op||5.005000| save_padsv_and_mortalize||5.010001| save_pptr||| save_pushi32ptr||5.010001| save_pushptri32ptr||| save_pushptrptr||5.010001| save_pushptr||5.010001| save_re_context||5.006000| save_scalar_at||| save_scalar||| save_set_svflags||5.009000| save_shared_pvref||5.007003| save_sptr||| save_strlen||| save_svref||| save_vptr||5.006000| savepvn||| savepvs||5.009003| savepv||| savesharedpvn||5.009005| savesharedpvs||5.013006| savesharedpv||5.007003| savesharedsvpv||5.013006| savestack_grow_cnt||5.008001| savestack_grow||| savesvpv||5.009002| savetmps||5.023008| sawparens||| scalar_mod_type|||n scalarboolean||| scalarkids||| scalarseq||| scalarvoid||| scalar||| scan_bin||5.006000| scan_commit||| scan_const||| scan_formline||| scan_heredoc||| scan_hex||| scan_ident||| scan_inputsymbol||| scan_num||5.007001| scan_oct||| scan_pat||| scan_str||| scan_subst||| scan_trans||| scan_version||5.009001| scan_vstring||5.009005| scan_word||| search_const||| seed||5.008001| sequence_num||| set_ANYOF_arg||| set_caret_X||| set_context||5.006000|n set_numeric_local||5.006000| set_numeric_radix||5.006000| set_numeric_standard||5.006000| set_padlist|||n setdefout||| share_hek_flags||| share_hek||5.004000| should_warn_nl|||n si_dup||| sighandler|||n simplify_sort||| skip_to_be_ignored_text||| skipspace_flags||| softref2xv||| sortcv_stacked||| sortcv_xsub||| sortcv||| sortsv_flags||5.009003| sortsv||5.007003| space_join_names_mortal||| ss_dup||| ssc_add_range||| ssc_and||| ssc_anything||| ssc_clear_locale|||n ssc_cp_and||| ssc_finalize||| ssc_init||| ssc_intersection||| ssc_is_anything|||n ssc_is_cp_posixl_init|||n ssc_or||| ssc_union||| stack_grow||| start_glob||| start_subparse||5.004000| stdize_locale||| strEQ||| strGE||| strGT||| strLE||| strLT||| strNE||| str_to_version||5.006000| strip_return||| strnEQ||| strnNE||| study_chunk||| sub_crush_depth||| sublex_done||| sublex_push||| sublex_start||| sv_2bool_flags||5.013006| sv_2bool||| sv_2cv||| sv_2io||| sv_2iuv_common||| sv_2iuv_non_preserve||| sv_2iv_flags||5.009001| sv_2iv||| sv_2mortal||| sv_2num||| sv_2nv_flags||5.013001| sv_2pv_flags|5.007002||p sv_2pv_nolen|5.006000||p sv_2pvbyte_nolen|5.006000||p sv_2pvbyte|5.006000||p sv_2pvutf8_nolen||5.006000| sv_2pvutf8||5.006000| sv_2pv||| sv_2uv_flags||5.009001| sv_2uv|5.004000||p sv_add_arena||| sv_add_backref||| sv_backoff|||n sv_bless||| sv_buf_to_ro||| sv_buf_to_rw||| sv_cat_decode||5.008001| sv_catpv_flags||5.013006| sv_catpv_mg|5.004050||p sv_catpv_nomg||5.013006| sv_catpvf_mg_nocontext|||pvn sv_catpvf_mg|5.006000|5.004000|pv sv_catpvf_nocontext|||vn sv_catpvf||5.004000|v sv_catpvn_flags||5.007002| sv_catpvn_mg|5.004050||p sv_catpvn_nomg|5.007002||p sv_catpvn||| sv_catpvs_flags||5.013006| sv_catpvs_mg||5.013006| sv_catpvs_nomg||5.013006| sv_catpvs|5.009003||p sv_catpv||| sv_catsv_flags||5.007002| sv_catsv_mg|5.004050||p sv_catsv_nomg|5.007002||p sv_catsv||| sv_chop||| sv_clean_all||| sv_clean_objs||| sv_clear||| sv_cmp_flags||5.013006| sv_cmp_locale_flags||5.013006| sv_cmp_locale||5.004000| sv_cmp||| sv_collxfrm_flags||5.013006| sv_collxfrm||| sv_copypv_flags||5.017002| sv_copypv_nomg||5.017002| sv_copypv||| sv_dec_nomg||5.013002| sv_dec||| sv_del_backref||| sv_derived_from_pvn||5.015004| sv_derived_from_pv||5.015004| sv_derived_from_sv||5.015004| sv_derived_from||5.004000| sv_destroyable||5.010000| sv_display||| sv_does_pvn||5.015004| sv_does_pv||5.015004| sv_does_sv||5.015004| sv_does||5.009004| sv_dump||| sv_dup_common||| sv_dup_inc_multiple||| sv_dup_inc||| sv_dup||| sv_eq_flags||5.013006| sv_eq||| sv_exp_grow||| sv_force_normal_flags||5.007001| sv_force_normal||5.006000| sv_free2||| sv_free_arenas||| sv_free||| sv_get_backrefs||5.021008|n sv_gets||5.003070| sv_grow||| sv_i_ncmp||| sv_inc_nomg||5.013002| sv_inc||| sv_insert_flags||5.010001| sv_insert||| sv_isa||| sv_isobject||| sv_iv||5.005000| sv_kill_backrefs||| sv_len_utf8_nomg||| sv_len_utf8||5.006000| sv_len||| sv_magic_portable|5.024000|5.004000|p sv_magicext_mglob||| sv_magicext||5.007003| sv_magic||| sv_mortalcopy_flags||| sv_mortalcopy||| sv_ncmp||| sv_newmortal||| sv_newref||| sv_nolocking||5.007003| sv_nosharing||5.007003| sv_nounlocking||| sv_nv||5.005000| sv_only_taint_gmagic|||n sv_or_pv_pos_u2b||| sv_peek||5.005000| sv_pos_b2u_flags||5.019003| sv_pos_b2u_midway||| sv_pos_b2u||5.006000| sv_pos_u2b_cached||| sv_pos_u2b_flags||5.011005| sv_pos_u2b_forwards|||n sv_pos_u2b_midway|||n sv_pos_u2b||5.006000| sv_pvbyten_force||5.006000| sv_pvbyten||5.006000| sv_pvbyte||5.006000| sv_pvn_force_flags|5.007002||p sv_pvn_force||| sv_pvn_nomg|5.007003|5.005000|p sv_pvn||5.005000| sv_pvutf8n_force||5.006000| sv_pvutf8n||5.006000| sv_pvutf8||5.006000| sv_pv||5.006000| sv_recode_to_utf8||5.007003| sv_reftype||| sv_ref||5.015004| sv_replace||| sv_report_used||| sv_resetpvn||| sv_reset||| sv_rvweaken||5.006000| sv_sethek||| sv_setiv_mg|5.004050||p sv_setiv||| sv_setnv_mg|5.006000||p sv_setnv||| sv_setpv_mg|5.004050||p sv_setpvf_mg_nocontext|||pvn sv_setpvf_mg|5.006000|5.004000|pv sv_setpvf_nocontext|||vn sv_setpvf||5.004000|v sv_setpviv_mg||5.008001| sv_setpviv||5.008001| sv_setpvn_mg|5.004050||p sv_setpvn||| sv_setpvs_mg||5.013006| sv_setpvs|5.009004||p sv_setpv||| sv_setref_iv||| sv_setref_nv||| sv_setref_pvn||| sv_setref_pvs||5.024000| sv_setref_pv||| sv_setref_uv||5.007001| sv_setsv_cow||| sv_setsv_flags||5.007002| sv_setsv_mg|5.004050||p sv_setsv_nomg|5.007002||p sv_setsv||| sv_setuv_mg|5.004050||p sv_setuv|5.004000||p sv_tainted||5.004000| sv_taint||5.004000| sv_true||5.005000| sv_unglob||| sv_uni_display||5.007003| sv_unmagicext|5.013008||p sv_unmagic||| sv_unref_flags||5.007001| sv_unref||| sv_untaint||5.004000| sv_upgrade||| sv_usepvn_flags||5.009004| sv_usepvn_mg|5.004050||p sv_usepvn||| sv_utf8_decode||5.006000| sv_utf8_downgrade||5.006000| sv_utf8_encode||5.006000| sv_utf8_upgrade_flags_grow||5.011000| sv_utf8_upgrade_flags||5.007002| sv_utf8_upgrade_nomg||5.007002| sv_utf8_upgrade||5.007001| sv_uv|5.005000||p sv_vcatpvf_mg|5.006000|5.004000|p sv_vcatpvfn_flags||5.017002| sv_vcatpvfn||5.004000| sv_vcatpvf|5.006000|5.004000|p sv_vsetpvf_mg|5.006000|5.004000|p sv_vsetpvfn||5.004000| sv_vsetpvf|5.006000|5.004000|p svtype||| swallow_bom||| swash_fetch||5.007002| swash_init||5.006000| swash_scan_list_line||| swatch_get||| sync_locale||5.021004| sys_init3||5.010000|n sys_init||5.010000|n sys_intern_clear||| sys_intern_dup||| sys_intern_init||| sys_term||5.010000|n taint_env||| taint_proper||| tied_method|||v tmps_grow_p||| toFOLD_utf8||5.019001| toFOLD_uvchr||5.023009| toFOLD||5.019001| toLOWER_L1||5.019001| toLOWER_LC||5.004000| toLOWER_utf8||5.015007| toLOWER_uvchr||5.023009| toLOWER||| toTITLE_utf8||5.015007| toTITLE_uvchr||5.023009| toTITLE||5.019001| toUPPER_utf8||5.015007| toUPPER_uvchr||5.023009| toUPPER||| to_byte_substr||| to_lower_latin1|||n to_uni_fold||5.007003| to_uni_lower_lc||5.006000| to_uni_lower||5.007003| to_uni_title_lc||5.006000| to_uni_title||5.007003| to_uni_upper_lc||5.006000| to_uni_upper||5.007003| to_utf8_case||5.007003| to_utf8_fold||5.015007| to_utf8_lower||5.015007| to_utf8_substr||| to_utf8_title||5.015007| to_utf8_upper||5.015007| tokenize_use||| tokeq||| tokereport||| too_few_arguments_pv||| too_many_arguments_pv||| translate_substr_offsets|||n try_amagic_bin||| try_amagic_un||| uiv_2buf|||n unlnk||| unpack_rec||| unpack_str||5.007003| unpackstring||5.008001| unreferenced_to_tmp_stack||| unshare_hek_or_pvn||| unshare_hek||| unsharepvn||5.003070| unwind_handler_stack||| update_debugger_info||| upg_version||5.009005| usage||| utf16_textfilter||| utf16_to_utf8_reversed||5.006001| utf16_to_utf8||5.006001| utf8_distance||5.006000| utf8_hop||5.006000|n utf8_length||5.007001| utf8_mg_len_cache_update||| utf8_mg_pos_cache_update||| utf8_to_bytes||5.006001| utf8_to_uvchr_buf||5.015009| utf8_to_uvchr||5.007001| utf8_to_uvuni_buf||5.015009| utf8_to_uvuni||5.007001| utf8n_to_uvchr||5.007001| utf8n_to_uvuni||5.007001| utilize||| uvchr_to_utf8_flags||5.007003| uvchr_to_utf8||5.007001| uvoffuni_to_utf8_flags||5.019004| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| valid_utf8_to_uvchr||5.015009| valid_utf8_to_uvuni||5.015009| validate_proto||| validate_suid||| varname||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| vform||5.006000| visit||| vivify_defelem||| vivify_ref||| vload_module|5.006000||p vmess||5.006000| vnewSVpvf|5.006000|5.004000|p vnormal||5.009002| vnumify||5.009000| vstringify||5.009000| vverify||5.009003| vwarner||5.006000| vwarn||5.006000| wait4pid||| warn_nocontext|||vn warn_sv||5.013001| warner_nocontext|||vn warner|5.006000|5.004000|pv warn|||v was_lvalue_sub||| watch||| whichsig_pvn||5.015004| whichsig_pv||5.015004| whichsig_sv||5.015004| whichsig||| win32_croak_not_implemented|||n with_queued_errors||| wrap_op_checker||5.015008| write_to_stderr||| xs_boot_epilog||| xs_handshake|||vn xs_version_bootcheck||| yyerror_pvn||| yyerror_pv||| yyerror||| yylex||| yyparse||| yyunlex||| yywarn||| ); if (exists $opt{'list-unsupported'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{todo}; print "$f ", '.'x(40-length($f)), " ", format_version($API{$f}{todo}), "\n"; } exit 0; } # Scan for possible replacement candidates my(%replace, %need, %hints, %warnings, %depends); my $replace = 0; my($hint, $define, $function); sub find_api { my $code = shift; $code =~ s{ / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]*) | "[^"\\]*(?:\\.[^"\\]*)*" | '[^'\\]*(?:\\.[^'\\]*)*' }{}egsx; grep { exists $API{$_} } $code =~ /(\w+)/mg; } while () { if ($hint) { my $h = $hint->[0] eq 'Hint' ? \%hints : \%warnings; if (m{^\s*\*\s(.*?)\s*$}) { for (@{$hint->[1]}) { $h->{$_} ||= ''; # suppress warning with older perls $h->{$_} .= "$1\n"; } } else { undef $hint } } $hint = [$1, [split /,?\s+/, $2]] if m{^\s*$rccs\s+(Hint|Warning):\s+(\w+(?:,?\s+\w+)*)\s*$}; if ($define) { if ($define->[1] =~ /\\$/) { $define->[1] .= $_; } else { if (exists $API{$define->[0]} && $define->[1] !~ /^DPPP_\(/) { my @n = find_api($define->[1]); push @{$depends{$define->[0]}}, @n if @n } undef $define; } } $define = [$1, $2] if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(.*)}; if ($function) { if (/^}/) { if (exists $API{$function->[0]}) { my @n = find_api($function->[1]); push @{$depends{$function->[0]}}, @n if @n } undef $function; } else { $function->[1] .= $_; } } $function = [$1, ''] if m{^DPPP_\(my_(\w+)\)}; $replace = $1 if m{^\s*$rccs\s+Replace:\s+(\d+)\s+$rcce\s*$}; $replace{$2} = $1 if $replace and m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+)}; $replace{$2} = $1 if m{^\s*#\s*define\s+(\w+)(?:\([^)]*\))?\s+(\w+).*$rccs\s+Replace\s+$rcce}; $replace{$1} = $2 if m{^\s*$rccs\s+Replace (\w+) with (\w+)\s+$rcce\s*$}; if (m{^\s*$rccs\s+(\w+(\s*,\s*\w+)*)\s+depends\s+on\s+(\w+(\s*,\s*\w+)*)\s+$rcce\s*$}) { my @deps = map { s/\s+//g; $_ } split /,/, $3; my $d; for $d (map { s/\s+//g; $_ } split /,/, $1) { push @{$depends{$d}}, @deps; } } $need{$1} = 1 if m{^#if\s+defined\(NEED_(\w+)(?:_GLOBAL)?\)}; } for (values %depends) { my %s; $_ = [sort grep !$s{$_}++, @$_]; } if (exists $opt{'api-info'}) { my $f; my $count = 0; my $match = $opt{'api-info'} =~ m!^/(.*)/$! ? $1 : "^\Q$opt{'api-info'}\E\$"; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $f =~ /$match/; print "\n=== $f ===\n\n"; my $info = 0; if ($API{$f}{base} || $API{$f}{todo}) { my $base = format_version($API{$f}{base} || $API{$f}{todo}); print "Supported at least starting from perl-$base.\n"; $info++; } if ($API{$f}{provided}) { my $todo = $API{$f}{todo} ? format_version($API{$f}{todo}) : "5.003"; print "Support by $ppport provided back to perl-$todo.\n"; print "Support needs to be explicitly requested by NEED_$f.\n" if exists $need{$f}; print "Depends on: ", join(', ', @{$depends{$f}}), ".\n" if exists $depends{$f}; print "\n$hints{$f}" if exists $hints{$f}; print "\nWARNING:\n$warnings{$f}" if exists $warnings{$f}; $info++; } print "No portability information available.\n" unless $info; $count++; } $count or print "Found no API matching '$opt{'api-info'}'."; print "\n"; exit 0; } if (exists $opt{'list-provided'}) { my $f; for $f (sort { lc $a cmp lc $b } keys %API) { next unless $API{$f}{provided}; my @flags; push @flags, 'explicit' if exists $need{$f}; push @flags, 'depend' if exists $depends{$f}; push @flags, 'hint' if exists $hints{$f}; push @flags, 'warning' if exists $warnings{$f}; my $flags = @flags ? ' ['.join(', ', @flags).']' : ''; print "$f$flags\n"; } exit 0; } my @files; my @srcext = qw( .xs .c .h .cc .cpp -c.inc -xs.inc ); my $srcext = join '|', map { quotemeta $_ } @srcext; if (@ARGV) { my %seen; for (@ARGV) { if (-e) { if (-f) { push @files, $_ unless $seen{$_}++; } else { warn "'$_' is not a file.\n" } } else { my @new = grep { -f } glob $_ or warn "'$_' does not exist.\n"; push @files, grep { !$seen{$_}++ } @new; } } } else { eval { require File::Find; File::Find::find(sub { $File::Find::name =~ /($srcext)$/i and push @files, $File::Find::name; }, '.'); }; if ($@) { @files = map { glob "*$_" } @srcext; } } if (!@ARGV || $opt{filter}) { my(@in, @out); my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; for (@files) { my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/($srcext)$/i; push @{ $out ? \@out : \@in }, $_; } if (@ARGV && @out) { warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); } @files = @in; } die "No input files given!\n" unless @files; my(%files, %global, %revreplace); %revreplace = reverse %replace; my $filename; my $patch_opened = 0; for $filename (@files) { unless (open IN, "<$filename") { warn "Unable to read from $filename: $!\n"; next; } info("Scanning $filename ..."); my $c = do { local $/; }; close IN; my %file = (orig => $c, changes => 0); # Temporarily remove C/XS comments and strings from the code my @ccom; $c =~ s{ ( ^$HS*\#$HS*include\b[^\r\n]+\b(?:\Q$ppport\E|XSUB\.h)\b[^\r\n]* | ^$HS*\#$HS*(?:define|elif|if(?:def)?)\b[^\r\n]* ) | ( ^$HS*\#[^\r\n]* | "[^"\\]*(?:\\.[^"\\]*)*" | '[^'\\]*(?:\\.[^'\\]*)*' | / (?: \*[^*]*\*+(?:[^$ccs][^*]*\*+)* / | /[^\r\n]* ) ) }{ defined $2 and push @ccom, $2; defined $1 ? $1 : "$ccs$#ccom$cce" }mgsex; $file{ccom} = \@ccom; $file{code} = $c; $file{has_inc_ppport} = $c =~ /^$HS*#$HS*include[^\r\n]+\b\Q$ppport\E\b/m; my $func; for $func (keys %API) { my $match = $func; $match .= "|$revreplace{$func}" if exists $revreplace{$func}; if ($c =~ /\b(?:Perl_)?($match)\b/) { $file{uses_replace}{$1}++ if exists $revreplace{$func} && $1 eq $revreplace{$func}; $file{uses_Perl}{$func}++ if $c =~ /\bPerl_$func\b/; if (exists $API{$func}{provided}) { $file{uses_provided}{$func}++; if (!exists $API{$func}{base} || $API{$func}{base} > $opt{'compat-version'}) { $file{uses}{$func}++; my @deps = rec_depend($func); if (@deps) { $file{uses_deps}{$func} = \@deps; for (@deps) { $file{uses}{$_} = 0 unless exists $file{uses}{$_}; } } for ($func, @deps) { $file{needs}{$_} = 'static' if exists $need{$_}; } } } if (exists $API{$func}{todo} && $API{$func}{todo} > $opt{'compat-version'}) { if ($c =~ /\b$func\b/) { $file{uses_todo}{$func}++; } } } } while ($c =~ /^$HS*#$HS*define$HS+(NEED_(\w+?)(_GLOBAL)?)\b/mg) { if (exists $need{$2}) { $file{defined $3 ? 'needed_global' : 'needed_static'}{$2}++; } else { warning("Possibly wrong #define $1 in $filename") } } for (qw(uses needs uses_todo needed_global needed_static)) { for $func (keys %{$file{$_}}) { push @{$global{$_}{$func}}, $filename; } } $files{$filename} = \%file; } # Globally resolve NEED_'s my $need; for $need (keys %{$global{needs}}) { if (@{$global{needs}{$need}} > 1) { my @targets = @{$global{needs}{$need}}; my @t = grep $files{$_}{needed_global}{$need}, @targets; @targets = @t if @t; @t = grep /\.xs$/i, @targets; @targets = @t if @t; my $target = shift @targets; $files{$target}{needs}{$need} = 'global'; for (@{$global{needs}{$need}}) { $files{$_}{needs}{$need} = 'extern' if $_ ne $target; } } } for $filename (@files) { exists $files{$filename} or next; info("=== Analyzing $filename ==="); my %file = %{$files{$filename}}; my $func; my $c = $file{code}; my $warnings = 0; for $func (sort keys %{$file{uses_Perl}}) { if ($API{$func}{varargs}) { unless ($API{$func}{nothxarg}) { my $changes = ($c =~ s{\b(Perl_$func\s*\(\s*)(?!aTHX_?)(\)|[^\s)]*\))} { $1 . ($2 eq ')' ? 'aTHX' : 'aTHX_ ') . $2 }ge); if ($changes) { warning("Doesn't pass interpreter argument aTHX to Perl_$func"); $file{changes} += $changes; } } } else { warning("Uses Perl_$func instead of $func"); $file{changes} += ($c =~ s{\bPerl_$func(\s*)\((\s*aTHX_?)?\s*} {$func$1(}g); } } for $func (sort keys %{$file{uses_replace}}) { warning("Uses $func instead of $replace{$func}"); $file{changes} += ($c =~ s/\b$func\b/$replace{$func}/g); } for $func (sort keys %{$file{uses_provided}}) { if ($file{uses}{$func}) { if (exists $file{uses_deps}{$func}) { diag("Uses $func, which depends on ", join(', ', @{$file{uses_deps}{$func}})); } else { diag("Uses $func"); } } $warnings += hint($func); } unless ($opt{quiet}) { for $func (sort keys %{$file{uses_todo}}) { print "*** WARNING: Uses $func, which may not be portable below perl ", format_version($API{$func}{todo}), ", even with '$ppport'\n"; $warnings++; } } for $func (sort keys %{$file{needed_static}}) { my $message = ''; if (not exists $file{uses}{$func}) { $message = "No need to define NEED_$func if $func is never used"; } elsif (exists $file{needs}{$func} && $file{needs}{$func} ne 'static') { $message = "No need to define NEED_$func when already needed globally"; } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_$func\b.*$LF//mg); } } for $func (sort keys %{$file{needed_global}}) { my $message = ''; if (not exists $global{uses}{$func}) { $message = "No need to define NEED_${func}_GLOBAL if $func is never used"; } elsif (exists $file{needs}{$func}) { if ($file{needs}{$func} eq 'extern') { $message = "No need to define NEED_${func}_GLOBAL when already needed globally"; } elsif ($file{needs}{$func} eq 'static') { $message = "No need to define NEED_${func}_GLOBAL when only used in this file"; } } if ($message) { diag($message); $file{changes} += ($c =~ s/^$HS*#$HS*define$HS+NEED_${func}_GLOBAL\b.*$LF//mg); } } $file{needs_inc_ppport} = keys %{$file{uses}}; if ($file{needs_inc_ppport}) { my $pp = ''; for $func (sort keys %{$file{needs}}) { my $type = $file{needs}{$func}; next if $type eq 'extern'; my $suffix = $type eq 'global' ? '_GLOBAL' : ''; unless (exists $file{"needed_$type"}{$func}) { if ($type eq 'global') { diag("Files [@{$global{needs}{$func}}] need $func, adding global request"); } else { diag("File needs $func, adding static request"); } $pp .= "#define NEED_$func$suffix\n"; } } if ($pp && ($c =~ s/^(?=$HS*#$HS*define$HS+NEED_\w+)/$pp/m)) { $pp = ''; $file{changes}++; } unless ($file{has_inc_ppport}) { diag("Needs to include '$ppport'"); $pp .= qq(#include "$ppport"\n) } if ($pp) { $file{changes} += ($c =~ s/^($HS*#$HS*define$HS+NEED_\w+.*?)^/$1$pp/ms) || ($c =~ s/^(?=$HS*#$HS*include.*\Q$ppport\E)/$pp/m) || ($c =~ s/^($HS*#$HS*include.*XSUB.*\s*?)^/$1$pp/m) || ($c =~ s/^/$pp/); } } else { if ($file{has_inc_ppport}) { diag("No need to include '$ppport'"); $file{changes} += ($c =~ s/^$HS*?#$HS*include.*\Q$ppport\E.*?$LF//m); } } # put back in our C comments my $ix; my $cppc = 0; my @ccom = @{$file{ccom}}; for $ix (0 .. $#ccom) { if (!$opt{cplusplus} && $ccom[$ix] =~ s!^//!!) { $cppc++; $file{changes} += $c =~ s/$rccs$ix$rcce/$ccs$ccom[$ix] $cce/; } else { $c =~ s/$rccs$ix$rcce/$ccom[$ix]/; } } if ($cppc) { my $s = $cppc != 1 ? 's' : ''; warning("Uses $cppc C++ style comment$s, which is not portable"); } my $s = $warnings != 1 ? 's' : ''; my $warn = $warnings ? " ($warnings warning$s)" : ''; info("Analysis completed$warn"); if ($file{changes}) { if (exists $opt{copy}) { my $newfile = "$filename$opt{copy}"; if (-e $newfile) { error("'$newfile' already exists, refusing to write copy of '$filename'"); } else { local *F; if (open F, ">$newfile") { info("Writing copy of '$filename' with changes to '$newfile'"); print F $c; close F; } else { error("Cannot open '$newfile' for writing: $!"); } } } elsif (exists $opt{patch} || $opt{changes}) { if (exists $opt{patch}) { unless ($patch_opened) { if (open PATCH, ">$opt{patch}") { $patch_opened = 1; } else { error("Cannot open '$opt{patch}' for writing: $!"); delete $opt{patch}; $opt{changes} = 1; goto fallback; } } mydiff(\*PATCH, $filename, $c); } else { fallback: info("Suggested changes:"); mydiff(\*STDOUT, $filename, $c); } } else { my $s = $file{changes} == 1 ? '' : 's'; info("$file{changes} potentially required change$s detected"); } } else { info("Looks good"); } } close PATCH if $patch_opened; exit 0; sub try_use { eval "use @_;"; return $@ eq '' } sub mydiff { local *F = shift; my($file, $str) = @_; my $diff; if (exists $opt{diff}) { $diff = run_diff($opt{diff}, $file, $str); } if (!defined $diff and try_use('Text::Diff')) { $diff = Text::Diff::diff($file, \$str, { STYLE => 'Unified' }); $diff = <
$tmp") { print F $str; close F; if (open F, "$prog $file $tmp |") { while () { s/\Q$tmp\E/$file.patched/; $diff .= $_; } close F; unlink $tmp; return $diff; } unlink $tmp; } else { error("Cannot open '$tmp' for writing: $!"); } return undef; } sub rec_depend { my($func, $seen) = @_; return () unless exists $depends{$func}; $seen = {%{$seen||{}}}; return () if $seen->{$func}++; my %s; grep !$s{$_}++, map { ($_, rec_depend($_, $seen)) } @{$depends{$func}}; } sub parse_version { my $ver = shift; if ($ver =~ /^(\d+)\.(\d+)\.(\d+)$/) { return ($1, $2, $3); } elsif ($ver !~ /^\d+\.[\d_]+$/) { die "cannot parse version '$ver'\n"; } $ver =~ s/_//g; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "cannot parse version '$ver'\n"; } } return ($r, $v, $s); } sub format_version { my $ver = shift; $ver =~ s/$/000000/; my($r,$v,$s) = $ver =~ /(\d+)\.(\d{3})(\d{3})/; $v = int $v; $s = int $s; if ($r < 5 || ($r == 5 && $v < 6)) { if ($s % 10) { die "invalid version '$ver'\n"; } $s /= 10; $ver = sprintf "%d.%03d", $r, $v; $s > 0 and $ver .= sprintf "_%02d", $s; return $ver; } return sprintf "%d.%d.%d", $r, $v, $s; } sub info { $opt{quiet} and return; print @_, "\n"; } sub diag { $opt{quiet} and return; $opt{diag} and print @_, "\n"; } sub warning { $opt{quiet} and return; print "*** ", @_, "\n"; } sub error { print "*** ERROR: ", @_, "\n"; } my %given_hints; my %given_warnings; sub hint { $opt{quiet} and return; my $func = shift; my $rv = 0; if (exists $warnings{$func} && !$given_warnings{$func}++) { my $warn = $warnings{$func}; $warn =~ s!^!*** !mg; print "*** WARNING: $func\n", $warn; $rv++; } if ($opt{hints} && exists $hints{$func} && !$given_hints{$func}++) { my $hint = $hints{$func}; $hint =~ s/^/ /mg; print " --- hint for $func ---\n", $hint; } $rv; } sub usage { my($usage) = do { local(@ARGV,$/)=($0); <> } =~ /^=head\d$HS+SYNOPSIS\s*^(.*?)\s*^=/ms; my %M = ( 'I' => '*' ); $usage =~ s/^\s*perl\s+\S+/$^X $0/; $usage =~ s/([A-Z])<([^>]+)>/$M{$1}$2$M{$1}/g; print < }; my($copy) = $self =~ /^=head\d\s+COPYRIGHT\s*^(.*?)^=\w+/ms; $copy =~ s/^(?=\S+)/ /gms; $self =~ s/^$HS+Do NOT edit.*?(?=^-)/$copy/ms; $self =~ s/^SKIP.*(?=^__DATA__)/SKIP if (\@ARGV && \$ARGV[0] eq '--unstrip') { eval { require Devel::PPPort }; \$@ and die "Cannot require Devel::PPPort, please install.\\n"; if (eval \$Devel::PPPort::VERSION < $VERSION) { die "$0 was originally generated with Devel::PPPort $VERSION.\\n" . "Your Devel::PPPort is only version \$Devel::PPPort::VERSION.\\n" . "Please install a newer version, or --unstrip will not work.\\n"; } Devel::PPPort::WriteFile(\$0); exit 0; } print <$0" or die "cannot strip $0: $!\n"; print OUT "$pl$c\n"; exit 0; } __DATA__ */ #ifndef _P_P_PORTABILITY_H_ #define _P_P_PORTABILITY_H_ #ifndef DPPP_NAMESPACE # define DPPP_NAMESPACE DPPP_ #endif #define DPPP_CAT2(x,y) CAT2(x,y) #define DPPP_(name) DPPP_CAT2(DPPP_NAMESPACE, name) #ifndef PERL_REVISION # if !defined(__PATCHLEVEL_H_INCLUDED__) && !(defined(PATCHLEVEL) && defined(SUBVERSION)) # define PERL_PATCHLEVEL_H_IMPLICIT # include # endif # if !(defined(PERL_VERSION) || (defined(SUBVERSION) && defined(PATCHLEVEL))) # include # endif # ifndef PERL_REVISION # define PERL_REVISION (5) /* Replace: 1 */ # define PERL_VERSION PATCHLEVEL # define PERL_SUBVERSION SUBVERSION /* Replace PERL_PATCHLEVEL with PERL_VERSION */ /* Replace: 0 */ # endif #endif #define _dpppDEC2BCD(dec) ((((dec)/100)<<8)|((((dec)%100)/10)<<4)|((dec)%10)) #define PERL_BCDVERSION ((_dpppDEC2BCD(PERL_REVISION)<<24)|(_dpppDEC2BCD(PERL_VERSION)<<12)|_dpppDEC2BCD(PERL_SUBVERSION)) /* It is very unlikely that anyone will try to use this with Perl 6 (or greater), but who knows. */ #if PERL_REVISION != 5 # error ppport.h only works with Perl version 5 #endif /* PERL_REVISION != 5 */ #ifndef dTHR # define dTHR dNOOP #endif #ifndef dTHX # define dTHX dNOOP #endif #ifndef dTHXa # define dTHXa(x) dNOOP #endif #ifndef pTHX # define pTHX void #endif #ifndef pTHX_ # define pTHX_ #endif #ifndef aTHX # define aTHX #endif #ifndef aTHX_ # define aTHX_ #endif #if (PERL_BCDVERSION < 0x5006000) # ifdef USE_THREADS # define aTHXR thr # define aTHXR_ thr, # else # define aTHXR # define aTHXR_ # endif # define dTHXR dTHR #else # define aTHXR aTHX # define aTHXR_ aTHX_ # define dTHXR dTHX #endif #ifndef dTHXoa # define dTHXoa(x) dTHXa(x) #endif #ifdef I_LIMITS # include #endif #ifndef PERL_UCHAR_MIN # define PERL_UCHAR_MIN ((unsigned char)0) #endif #ifndef PERL_UCHAR_MAX # ifdef UCHAR_MAX # define PERL_UCHAR_MAX ((unsigned char)UCHAR_MAX) # else # ifdef MAXUCHAR # define PERL_UCHAR_MAX ((unsigned char)MAXUCHAR) # else # define PERL_UCHAR_MAX ((unsigned char)~(unsigned)0) # endif # endif #endif #ifndef PERL_USHORT_MIN # define PERL_USHORT_MIN ((unsigned short)0) #endif #ifndef PERL_USHORT_MAX # ifdef USHORT_MAX # define PERL_USHORT_MAX ((unsigned short)USHORT_MAX) # else # ifdef MAXUSHORT # define PERL_USHORT_MAX ((unsigned short)MAXUSHORT) # else # ifdef USHRT_MAX # define PERL_USHORT_MAX ((unsigned short)USHRT_MAX) # else # define PERL_USHORT_MAX ((unsigned short)~(unsigned)0) # endif # endif # endif #endif #ifndef PERL_SHORT_MAX # ifdef SHORT_MAX # define PERL_SHORT_MAX ((short)SHORT_MAX) # else # ifdef MAXSHORT /* Often used in */ # define PERL_SHORT_MAX ((short)MAXSHORT) # else # ifdef SHRT_MAX # define PERL_SHORT_MAX ((short)SHRT_MAX) # else # define PERL_SHORT_MAX ((short) (PERL_USHORT_MAX >> 1)) # endif # endif # endif #endif #ifndef PERL_SHORT_MIN # ifdef SHORT_MIN # define PERL_SHORT_MIN ((short)SHORT_MIN) # else # ifdef MINSHORT # define PERL_SHORT_MIN ((short)MINSHORT) # else # ifdef SHRT_MIN # define PERL_SHORT_MIN ((short)SHRT_MIN) # else # define PERL_SHORT_MIN (-PERL_SHORT_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif #ifndef PERL_UINT_MAX # ifdef UINT_MAX # define PERL_UINT_MAX ((unsigned int)UINT_MAX) # else # ifdef MAXUINT # define PERL_UINT_MAX ((unsigned int)MAXUINT) # else # define PERL_UINT_MAX (~(unsigned int)0) # endif # endif #endif #ifndef PERL_UINT_MIN # define PERL_UINT_MIN ((unsigned int)0) #endif #ifndef PERL_INT_MAX # ifdef INT_MAX # define PERL_INT_MAX ((int)INT_MAX) # else # ifdef MAXINT /* Often used in */ # define PERL_INT_MAX ((int)MAXINT) # else # define PERL_INT_MAX ((int)(PERL_UINT_MAX >> 1)) # endif # endif #endif #ifndef PERL_INT_MIN # ifdef INT_MIN # define PERL_INT_MIN ((int)INT_MIN) # else # ifdef MININT # define PERL_INT_MIN ((int)MININT) # else # define PERL_INT_MIN (-PERL_INT_MAX - ((3 & -1) == 3)) # endif # endif #endif #ifndef PERL_ULONG_MAX # ifdef ULONG_MAX # define PERL_ULONG_MAX ((unsigned long)ULONG_MAX) # else # ifdef MAXULONG # define PERL_ULONG_MAX ((unsigned long)MAXULONG) # else # define PERL_ULONG_MAX (~(unsigned long)0) # endif # endif #endif #ifndef PERL_ULONG_MIN # define PERL_ULONG_MIN ((unsigned long)0L) #endif #ifndef PERL_LONG_MAX # ifdef LONG_MAX # define PERL_LONG_MAX ((long)LONG_MAX) # else # ifdef MAXLONG # define PERL_LONG_MAX ((long)MAXLONG) # else # define PERL_LONG_MAX ((long) (PERL_ULONG_MAX >> 1)) # endif # endif #endif #ifndef PERL_LONG_MIN # ifdef LONG_MIN # define PERL_LONG_MIN ((long)LONG_MIN) # else # ifdef MINLONG # define PERL_LONG_MIN ((long)MINLONG) # else # define PERL_LONG_MIN (-PERL_LONG_MAX - ((3 & -1) == 3)) # endif # endif #endif #if defined(HAS_QUAD) && (defined(convex) || defined(uts)) # ifndef PERL_UQUAD_MAX # ifdef ULONGLONG_MAX # define PERL_UQUAD_MAX ((unsigned long long)ULONGLONG_MAX) # else # ifdef MAXULONGLONG # define PERL_UQUAD_MAX ((unsigned long long)MAXULONGLONG) # else # define PERL_UQUAD_MAX (~(unsigned long long)0) # endif # endif # endif # ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN ((unsigned long long)0L) # endif # ifndef PERL_QUAD_MAX # ifdef LONGLONG_MAX # define PERL_QUAD_MAX ((long long)LONGLONG_MAX) # else # ifdef MAXLONGLONG # define PERL_QUAD_MAX ((long long)MAXLONGLONG) # else # define PERL_QUAD_MAX ((long long) (PERL_UQUAD_MAX >> 1)) # endif # endif # endif # ifndef PERL_QUAD_MIN # ifdef LONGLONG_MIN # define PERL_QUAD_MIN ((long long)LONGLONG_MIN) # else # ifdef MINLONGLONG # define PERL_QUAD_MIN ((long long)MINLONGLONG) # else # define PERL_QUAD_MIN (-PERL_QUAD_MAX - ((3 & -1) == 3)) # endif # endif # endif #endif /* This is based on code from 5.003 perl.h */ #ifdef HAS_QUAD # ifdef cray #ifndef IVTYPE # define IVTYPE int #endif #ifndef IV_MIN # define IV_MIN PERL_INT_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_INT_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UINT_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UINT_MAX #endif # ifdef INTSIZE #ifndef IVSIZE # define IVSIZE INTSIZE #endif # endif # else # if defined(convex) || defined(uts) #ifndef IVTYPE # define IVTYPE long long #endif #ifndef IV_MIN # define IV_MIN PERL_QUAD_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_QUAD_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_UQUAD_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_UQUAD_MAX #endif # ifdef LONGLONGSIZE #ifndef IVSIZE # define IVSIZE LONGLONGSIZE #endif # endif # else #ifndef IVTYPE # define IVTYPE long #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif # ifdef LONGSIZE #ifndef IVSIZE # define IVSIZE LONGSIZE #endif # endif # endif # endif #ifndef IVSIZE # define IVSIZE 8 #endif #ifndef LONGSIZE # define LONGSIZE 8 #endif #ifndef PERL_QUAD_MIN # define PERL_QUAD_MIN IV_MIN #endif #ifndef PERL_QUAD_MAX # define PERL_QUAD_MAX IV_MAX #endif #ifndef PERL_UQUAD_MIN # define PERL_UQUAD_MIN UV_MIN #endif #ifndef PERL_UQUAD_MAX # define PERL_UQUAD_MAX UV_MAX #endif #else #ifndef IVTYPE # define IVTYPE long #endif #ifndef LONGSIZE # define LONGSIZE 4 #endif #ifndef IV_MIN # define IV_MIN PERL_LONG_MIN #endif #ifndef IV_MAX # define IV_MAX PERL_LONG_MAX #endif #ifndef UV_MIN # define UV_MIN PERL_ULONG_MIN #endif #ifndef UV_MAX # define UV_MAX PERL_ULONG_MAX #endif #endif #ifndef IVSIZE # ifdef LONGSIZE # define IVSIZE LONGSIZE # else # define IVSIZE 4 /* A bold guess, but the best we can make. */ # endif #endif #ifndef UVTYPE # define UVTYPE unsigned IVTYPE #endif #ifndef UVSIZE # define UVSIZE IVSIZE #endif #ifndef sv_setuv # define sv_setuv(sv, uv) \ STMT_START { \ UV TeMpUv = uv; \ if (TeMpUv <= IV_MAX) \ sv_setiv(sv, TeMpUv); \ else \ sv_setnv(sv, (double)TeMpUv); \ } STMT_END #endif #ifndef newSVuv # define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) #endif #ifndef sv_2uv # define sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) #endif #ifndef SvUVX # define SvUVX(sv) ((UV)SvIVX(sv)) #endif #ifndef SvUVXx # define SvUVXx(sv) SvUVX(sv) #endif #ifndef SvUV # define SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv)) #endif #ifndef SvUVx # define SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv)) #endif /* Hint: sv_uv * Always use the SvUVx() macro instead of sv_uv(). */ #ifndef sv_uv # define sv_uv(sv) SvUVx(sv) #endif #if !defined(SvUOK) && defined(SvIOK_UV) # define SvUOK(sv) SvIOK_UV(sv) #endif #ifndef XST_mUV # define XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) ) #endif #ifndef XSRETURN_UV # define XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END #endif #ifndef PUSHu # define PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END #endif #ifndef XPUSHu # define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END #endif #ifdef HAS_MEMCMP #ifndef memNE # define memNE(s1,s2,l) (memcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!memcmp(s1,s2,l)) #endif #else #ifndef memNE # define memNE(s1,s2,l) (bcmp(s1,s2,l)) #endif #ifndef memEQ # define memEQ(s1,s2,l) (!bcmp(s1,s2,l)) #endif #endif #ifndef memEQs # define memEQs(s1, l, s2) \ (sizeof(s2)-1 == l && memEQ(s1, (s2 ""), (sizeof(s2)-1))) #endif #ifndef memNEs # define memNEs(s1, l, s2) !memEQs(s1, l, s2) #endif #ifndef MoveD # define MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifndef CopyD # define CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) #endif #ifdef HAS_MEMSET #ifndef ZeroD # define ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) #endif #else #ifndef ZeroD # define ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) #endif #endif #ifndef PoisonWith # define PoisonWith(d,n,t,b) (void)memset((char*)(d), (U8)(b), (n) * sizeof(t)) #endif #ifndef PoisonNew # define PoisonNew(d,n,t) PoisonWith(d,n,t,0xAB) #endif #ifndef PoisonFree # define PoisonFree(d,n,t) PoisonWith(d,n,t,0xEF) #endif #ifndef Poison # define Poison(d,n,t) PoisonFree(d,n,t) #endif #ifndef Newx # define Newx(v,n,t) New(0,v,n,t) #endif #ifndef Newxc # define Newxc(v,n,t,c) Newc(0,v,n,t,c) #endif #ifndef Newxz # define Newxz(v,n,t) Newz(0,v,n,t) #endif #ifndef PERL_MAGIC_qr # define PERL_MAGIC_qr 'r' #endif #ifndef cBOOL # define cBOOL(cbool) ((cbool) ? (bool)1 : (bool)0) #endif #ifndef OpHAS_SIBLING # define OpHAS_SIBLING(o) (cBOOL((o)->op_sibling)) #endif #ifndef OpSIBLING # define OpSIBLING(o) (0 + (o)->op_sibling) #endif #ifndef OpMORESIB_set # define OpMORESIB_set(o, sib) ((o)->op_sibling = (sib)) #endif #ifndef OpLASTSIB_set # define OpLASTSIB_set(o, parent) ((o)->op_sibling = NULL) #endif #ifndef OpMAYBESIB_set # define OpMAYBESIB_set(o, sib, parent) ((o)->op_sibling = (sib)) #endif #ifndef SvRX #if defined(NEED_SvRX) static void * DPPP_(my_SvRX)(pTHX_ SV *rv); static #else extern void * DPPP_(my_SvRX)(pTHX_ SV *rv); #endif #ifdef SvRX # undef SvRX #endif #define SvRX(a) DPPP_(my_SvRX)(aTHX_ a) #if defined(NEED_SvRX) || defined(NEED_SvRX_GLOBAL) void * DPPP_(my_SvRX)(pTHX_ SV *rv) { if (SvROK(rv)) { SV *sv = SvRV(rv); if (SvMAGICAL(sv)) { MAGIC *mg = mg_find(sv, PERL_MAGIC_qr); if (mg && mg->mg_obj) { return mg->mg_obj; } } } return 0; } #endif #endif #ifndef SvRXOK # define SvRXOK(sv) (!!SvRX(sv)) #endif #ifndef PERL_UNUSED_DECL # ifdef HASATTRIBUTE # if (defined(__GNUC__) && defined(__cplusplus)) || defined(__INTEL_COMPILER) # define PERL_UNUSED_DECL # else # define PERL_UNUSED_DECL __attribute__((unused)) # endif # else # define PERL_UNUSED_DECL # endif #endif #ifndef PERL_UNUSED_ARG # if defined(lint) && defined(S_SPLINT_S) /* www.splint.org */ # include # define PERL_UNUSED_ARG(x) NOTE(ARGUNUSED(x)) # else # define PERL_UNUSED_ARG(x) ((void)x) # endif #endif #ifndef PERL_UNUSED_VAR # define PERL_UNUSED_VAR(x) ((void)x) #endif #ifndef PERL_UNUSED_CONTEXT # ifdef USE_ITHREADS # define PERL_UNUSED_CONTEXT PERL_UNUSED_ARG(my_perl) # else # define PERL_UNUSED_CONTEXT # endif #endif #ifndef PERL_UNUSED_RESULT # if defined(__GNUC__) && defined(HASATTRIBUTE_WARN_UNUSED_RESULT) # define PERL_UNUSED_RESULT(v) STMT_START { __typeof__(v) z = (v); (void)sizeof(z); } STMT_END # else # define PERL_UNUSED_RESULT(v) ((void)(v)) # endif #endif #ifndef NOOP # define NOOP /*EMPTY*/(void)0 #endif #ifndef dNOOP # define dNOOP extern int /*@unused@*/ Perl___notused PERL_UNUSED_DECL #endif #ifndef NVTYPE # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) # define NVTYPE long double # else # define NVTYPE double # endif typedef NVTYPE NV; #endif #ifndef INT2PTR # if (IVSIZE == PTRSIZE) && (UVSIZE == PTRSIZE) # define PTRV UV # define INT2PTR(any,d) (any)(d) # else # if PTRSIZE == LONGSIZE # define PTRV unsigned long # else # define PTRV unsigned # endif # define INT2PTR(any,d) (any)(PTRV)(d) # endif #endif #ifndef PTR2ul # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else # define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif #ifndef PTR2nat # define PTR2nat(p) (PTRV)(p) #endif #ifndef NUM2PTR # define NUM2PTR(any,d) (any)PTR2nat(d) #endif #ifndef PTR2IV # define PTR2IV(p) INT2PTR(IV,p) #endif #ifndef PTR2UV # define PTR2UV(p) INT2PTR(UV,p) #endif #ifndef PTR2NV # define PTR2NV(p) NUM2PTR(NV,p) #endif #undef START_EXTERN_C #undef END_EXTERN_C #undef EXTERN_C #ifdef __cplusplus # define START_EXTERN_C extern "C" { # define END_EXTERN_C } # define EXTERN_C extern "C" #else # define START_EXTERN_C # define END_EXTERN_C # define EXTERN_C extern #endif #if defined(PERL_GCC_PEDANTIC) # ifndef PERL_GCC_BRACE_GROUPS_FORBIDDEN # define PERL_GCC_BRACE_GROUPS_FORBIDDEN # endif #endif #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) && !defined(__cplusplus) # ifndef PERL_USE_GCC_BRACE_GROUPS # define PERL_USE_GCC_BRACE_GROUPS # endif #endif #undef STMT_START #undef STMT_END #ifdef PERL_USE_GCC_BRACE_GROUPS # define STMT_START (void)( /* gcc supports ``({ STATEMENTS; })'' */ # define STMT_END ) #else # if defined(VOIDFLAGS) && (VOIDFLAGS) && (defined(sun) || defined(__sun__)) && !defined(__GNUC__) # define STMT_START if (1) # define STMT_END else (void)0 # else # define STMT_START do # define STMT_END while (0) # endif #endif #ifndef boolSV # define boolSV(b) ((b) ? &PL_sv_yes : &PL_sv_no) #endif /* DEFSV appears first in 5.004_56 */ #ifndef DEFSV # define DEFSV GvSV(PL_defgv) #endif #ifndef SAVE_DEFSV # define SAVE_DEFSV SAVESPTR(GvSV(PL_defgv)) #endif #ifndef DEFSV_set # define DEFSV_set(sv) (DEFSV = (sv)) #endif /* Older perls (<=5.003) lack AvFILLp */ #ifndef AvFILLp # define AvFILLp AvFILL #endif #ifndef ERRSV # define ERRSV get_sv("@",FALSE) #endif /* Hint: gv_stashpvn * This function's backport doesn't support the length parameter, but * rather ignores it. Portability can only be ensured if the length * parameter is used for speed reasons, but the length can always be * correctly computed from the string argument. */ #ifndef gv_stashpvn # define gv_stashpvn(str,len,create) gv_stashpv(str,create) #endif /* Replace: 1 */ #ifndef get_cv # define get_cv perl_get_cv #endif #ifndef get_sv # define get_sv perl_get_sv #endif #ifndef get_av # define get_av perl_get_av #endif #ifndef get_hv # define get_hv perl_get_hv #endif /* Replace: 0 */ #ifndef dUNDERBAR # define dUNDERBAR dNOOP #endif #ifndef UNDERBAR # define UNDERBAR DEFSV #endif #ifndef dAX # define dAX I32 ax = MARK - PL_stack_base + 1 #endif #ifndef dITEMS # define dITEMS I32 items = SP - MARK #endif #ifndef dXSTARG # define dXSTARG SV * targ = sv_newmortal() #endif #ifndef dAXMARK # define dAXMARK I32 ax = POPMARK; \ register SV ** const mark = PL_stack_base + ax++ #endif #ifndef XSprePUSH # define XSprePUSH (sp = PL_stack_base + ax - 1) #endif #if (PERL_BCDVERSION < 0x5005000) # undef XSRETURN # define XSRETURN(off) \ STMT_START { \ PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ return; \ } STMT_END #endif #ifndef XSPROTO # define XSPROTO(name) void name(pTHX_ CV* cv) #endif #ifndef SVfARG # define SVfARG(p) ((void*)(p)) #endif #ifndef PERL_ABS # define PERL_ABS(x) ((x) < 0 ? -(x) : (x)) #endif #ifndef dVAR # define dVAR dNOOP #endif #ifndef SVf # define SVf "_" #endif #ifndef UTF8_MAXBYTES # define UTF8_MAXBYTES UTF8_MAXLEN #endif #ifndef CPERLscope # define CPERLscope(x) x #endif #ifndef PERL_HASH # define PERL_HASH(hash,str,len) \ STMT_START { \ const char *s_PeRlHaSh = str; \ I32 i_PeRlHaSh = len; \ U32 hash_PeRlHaSh = 0; \ while (i_PeRlHaSh--) \ hash_PeRlHaSh = hash_PeRlHaSh * 33 + *s_PeRlHaSh++; \ (hash) = hash_PeRlHaSh; \ } STMT_END #endif #ifndef PERLIO_FUNCS_DECL # ifdef PERLIO_FUNCS_CONST # define PERLIO_FUNCS_DECL(funcs) const PerlIO_funcs funcs # define PERLIO_FUNCS_CAST(funcs) (PerlIO_funcs*)(funcs) # else # define PERLIO_FUNCS_DECL(funcs) PerlIO_funcs funcs # define PERLIO_FUNCS_CAST(funcs) (funcs) # endif #endif /* provide these typedefs for older perls */ #if (PERL_BCDVERSION < 0x5009003) # ifdef ARGSproto typedef OP* (CPERLscope(*Perl_ppaddr_t))(ARGSproto); # else typedef OP* (CPERLscope(*Perl_ppaddr_t))(pTHX); # endif typedef OP* (CPERLscope(*Perl_check_t)) (pTHX_ OP*); #endif #ifndef isPSXSPC # define isPSXSPC(c) (isSPACE(c) || (c) == '\v') #endif #ifndef isBLANK # define isBLANK(c) ((c) == ' ' || (c) == '\t') #endif #ifdef EBCDIC #ifndef isALNUMC # define isALNUMC(c) isalnum(c) #endif #ifndef isASCII # define isASCII(c) isascii(c) #endif #ifndef isCNTRL # define isCNTRL(c) iscntrl(c) #endif #ifndef isGRAPH # define isGRAPH(c) isgraph(c) #endif #ifndef isPRINT # define isPRINT(c) isprint(c) #endif #ifndef isPUNCT # define isPUNCT(c) ispunct(c) #endif #ifndef isXDIGIT # define isXDIGIT(c) isxdigit(c) #endif #else # if (PERL_BCDVERSION < 0x5010000) /* Hint: isPRINT * The implementation in older perl versions includes all of the * isSPACE() characters, which is wrong. The version provided by * Devel::PPPort always overrides a present buggy version. */ # undef isPRINT # endif #ifdef HAS_QUAD # ifdef U64TYPE # define WIDEST_UTYPE U64TYPE # else # define WIDEST_UTYPE Quad_t # endif #else # define WIDEST_UTYPE U32 #endif #ifndef isALNUMC # define isALNUMC(c) (isALPHA(c) || isDIGIT(c)) #endif #ifndef isASCII # define isASCII(c) ((WIDEST_UTYPE) (c) <= 127) #endif #ifndef isCNTRL # define isCNTRL(c) ((WIDEST_UTYPE) (c) < ' ' || (c) == 127) #endif #ifndef isGRAPH # define isGRAPH(c) (isALNUM(c) || isPUNCT(c)) #endif #ifndef isPRINT # define isPRINT(c) (((c) >= 32 && (c) < 127)) #endif #ifndef isPUNCT # define isPUNCT(c) (((c) >= 33 && (c) <= 47) || ((c) >= 58 && (c) <= 64) || ((c) >= 91 && (c) <= 96) || ((c) >= 123 && (c) <= 126)) #endif #ifndef isXDIGIT # define isXDIGIT(c) (isDIGIT(c) || ((c) >= 'a' && (c) <= 'f') || ((c) >= 'A' && (c) <= 'F')) #endif #endif /* Until we figure out how to support this in older perls... */ #if (PERL_BCDVERSION >= 0x5008000) #ifndef HeUTF8 # define HeUTF8(he) ((HeKLEN(he) == HEf_SVKEY) ? \ SvUTF8(HeKEY_sv(he)) : \ (U32)HeKUTF8(he)) #endif #endif #ifndef C_ARRAY_LENGTH # define C_ARRAY_LENGTH(a) (sizeof(a)/sizeof((a)[0])) #endif #ifndef C_ARRAY_END # define C_ARRAY_END(a) ((a) + C_ARRAY_LENGTH(a)) #endif #ifndef PERL_SIGNALS_UNSAFE_FLAG #define PERL_SIGNALS_UNSAFE_FLAG 0x0001 #if (PERL_BCDVERSION < 0x5008000) # define D_PPP_PERL_SIGNALS_INIT PERL_SIGNALS_UNSAFE_FLAG #else # define D_PPP_PERL_SIGNALS_INIT 0 #endif #if defined(NEED_PL_signals) static U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; #elif defined(NEED_PL_signals_GLOBAL) U32 DPPP_(my_PL_signals) = D_PPP_PERL_SIGNALS_INIT; #else extern U32 DPPP_(my_PL_signals); #endif #define PL_signals DPPP_(my_PL_signals) #endif /* Hint: PL_ppaddr * Calling an op via PL_ppaddr requires passing a context argument * for threaded builds. Since the context argument is different for * 5.005 perls, you can use aTHXR (supplied by ppport.h), which will * automatically be defined as the correct argument. */ #if (PERL_BCDVERSION <= 0x5005005) /* Replace: 1 */ # define PL_ppaddr ppaddr # define PL_no_modify no_modify /* Replace: 0 */ #endif #if (PERL_BCDVERSION <= 0x5004005) /* Replace: 1 */ # define PL_DBsignal DBsignal # define PL_DBsingle DBsingle # define PL_DBsub DBsub # define PL_DBtrace DBtrace # define PL_Sv Sv # define PL_bufend bufend # define PL_bufptr bufptr # define PL_compiling compiling # define PL_copline copline # define PL_curcop curcop # define PL_curstash curstash # define PL_debstash debstash # define PL_defgv defgv # define PL_diehook diehook # define PL_dirty dirty # define PL_dowarn dowarn # define PL_errgv errgv # define PL_error_count error_count # define PL_expect expect # define PL_hexdigit hexdigit # define PL_hints hints # define PL_in_my in_my # define PL_laststatval laststatval # define PL_lex_state lex_state # define PL_lex_stuff lex_stuff # define PL_linestr linestr # define PL_na na # define PL_perl_destruct_level perl_destruct_level # define PL_perldb perldb # define PL_rsfp_filters rsfp_filters # define PL_rsfp rsfp # define PL_stack_base stack_base # define PL_stack_sp stack_sp # define PL_statcache statcache # define PL_stdingv stdingv # define PL_sv_arenaroot sv_arenaroot # define PL_sv_no sv_no # define PL_sv_undef sv_undef # define PL_sv_yes sv_yes # define PL_tainted tainted # define PL_tainting tainting # define PL_tokenbuf tokenbuf /* Replace: 0 */ #endif /* Warning: PL_parser * For perl versions earlier than 5.9.5, this is an always * non-NULL dummy. Also, it cannot be dereferenced. Don't * use it if you can avoid is and unless you absolutely know * what you're doing. * If you always check that PL_parser is non-NULL, you can * define DPPP_PL_parser_NO_DUMMY to avoid the creation of * a dummy parser structure. */ #if (PERL_BCDVERSION >= 0x5009005) # ifdef DPPP_PL_parser_NO_DUMMY # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ (croak("panic: PL_parser == NULL in %s:%d", \ __FILE__, __LINE__), (yy_parser *) NULL))->var) # else # ifdef DPPP_PL_parser_NO_DUMMY_WARNING # define D_PPP_parser_dummy_warning(var) # else # define D_PPP_parser_dummy_warning(var) \ warn("warning: dummy PL_" #var " used in %s:%d", __FILE__, __LINE__), # endif # define D_PPP_my_PL_parser_var(var) ((PL_parser ? PL_parser : \ (D_PPP_parser_dummy_warning(var) &DPPP_(dummy_PL_parser)))->var) #if defined(NEED_PL_parser) static yy_parser DPPP_(dummy_PL_parser); #elif defined(NEED_PL_parser_GLOBAL) yy_parser DPPP_(dummy_PL_parser); #else extern yy_parser DPPP_(dummy_PL_parser); #endif # endif /* PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf depends on PL_parser */ /* Warning: PL_expect, PL_copline, PL_rsfp, PL_rsfp_filters, PL_linestr, PL_bufptr, PL_bufend, PL_lex_state, PL_lex_stuff, PL_tokenbuf * Do not use this variable unless you know exactly what you're * doing. It is internal to the perl parser and may change or even * be removed in the future. As of perl 5.9.5, you have to check * for (PL_parser != NULL) for this variable to have any effect. * An always non-NULL PL_parser dummy is provided for earlier * perl versions. * If PL_parser is NULL when you try to access this variable, a * dummy is being accessed instead and a warning is issued unless * you define DPPP_PL_parser_NO_DUMMY_WARNING. * If DPPP_PL_parser_NO_DUMMY is defined, the code trying to access * this variable will croak with a panic message. */ # define PL_expect D_PPP_my_PL_parser_var(expect) # define PL_copline D_PPP_my_PL_parser_var(copline) # define PL_rsfp D_PPP_my_PL_parser_var(rsfp) # define PL_rsfp_filters D_PPP_my_PL_parser_var(rsfp_filters) # define PL_linestr D_PPP_my_PL_parser_var(linestr) # define PL_bufptr D_PPP_my_PL_parser_var(bufptr) # define PL_bufend D_PPP_my_PL_parser_var(bufend) # define PL_lex_state D_PPP_my_PL_parser_var(lex_state) # define PL_lex_stuff D_PPP_my_PL_parser_var(lex_stuff) # define PL_tokenbuf D_PPP_my_PL_parser_var(tokenbuf) # define PL_in_my D_PPP_my_PL_parser_var(in_my) # define PL_in_my_stash D_PPP_my_PL_parser_var(in_my_stash) # define PL_error_count D_PPP_my_PL_parser_var(error_count) #else /* ensure that PL_parser != NULL and cannot be dereferenced */ # define PL_parser ((void *) 1) #endif #ifndef mPUSHs # define mPUSHs(s) PUSHs(sv_2mortal(s)) #endif #ifndef PUSHmortal # define PUSHmortal PUSHs(sv_newmortal()) #endif #ifndef mPUSHp # define mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l)) #endif #ifndef mPUSHn # define mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n)) #endif #ifndef mPUSHi # define mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i)) #endif #ifndef mPUSHu # define mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u)) #endif #ifndef mXPUSHs # define mXPUSHs(s) XPUSHs(sv_2mortal(s)) #endif #ifndef XPUSHmortal # define XPUSHmortal XPUSHs(sv_newmortal()) #endif #ifndef mXPUSHp # define mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END #endif #ifndef mXPUSHn # define mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END #endif #ifndef mXPUSHi # define mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END #endif #ifndef mXPUSHu # define mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END #endif /* Replace: 1 */ #ifndef call_sv # define call_sv perl_call_sv #endif #ifndef call_pv # define call_pv perl_call_pv #endif #ifndef call_argv # define call_argv perl_call_argv #endif #ifndef call_method # define call_method perl_call_method #endif #ifndef eval_sv # define eval_sv perl_eval_sv #endif /* Replace: 0 */ #ifndef PERL_LOADMOD_DENY # define PERL_LOADMOD_DENY 0x1 #endif #ifndef PERL_LOADMOD_NOIMPORT # define PERL_LOADMOD_NOIMPORT 0x2 #endif #ifndef PERL_LOADMOD_IMPORT_OPS # define PERL_LOADMOD_IMPORT_OPS 0x4 #endif #ifndef G_METHOD # define G_METHOD 64 # ifdef call_sv # undef call_sv # endif # if (PERL_BCDVERSION < 0x5006000) # define call_sv(sv, flags) ((flags) & G_METHOD ? perl_call_method((char *) SvPV_nolen_const(sv), \ (flags) & ~G_METHOD) : perl_call_sv(sv, flags)) # else # define call_sv(sv, flags) ((flags) & G_METHOD ? Perl_call_method(aTHX_ (char *) SvPV_nolen_const(sv), \ (flags) & ~G_METHOD) : Perl_call_sv(aTHX_ sv, flags)) # endif #endif /* Replace perl_eval_pv with eval_pv */ #ifndef eval_pv #if defined(NEED_eval_pv) static SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); static #else extern SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error); #endif #ifdef eval_pv # undef eval_pv #endif #define eval_pv(a,b) DPPP_(my_eval_pv)(aTHX_ a,b) #define Perl_eval_pv DPPP_(my_eval_pv) #if defined(NEED_eval_pv) || defined(NEED_eval_pv_GLOBAL) SV* DPPP_(my_eval_pv)(char *p, I32 croak_on_error) { dSP; SV* sv = newSVpv(p, 0); PUSHMARK(sp); eval_sv(sv, G_SCALAR); SvREFCNT_dec(sv); SPAGAIN; sv = POPs; PUTBACK; if (croak_on_error && SvTRUE(GvSV(errgv))) croak(SvPVx(GvSV(errgv), na)); return sv; } #endif #endif #ifndef vload_module #if defined(NEED_vload_module) static void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); static #else extern void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args); #endif #ifdef vload_module # undef vload_module #endif #define vload_module(a,b,c,d) DPPP_(my_vload_module)(aTHX_ a,b,c,d) #define Perl_vload_module DPPP_(my_vload_module) #if defined(NEED_vload_module) || defined(NEED_vload_module_GLOBAL) void DPPP_(my_vload_module)(U32 flags, SV *name, SV *ver, va_list *args) { dTHR; dVAR; OP *veop, *imop; OP * const modname = newSVOP(OP_CONST, 0, name); /* 5.005 has a somewhat hacky force_normal that doesn't croak on SvREADONLY() if PL_compling is true. Current perls take care in ck_require() to correctly turn off SvREADONLY before calling force_normal_flags(). This seems a better fix than fudging PL_compling */ SvREADONLY_off(((SVOP*)modname)->op_sv); modname->op_private |= OPpCONST_BARE; if (ver) { veop = newSVOP(OP_CONST, 0, ver); } else veop = NULL; if (flags & PERL_LOADMOD_NOIMPORT) { imop = sawparens(newNULLLIST()); } else if (flags & PERL_LOADMOD_IMPORT_OPS) { imop = va_arg(*args, OP*); } else { SV *sv; imop = NULL; sv = va_arg(*args, SV*); while (sv) { imop = append_elem(OP_LIST, imop, newSVOP(OP_CONST, 0, sv)); sv = va_arg(*args, SV*); } } { const line_t ocopline = PL_copline; COP * const ocurcop = PL_curcop; const int oexpect = PL_expect; #if (PERL_BCDVERSION >= 0x5004000) utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(FALSE, 0), veop, modname, imop); #elif (PERL_BCDVERSION > 0x5003000) utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), veop, modname, imop); #else utilize(!(flags & PERL_LOADMOD_DENY), start_subparse(), modname, imop); #endif PL_expect = oexpect; PL_copline = ocopline; PL_curcop = ocurcop; } } #endif #endif #ifndef load_module #if defined(NEED_load_module) static void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); static #else extern void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...); #endif #ifdef load_module # undef load_module #endif #define load_module DPPP_(my_load_module) #define Perl_load_module DPPP_(my_load_module) #if defined(NEED_load_module) || defined(NEED_load_module_GLOBAL) void DPPP_(my_load_module)(U32 flags, SV *name, SV *ver, ...) { va_list args; va_start(args, ver); vload_module(flags, name, ver, &args); va_end(args); } #endif #endif #ifndef newRV_inc # define newRV_inc(sv) newRV(sv) /* Replace */ #endif #ifndef newRV_noinc #if defined(NEED_newRV_noinc) static SV * DPPP_(my_newRV_noinc)(SV *sv); static #else extern SV * DPPP_(my_newRV_noinc)(SV *sv); #endif #ifdef newRV_noinc # undef newRV_noinc #endif #define newRV_noinc(a) DPPP_(my_newRV_noinc)(aTHX_ a) #define Perl_newRV_noinc DPPP_(my_newRV_noinc) #if defined(NEED_newRV_noinc) || defined(NEED_newRV_noinc_GLOBAL) SV * DPPP_(my_newRV_noinc)(SV *sv) { SV *rv = (SV *)newRV(sv); SvREFCNT_dec(sv); return rv; } #endif #endif /* Hint: newCONSTSUB * Returns a CV* as of perl-5.7.1. This return value is not supported * by Devel::PPPort. */ /* newCONSTSUB from IO.xs is in the core starting with 5.004_63 */ #if (PERL_BCDVERSION < 0x5004063) && (PERL_BCDVERSION != 0x5004005) #if defined(NEED_newCONSTSUB) static void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); static #else extern void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv); #endif #ifdef newCONSTSUB # undef newCONSTSUB #endif #define newCONSTSUB(a,b,c) DPPP_(my_newCONSTSUB)(aTHX_ a,b,c) #define Perl_newCONSTSUB DPPP_(my_newCONSTSUB) #if defined(NEED_newCONSTSUB) || defined(NEED_newCONSTSUB_GLOBAL) /* This is just a trick to avoid a dependency of newCONSTSUB on PL_parser */ /* (There's no PL_parser in perl < 5.005, so this is completely safe) */ #define D_PPP_PL_copline PL_copline void DPPP_(my_newCONSTSUB)(HV *stash, const char *name, SV *sv) { U32 oldhints = PL_hints; HV *old_cop_stash = PL_curcop->cop_stash; HV *old_curstash = PL_curstash; line_t oldline = PL_curcop->cop_line; PL_curcop->cop_line = D_PPP_PL_copline; PL_hints &= ~HINT_BLOCK_SCOPE; if (stash) PL_curstash = PL_curcop->cop_stash = stash; newSUB( #if (PERL_BCDVERSION < 0x5003022) start_subparse(), #elif (PERL_BCDVERSION == 0x5003022) start_subparse(0), #else /* 5.003_23 onwards */ start_subparse(FALSE, 0), #endif newSVOP(OP_CONST, 0, newSVpv((char *) name, 0)), newSVOP(OP_CONST, 0, &PL_sv_no), /* SvPV(&PL_sv_no) == "" -- GMB */ newSTATEOP(0, Nullch, newSVOP(OP_CONST, 0, sv)) ); PL_hints = oldhints; PL_curcop->cop_stash = old_cop_stash; PL_curstash = old_curstash; PL_curcop->cop_line = oldline; } #endif #endif /* * Boilerplate macros for initializing and accessing interpreter-local * data from C. All statics in extensions should be reworked to use * this, if you want to make the extension thread-safe. See ext/re/re.xs * for an example of the use of these macros. * * Code that uses these macros is responsible for the following: * 1. #define MY_CXT_KEY to a unique string, e.g. "DynaLoader_guts" * 2. Declare a typedef named my_cxt_t that is a structure that contains * all the data that needs to be interpreter-local. * 3. Use the START_MY_CXT macro after the declaration of my_cxt_t. * 4. Use the MY_CXT_INIT macro such that it is called exactly once * (typically put in the BOOT: section). * 5. Use the members of the my_cxt_t structure everywhere as * MY_CXT.member. * 6. Use the dMY_CXT macro (a declaration) in all the functions that * access MY_CXT. */ #if defined(MULTIPLICITY) || defined(PERL_OBJECT) || \ defined(PERL_CAPI) || defined(PERL_IMPLICIT_CONTEXT) #ifndef START_MY_CXT /* This must appear in all extensions that define a my_cxt_t structure, * right after the definition (i.e. at file scope). The non-threads * case below uses it to declare the data as static. */ #define START_MY_CXT #if (PERL_BCDVERSION < 0x5004068) /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) #else /* >= perl5.004_68 */ #define dMY_CXT_SV \ SV *my_cxt_sv = *hv_fetch(PL_modglobal, MY_CXT_KEY, \ sizeof(MY_CXT_KEY)-1, TRUE) #endif /* < perl5.004_68 */ /* This declaration should be used within all functions that use the * interpreter-local data. */ #define dMY_CXT \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = INT2PTR(my_cxt_t*,SvUV(my_cxt_sv)) /* Creates and zeroes the per-interpreter data. * (We allocate my_cxtp in a Perl SV so that it will be released when * the interpreter goes away.) */ #define MY_CXT_INIT \ dMY_CXT_SV; \ /* newSV() allocates one more than needed */ \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Zero(my_cxtp, 1, my_cxt_t); \ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) /* This macro must be used to access members of the my_cxt_t structure. * e.g. MYCXT.some_data */ #define MY_CXT (*my_cxtp) /* Judicious use of these macros can reduce the number of times dMY_CXT * is used. Use is similar to pTHX, aTHX etc. */ #define pMY_CXT my_cxt_t *my_cxtp #define pMY_CXT_ pMY_CXT, #define _pMY_CXT ,pMY_CXT #define aMY_CXT my_cxtp #define aMY_CXT_ aMY_CXT, #define _aMY_CXT ,aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE /* Clones the per-interpreter data. */ #define MY_CXT_CLONE \ dMY_CXT_SV; \ my_cxt_t *my_cxtp = (my_cxt_t*)SvPVX(newSV(sizeof(my_cxt_t)-1));\ Copy(INT2PTR(my_cxt_t*, SvUV(my_cxt_sv)), my_cxtp, 1, my_cxt_t);\ sv_setuv(my_cxt_sv, PTR2UV(my_cxtp)) #endif #else /* single interpreter */ #ifndef START_MY_CXT #define START_MY_CXT static my_cxt_t my_cxt; #define dMY_CXT_SV dNOOP #define dMY_CXT dNOOP #define MY_CXT_INIT NOOP #define MY_CXT my_cxt #define pMY_CXT void #define pMY_CXT_ #define _pMY_CXT #define aMY_CXT #define aMY_CXT_ #define _aMY_CXT #endif /* START_MY_CXT */ #ifndef MY_CXT_CLONE #define MY_CXT_CLONE NOOP #endif #endif #ifndef IVdf # if IVSIZE == LONGSIZE # define IVdf "ld" # define UVuf "lu" # define UVof "lo" # define UVxf "lx" # define UVXf "lX" # elif IVSIZE == INTSIZE # define IVdf "d" # define UVuf "u" # define UVof "o" # define UVxf "x" # define UVXf "X" # else # error "cannot define IV/UV formats" # endif #endif #ifndef NVef # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ defined(PERL_PRIfldbl) && (PERL_BCDVERSION != 0x5006000) /* Not very likely, but let's try anyway. */ # define NVef PERL_PRIeldbl # define NVff PERL_PRIfldbl # define NVgf PERL_PRIgldbl # else # define NVef "e" # define NVff "f" # define NVgf "g" # endif #endif #ifndef SvREFCNT_inc # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ if (_sv) \ (SvREFCNT(_sv))++; \ _sv; \ }) # else # define SvREFCNT_inc(sv) \ ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL) # endif #endif #ifndef SvREFCNT_inc_simple # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_simple(sv) \ ({ \ if (sv) \ (SvREFCNT(sv))++; \ (SV *)(sv); \ }) # else # define SvREFCNT_inc_simple(sv) \ ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL) # endif #endif #ifndef SvREFCNT_inc_NN # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_NN(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ SvREFCNT(_sv)++; \ _sv; \ }) # else # define SvREFCNT_inc_NN(sv) \ (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv) # endif #endif #ifndef SvREFCNT_inc_void # ifdef PERL_USE_GCC_BRACE_GROUPS # define SvREFCNT_inc_void(sv) \ ({ \ SV * const _sv = (SV*)(sv); \ if (_sv) \ (void)(SvREFCNT(_sv)++); \ }) # else # define SvREFCNT_inc_void(sv) \ (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0) # endif #endif #ifndef SvREFCNT_inc_simple_void # define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END #endif #ifndef SvREFCNT_inc_simple_NN # define SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv)) #endif #ifndef SvREFCNT_inc_void_NN # define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) #endif #ifndef SvREFCNT_inc_simple_void_NN # define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv))) #endif #ifndef newSV_type #if defined(NEED_newSV_type) static SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); static #else extern SV* DPPP_(my_newSV_type)(pTHX_ svtype const t); #endif #ifdef newSV_type # undef newSV_type #endif #define newSV_type(a) DPPP_(my_newSV_type)(aTHX_ a) #define Perl_newSV_type DPPP_(my_newSV_type) #if defined(NEED_newSV_type) || defined(NEED_newSV_type_GLOBAL) SV* DPPP_(my_newSV_type)(pTHX_ svtype const t) { SV* const sv = newSV(0); sv_upgrade(sv, t); return sv; } #endif #endif #if (PERL_BCDVERSION < 0x5006000) # define D_PPP_CONSTPV_ARG(x) ((char *) (x)) #else # define D_PPP_CONSTPV_ARG(x) (x) #endif #ifndef newSVpvn # define newSVpvn(data,len) ((data) \ ? ((len) ? newSVpv((data), (len)) : newSVpv("", 0)) \ : newSV(0)) #endif #ifndef newSVpvn_utf8 # define newSVpvn_utf8(s, len, u) newSVpvn_flags((s), (len), (u) ? SVf_UTF8 : 0) #endif #ifndef SVf_UTF8 # define SVf_UTF8 0 #endif #ifndef newSVpvn_flags #if defined(NEED_newSVpvn_flags) static SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); static #else extern SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags); #endif #ifdef newSVpvn_flags # undef newSVpvn_flags #endif #define newSVpvn_flags(a,b,c) DPPP_(my_newSVpvn_flags)(aTHX_ a,b,c) #define Perl_newSVpvn_flags DPPP_(my_newSVpvn_flags) #if defined(NEED_newSVpvn_flags) || defined(NEED_newSVpvn_flags_GLOBAL) SV * DPPP_(my_newSVpvn_flags)(pTHX_ const char *s, STRLEN len, U32 flags) { SV *sv = newSVpvn(D_PPP_CONSTPV_ARG(s), len); SvFLAGS(sv) |= (flags & SVf_UTF8); return (flags & SVs_TEMP) ? sv_2mortal(sv) : sv; } #endif #endif /* Backwards compatibility stuff... :-( */ #if !defined(NEED_sv_2pv_flags) && defined(NEED_sv_2pv_nolen) # define NEED_sv_2pv_flags #endif #if !defined(NEED_sv_2pv_flags_GLOBAL) && defined(NEED_sv_2pv_nolen_GLOBAL) # define NEED_sv_2pv_flags_GLOBAL #endif /* Hint: sv_2pv_nolen * Use the SvPV_nolen() or SvPV_nolen_const() macros instead of sv_2pv_nolen(). */ #ifndef sv_2pv_nolen # define sv_2pv_nolen(sv) SvPV_nolen(sv) #endif #ifdef SvPVbyte /* Hint: SvPVbyte * Does not work in perl-5.6.1, ppport.h implements a version * borrowed from perl-5.7.3. */ #if (PERL_BCDVERSION < 0x5007000) #if defined(NEED_sv_2pvbyte) static char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); static #else extern char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp); #endif #ifdef sv_2pvbyte # undef sv_2pvbyte #endif #define sv_2pvbyte(a,b) DPPP_(my_sv_2pvbyte)(aTHX_ a,b) #define Perl_sv_2pvbyte DPPP_(my_sv_2pvbyte) #if defined(NEED_sv_2pvbyte) || defined(NEED_sv_2pvbyte_GLOBAL) char * DPPP_(my_sv_2pvbyte)(pTHX_ SV *sv, STRLEN *lp) { sv_utf8_downgrade(sv,0); return SvPV(sv,*lp); } #endif /* Hint: sv_2pvbyte * Use the SvPVbyte() macro instead of sv_2pvbyte(). */ #undef SvPVbyte #define SvPVbyte(sv, lp) \ ((SvFLAGS(sv) & (SVf_POK|SVf_UTF8)) == (SVf_POK) \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pvbyte(sv, &lp)) #endif #else # define SvPVbyte SvPV # define sv_2pvbyte sv_2pv #endif #ifndef sv_2pvbyte_nolen # define sv_2pvbyte_nolen(sv) sv_2pv_nolen(sv) #endif /* Hint: sv_pvn * Always use the SvPV() macro instead of sv_pvn(). */ /* Hint: sv_pvn_force * Always use the SvPV_force() macro instead of sv_pvn_force(). */ /* If these are undefined, they're not handled by the core anyway */ #ifndef SV_IMMEDIATE_UNREF # define SV_IMMEDIATE_UNREF 0 #endif #ifndef SV_GMAGIC # define SV_GMAGIC 0 #endif #ifndef SV_COW_DROP_PV # define SV_COW_DROP_PV 0 #endif #ifndef SV_UTF8_NO_ENCODING # define SV_UTF8_NO_ENCODING 0 #endif #ifndef SV_NOSTEAL # define SV_NOSTEAL 0 #endif #ifndef SV_CONST_RETURN # define SV_CONST_RETURN 0 #endif #ifndef SV_MUTABLE_RETURN # define SV_MUTABLE_RETURN 0 #endif #ifndef SV_SMAGIC # define SV_SMAGIC 0 #endif #ifndef SV_HAS_TRAILING_NUL # define SV_HAS_TRAILING_NUL 0 #endif #ifndef SV_COW_SHARED_HASH_KEYS # define SV_COW_SHARED_HASH_KEYS 0 #endif #if (PERL_BCDVERSION < 0x5007002) #if defined(NEED_sv_2pv_flags) static char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); static #else extern char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); #endif #ifdef sv_2pv_flags # undef sv_2pv_flags #endif #define sv_2pv_flags(a,b,c) DPPP_(my_sv_2pv_flags)(aTHX_ a,b,c) #define Perl_sv_2pv_flags DPPP_(my_sv_2pv_flags) #if defined(NEED_sv_2pv_flags) || defined(NEED_sv_2pv_flags_GLOBAL) char * DPPP_(my_sv_2pv_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) { STRLEN n_a = (STRLEN) flags; return sv_2pv(sv, lp ? lp : &n_a); } #endif #if defined(NEED_sv_pvn_force_flags) static char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); static #else extern char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags); #endif #ifdef sv_pvn_force_flags # undef sv_pvn_force_flags #endif #define sv_pvn_force_flags(a,b,c) DPPP_(my_sv_pvn_force_flags)(aTHX_ a,b,c) #define Perl_sv_pvn_force_flags DPPP_(my_sv_pvn_force_flags) #if defined(NEED_sv_pvn_force_flags) || defined(NEED_sv_pvn_force_flags_GLOBAL) char * DPPP_(my_sv_pvn_force_flags)(pTHX_ SV *sv, STRLEN *lp, I32 flags) { STRLEN n_a = (STRLEN) flags; return sv_pvn_force(sv, lp ? lp : &n_a); } #endif #endif #if (PERL_BCDVERSION < 0x5008008) || ( (PERL_BCDVERSION >= 0x5009000) && (PERL_BCDVERSION < 0x5009003) ) # define DPPP_SVPV_NOLEN_LP_ARG &PL_na #else # define DPPP_SVPV_NOLEN_LP_ARG 0 #endif #ifndef SvPV_const # define SvPV_const(sv, lp) SvPV_flags_const(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_mutable # define SvPV_mutable(sv, lp) SvPV_flags_mutable(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_flags # define SvPV_flags(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_2pv_flags(sv, &lp, flags)) #endif #ifndef SvPV_flags_const # define SvPV_flags_const(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_const(sv)) : \ (const char*) sv_2pv_flags(sv, &lp, flags|SV_CONST_RETURN)) #endif #ifndef SvPV_flags_const_nolen # define SvPV_flags_const_nolen(sv, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX_const(sv) : \ (const char*) sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags|SV_CONST_RETURN)) #endif #ifndef SvPV_flags_mutable # define SvPV_flags_mutable(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) : \ sv_2pv_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) #endif #ifndef SvPV_force # define SvPV_force(sv, lp) SvPV_force_flags(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_force_nolen # define SvPV_force_nolen(sv) SvPV_force_flags_nolen(sv, SV_GMAGIC) #endif #ifndef SvPV_force_mutable # define SvPV_force_mutable(sv, lp) SvPV_force_flags_mutable(sv, lp, SV_GMAGIC) #endif #ifndef SvPV_force_nomg # define SvPV_force_nomg(sv, lp) SvPV_force_flags(sv, lp, 0) #endif #ifndef SvPV_force_nomg_nolen # define SvPV_force_nomg_nolen(sv) SvPV_force_flags_nolen(sv, 0) #endif #ifndef SvPV_force_flags # define SvPV_force_flags(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX(sv)) : sv_pvn_force_flags(sv, &lp, flags)) #endif #ifndef SvPV_force_flags_nolen # define SvPV_force_flags_nolen(sv, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? SvPVX(sv) : sv_pvn_force_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, flags)) #endif #ifndef SvPV_force_flags_mutable # define SvPV_force_flags_mutable(sv, lp, flags) \ ((SvFLAGS(sv) & (SVf_POK|SVf_THINKFIRST)) == SVf_POK \ ? ((lp = SvCUR(sv)), SvPVX_mutable(sv)) \ : sv_pvn_force_flags(sv, &lp, flags|SV_MUTABLE_RETURN)) #endif #ifndef SvPV_nolen # define SvPV_nolen(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC)) #endif #ifndef SvPV_nolen_const # define SvPV_nolen_const(sv) \ ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX_const(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, SV_GMAGIC|SV_CONST_RETURN)) #endif #ifndef SvPV_nomg # define SvPV_nomg(sv, lp) SvPV_flags(sv, lp, 0) #endif #ifndef SvPV_nomg_const # define SvPV_nomg_const(sv, lp) SvPV_flags_const(sv, lp, 0) #endif #ifndef SvPV_nomg_const_nolen # define SvPV_nomg_const_nolen(sv) SvPV_flags_const_nolen(sv, 0) #endif #ifndef SvPV_nomg_nolen # define SvPV_nomg_nolen(sv) ((SvFLAGS(sv) & (SVf_POK)) == SVf_POK \ ? SvPVX(sv) : sv_2pv_flags(sv, DPPP_SVPV_NOLEN_LP_ARG, 0)) #endif #ifndef SvPV_renew # define SvPV_renew(sv,n) STMT_START { SvLEN_set(sv, n); \ SvPV_set((sv), (char *) saferealloc( \ (Malloc_t)SvPVX(sv), (MEM_SIZE)((n)))); \ } STMT_END #endif #ifndef SvMAGIC_set # define SvMAGIC_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END #endif #if (PERL_BCDVERSION < 0x5009003) #ifndef SvPVX_const # define SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) #endif #ifndef SvPVX_mutable # define SvPVX_mutable(sv) (0 + SvPVX(sv)) #endif #ifndef SvRV_set # define SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END #endif #else #ifndef SvPVX_const # define SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) #endif #ifndef SvPVX_mutable # define SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) #endif #ifndef SvRV_set # define SvRV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ ((sv)->sv_u.svu_rv = (val)); } STMT_END #endif #endif #ifndef SvSTASH_set # define SvSTASH_set(sv, val) \ STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END #endif #if (PERL_BCDVERSION < 0x5004000) #ifndef SvUV_set # define SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END #endif #else #ifndef SvUV_set # define SvUV_set(sv, val) \ STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END #endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(vnewSVpvf) #if defined(NEED_vnewSVpvf) static SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); static #else extern SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args); #endif #ifdef vnewSVpvf # undef vnewSVpvf #endif #define vnewSVpvf(a,b) DPPP_(my_vnewSVpvf)(aTHX_ a,b) #define Perl_vnewSVpvf DPPP_(my_vnewSVpvf) #if defined(NEED_vnewSVpvf) || defined(NEED_vnewSVpvf_GLOBAL) SV * DPPP_(my_vnewSVpvf)(pTHX_ const char *pat, va_list *args) { register SV *sv = newSV(0); sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); return sv; } #endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf) # define sv_vcatpvf(sv, pat, args) sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf) # define sv_vsetpvf(sv, pat, args) sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)) #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) static void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...); #endif #define Perl_sv_catpvf_mg DPPP_(my_sv_catpvf_mg) #if defined(NEED_sv_catpvf_mg) || defined(NEED_sv_catpvf_mg_GLOBAL) void DPPP_(my_sv_catpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #ifdef PERL_IMPLICIT_CONTEXT #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) static void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...); #endif #define sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #define Perl_sv_catpvf_mg_nocontext DPPP_(my_sv_catpvf_mg_nocontext) #if defined(NEED_sv_catpvf_mg_nocontext) || defined(NEED_sv_catpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_catpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vcatpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif /* sv_catpvf_mg depends on sv_catpvf_mg_nocontext */ #ifndef sv_catpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_catpvf_mg Perl_sv_catpvf_mg_nocontext # else # define sv_catpvf_mg Perl_sv_catpvf_mg # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vcatpvf_mg) # define sv_vcatpvf_mg(sv, pat, args) \ STMT_START { \ sv_vcatpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) static void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...); #endif #define Perl_sv_setpvf_mg DPPP_(my_sv_setpvf_mg) #if defined(NEED_sv_setpvf_mg) || defined(NEED_sv_setpvf_mg_GLOBAL) void DPPP_(my_sv_setpvf_mg)(pTHX_ SV *sv, const char *pat, ...) { va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #ifdef PERL_IMPLICIT_CONTEXT #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) static void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); static #else extern void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...); #endif #define sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #define Perl_sv_setpvf_mg_nocontext DPPP_(my_sv_setpvf_mg_nocontext) #if defined(NEED_sv_setpvf_mg_nocontext) || defined(NEED_sv_setpvf_mg_nocontext_GLOBAL) void DPPP_(my_sv_setpvf_mg_nocontext)(SV *sv, const char *pat, ...) { dTHX; va_list args; va_start(args, pat); sv_vsetpvfn(sv, pat, strlen(pat), &args, Null(SV**), 0, Null(bool*)); SvSETMAGIC(sv); va_end(args); } #endif #endif #endif /* sv_setpvf_mg depends on sv_setpvf_mg_nocontext */ #ifndef sv_setpvf_mg # ifdef PERL_IMPLICIT_CONTEXT # define sv_setpvf_mg Perl_sv_setpvf_mg_nocontext # else # define sv_setpvf_mg Perl_sv_setpvf_mg # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(sv_vsetpvf_mg) # define sv_vsetpvf_mg(sv, pat, args) \ STMT_START { \ sv_vsetpvfn(sv, pat, strlen(pat), args, Null(SV**), 0, Null(bool*)); \ SvSETMAGIC(sv); \ } STMT_END #endif /* Hint: newSVpvn_share * The SVs created by this function only mimic the behaviour of * shared PVs without really being shared. Only use if you know * what you're doing. */ #ifndef newSVpvn_share #if defined(NEED_newSVpvn_share) static SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); static #else extern SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash); #endif #ifdef newSVpvn_share # undef newSVpvn_share #endif #define newSVpvn_share(a,b,c) DPPP_(my_newSVpvn_share)(aTHX_ a,b,c) #define Perl_newSVpvn_share DPPP_(my_newSVpvn_share) #if defined(NEED_newSVpvn_share) || defined(NEED_newSVpvn_share_GLOBAL) SV * DPPP_(my_newSVpvn_share)(pTHX_ const char *src, I32 len, U32 hash) { SV *sv; if (len < 0) len = -len; if (!hash) PERL_HASH(hash, (char*) src, len); sv = newSVpvn((char *) src, len); sv_upgrade(sv, SVt_PVIV); SvIVX(sv) = hash; SvREADONLY_on(sv); SvPOK_on(sv); return sv; } #endif #endif #ifndef SvSHARED_HASH # define SvSHARED_HASH(sv) (0 + SvUVX(sv)) #endif #ifndef HvNAME_get # define HvNAME_get(hv) HvNAME(hv) #endif #ifndef HvNAMELEN_get # define HvNAMELEN_get(hv) (HvNAME_get(hv) ? (I32)strlen(HvNAME_get(hv)) : 0) #endif #ifndef gv_fetchpvn_flags #if defined(NEED_gv_fetchpvn_flags) static GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types); static #else extern GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types); #endif #ifdef gv_fetchpvn_flags # undef gv_fetchpvn_flags #endif #define gv_fetchpvn_flags(a,b,c,d) DPPP_(my_gv_fetchpvn_flags)(aTHX_ a,b,c,d) #define Perl_gv_fetchpvn_flags DPPP_(my_gv_fetchpvn_flags) #if defined(NEED_gv_fetchpvn_flags) || defined(NEED_gv_fetchpvn_flags_GLOBAL) GV* DPPP_(my_gv_fetchpvn_flags)(pTHX_ const char* name, STRLEN len, int flags, int types) { char *namepv = savepvn(name, len); GV* stash = gv_fetchpv(namepv, TRUE, SVt_PVHV); Safefree(namepv); return stash; } #endif #endif #ifndef GvSVn # define GvSVn(gv) GvSV(gv) #endif #ifndef isGV_with_GP # define isGV_with_GP(gv) isGV(gv) #endif #ifndef gv_fetchsv # define gv_fetchsv(name, flags, svt) gv_fetchpv(SvPV_nolen_const(name), flags, svt) #endif #ifndef get_cvn_flags # define get_cvn_flags(name, namelen, flags) get_cv(name, flags) #endif #ifndef gv_init_pvn # define gv_init_pvn(gv, stash, ptr, len, flags) gv_init(gv, stash, ptr, len, flags & GV_ADDMULTI ? TRUE : FALSE) #endif #ifndef WARN_ALL # define WARN_ALL 0 #endif #ifndef WARN_CLOSURE # define WARN_CLOSURE 1 #endif #ifndef WARN_DEPRECATED # define WARN_DEPRECATED 2 #endif #ifndef WARN_EXITING # define WARN_EXITING 3 #endif #ifndef WARN_GLOB # define WARN_GLOB 4 #endif #ifndef WARN_IO # define WARN_IO 5 #endif #ifndef WARN_CLOSED # define WARN_CLOSED 6 #endif #ifndef WARN_EXEC # define WARN_EXEC 7 #endif #ifndef WARN_LAYER # define WARN_LAYER 8 #endif #ifndef WARN_NEWLINE # define WARN_NEWLINE 9 #endif #ifndef WARN_PIPE # define WARN_PIPE 10 #endif #ifndef WARN_UNOPENED # define WARN_UNOPENED 11 #endif #ifndef WARN_MISC # define WARN_MISC 12 #endif #ifndef WARN_NUMERIC # define WARN_NUMERIC 13 #endif #ifndef WARN_ONCE # define WARN_ONCE 14 #endif #ifndef WARN_OVERFLOW # define WARN_OVERFLOW 15 #endif #ifndef WARN_PACK # define WARN_PACK 16 #endif #ifndef WARN_PORTABLE # define WARN_PORTABLE 17 #endif #ifndef WARN_RECURSION # define WARN_RECURSION 18 #endif #ifndef WARN_REDEFINE # define WARN_REDEFINE 19 #endif #ifndef WARN_REGEXP # define WARN_REGEXP 20 #endif #ifndef WARN_SEVERE # define WARN_SEVERE 21 #endif #ifndef WARN_DEBUGGING # define WARN_DEBUGGING 22 #endif #ifndef WARN_INPLACE # define WARN_INPLACE 23 #endif #ifndef WARN_INTERNAL # define WARN_INTERNAL 24 #endif #ifndef WARN_MALLOC # define WARN_MALLOC 25 #endif #ifndef WARN_SIGNAL # define WARN_SIGNAL 26 #endif #ifndef WARN_SUBSTR # define WARN_SUBSTR 27 #endif #ifndef WARN_SYNTAX # define WARN_SYNTAX 28 #endif #ifndef WARN_AMBIGUOUS # define WARN_AMBIGUOUS 29 #endif #ifndef WARN_BAREWORD # define WARN_BAREWORD 30 #endif #ifndef WARN_DIGIT # define WARN_DIGIT 31 #endif #ifndef WARN_PARENTHESIS # define WARN_PARENTHESIS 32 #endif #ifndef WARN_PRECEDENCE # define WARN_PRECEDENCE 33 #endif #ifndef WARN_PRINTF # define WARN_PRINTF 34 #endif #ifndef WARN_PROTOTYPE # define WARN_PROTOTYPE 35 #endif #ifndef WARN_QW # define WARN_QW 36 #endif #ifndef WARN_RESERVED # define WARN_RESERVED 37 #endif #ifndef WARN_SEMICOLON # define WARN_SEMICOLON 38 #endif #ifndef WARN_TAINT # define WARN_TAINT 39 #endif #ifndef WARN_THREADS # define WARN_THREADS 40 #endif #ifndef WARN_UNINITIALIZED # define WARN_UNINITIALIZED 41 #endif #ifndef WARN_UNPACK # define WARN_UNPACK 42 #endif #ifndef WARN_UNTIE # define WARN_UNTIE 43 #endif #ifndef WARN_UTF8 # define WARN_UTF8 44 #endif #ifndef WARN_VOID # define WARN_VOID 45 #endif #ifndef WARN_ASSERTIONS # define WARN_ASSERTIONS 46 #endif #ifndef packWARN # define packWARN(a) (a) #endif #ifndef ckWARN # ifdef G_WARN_ON # define ckWARN(a) (PL_dowarn & G_WARN_ON) # else # define ckWARN(a) PL_dowarn # endif #endif #if (PERL_BCDVERSION >= 0x5004000) && !defined(warner) #if defined(NEED_warner) static void DPPP_(my_warner)(U32 err, const char *pat, ...); static #else extern void DPPP_(my_warner)(U32 err, const char *pat, ...); #endif #define Perl_warner DPPP_(my_warner) #if defined(NEED_warner) || defined(NEED_warner_GLOBAL) void DPPP_(my_warner)(U32 err, const char *pat, ...) { SV *sv; va_list args; PERL_UNUSED_ARG(err); va_start(args, pat); sv = vnewSVpvf(pat, &args); va_end(args); sv_2mortal(sv); warn("%s", SvPV_nolen(sv)); } #define warner Perl_warner #define Perl_warner_nocontext Perl_warner #endif #endif /* concatenating with "" ensures that only literal strings are accepted as argument * note that STR_WITH_LEN() can't be used as argument to macros or functions that * under some configurations might be macros */ #ifndef STR_WITH_LEN # define STR_WITH_LEN(s) (s ""), (sizeof(s)-1) #endif #ifndef newSVpvs # define newSVpvs(str) newSVpvn(str "", sizeof(str) - 1) #endif #ifndef newSVpvs_flags # define newSVpvs_flags(str, flags) newSVpvn_flags(str "", sizeof(str) - 1, flags) #endif #ifndef newSVpvs_share # define newSVpvs_share(str) newSVpvn_share(str "", sizeof(str) - 1, 0) #endif #ifndef sv_catpvs # define sv_catpvs(sv, str) sv_catpvn(sv, str "", sizeof(str) - 1) #endif #ifndef sv_setpvs # define sv_setpvs(sv, str) sv_setpvn(sv, str "", sizeof(str) - 1) #endif #ifndef hv_fetchs # define hv_fetchs(hv, key, lval) hv_fetch(hv, key "", sizeof(key) - 1, lval) #endif #ifndef hv_stores # define hv_stores(hv, key, val) hv_store(hv, key "", sizeof(key) - 1, val, 0) #endif #ifndef gv_fetchpvs # define gv_fetchpvs(name, flags, svt) gv_fetchpvn_flags(name "", sizeof(name) - 1, flags, svt) #endif #ifndef gv_stashpvs # define gv_stashpvs(name, flags) gv_stashpvn(name "", sizeof(name) - 1, flags) #endif #ifndef get_cvs # define get_cvs(name, flags) get_cvn_flags(name "", sizeof(name)-1, flags) #endif #ifndef SvGETMAGIC # define SvGETMAGIC(x) STMT_START { if (SvGMAGICAL(x)) mg_get(x); } STMT_END #endif /* Some random bits for sv_unmagicext. These should probably be pulled in for real and organized at some point */ #ifndef HEf_SVKEY # define HEf_SVKEY -2 #endif #ifndef MUTABLE_PTR #if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN) # define MUTABLE_PTR(p) ({ void *_p = (p); _p; }) #else # define MUTABLE_PTR(p) ((void *) (p)) #endif #endif #ifndef MUTABLE_SV # define MUTABLE_SV(p) ((SV *)MUTABLE_PTR(p)) #endif /* end of random bits */ #ifndef PERL_MAGIC_sv # define PERL_MAGIC_sv '\0' #endif #ifndef PERL_MAGIC_overload # define PERL_MAGIC_overload 'A' #endif #ifndef PERL_MAGIC_overload_elem # define PERL_MAGIC_overload_elem 'a' #endif #ifndef PERL_MAGIC_overload_table # define PERL_MAGIC_overload_table 'c' #endif #ifndef PERL_MAGIC_bm # define PERL_MAGIC_bm 'B' #endif #ifndef PERL_MAGIC_regdata # define PERL_MAGIC_regdata 'D' #endif #ifndef PERL_MAGIC_regdatum # define PERL_MAGIC_regdatum 'd' #endif #ifndef PERL_MAGIC_env # define PERL_MAGIC_env 'E' #endif #ifndef PERL_MAGIC_envelem # define PERL_MAGIC_envelem 'e' #endif #ifndef PERL_MAGIC_fm # define PERL_MAGIC_fm 'f' #endif #ifndef PERL_MAGIC_regex_global # define PERL_MAGIC_regex_global 'g' #endif #ifndef PERL_MAGIC_isa # define PERL_MAGIC_isa 'I' #endif #ifndef PERL_MAGIC_isaelem # define PERL_MAGIC_isaelem 'i' #endif #ifndef PERL_MAGIC_nkeys # define PERL_MAGIC_nkeys 'k' #endif #ifndef PERL_MAGIC_dbfile # define PERL_MAGIC_dbfile 'L' #endif #ifndef PERL_MAGIC_dbline # define PERL_MAGIC_dbline 'l' #endif #ifndef PERL_MAGIC_mutex # define PERL_MAGIC_mutex 'm' #endif #ifndef PERL_MAGIC_shared # define PERL_MAGIC_shared 'N' #endif #ifndef PERL_MAGIC_shared_scalar # define PERL_MAGIC_shared_scalar 'n' #endif #ifndef PERL_MAGIC_collxfrm # define PERL_MAGIC_collxfrm 'o' #endif #ifndef PERL_MAGIC_tied # define PERL_MAGIC_tied 'P' #endif #ifndef PERL_MAGIC_tiedelem # define PERL_MAGIC_tiedelem 'p' #endif #ifndef PERL_MAGIC_tiedscalar # define PERL_MAGIC_tiedscalar 'q' #endif #ifndef PERL_MAGIC_qr # define PERL_MAGIC_qr 'r' #endif #ifndef PERL_MAGIC_sig # define PERL_MAGIC_sig 'S' #endif #ifndef PERL_MAGIC_sigelem # define PERL_MAGIC_sigelem 's' #endif #ifndef PERL_MAGIC_taint # define PERL_MAGIC_taint 't' #endif #ifndef PERL_MAGIC_uvar # define PERL_MAGIC_uvar 'U' #endif #ifndef PERL_MAGIC_uvar_elem # define PERL_MAGIC_uvar_elem 'u' #endif #ifndef PERL_MAGIC_vstring # define PERL_MAGIC_vstring 'V' #endif #ifndef PERL_MAGIC_vec # define PERL_MAGIC_vec 'v' #endif #ifndef PERL_MAGIC_utf8 # define PERL_MAGIC_utf8 'w' #endif #ifndef PERL_MAGIC_substr # define PERL_MAGIC_substr 'x' #endif #ifndef PERL_MAGIC_defelem # define PERL_MAGIC_defelem 'y' #endif #ifndef PERL_MAGIC_glob # define PERL_MAGIC_glob '*' #endif #ifndef PERL_MAGIC_arylen # define PERL_MAGIC_arylen '#' #endif #ifndef PERL_MAGIC_pos # define PERL_MAGIC_pos '.' #endif #ifndef PERL_MAGIC_backref # define PERL_MAGIC_backref '<' #endif #ifndef PERL_MAGIC_ext # define PERL_MAGIC_ext '~' #endif /* That's the best we can do... */ #ifndef sv_catpvn_nomg # define sv_catpvn_nomg sv_catpvn #endif #ifndef sv_catsv_nomg # define sv_catsv_nomg sv_catsv #endif #ifndef sv_setsv_nomg # define sv_setsv_nomg sv_setsv #endif #ifndef sv_pvn_nomg # define sv_pvn_nomg sv_pvn #endif #ifndef SvIV_nomg # define SvIV_nomg SvIV #endif #ifndef SvUV_nomg # define SvUV_nomg SvUV #endif #ifndef sv_catpv_mg # define sv_catpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catpvn_mg # define sv_catpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_catpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_catsv_mg # define sv_catsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_catsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setiv_mg # define sv_setiv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setiv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setnv_mg # define sv_setnv_mg(sv, num) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setnv(TeMpSv,num); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpv_mg # define sv_setpv_mg(sv, ptr) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpv(TeMpSv,ptr); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setpvn_mg # define sv_setpvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setpvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setsv_mg # define sv_setsv_mg(dsv, ssv) \ STMT_START { \ SV *TeMpSv = dsv; \ sv_setsv(TeMpSv,ssv); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_setuv_mg # define sv_setuv_mg(sv, i) \ STMT_START { \ SV *TeMpSv = sv; \ sv_setuv(TeMpSv,i); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef sv_usepvn_mg # define sv_usepvn_mg(sv, ptr, len) \ STMT_START { \ SV *TeMpSv = sv; \ sv_usepvn(TeMpSv,ptr,len); \ SvSETMAGIC(TeMpSv); \ } STMT_END #endif #ifndef SvVSTRING_mg # define SvVSTRING_mg(sv) (SvMAGICAL(sv) ? mg_find(sv, PERL_MAGIC_vstring) : NULL) #endif /* Hint: sv_magic_portable * This is a compatibility function that is only available with * Devel::PPPort. It is NOT in the perl core. * Its purpose is to mimic the 5.8.0 behaviour of sv_magic() when * it is being passed a name pointer with namlen == 0. In that * case, perl 5.8.0 and later store the pointer, not a copy of it. * The compatibility can be provided back to perl 5.004. With * earlier versions, the code will not compile. */ #if (PERL_BCDVERSION < 0x5004000) /* code that uses sv_magic_portable will not compile */ #elif (PERL_BCDVERSION < 0x5008000) # define sv_magic_portable(sv, obj, how, name, namlen) \ STMT_START { \ SV *SvMp_sv = (sv); \ char *SvMp_name = (char *) (name); \ I32 SvMp_namlen = (namlen); \ if (SvMp_name && SvMp_namlen == 0) \ { \ MAGIC *mg; \ sv_magic(SvMp_sv, obj, how, 0, 0); \ mg = SvMAGIC(SvMp_sv); \ mg->mg_len = -42; /* XXX: this is the tricky part */ \ mg->mg_ptr = SvMp_name; \ } \ else \ { \ sv_magic(SvMp_sv, obj, how, SvMp_name, SvMp_namlen); \ } \ } STMT_END #else # define sv_magic_portable(a, b, c, d, e) sv_magic(a, b, c, d, e) #endif #if !defined(mg_findext) #if defined(NEED_mg_findext) static MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl); static #else extern MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl); #endif #define mg_findext DPPP_(my_mg_findext) #define Perl_mg_findext DPPP_(my_mg_findext) #if defined(NEED_mg_findext) || defined(NEED_mg_findext_GLOBAL) MAGIC * DPPP_(my_mg_findext)(SV * sv, int type, const MGVTBL *vtbl) { if (sv) { MAGIC *mg; #ifdef AvPAD_NAMELIST assert(!(SvTYPE(sv) == SVt_PVAV && AvPAD_NAMELIST(sv))); #endif for (mg = SvMAGIC (sv); mg; mg = mg->mg_moremagic) { if (mg->mg_type == type && mg->mg_virtual == vtbl) return mg; } } return NULL; } #endif #endif #if !defined(sv_unmagicext) #if defined(NEED_sv_unmagicext) static int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl); static #else extern int DPPP_(my_sv_unmagicext)(pTHX_ SV * const sv, const int type, MGVTBL * vtbl); #endif #ifdef sv_unmagicext # undef sv_unmagicext #endif #define sv_unmagicext(a,b,c) DPPP_(my_sv_unmagicext)(aTHX_ a,b,c) #define Perl_sv_unmagicext DPPP_(my_sv_unmagicext) #if defined(NEED_sv_unmagicext) || defined(NEED_sv_unmagicext_GLOBAL) int DPPP_(my_sv_unmagicext)(pTHX_ SV *const sv, const int type, MGVTBL *vtbl) { MAGIC* mg; MAGIC** mgp; if (SvTYPE(sv) < SVt_PVMG || !SvMAGIC(sv)) return 0; mgp = &(SvMAGIC(sv)); for (mg = *mgp; mg; mg = *mgp) { const MGVTBL* const virt = mg->mg_virtual; if (mg->mg_type == type && virt == vtbl) { *mgp = mg->mg_moremagic; if (virt && virt->svt_free) virt->svt_free(aTHX_ sv, mg); if (mg->mg_ptr && mg->mg_type != PERL_MAGIC_regex_global) { if (mg->mg_len > 0) Safefree(mg->mg_ptr); else if (mg->mg_len == HEf_SVKEY) /* Questionable on older perls... */ SvREFCNT_dec(MUTABLE_SV(mg->mg_ptr)); else if (mg->mg_type == PERL_MAGIC_utf8) Safefree(mg->mg_ptr); } if (mg->mg_flags & MGf_REFCOUNTED) SvREFCNT_dec(mg->mg_obj); Safefree(mg); } else mgp = &mg->mg_moremagic; } if (SvMAGIC(sv)) { if (SvMAGICAL(sv)) /* if we're under save_magic, wait for restore_magic; */ mg_magical(sv); /* else fix the flags now */ } else { SvMAGICAL_off(sv); SvFLAGS(sv) |= (SvFLAGS(sv) & (SVp_IOK|SVp_NOK|SVp_POK)) >> PRIVSHIFT; } return 0; } #endif #endif #ifdef USE_ITHREADS #ifndef CopFILE # define CopFILE(c) ((c)->cop_file) #endif #ifndef CopFILEGV # define CopFILEGV(c) (CopFILE(c) ? gv_fetchfile(CopFILE(c)) : Nullgv) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) ((c)->cop_file = savepv(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILE(c) ? GvSV(gv_fetchfile(CopFILE(c))) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILE(c) ? GvAV(gv_fetchfile(CopFILE(c))) : Nullav) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) ((c)->cop_stashpv) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) ((c)->cop_stashpv = ((pv) ? savepv(pv) : Nullch)) #endif #ifndef CopSTASH # define CopSTASH(c) (CopSTASHPV(c) ? gv_stashpv(CopSTASHPV(c),GV_ADD) : Nullhv) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) CopSTASHPV_set(c, (hv) ? HvNAME(hv) : Nullch) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) ((hv) && (CopSTASHPV(c) == HvNAME(hv) \ || (CopSTASHPV(c) && HvNAME(hv) \ && strEQ(CopSTASHPV(c), HvNAME(hv))))) #endif #else #ifndef CopFILEGV # define CopFILEGV(c) ((c)->cop_filegv) #endif #ifndef CopFILEGV_set # define CopFILEGV_set(c,gv) ((c)->cop_filegv = (GV*)SvREFCNT_inc(gv)) #endif #ifndef CopFILE_set # define CopFILE_set(c,pv) CopFILEGV_set((c), gv_fetchfile(pv)) #endif #ifndef CopFILESV # define CopFILESV(c) (CopFILEGV(c) ? GvSV(CopFILEGV(c)) : Nullsv) #endif #ifndef CopFILEAV # define CopFILEAV(c) (CopFILEGV(c) ? GvAV(CopFILEGV(c)) : Nullav) #endif #ifndef CopFILE # define CopFILE(c) (CopFILESV(c) ? SvPVX(CopFILESV(c)) : Nullch) #endif #ifndef CopSTASH # define CopSTASH(c) ((c)->cop_stash) #endif #ifndef CopSTASH_set # define CopSTASH_set(c,hv) ((c)->cop_stash = (hv)) #endif #ifndef CopSTASHPV # define CopSTASHPV(c) (CopSTASH(c) ? HvNAME(CopSTASH(c)) : Nullch) #endif #ifndef CopSTASHPV_set # define CopSTASHPV_set(c,pv) CopSTASH_set((c), gv_stashpv(pv,GV_ADD)) #endif #ifndef CopSTASH_eq # define CopSTASH_eq(c,hv) (CopSTASH(c) == (hv)) #endif #endif /* USE_ITHREADS */ #if (PERL_BCDVERSION >= 0x5006000) #ifndef caller_cx # if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL) static I32 DPPP_dopoptosub_at(const PERL_CONTEXT *cxstk, I32 startingblock) { I32 i; for (i = startingblock; i >= 0; i--) { register const PERL_CONTEXT * const cx = &cxstk[i]; switch (CxTYPE(cx)) { default: continue; case CXt_EVAL: case CXt_SUB: case CXt_FORMAT: return i; } } return i; } # endif # if defined(NEED_caller_cx) static const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp); static #else extern const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp); #endif #ifdef caller_cx # undef caller_cx #endif #define caller_cx(a,b) DPPP_(my_caller_cx)(aTHX_ a,b) #define Perl_caller_cx DPPP_(my_caller_cx) #if defined(NEED_caller_cx) || defined(NEED_caller_cx_GLOBAL) const PERL_CONTEXT * DPPP_(my_caller_cx)(pTHX_ I32 count, const PERL_CONTEXT **dbcxp) { register I32 cxix = DPPP_dopoptosub_at(cxstack, cxstack_ix); register const PERL_CONTEXT *cx; register const PERL_CONTEXT *ccstack = cxstack; const PERL_SI *top_si = PL_curstackinfo; for (;;) { /* we may be in a higher stacklevel, so dig down deeper */ while (cxix < 0 && top_si->si_type != PERLSI_MAIN) { top_si = top_si->si_prev; ccstack = top_si->si_cxstack; cxix = DPPP_dopoptosub_at(ccstack, top_si->si_cxix); } if (cxix < 0) return NULL; /* caller() should not report the automatic calls to &DB::sub */ if (PL_DBsub && GvCV(PL_DBsub) && cxix >= 0 && ccstack[cxix].blk_sub.cv == GvCV(PL_DBsub)) count++; if (!count--) break; cxix = DPPP_dopoptosub_at(ccstack, cxix - 1); } cx = &ccstack[cxix]; if (dbcxp) *dbcxp = cx; if (CxTYPE(cx) == CXt_SUB || CxTYPE(cx) == CXt_FORMAT) { const I32 dbcxix = DPPP_dopoptosub_at(ccstack, cxix - 1); /* We expect that ccstack[dbcxix] is CXt_SUB, anyway, the field below is defined for any cx. */ /* caller() should not report the automatic calls to &DB::sub */ if (PL_DBsub && GvCV(PL_DBsub) && dbcxix >= 0 && ccstack[dbcxix].blk_sub.cv == GvCV(PL_DBsub)) cx = &ccstack[dbcxix]; } return cx; } # endif #endif /* caller_cx */ #endif /* 5.6.0 */ #ifndef IN_PERL_COMPILETIME # define IN_PERL_COMPILETIME (PL_curcop == &PL_compiling) #endif #ifndef IN_LOCALE_RUNTIME # define IN_LOCALE_RUNTIME (PL_curcop->op_private & HINT_LOCALE) #endif #ifndef IN_LOCALE_COMPILETIME # define IN_LOCALE_COMPILETIME (PL_hints & HINT_LOCALE) #endif #ifndef IN_LOCALE # define IN_LOCALE (IN_PERL_COMPILETIME ? IN_LOCALE_COMPILETIME : IN_LOCALE_RUNTIME) #endif #ifndef IS_NUMBER_IN_UV # define IS_NUMBER_IN_UV 0x01 #endif #ifndef IS_NUMBER_GREATER_THAN_UV_MAX # define IS_NUMBER_GREATER_THAN_UV_MAX 0x02 #endif #ifndef IS_NUMBER_NOT_INT # define IS_NUMBER_NOT_INT 0x04 #endif #ifndef IS_NUMBER_NEG # define IS_NUMBER_NEG 0x08 #endif #ifndef IS_NUMBER_INFINITY # define IS_NUMBER_INFINITY 0x10 #endif #ifndef IS_NUMBER_NAN # define IS_NUMBER_NAN 0x20 #endif #ifndef GROK_NUMERIC_RADIX # define GROK_NUMERIC_RADIX(sp, send) grok_numeric_radix(sp, send) #endif #ifndef PERL_SCAN_GREATER_THAN_UV_MAX # define PERL_SCAN_GREATER_THAN_UV_MAX 0x02 #endif #ifndef PERL_SCAN_SILENT_ILLDIGIT # define PERL_SCAN_SILENT_ILLDIGIT 0x04 #endif #ifndef PERL_SCAN_ALLOW_UNDERSCORES # define PERL_SCAN_ALLOW_UNDERSCORES 0x01 #endif #ifndef PERL_SCAN_DISALLOW_PREFIX # define PERL_SCAN_DISALLOW_PREFIX 0x02 #endif #ifndef grok_numeric_radix #if defined(NEED_grok_numeric_radix) static bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); static #else extern bool DPPP_(my_grok_numeric_radix)(pTHX_ const char ** sp, const char * send); #endif #ifdef grok_numeric_radix # undef grok_numeric_radix #endif #define grok_numeric_radix(a,b) DPPP_(my_grok_numeric_radix)(aTHX_ a,b) #define Perl_grok_numeric_radix DPPP_(my_grok_numeric_radix) #if defined(NEED_grok_numeric_radix) || defined(NEED_grok_numeric_radix_GLOBAL) bool DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) { #ifdef USE_LOCALE_NUMERIC #ifdef PL_numeric_radix_sv if (PL_numeric_radix_sv && IN_LOCALE) { STRLEN len; char* radix = SvPV(PL_numeric_radix_sv, len); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #else /* older perls don't have PL_numeric_radix_sv so the radix * must manually be requested from locale.h */ #include dTHR; /* needed for older threaded perls */ struct lconv *lc = localeconv(); char *radix = lc->decimal_point; if (radix && IN_LOCALE) { STRLEN len = strlen(radix); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; return TRUE; } } #endif #endif /* USE_LOCALE_NUMERIC */ /* always try "." if numeric radix didn't match because * we may have data from different locales mixed */ if (*sp < send && **sp == '.') { ++*sp; return TRUE; } return FALSE; } #endif #endif #ifndef grok_number #if defined(NEED_grok_number) static int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); static #else extern int DPPP_(my_grok_number)(pTHX_ const char * pv, STRLEN len, UV * valuep); #endif #ifdef grok_number # undef grok_number #endif #define grok_number(a,b,c) DPPP_(my_grok_number)(aTHX_ a,b,c) #define Perl_grok_number DPPP_(my_grok_number) #if defined(NEED_grok_number) || defined(NEED_grok_number_GLOBAL) int DPPP_(my_grok_number)(pTHX_ const char *pv, STRLEN len, UV *valuep) { const char *s = pv; const char *send = pv + len; const UV max_div_10 = UV_MAX / 10; const char max_mod_10 = UV_MAX % 10; int numtype = 0; int sawinf = 0; int sawnan = 0; while (s < send && isSPACE(*s)) s++; if (s == send) { return 0; } else if (*s == '-') { s++; numtype = IS_NUMBER_NEG; } else if (*s == '+') s++; if (s == send) return 0; /* next must be digit or the radix separator or beginning of infinity */ if (isDIGIT(*s)) { /* UVs are at least 32 bits, so the first 9 decimal digits cannot overflow. */ UV value = *s - '0'; /* This construction seems to be more optimiser friendly. (without it gcc does the isDIGIT test and the *s - '0' separately) With it gcc on arm is managing 6 instructions (6 cycles) per digit. In theory the optimiser could deduce how far to unroll the loop before checking for overflow. */ if (++s < send) { int digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { digit = *s - '0'; if (digit >= 0 && digit <= 9) { value = value * 10 + digit; if (++s < send) { /* Now got 9 digits, so need to check each time for overflow. */ digit = *s - '0'; while (digit >= 0 && digit <= 9 && (value < max_div_10 || (value == max_div_10 && digit <= max_mod_10))) { value = value * 10 + digit; if (++s < send) digit = *s - '0'; else break; } if (digit >= 0 && digit <= 9 && (s < send)) { /* value overflowed. skip the remaining digits, don't worry about setting *valuep. */ do { s++; } while (s < send && isDIGIT(*s)); numtype |= IS_NUMBER_GREATER_THAN_UV_MAX; goto skip_value; } } } } } } } } } } } } } } } } } } numtype |= IS_NUMBER_IN_UV; if (valuep) *valuep = value; skip_value: if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT; while (s < send && isDIGIT(*s)) /* optional digits after the radix */ s++; } } else if (GROK_NUMERIC_RADIX(&s, send)) { numtype |= IS_NUMBER_NOT_INT | IS_NUMBER_IN_UV; /* valuep assigned below */ /* no digits before the radix means we need digits after it */ if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); if (valuep) { /* integer approximation is valid - it's 0. */ *valuep = 0; } } else return 0; } else if (*s == 'I' || *s == 'i') { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'F' && *s != 'f')) return 0; s++; if (s < send && (*s == 'I' || *s == 'i')) { s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; if (s == send || (*s != 'I' && *s != 'i')) return 0; s++; if (s == send || (*s != 'T' && *s != 't')) return 0; s++; if (s == send || (*s != 'Y' && *s != 'y')) return 0; s++; } sawinf = 1; } else if (*s == 'N' || *s == 'n') { /* XXX TODO: There are signaling NaNs and quiet NaNs. */ s++; if (s == send || (*s != 'A' && *s != 'a')) return 0; s++; if (s == send || (*s != 'N' && *s != 'n')) return 0; s++; sawnan = 1; } else return 0; if (sawinf) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_INFINITY | IS_NUMBER_NOT_INT; } else if (sawnan) { numtype &= IS_NUMBER_NEG; /* Keep track of sign */ numtype |= IS_NUMBER_NAN | IS_NUMBER_NOT_INT; } else if (s < send) { /* we can have an optional exponent part */ if (*s == 'e' || *s == 'E') { /* The only flag we keep is sign. Blow away any "it's UV" */ numtype &= IS_NUMBER_NEG; numtype |= IS_NUMBER_NOT_INT; s++; if (s < send && (*s == '-' || *s == '+')) s++; if (s < send && isDIGIT(*s)) { do { s++; } while (s < send && isDIGIT(*s)); } else return 0; } } while (s < send && isSPACE(*s)) s++; if (s >= send) return numtype; if (len == 10 && memEQ(pv, "0 but true", 10)) { if (valuep) *valuep = 0; return IS_NUMBER_IN_UV; } return 0; } #endif #endif /* * The grok_* routines have been modified to use warn() instead of * Perl_warner(). Also, 'hexdigit' was the former name of PL_hexdigit, * which is why the stack variable has been renamed to 'xdigit'. */ #ifndef grok_bin #if defined(NEED_grok_bin) static UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_bin)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_bin # undef grok_bin #endif #define grok_bin(a,b,c,d) DPPP_(my_grok_bin)(aTHX_ a,b,c,d) #define Perl_grok_bin DPPP_(my_grok_bin) #if defined(NEED_grok_bin) || defined(NEED_grok_bin_GLOBAL) UV DPPP_(my_grok_bin)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_2 = UV_MAX / 2; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading b or 0b. for compatibility silently suffer "b" and "0b" as valid binary numbers. */ if (len >= 1) { if (s[0] == 'b') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'b') { s+=2; len-=2; } } } for (; len-- && *s; s++) { char bit = *s; if (bit == '0' || bit == '1') { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_bin. */ redo: if (!overflowed) { if (value <= max_div_2) { value = (value << 1) | (bit - '0'); continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in binary number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 2.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount. */ value_nv += (NV)(bit - '0'); continue; } if (bit == '_' && len && allow_underscores && (bit = s[1]) && (bit == '0' || bit == '1')) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal binary digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Binary number > 0b11111111111111111111111111111111 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_hex #if defined(NEED_grok_hex) static UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_hex)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_hex # undef grok_hex #endif #define grok_hex(a,b,c,d) DPPP_(my_grok_hex)(aTHX_ a,b,c,d) #define Perl_grok_hex DPPP_(my_grok_hex) #if defined(NEED_grok_hex) || defined(NEED_grok_hex_GLOBAL) UV DPPP_(my_grok_hex)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_16 = UV_MAX / 16; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; const char *xdigit; if (!(*flags & PERL_SCAN_DISALLOW_PREFIX)) { /* strip off leading x or 0x. for compatibility silently suffer "x" and "0x" as valid hex numbers. */ if (len >= 1) { if (s[0] == 'x') { s++; len--; } else if (len >= 2 && s[0] == '0' && s[1] == 'x') { s+=2; len-=2; } } } for (; len-- && *s; s++) { xdigit = strchr((char *) PL_hexdigit, *s); if (xdigit) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. With gcc seems to be much straighter code than old scan_hex. */ redo: if (!overflowed) { if (value <= max_div_16) { value = (value << 4) | ((xdigit - PL_hexdigit) & 15); continue; } warn("Integer overflow in hexadecimal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 16.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 16-tuples. */ value_nv += (NV)((xdigit - PL_hexdigit) & 15); continue; } if (*s == '_' && len && allow_underscores && s[1] && (xdigit = strchr((char *) PL_hexdigit, s[1]))) { --len; ++s; goto redo; } if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal hexadecimal digit '%c' ignored", *s); break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Hexadecimal number > 0xffffffff non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #ifndef grok_oct #if defined(NEED_grok_oct) static UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); static #else extern UV DPPP_(my_grok_oct)(pTHX_ const char * start, STRLEN * len_p, I32 * flags, NV * result); #endif #ifdef grok_oct # undef grok_oct #endif #define grok_oct(a,b,c,d) DPPP_(my_grok_oct)(aTHX_ a,b,c,d) #define Perl_grok_oct DPPP_(my_grok_oct) #if defined(NEED_grok_oct) || defined(NEED_grok_oct_GLOBAL) UV DPPP_(my_grok_oct)(pTHX_ const char *start, STRLEN *len_p, I32 *flags, NV *result) { const char *s = start; STRLEN len = *len_p; UV value = 0; NV value_nv = 0; const UV max_div_8 = UV_MAX / 8; bool allow_underscores = *flags & PERL_SCAN_ALLOW_UNDERSCORES; bool overflowed = FALSE; for (; len-- && *s; s++) { /* gcc 2.95 optimiser not smart enough to figure that this subtraction out front allows slicker code. */ int digit = *s - '0'; if (digit >= 0 && digit <= 7) { /* Write it in this wonky order with a goto to attempt to get the compiler to make the common case integer-only loop pretty tight. */ redo: if (!overflowed) { if (value <= max_div_8) { value = (value << 3) | digit; continue; } /* Bah. We're just overflowed. */ warn("Integer overflow in octal number"); overflowed = TRUE; value_nv = (NV) value; } value_nv *= 8.0; /* If an NV has not enough bits in its mantissa to * represent a UV this summing of small low-order numbers * is a waste of time (because the NV cannot preserve * the low-order bits anyway): we could just remember when * did we overflow and in the end just multiply value_nv by the * right amount of 8-tuples. */ value_nv += (NV)digit; continue; } if (digit == ('_' - '0') && len && allow_underscores && (digit = s[1] - '0') && (digit >= 0 && digit <= 7)) { --len; ++s; goto redo; } /* Allow \octal to work the DWIM way (that is, stop scanning * as soon as non-octal characters are seen, complain only iff * someone seems to want to use the digits eight and nine). */ if (digit == 8 || digit == 9) { if (!(*flags & PERL_SCAN_SILENT_ILLDIGIT)) warn("Illegal octal digit '%c' ignored", *s); } break; } if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) #endif ) { warn("Octal number > 037777777777 non-portable"); } *len_p = s - start; if (!overflowed) { *flags = 0; return value; } *flags = PERL_SCAN_GREATER_THAN_UV_MAX; if (result) *result = value_nv; return UV_MAX; } #endif #endif #if !defined(my_snprintf) #if defined(NEED_my_snprintf) static int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); static #else extern int DPPP_(my_my_snprintf)(char * buffer, const Size_t len, const char * format, ...); #endif #define my_snprintf DPPP_(my_my_snprintf) #define Perl_my_snprintf DPPP_(my_my_snprintf) #if defined(NEED_my_snprintf) || defined(NEED_my_snprintf_GLOBAL) int DPPP_(my_my_snprintf)(char *buffer, const Size_t len, const char *format, ...) { dTHX; int retval; va_list ap; va_start(ap, format); #ifdef HAS_VSNPRINTF retval = vsnprintf(buffer, len, format, ap); #else retval = vsprintf(buffer, format, ap); #endif va_end(ap); if (retval < 0 || (len > 0 && (Size_t)retval >= len)) Perl_croak(aTHX_ "panic: my_snprintf buffer overflow"); return retval; } #endif #endif #if !defined(my_sprintf) #if defined(NEED_my_sprintf) static int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); static #else extern int DPPP_(my_my_sprintf)(char * buffer, const char * pat, ...); #endif #define my_sprintf DPPP_(my_my_sprintf) #define Perl_my_sprintf DPPP_(my_my_sprintf) #if defined(NEED_my_sprintf) || defined(NEED_my_sprintf_GLOBAL) int DPPP_(my_my_sprintf)(char *buffer, const char* pat, ...) { va_list args; va_start(args, pat); vsprintf(buffer, pat, args); va_end(args); return strlen(buffer); } #endif #endif #ifdef NO_XSLOCKS # ifdef dJMPENV # define dXCPT dJMPENV; int rEtV = 0 # define XCPT_TRY_START JMPENV_PUSH(rEtV); if (rEtV == 0) # define XCPT_TRY_END JMPENV_POP; # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW JMPENV_JUMP(rEtV) # else # define dXCPT Sigjmp_buf oldTOP; int rEtV = 0 # define XCPT_TRY_START Copy(top_env, oldTOP, 1, Sigjmp_buf); rEtV = Sigsetjmp(top_env, 1); if (rEtV == 0) # define XCPT_TRY_END Copy(oldTOP, top_env, 1, Sigjmp_buf); # define XCPT_CATCH if (rEtV != 0) # define XCPT_RETHROW Siglongjmp(top_env, rEtV) # endif #endif #if !defined(my_strlcat) #if defined(NEED_my_strlcat) static Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); static #else extern Size_t DPPP_(my_my_strlcat)(char * dst, const char * src, Size_t size); #endif #define my_strlcat DPPP_(my_my_strlcat) #define Perl_my_strlcat DPPP_(my_my_strlcat) #if defined(NEED_my_strlcat) || defined(NEED_my_strlcat_GLOBAL) Size_t DPPP_(my_my_strlcat)(char *dst, const char *src, Size_t size) { Size_t used, length, copy; used = strlen(dst); length = strlen(src); if (size > 0 && used < size - 1) { copy = (length >= size - used) ? size - used - 1 : length; memcpy(dst + used, src, copy); dst[used + copy] = '\0'; } return used + length; } #endif #endif #if !defined(my_strlcpy) #if defined(NEED_my_strlcpy) static Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); static #else extern Size_t DPPP_(my_my_strlcpy)(char * dst, const char * src, Size_t size); #endif #define my_strlcpy DPPP_(my_my_strlcpy) #define Perl_my_strlcpy DPPP_(my_my_strlcpy) #if defined(NEED_my_strlcpy) || defined(NEED_my_strlcpy_GLOBAL) Size_t DPPP_(my_my_strlcpy)(char *dst, const char *src, Size_t size) { Size_t length, copy; length = strlen(src); if (size > 0) { copy = (length >= size) ? size - 1 : length; memcpy(dst, src, copy); dst[copy] = '\0'; } return length; } #endif #endif #ifndef PERL_PV_ESCAPE_QUOTE # define PERL_PV_ESCAPE_QUOTE 0x0001 #endif #ifndef PERL_PV_PRETTY_QUOTE # define PERL_PV_PRETTY_QUOTE PERL_PV_ESCAPE_QUOTE #endif #ifndef PERL_PV_PRETTY_ELLIPSES # define PERL_PV_PRETTY_ELLIPSES 0x0002 #endif #ifndef PERL_PV_PRETTY_LTGT # define PERL_PV_PRETTY_LTGT 0x0004 #endif #ifndef PERL_PV_ESCAPE_FIRSTCHAR # define PERL_PV_ESCAPE_FIRSTCHAR 0x0008 #endif #ifndef PERL_PV_ESCAPE_UNI # define PERL_PV_ESCAPE_UNI 0x0100 #endif #ifndef PERL_PV_ESCAPE_UNI_DETECT # define PERL_PV_ESCAPE_UNI_DETECT 0x0200 #endif #ifndef PERL_PV_ESCAPE_ALL # define PERL_PV_ESCAPE_ALL 0x1000 #endif #ifndef PERL_PV_ESCAPE_NOBACKSLASH # define PERL_PV_ESCAPE_NOBACKSLASH 0x2000 #endif #ifndef PERL_PV_ESCAPE_NOCLEAR # define PERL_PV_ESCAPE_NOCLEAR 0x4000 #endif #ifndef PERL_PV_ESCAPE_RE # define PERL_PV_ESCAPE_RE 0x8000 #endif #ifndef PERL_PV_PRETTY_NOCLEAR # define PERL_PV_PRETTY_NOCLEAR PERL_PV_ESCAPE_NOCLEAR #endif #ifndef PERL_PV_PRETTY_DUMP # define PERL_PV_PRETTY_DUMP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_QUOTE #endif #ifndef PERL_PV_PRETTY_REGPROP # define PERL_PV_PRETTY_REGPROP PERL_PV_PRETTY_ELLIPSES|PERL_PV_PRETTY_LTGT|PERL_PV_ESCAPE_RE #endif /* Hint: pv_escape * Note that unicode functionality is only backported to * those perl versions that support it. For older perl * versions, the implementation will fall back to bytes. */ #ifndef pv_escape #if defined(NEED_pv_escape) static char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); static #else extern char * DPPP_(my_pv_escape)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags); #endif #ifdef pv_escape # undef pv_escape #endif #define pv_escape(a,b,c,d,e,f) DPPP_(my_pv_escape)(aTHX_ a,b,c,d,e,f) #define Perl_pv_escape DPPP_(my_pv_escape) #if defined(NEED_pv_escape) || defined(NEED_pv_escape_GLOBAL) char * DPPP_(my_pv_escape)(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags) { const char esc = flags & PERL_PV_ESCAPE_RE ? '%' : '\\'; const char dq = flags & PERL_PV_ESCAPE_QUOTE ? '"' : esc; char octbuf[32] = "%123456789ABCDF"; STRLEN wrote = 0; STRLEN chsize = 0; STRLEN readsize = 1; #if defined(is_utf8_string) && defined(utf8_to_uvchr) bool isuni = flags & PERL_PV_ESCAPE_UNI ? 1 : 0; #endif const char *pv = str; const char * const end = pv + count; octbuf[0] = esc; if (!(flags & PERL_PV_ESCAPE_NOCLEAR)) sv_setpvs(dsv, ""); #if defined(is_utf8_string) && defined(utf8_to_uvchr) if ((flags & PERL_PV_ESCAPE_UNI_DETECT) && is_utf8_string((U8*)pv, count)) isuni = 1; #endif for (; pv < end && (!max || wrote < max) ; pv += readsize) { const UV u = #if defined(is_utf8_string) && defined(utf8_to_uvchr) isuni ? utf8_to_uvchr((U8*)pv, &readsize) : #endif (U8)*pv; const U8 c = (U8)u & 0xFF; if (u > 255 || (flags & PERL_PV_ESCAPE_ALL)) { if (flags & PERL_PV_ESCAPE_FIRSTCHAR) chsize = my_snprintf(octbuf, sizeof octbuf, "%" UVxf, u); else chsize = my_snprintf(octbuf, sizeof octbuf, "%cx{%" UVxf "}", esc, u); } else if (flags & PERL_PV_ESCAPE_NOBACKSLASH) { chsize = 1; } else { if (c == dq || c == esc || !isPRINT(c)) { chsize = 2; switch (c) { case '\\' : /* fallthrough */ case '%' : if (c == esc) octbuf[1] = esc; else chsize = 1; break; case '\v' : octbuf[1] = 'v'; break; case '\t' : octbuf[1] = 't'; break; case '\r' : octbuf[1] = 'r'; break; case '\n' : octbuf[1] = 'n'; break; case '\f' : octbuf[1] = 'f'; break; case '"' : if (dq == '"') octbuf[1] = '"'; else chsize = 1; break; default: chsize = my_snprintf(octbuf, sizeof octbuf, pv < end && isDIGIT((U8)*(pv+readsize)) ? "%c%03o" : "%c%o", esc, c); } } else { chsize = 1; } } if (max && wrote + chsize > max) { break; } else if (chsize > 1) { sv_catpvn(dsv, octbuf, chsize); wrote += chsize; } else { char tmp[2]; my_snprintf(tmp, sizeof tmp, "%c", c); sv_catpvn(dsv, tmp, 1); wrote++; } if (flags & PERL_PV_ESCAPE_FIRSTCHAR) break; } if (escaped != NULL) *escaped= pv - str; return SvPVX(dsv); } #endif #endif #ifndef pv_pretty #if defined(NEED_pv_pretty) static char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); static #else extern char * DPPP_(my_pv_pretty)(pTHX_ SV * dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags); #endif #ifdef pv_pretty # undef pv_pretty #endif #define pv_pretty(a,b,c,d,e,f,g) DPPP_(my_pv_pretty)(aTHX_ a,b,c,d,e,f,g) #define Perl_pv_pretty DPPP_(my_pv_pretty) #if defined(NEED_pv_pretty) || defined(NEED_pv_pretty_GLOBAL) char * DPPP_(my_pv_pretty)(pTHX_ SV *dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags) { const U8 dq = (flags & PERL_PV_PRETTY_QUOTE) ? '"' : '%'; STRLEN escaped; if (!(flags & PERL_PV_PRETTY_NOCLEAR)) sv_setpvs(dsv, ""); if (dq == '"') sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, "<"); if (start_color != NULL) sv_catpv(dsv, D_PPP_CONSTPV_ARG(start_color)); pv_escape(dsv, str, count, max, &escaped, flags | PERL_PV_ESCAPE_NOCLEAR); if (end_color != NULL) sv_catpv(dsv, D_PPP_CONSTPV_ARG(end_color)); if (dq == '"') sv_catpvs(dsv, "\""); else if (flags & PERL_PV_PRETTY_LTGT) sv_catpvs(dsv, ">"); if ((flags & PERL_PV_PRETTY_ELLIPSES) && escaped < count) sv_catpvs(dsv, "..."); return SvPVX(dsv); } #endif #endif #ifndef pv_display #if defined(NEED_pv_display) static char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); static #else extern char * DPPP_(my_pv_display)(pTHX_ SV * dsv, const char * pv, STRLEN cur, STRLEN len, STRLEN pvlim); #endif #ifdef pv_display # undef pv_display #endif #define pv_display(a,b,c,d,e) DPPP_(my_pv_display)(aTHX_ a,b,c,d,e) #define Perl_pv_display DPPP_(my_pv_display) #if defined(NEED_pv_display) || defined(NEED_pv_display_GLOBAL) char * DPPP_(my_pv_display)(pTHX_ SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim) { pv_pretty(dsv, pv, cur, pvlim, NULL, NULL, PERL_PV_PRETTY_DUMP); if (len > cur && pv[cur] == '\0') sv_catpvs(dsv, "\\0"); return SvPVX(dsv); } #endif #endif #endif /* _P_P_PORTABILITY_H_ */ /* End of File ppport.h */ PK!ij ))Size.pmnu[package Devel::Size; use strict; use vars qw($VERSION @ISA @EXPORT_OK %EXPORT_TAGS $warn $dangle); require 5.005; require Exporter; require XSLoader; @ISA = qw(Exporter); @EXPORT_OK = qw(size total_size); # This allows declaration use Devel::Size ':all'; %EXPORT_TAGS = ( 'all' => \@EXPORT_OK ); $VERSION = '0.81'; XSLoader::load( __PACKAGE__); $warn = 1; $dangle = 0; ## Set true to enable warnings about dangling pointers 1; __END__ =pod =head1 NAME Devel::Size - Perl extension for finding the memory usage of Perl variables =head1 SYNOPSIS use Devel::Size qw(size total_size); my $size = size("A string"); my @foo = (1, 2, 3, 4, 5); my $other_size = size(\@foo); my $foo = {a => [1, 2, 3], b => {a => [1, 3, 4]} }; my $total_size = total_size($foo); =head1 DESCRIPTION This module figures out the real size of Perl variables in bytes, as accurately as possible. Call functions with a reference to the variable you want the size of. If the variable is a plain scalar it returns the size of this scalar. If the variable is a hash or an array, use a reference when calling. =head1 FUNCTIONS =head2 size($ref) The C function returns the amount of memory the variable returns. If the variable is a hash or an array, it only reports the amount used by the structure, I the contents. =head2 total_size($ref) The C function will traverse the variable and look at the sizes of contents. Any references contained in the variable will also be followed, so this function can be used to get the total size of a multidimensional data structure. At the moment there is no way to get the size of an array or a hash and its elements without using this function. =head1 EXPORT None but default, but optionally C and C. =head1 UNDERSTANDING MEMORY ALLOCATION Please note that the following discussion of memory allocation in perl is based on the perl 5.8.0 sources. While this is generally applicable to all versions of perl, some of the gory details are omitted. It also makes some presumptions on how your system memory allocator works so, while it will be generally correct, it may not exactly reflect your system. (Generally the only issue is the size of the constant values we'll talk about, not their existence) =head2 The C library It's important first to understand how your OS and libraries handle memory. When the perl interpreter needs some memory, it asks the C runtime library for it, using the C call. C has one parameter, the size of the memory allocation you want, and returns a pointer to that memory. C also makes sure that the pointer it returns to you is properly aligned. When you're done with the memory you hand it back to the library with the C call. C has one parameter, the pointer that C returned. There are a couple of interesting ramifications to this. Because malloc has to return an aligned pointer, it will round up the memory allocation to make sure that the memory it returns is aligned right. What that alignment is depends on your CPU, OS, and compiler settings, but things are generally aligned to either a 4 or 8 byte boundary. That means that if you ask for 1 byte, C will silently round up to either 4 or 8 bytes, though it doesn't tell the program making the request, so the extra memory can't be used. Since C isn't given the size of the memory chunk you're freeing, it has to track it another way. Most libraries do this by tacking on a length field just before the memory it hands to your program. (It's put before the beginning rather than after the end because it's less likely to get mangled by program bugs) This size field is the size of your platform integer, Generally either 4 or 8 bytes. So, if you asked for 1 byte, malloc would build something like this: +------------------+ | 4 byte length | +------------------+ <----- the pointer malloc returns | your 1 byte | +------------------+ | 3 bytes padding | +------------------+ As you can see, you asked for 1 byte but C used 8. If your integers were 8 bytes rather than 4, C would have used 16 bytes to satisfy your 1 byte request. The C memory allocation system also keeps a list of free memory chunks, so it can recycle freed memory. For performance reasons, some C memory allocation systems put a limit to the number of free segments that are on the free list, or only search through a small number of memory chunks waiting to be recycled before just allocating more memory from the system. The memory allocation system tries to keep as few chunks on the free list as possible. It does this by trying to notice if there are two adjacent chunks of memory on the free list and, if there are, coalescing them into a single larger chunk. This works pretty well, but there are ways to have a lot of memory on the free list yet still not have anything that can be allocated. If a program allocates one million eight-byte chunks, for example, then frees every other chunk, there will be four million bytes of memory on the free list, but none of that memory can be handed out to satisfy a request for 10 bytes. This is what's referred to as a fragmented free list, and can be one reason why your program could have a lot of free memory yet still not be able to allocate more, or have a huge process size and still have almost no memory actually allocated to the program running. =head2 Perl Perl's memory allocation scheme is a bit convoluted, and more complex than can really be addressed here, but there is one common spot where Perl's memory allocation is unintuitive, and that's for hash keys. When you have a hash, each entry has a structure that points to the key and the value for that entry. The value is just a pointer to the scalar in the entry, and doesn't take up any special amount of memory. The key structure holds the hash value for the key, the key length, and the key string. (The entry and key structures are separate so perl can potentially share keys across multiple hashes) The entry structure has three pointers in it, and takes up either 12 or 24 bytes, depending on whether you're on a 32 bit or 64 bit system. Since these structures are of fixed size, perl can keep a big pool of them internally (generally called an arena) so it doesn't have to allocate memory for each one. The key structure, though, is of variable length because the key string is of variable length, so perl has to ask the system for a memory allocation for each key. The base size of this structure is 8 or 16 bytes (once again, depending on whether you're on a 32 bit or 64 bit system) plus the string length plus two bytes. Since this memory has to be allocated from the system there's the malloc size-field overhead (4 or 8 bytes) plus the alignment bytes (0 to 7, depending on your system and the key length) that get added on to the chunk perl requests. If the key is only 1 character, and you're on a 32 bit system, the allocation will be 16 bytes. If the key is 7 characters then the allocation is 24 bytes on a 32 bit system. If you're on a 64 bit system the numbers get even larger. =head1 DANGERS Since version 0.72, Devel::Size uses a new pointer tracking mechanism that consumes far less memory than was previously the case. It does this by using a bit vector where 1 bit represents each 4- or 8-byte aligned pointer (32- or 64-bit platform dependent) that could exist. Further, it segments that bit vector and only allocates each chunk when an address is seen within that chunk. Since version 0.73, chunks are allocated in blocks of 2**16 bits (ie 8K), accessed via a 256-way tree. The tree is 2 levels deep on a 32 bit system, 6 levels deep on a 64 bit system. This avoids having make any assumptions about address layout on 64 bit systems or trade offs about sizes to allocate. It assumes that the addresses of allocated pointers are reasonably contiguous, so that relevant parts of the tree stay in the CPU cache. Besides saving a lot of memory, this change means that Devel::Size runs significantly faster than previous versions. =head1 Messages: texts originating from this module. =head2 Errors =over 4 =item "Devel::Size: Unknown variable type" The thing (or something contained within it) that you gave to total_size() was unrecognisable as a Perl entity. =back =head2 warnings These messages warn you that for some types, the sizes calculated may not include everything that could be associated with those types. The differences are usually insignificant for most uses of this module. These may be disabled by setting $Devel::Size::warn = 0 =over 4 =item "Devel::Size: Calculated sizes for CVs are incomplete" =item "Devel::Size: Calculated sizes for FMs are incomplete" =item "Devel::Size: Calculated sizes for compiled regexes are incompatible, and probably always will be" =back =head2 New warnings since 0.72 Devel::Size has always been vulnerable to trapping when traversing Perl's internal data structures, if it encounters uninitialised (dangling) pointers. MSVC provides exception handling able to deal with this possibility, and when built with MSVC Devel::Size will now attempt to ignore (or log) them and continue. These messages are mainly of interest to Devel::Size and core developers, and so are disabled by default. They may be enabled by setting $Devel::Size::dangle = 0 =over 4 =item "Devel::Size: Can't determine class of operator OPx_XXXX, assuming BASEOP\n" =item "Devel::Size: Encountered bad magic at: 0xXXXXXXXX" =item "Devel::Size: Encountered dangling pointer in opcode at: 0xXXXXXXXX" =item "Devel::Size: Encountered invalid pointer: 0xXXXXXXXX" =back =head1 BUGS Doesn't currently walk all the bits for code refs, formats, and IO. Those throw a warning, but a minimum size for them is returned. Devel::Size only counts the memory that perl actually allocates. It doesn't count 'dark' memory--memory that is lost due to fragmented free lists, allocation alignments, or C library overhead. =head1 AUTHOR Dan Sugalski dan@sidhe.org Small portion taken from the B module as shipped with perl 5.6.2. Previously maintained by Tels New pointer tracking & exception handling for 0.72 by BrowserUK Currently maintained by Nicholas Clark =head1 COPYRIGHT Copyright (C) 2005 Dan Sugalski, Copyright (C) 2007-2008 Tels This module is free software; you can redistribute it and/or modify it under the same terms as Perl v5.8.8. =head1 SEE ALSO perl(1), L. =cut PK!mrFFPeek.pmnu[# Devel::Peek - A data debugging tool for the XS programmer # The documentation is after the __END__ package Devel::Peek; $VERSION = '1.26'; $XS_VERSION = $VERSION; $VERSION = eval $VERSION; require Exporter; require XSLoader; @ISA = qw(Exporter); @EXPORT = qw(Dump mstat DeadCode DumpArray DumpWithOP DumpProg fill_mstats mstats_fillhash mstats2hash runops_debug debug_flags); @EXPORT_OK = qw(SvREFCNT CvGV); %EXPORT_TAGS = ('ALL' => [@EXPORT, @EXPORT_OK]); XSLoader::load(); sub import { my $c = shift; my $ops_rx = qr/^:opd(=[stP]*)?\b/; my @db = grep m/$ops_rx/, @_; @_ = grep !m/$ops_rx/, @_; if (@db) { die "Too many :opd options" if @db > 1; runops_debug(1); my $flags = ($db[0] =~ m/$ops_rx/ and $1); $flags = 'st' unless defined $flags; my $f = 0; $f |= 2 if $flags =~ /s/; $f |= 8 if $flags =~ /t/; $f |= 64 if $flags =~ /P/; $^D |= $f if $f; } unshift @_, $c; goto &Exporter::import; } sub DumpWithOP ($;$) { local($Devel::Peek::dump_ops)=1; my $depth = @_ > 1 ? $_[1] : 4 ; Dump($_[0],$depth); } $D_flags = 'psltocPmfrxuLHXDSTR'; sub debug_flags (;$) { my $out = ""; for my $i (0 .. length($D_flags)-1) { $out .= substr $D_flags, $i, 1 if $^D & (1<<$i); } my $arg = shift; my $num = $arg; if (defined $arg and $arg =~ /\D/) { die "unknown flags in debug_flags()" if $arg =~ /[^-$D_flags]/; my ($on,$off) = split /-/, "$arg-"; $num = $^D; $num |= (1<deparse($op->first, 6); my $sib = $op->first->sibling; if (ref $sib ne 'B::NULL') { push @kids, $deparse->deparse($sib, 6); } return "Devel::Peek::Dump(" . join(", ", @kids) . ")"; } 1; __END__ =head1 NAME Devel::Peek - A data debugging tool for the XS programmer =head1 SYNOPSIS use Devel::Peek; Dump( $a ); Dump( $a, 5 ); Dump( @a ); Dump( %h ); DumpArray( 5, $a, $b, ... ); mstat "Point 5"; use Devel::Peek ':opd=st'; =head1 DESCRIPTION Devel::Peek contains functions which allows raw Perl datatypes to be manipulated from a Perl script. This is used by those who do XS programming to check that the data they are sending from C to Perl looks as they think it should look. The trick, then, is to know what the raw datatype is supposed to look like when it gets to Perl. This document offers some tips and hints to describe good and bad raw data. It is very possible that this document will fall far short of being useful to the casual reader. The reader is expected to understand the material in the first few sections of L. Devel::Peek supplies a C function which can dump a raw Perl datatype, and C function to report on memory usage (if perl is compiled with corresponding option). The function DeadCode() provides statistics on the data "frozen" into inactive C. Devel::Peek also supplies C which can query reference counts on SVs. This document will take a passive, and safe, approach to data debugging and for that it will describe only the C function. All output is to STDERR. The C function takes one or two arguments: something to dump, and an optional limit for recursion and array elements (default is 4). The first argument is evaluted in rvalue scalar context, with exceptions for @array and %hash, which dump the array or hash itself. So C works, as does C. And C will call C in rvalue context, whereas C will call it in lvalue context. Function C allows dumping of multiple values (useful when you need to analyze returns of functions). The global variable $Devel::Peek::pv_limit can be set to limit the number of character printed in various string values. Setting it to 0 means no limit. If C directive has a C<:opd=FLAGS> argument, this switches on debugging of opcode dispatch. C should be a combination of C, C, and C

(see L<< B<-D> flags in perlrun|perlrun/B<-D>I >>). C<:opd> is a shortcut for C<:opd=st>. =head2 Runtime debugging C return one of the globs associated to a subroutine reference $cv. debug_flags() returns a string representation of C<$^D> (similar to what is allowed for B<-D> flag). When called with a numeric argument, sets $^D to the corresponding value. When called with an argument of the form C<"flags-flags">, set on/off bits of C<$^D> corresponding to letters before/after C<->. (The returned value is for C<$^D> before the modification.) runops_debug() returns true if the current I is the debugging one. When called with an argument, switches to debugging or non-debugging dispatcher depending on the argument (active for newly-entered subs/etc only). (The returned value is for the dispatcher before the modification.) =head2 Memory footprint debugging When perl is compiled with support for memory footprint debugging (default with Perl's malloc()), Devel::Peek provides an access to this API. Use mstat() function to emit a memory state statistic to the terminal. For more information on the format of output of mstat() see L. Three additional functions allow access to this statistic from Perl. First, use C to get the information contained in the output of mstat() into %hash. The field of this hash are minbucket nbuckets sbrk_good sbrk_slack sbrked_remains sbrks start_slack topbucket topbucket_ev topbucket_odd total total_chain total_sbrk totfree Two additional fields C, C contain array references which provide per-bucket count of free and used chunks. Two other fields C, C contain array references which provide the information about the allocated size and usable size of chunks in each bucket. Again, see L for details. Keep in mind that only the first several "odd-numbered" buckets are used, so the information on size of the "odd-numbered" buckets which are not used is probably meaningless. The information in mem_size available_size minbucket nbuckets is the property of a particular build of perl, and does not depend on the current process. If you do not provide the optional argument to the functions mstats_fillhash(), fill_mstats(), mstats2hash(), then the information in fields C, C is not updated. C is a much cheaper call (both speedwise and memory-wise) which collects the statistic into $buf in machine-readable form. At a later moment you may need to call C to use this information to fill %hash. All three APIs C, C, and C are designed to allocate no memory if used I on the same $buf and/or %hash. So, if you want to collect memory info in a cycle, you may call $#buf = 999; fill_mstats($_) for @buf; mstats_fillhash(%report, 1); # Static info too foreach (@buf) { # Do something... fill_mstats $_; # Collect statistic } foreach (@buf) { mstats2hash($_, %report); # Preserve static info # Do something with %report } =head1 EXAMPLES The following examples don't attempt to show everything as that would be a monumental task, and, frankly, we don't want this manpage to be an internals document for Perl. The examples do demonstrate some basics of the raw Perl datatypes, and should suffice to get most determined people on their way. There are no guidewires or safety nets, nor blazed trails, so be prepared to travel alone from this point and on and, if at all possible, don't fall into the quicksand (it's bad for business). Oh, one final bit of advice: take L with you. When you return we expect to see it well-thumbed. =head2 A simple scalar string Let's begin by looking a simple scalar which is holding a string. use Devel::Peek; $a = 42; $a = "hello"; Dump $a; The output: SV = PVIV(0xbc288) at 0xbe9a8 REFCNT = 1 FLAGS = (POK,pPOK) IV = 42 PV = 0xb2048 "hello"\0 CUR = 5 LEN = 8 This says C<$a> is an SV, a scalar. The scalar type is a PVIV, which is capable of holding an integer (IV) and/or a string (PV) value. The scalar's head is allocated at address 0xbe9a8, while the body is at 0xbc288. Its reference count is 1. It has the C flag set, meaning its current PV field is valid. Because POK is set we look at the PV item to see what is in the scalar. The \0 at the end indicate that this PV is properly NUL-terminated. Note that the IV field still contains its old numeric value, but because FLAGS doesn't have IOK set, we must ignore the IV item. CUR indicates the number of characters in the PV. LEN indicates the number of bytes allocated for the PV (at least one more than CUR, because LEN includes an extra byte for the end-of-string marker, then usually rounded up to some efficient allocation unit). =head2 A simple scalar number If the scalar contains a number the raw SV will be leaner. use Devel::Peek; $a = 42; Dump $a; The output: SV = IV(0xbc818) at 0xbe9a8 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 42 This says C<$a> is an SV, a scalar. The scalar is an IV, a number. Its reference count is 1. It has the C flag set, meaning it is currently being evaluated as a number. Because IOK is set we look at the IV item to see what is in the scalar. =head2 A simple scalar with an extra reference If the scalar from the previous example had an extra reference: use Devel::Peek; $a = 42; $b = \$a; Dump $a; The output: SV = IV(0xbe860) at 0xbe9a8 REFCNT = 2 FLAGS = (IOK,pIOK) IV = 42 Notice that this example differs from the previous example only in its reference count. Compare this to the next example, where we dump C<$b> instead of C<$a>. =head2 A reference to a simple scalar This shows what a reference looks like when it references a simple scalar. use Devel::Peek; $a = 42; $b = \$a; Dump $b; The output: SV = IV(0xf041c) at 0xbe9a0 REFCNT = 1 FLAGS = (ROK) RV = 0xbab08 SV = IV(0xbe860) at 0xbe9a8 REFCNT = 2 FLAGS = (IOK,pIOK) IV = 42 Starting from the top, this says C<$b> is an SV. The scalar is an IV, which is capable of holding an integer or reference value. It has the C flag set, meaning it is a reference (rather than an integer or string). Notice that Dump follows the reference and shows us what C<$b> was referencing. We see the same C<$a> that we found in the previous example. Note that the value of C coincides with the numbers we see when we stringify $b. The addresses inside IV() are addresses of C structures which hold the current state of an C. This address may change during lifetime of an SV. =head2 A reference to an array This shows what a reference to an array looks like. use Devel::Peek; $a = [42]; Dump $a; The output: SV = IV(0xc85998) at 0xc859a8 REFCNT = 1 FLAGS = (ROK) RV = 0xc70de8 SV = PVAV(0xc71e10) at 0xc70de8 REFCNT = 1 FLAGS = () ARRAY = 0xc7e820 FILL = 0 MAX = 0 FLAGS = (REAL) Elt No. 0 SV = IV(0xc70f88) at 0xc70f98 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 42 This says C<$a> is a reference (ROK), which points to another SV which is a PVAV, an array. The array has one element, element zero, which is another SV. The field C above indicates the last element in the array, similar to C<$#$a>. If C<$a> pointed to an array of two elements then we would see the following. use Devel::Peek 'Dump'; $a = [42,24]; Dump $a; The output: SV = IV(0x158c998) at 0x158c9a8 REFCNT = 1 FLAGS = (ROK) RV = 0x1577de8 SV = PVAV(0x1578e10) at 0x1577de8 REFCNT = 1 FLAGS = () ARRAY = 0x1585820 FILL = 1 MAX = 1 FLAGS = (REAL) Elt No. 0 SV = IV(0x1577f88) at 0x1577f98 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 42 Elt No. 1 SV = IV(0x158be88) at 0x158be98 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 24 Note that C will not report I the elements in the array, only several first (depending on how deep it already went into the report tree). =head2 A reference to a hash The following shows the raw form of a reference to a hash. use Devel::Peek; $a = {hello=>42}; Dump $a; The output: SV = IV(0x8177858) at 0x816a618 REFCNT = 1 FLAGS = (ROK) RV = 0x814fc10 SV = PVHV(0x8167768) at 0x814fc10 REFCNT = 1 FLAGS = (SHAREKEYS) ARRAY = 0x816c5b8 (0:7, 1:1) hash quality = 100.0% KEYS = 1 FILL = 1 MAX = 7 RITER = -1 EITER = 0x0 Elt "hello" HASH = 0xc8fd181b SV = IV(0x816c030) at 0x814fcf4 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 42 This shows C<$a> is a reference pointing to an SV. That SV is a PVHV, a hash. Fields RITER and EITER are used by C>. The "quality" of a hash is defined as the total number of comparisons needed to access every element once, relative to the expected number needed for a random hash. The value can go over 100%. The total number of comparisons is equal to the sum of the squares of the number of entries in each bucket. For a random hash of C<> keys into C<> buckets, the expected value is: n + n(n-1)/2k =head2 Dumping a large array or hash The C function, by default, dumps up to 4 elements from a toplevel array or hash. This number can be increased by supplying a second argument to the function. use Devel::Peek; $a = [10,11,12,13,14]; Dump $a; Notice that C prints only elements 10 through 13 in the above code. The following code will print all of the elements. use Devel::Peek 'Dump'; $a = [10,11,12,13,14]; Dump $a, 5; =head2 A reference to an SV which holds a C pointer This is what you really need to know as an XS programmer, of course. When an XSUB returns a pointer to a C structure that pointer is stored in an SV and a reference to that SV is placed on the XSUB stack. So the output from an XSUB which uses something like the T_PTROBJ map might look something like this: SV = IV(0xf381c) at 0xc859a8 REFCNT = 1 FLAGS = (ROK) RV = 0xb8ad8 SV = PVMG(0xbb3c8) at 0xc859a0 REFCNT = 1 FLAGS = (OBJECT,IOK,pIOK) IV = 729160 NV = 0 PV = 0 STASH = 0xc1d10 "CookBookB::Opaque" This shows that we have an SV which is a reference, which points at another SV. In this case that second SV is a PVMG, a blessed scalar. Because it is blessed it has the C flag set. Note that an SV which holds a C pointer also has the C flag set. The C is set to the package name which this SV was blessed into. The output from an XSUB which uses something like the T_PTRREF map, which doesn't bless the object, might look something like this: SV = IV(0xf381c) at 0xc859a8 REFCNT = 1 FLAGS = (ROK) RV = 0xb8ad8 SV = PVMG(0xbb3c8) at 0xc859a0 REFCNT = 1 FLAGS = (IOK,pIOK) IV = 729160 NV = 0 PV = 0 =head2 A reference to a subroutine Looks like this: SV = IV(0x24d2dd8) at 0x24d2de8 REFCNT = 1 FLAGS = (TEMP,ROK) RV = 0x24e79d8 SV = PVCV(0x24e5798) at 0x24e79d8 REFCNT = 2 FLAGS = () COMP_STASH = 0x22c9c50 "main" START = 0x22eed60 ===> 0 ROOT = 0x22ee490 GVGV::GV = 0x22de9d8 "MY" :: "top_targets" FILE = "(eval 5)" DEPTH = 0 FLAGS = 0x0 OUTSIDE_SEQ = 93 PADLIST = 0x22e9ed8 PADNAME = 0x22e9ec0(0x22eed00) PAD = 0x22e9ea8(0x22eecd0) OUTSIDE = 0x22c9fb0 (MAIN) This shows that =over 4 =item * the subroutine is not an XSUB (since C and C are non-zero, and C is not listed, and is thus null); =item * that it was compiled in the package C
; =item * under the name C; =item * inside a 5th eval in the program; =item * it is not currently executed (because C is 0); =item * it has no prototype (C field is missing). =back =head1 EXPORTS C, C, C, C, C and C, C, C, C by default. Additionally available C, C and C. =head1 BUGS Readers have been known to skip important parts of L, causing much frustration for all. =head1 AUTHOR Ilya Zakharevich ilya@math.ohio-state.edu Copyright (c) 1995-98 Ilya Zakharevich. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. Author of this software makes no claim whatsoever about suitability, reliability, edability, editability or usability of this product, and should not be kept liable for any damage resulting from the use of it. If you can use it, you are in luck, if not, I should not be kept responsible. Keep a handy copy of your backup tape at hand. =head1 SEE ALSO L, and L, again. =cut PK!>> Size/Size.sonuȯELF> @7@8@%% -- -  (-(- (- $$$$$ Ptd!!!ddQtdRtd-- - GNUB R;9j <\ '@ BE|qX` !R   @ewxe/, F"0 0 0 !T __gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizelibpthread.so.0Perl_safesyscallocPerl_safesysfreestrlenPL_opargsPL_op_namePerl_warn_nocontextputsbody_sizesPerl_cv_const_svPerl_cvgv_from_hekPerl_get_svPL_sv_placeholderPerl_sv_2iv_flagsPerl_sv_newmortalPerl_sv_setuv_mgPerl_croak_xs_usageboot_Devel__SizePerl_xs_handshakePerl_newXS_deffilePerl_xs_boot_epiloglibperl.so.5.26libc.so.6_edata__bss_start_endGLIBC_2.2.5ui -  - ` -  - / / / /  /  / / / @/ H/ P/ X/ `/ h/ p/  x/  /  / / / / / / / HH & HtH5J% %K% hhhhhhhhqhah Qh Ah 1h !h hh%E$ D%=$ D%5$ D%-$ D%%$ D%$ D%$ D% $ D%$ D%# D%# D%# D%# D%# D%# D%# DH= $ H$ H9tH# Ht H=# H5# H)HHH?HHtH# HtfD=# u+UH=# Ht H= Idm# ]wAUAHGATUHSH8HAHHHL$I$HtWuHH HHHt_HHEDu9A ŸDmH[]A\A]f.I$H1[]A\A] H@ATUHStDAH HH;HtDH;HCH9u[]A\H HH;HtHCH9u[]A\fATAUHSHtHcEHHP"H EHEH[]A\ff.UHSHHOtHHHDHH[]ÐAVAUATIUHSHHHH3HLC ff$f%fff"H %== tk= rvp==HC0HLH@H@HEHs(C f%f=[]A\A]A^@C"ttHE0H[(@= uBC"uߨtO[HE0]A\A]A^= = b=H H=IH41[HE(]A\A]A^=t>w=j=t*u=]==uHE8Hs(HLH[0fDC#@ @HEPHs(HLHs0HLHs8HLHs@HLH[HfDHE`C f%f=u {"HS([HL]A\A]A^OHS0L-tHH؃H LIcDL>fDHHJ0H&H ,HH0ut@HHDH؃0HH8HHJ0H|H H0H@H,DH؃0HuHfDHZHLrHHQID$HLH@1HLf.H H0hHPfHHE`Hs(HLHs0HLI$( HS8HHи{ HEHHEH} HEHR`HHEb}XH=^ ECHEPHs0HHS(I$8 HH4G HEDC#NHs(H[]A\A]A^fC"@Nf.HE8C f%f=t\HS(HtDHLtC f%f=}HS0ID$HЀz ffDHSID$HHs(HLBHLr@f.AWAVAAUATIUHSHHHH+Dm ADHHHD$H HDHE .AHD$H HcH>fDHEHPHtCHHHEA~.LhIt$HEDHLJI)IuHEHP Ht HEH)HH[]A\A]A^A_DHE@\HPPDHL{ t{ E Et HUHRt HHEtHUBHuHBHH[]A\A]A^A_HELx fDM?LHH0IW HL*IGHt(Awt9H~Iw(HXtIGHIW(HLfIw(H$tH kE Ѓ HEHHp 5HEHߺHpH HuHPHPHEDHLHCHEDHLHP0-HEDHLHP(HEDHLHP HEDHLHP8HEHhfDHEH@HHHEHEHEHPHEHTBLj H2H.HMQH耹HLHIUAQIU(HL=IUHL)Im:HEHLHP HEHLHHE@]HP8HLHE@\HPPDHLHE@\!Hx0Hp(HLHEHLHp0E @HEHHpPHHEHHp`8HEHHpp(HEDHLHPX"HEDHLHPx HEDHLHPh1H=E #EE Hm@HEHHp[fDHUDHLfHHDHLHgE HPHHLHEVHPHHLHEgHLH.DH=C E 3E1NCLY^]"[H_TN{J,Zlu"Nm$4/qcHo_ ӯNBǭG hu?>+tkl?lL]'uybn 0Svf[.O"-^[Na  #/b_tǐ SO]#=pْhkȚ&4 3ۏo̾PY':ڎ~D;uDc@`5d ͵\ӋPSbDΑ%_c~akЋ@ Rx7w4.U/I) vڼ{ySv V70iG| s$*f05".)2h**/C6O@`U3xӺI:Pˎ1ZQZl;GaxP)""QTQGtk'ޢSM^uCws[4RDe;ڞh .rPbf*>yOtQ b5 buȂ!cF$MN).$.7T.n}i4F^7BgYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata $o((8( ``08o8Eo T88^B@@h c n w 3}$$ @@O!!d!!$$ - -- - - -(- (-(/ (/0 00`02$26"PK!uPPPort/PPPort.sonuȯELF>`9@@8@htht hyhy!hy!X yy!y!$$HtHtHt PtdDDDQtdRtdhyhy!hy!GNU54[Xhw|508@ Htu@BEb~|Ru^tu@`~qX`~4/jq= tu@?#~^+d -t,Js!+WrVP"`=L @ K}26pY!~L( e9  5feEMR#  , t= xlF" )aP !} P*!c !- * ' 0W[ ! ;W !l `&!B &Q 0 %ae :__gmon_start___ITM_deregisterTMCloneTable_ITM_registerTMCloneTable__cxa_finalizelibpthread.so.0XS_Devel__PPPort_dXSTARGPerl_sv_2iv_flagsPerl_sv_newmortalPerl_sv_setiv_mgXS_Devel__PPPort_dAXMARKPerl_sv_setivPerl_croak_xs_usage__stack_chk_failPerl_ckwarnPerl_warner_nocontextPerl_warnerdummy_parser_warningno_dummy_parser_varsPL_no_modifyPerl_stack_growPerl_newSVivPerl_sv_2mortalPL_hexdigitPerl_newSVpvPerl_push_scopePL_ppaddrPerl_pop_scopePerl_sv_2pv_flagsPerl_markstack_growstrlenPerl_newSVsvPerl_sv_setuv_mgPerl_newSVuvPerl_sv_2uv_flagsPerl_sv_setuvPerl_croakPerl_sv_setpvf_mg_nocontextPerl_sv_setpvf_mgPerl_sv_catpvf_mg_nocontextPerl_sv_catpvf_mgPerl_my_strlcpyPerl_my_strlcat__sprintf_chk__snprintf_chkPerl_get_cvn_flagsPerl_gv_stashpvnPerl_newRVPerl_gv_fetchpvn_flagsPerl_hv_common_key_lenPerl_sv_mortalcopy_flagsPerl_sv_setpvnPerl_sv_catpvn_flagsPerl_newSVpvn_flagsPerl_newSVpvnPerl_pv_displayPerl_pv_prettyPerl_newRV_noinccall_newCONSTSUB_3call_newCONSTSUB_2Perl_newSV_typePerl_hv_iterinitPerl_hv_iternext_flagsPerl_hv_undef_flagsPerl_newSVpvf_nocontextPerl_find_rundefsvPerl_gv_add_by_typePerl_sv_2bool_flagsPerl_save_sptrPerl_get_cvPerl_get_hvPerl_get_avPerl_get_svPerl_get_re_argPerl_newOPPerl_warn_nocontextPerl_safesysmallocPerl_safesysfreePerl_safesyscallocPerl_mg_findPerl_sv_magicPerl_sv_unmagicPerl_croak_nocontextmemcpyPerl_sv_usepvn_flagsPerl_sv_setsv_mgPerl_sv_setpvn_mgPerl_sv_setpv_mgPerl_sv_2nv_flagsPerl_sv_setnv_mgPerl_sv_catsv_flagsPerl_sv_catpv_mgPerl_mg_findextPerl_sv_unmagicextPerl_gv_stashpvPerl_sv_blessPerl_sv_setnvPerl_gv_init_pvnPerl_gv_fetchsvPerl_grok_octPerl_grok_hexPerl_grok_binPerl_grok_numberexceptionPerl_caller_cxPerl_cvgv_from_hekPerl_sv_setpvPerl_mg_setPerl_load_modulePerl_call_svPerl_call_methodPerl_call_argvPerl_call_pvPerl_eval_pvPerl_eval_svPerl_newSVPerl_safesysreallocPerl_sv_pvn_force_flagsPerl_sv_2pvbytePerl_sv_vsetpvfPerl_sv_vcatpvfPerl_vnewSVpvfPerl_sv_free2PL_hash_seedPerl_newSVpvn_sharecall_newCONSTSUB_1PL_thr_keypthread_getspecificPerl_newCONSTSUBget_PL_signals_1get_PL_signals_2get_PL_signals_3boot_Devel__PPPortPerl_xs_handshakePerl_newXS_deffilePerl_my_cxt_initPerl_newXSPerl_xs_boot_epilog__sigsetjmpPerl_PerlIO_stderrPerlIO_printfexit__longjmp_chklibperl.so.5.26libc.so.6_edata__bss_start_endGLIBC_2.2.5GLIBC_2.11GLIBC_2.14GLIBC_2.4GLIBC_2.3.4U ui h F t  ii  ui h ti  hy!:py!9xy!xy!! !! !3!!M!!g!p!|!{!{!{!{!{!{!{!{!{!{! {! {! {! |!|!|!|! |!(|!0|!8|!@|!H|!P|!X|!`|!h|!p|!x|!|!|!|!|!!|!"|!#|!$|!%|!&|!'|!(|!)|!*|!+|!,|!-}!.}!/}!}!0 }!1(}!20}!48}!5@}!6H}!7P}!8X}!9`}!:h}!;p}!<x}!}!=}!}!>}!?}!@}!A}!B}!C}!D}!E}!F}!G}!H}!}!I}!J~!K~!L~!N~!O ~!P(~!0~!Q8~!R@~!SH~!TP~!UX~!V`~!Wh~!Xp~!Yx~!Z~![~!\~!]~!~!^~!_~!`~!a~!b~!c~!d~!e~!f~!h~!i~!j!k!l!m!n !o(!q0!r8!s@!tH!uP!vX!w`!xh!yp!zx!{!|!}!~!!HHV!HtH5rR!%sR!hhhhhhhhqhah Qh Ah 1h !h hhhhhhhhhhqhahQhAh1h!hhhh h!h"h#h$h%h&h'qh(ah)Qh*Ah+1h,!h-h.h/h0h1h2h3h4h5h6h7qh8ah9Qh:Ah;1h<!h=h>h?h@hAhBhChDhEhFhGqhHahIQhJAhK1hL!hMhNhOhPhQhRhShThUhVhWqhXahYQhZAh[1h\!h]h^h_h`hahbhchdhehfhgqhhahiQhjAhk1hl!hmhnhohphqhrhshthuhvhwqhxahyQhzAh{1h|!h}h~hhh%MJ!D%EJ!D%=J!D%5J!D%-J!D%%J!D%J!D%J!D% J!D%J!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%I!D%}I!D%uI!D%mI!D%eI!D%]I!D%UI!D%MI!D%EI!D%=I!D%5I!D%-I!D%%I!D%I!D%I!D% I!D%I!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%H!D%}H!D%uH!D%mH!D%eH!D%]H!D%UH!D%MH!D%EH!D%=H!D%5H!D%-H!D%%H!D%H!D%H!D% H!D%H!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%G!D%}G!D%uG!D%mG!D%eG!D%]G!D%UG!D%MG!D%EG!D%=G!D%5G!D%-G!D%%G!D%G!D%G!D% G!D%G!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%F!D%}F!D%uF!D%mF!D%eF!D%]F!D%UF!D%MF!D%EF!DH=F!HF!H9tH.F!Ht H=qF!H5jF!H)HHH?HHtH-F!HtfD=EF!u+UH= F!Ht H=?!dF!]wAVAUATUSHGxHL7HPHWxHWLHcD`HH)HGH@#HHHGL,IcHcH4L$HI)F % =uGHHP HAM %u\tSIUAM MnLcL#[]A\A]A^@HsHPD#HSIhLHAUATUSHHHGxHOH/HPHWxHcHHHуH)HHH4HL$HcҋF HH)% =u;HLh IHLHHEH&LcL#H[]A\A]@HLhf.AUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#tkHPHCL$кLHAL$ HPHCLl(%uAt8IT$AL$ MeHkH+H[]A\A]DHpILH]H5Df.HGxHOLHPHWxHcPHI)LHuHcHhHHWHHPHH5VGAVAUATUSHHHCxHKH3HPHSxHcPHH)HHHcH4L$F % =upHh HC@#tyHPHCL,HCNt 1)AE HcՉu^tUIUAE MnLcL#[]A\A]A^fDHCHC@#uHIf.LHH5'AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#tcHHHCL$AD$ HcLluUtLID$*AD$ MeHCHHH[]A\A]fHHSI*LHH5I:f.AUATUSHHHHKH3dH%(HD$1HCxHPHSxHchHH)HHHC@#HPHCL$HT$H fH*f.zi/ubAD$ HcLl|tsIT$AD$ MeHCHHHD$dH3%(uTH[]A\A]@?뗐HfH*XpHHKIA@LH^H5fATUSHHHCxHKH3HPHSxHcPHH)HHuXHcH,L$Ht)F % =u#HHP LHHCHD(H[]A\úH3HH5BfAUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#tcHHHCL$AD$ HcLluUtLID$AD$ MeHCHHH[]A\A]fH(HSILHH5iZf.AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#tcHHHCL$AD$ HcLluUtLID$AD$ MeHCHHH[]A\A]fHHSILHH5I:f.AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#tcHHHCL$AD$ HcLluUtLID$AD$ MeHCHHH[]A\A]fHHSILHH5YJf.AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#tcHHHCL$AD$ HcLluUtLID$AD$ MeHCHHH[]A\A]fH(HSILHH5iZf.AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#tsHHHCL$HcH AL$ LlHc\:!H1҃8+%uLtCIT$AL$ MeHCHHH[]A\A]@H(HSILH H5n_Df.AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#HPHCL$H Hce9!HcHЋH HSLl1҃*AD$ ‰uDt;IT$AD$ MeHCHHH[]A\A]@HI}LHH5fWATUSHGxHLgHHPHWxHchIH)HHuU uHcIDH[]A\@1* HcHH5FLcIDH[]A\HH5fDUSHHHGxHHPHWxHWHchHH)HHu51* HcHH5GHCHDHH[]HH5C4@USHHHGxHHPHWxHWHchHH)HHu51* HcHH5FHCHDHH[]HH5@USHHHGxHHPHWxHWHchHH)HHu61A* HcH HbHCHDHH[]HH5B3AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#tcHPHCL$HSAL$ HcLlHcЉ%uBt9IT$AL$ MeHCHHH[]A\A]fHILHH5fWAUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH4H,F % =unHDh HC@#twHPHCL$DyHSAL$ Ll*HcЉ%u\tSIT$AL$ MeHkH+H[]A\A]úHSAHC@#uHIfLHH5V7AUATUSHHXHGxL'HPLHWxHWHchHH)HHHG L)H] HMl$pHHID$H HC L)HI HMe=HHIEHHC L)H7 HMl$ HHID$HHC L)H# HMeHHIEHqHC L)H HMl$H HID$H=HC L)H HMeqHHIEH HC L)H HMl$>HHID$HHC L)H HMe H8HIEHHC L)H HMl$HHID$HqHC L)H HMeHPHIEH?HC L)H HMl$rHID$H HC L)H HMeAHHIEHHC L)H{ HMl$HHID$HHC L)Hg HMeHHIEHuHC L)HU HMl$H91!HID$HAHC L)HA HMeuHHIEHHC L)H/ HMl$BHHID$HHC L)H HMeHSHIEHHC L)H HMl$HHID$H|HC L)HHMeHHIEHJHC L)HHMl$}HHID$HHC L)HHMeJHHIEHHC L)HHMl$HHID$HHC L)HHMeHHIEH~HH /!HHDPRT$T$PRH@RHHDшBRHC L)HdHMl$wHID$HHH t/!HHDT$T$HHHDщHC L)HHMeHIEHHH /!HHDHHT$HT$HHHHHDHHC L)HHMl$HID$H$HH .!HHDHHT$ HT$ HHHHHDHHC L)H[HMeHIEHHH .!HHDHHT$(HT$(HHHHHDHHC L)HHMl$HID$H0HH -!HHDHHT$0HT$0HHHHHDHHC L)HHMeHIEHHH -!HHDHHT$8HT$8HHHHHDHHC L)HNHMl$HID$HDLLH IDLLHIDLLHI<DLLHIDLLHIDLLHmIHHH5fDATUSHGxHL'HPHWxHcLHGHH)HHHG L)H~ZHIl$=HID$HHC H)H~DHHHߺ HEHH+[]A\@LLIHHHHHH5 AUATUSHHHGxH/HPHHWxHWHcDhHH)HHHG H)HHLePHHHEHHC L)HHIl$HID$HHC H)H~|HMcHHHEHHCJDHH[]A\A]@HHpHLLLHMI[DHHH-HiHH5fDATUSHGxHH/HPHWxHWHHcD`HH)HHHG H)H~uHMcHHHEHHHHEHxHHHHEHZHCJDH[]A\fHH@HsHH5fUSHHHGxHHPHWxHWHchHH)HHu3X]HHHKHcHHCHHH[]HH5UFfDUSHHHGxHHPHWxHWHchHH)HHu6H5a!!1HHHKHcHHCHHH[]HH5USHHHGxHHPHWxHWHchHH)HHu;1H@UHH HKHcHHCHHH[]HH5M>@f.USHHHGxHHPHWxHWHchHH)HHuJHH !HHDH`HHkHKHcHHCHHH[]HH5Df.USHHHGxHHPHWxHWHchHH)HHu=1H5o HHHHKHcHHCHHH[]HH5 ff.AUATUSHHHGxH/HPHHWxHWHcDhHH)HHHG H)H1H5LeHWHH,HEHC L)HH5H$HIl$HID$HC H)H~sH߾*McHHHEHCJDHH[]A\A]DHHXHDLLH=I]DHHHHrHH5fDATUSHGxHH/HPHWxHWHHcD`HH)HHHG H)H~u1HH5mMcHHHH5OHEHHH߾*HEHHHEHCJDH[]A\fHH0HsHH5fAVAUATUSHHHCxL#HsHPMHSxHcJHI)LHHcIl$H4L,V  LvHCxH9HH+SHHC H)H~t1LHHHHHEL#H6!HHLkL+[]A\A]A^D1HIHCxHcHHHHL`mH(FH5gAWAVAUATUSHHHHCxH+HKHPHHSxHcPHH)HHHcLmH4L$F % =usL~H8!L HC L)H~u1LHHH]HIEH+~HAHpLcL#H[]A\A]A^A_f.1HIzfLLHIHhlH5q5DAUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH4H,F % =u~HCLn@#HPHCL$LHSHLl*HcAD$ uctZIT$AD$ MeHkH+H[]A\A]1HqIHC@#tHIpLHH5CUSHHHGxHHPHWxHWHchHH)HHu4HPHHQHKHcHHCHHH[]HH5DUSHHHGxHHPHWxHWHchHH)HHu4Hh,HHHKHcHHCHHH[]HH5DUSHHHGxHHPHWxHWHchHH)HHu4H8HHQHKHcHHCHHH[]HH5DATUSHGxHHHPHWxHWHchHH)HHuuHcH4L$F % =uKH@ HhHPHHEHHHSHLcL#[]A\f.HH5DAUATUSHHHGxL/HPLHWxHWHcD`HH)HHHŋ@ uDt;HE+E HC L)H~9ImHCMcJHH[]A\A]@+HHfDLLHUIHH5AUATUSHHHGxL/HPLHWxHWHcD`HH)HH7HHC L)H~HE uXtOHE*E ImHCMcJHH[]A\A]@LLHI*HHHH5Df.ATUSHGxHHHPHWxHWHchHH)HHu3*HcmLcHHH:II$HkH+[]A\HH5xAUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE % =ucIEH@ HSAL$ Ll*ʁƒ@t`Hx[ID$AL$ MeHkH+H[]A\A]LHfDHIeHLHH5D@AUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#tsHPHCL$LHHSHAL$ HփLl*H?@t@ʁu3ID$AL$ MeHkH+H[]A\A]HIHLHH5D@ATUSHGxHHHPHWxHWHchHH)HHu`HcH4L$F % =u3HHp HHHqHSHLcL#[]A\DHHH5׾f.ATUSHHHCxHKH3HPHSxHcPHH)HHuXHcH,L$Ht)F % =u#HHP LHHCHD(H[]A\úHSHH5+fAVAUATUSHHHCxHKH3HPHSxHcPHH)HHHcH,L4Ht)F % =HLh HC@#HPHCL$I*Lh IL9h HHEHCLl(AD$ u]tTIT$AD$ MeHkH+[]A\A]A^HCIHC@#pHzIlfLHeH5AVAUATUSHGxHHHPHWxHWHchHH)HHu|HcH4L$F % =uOHLp H߾#LHIHLHHSHLcL#[]A\A]A^NIHH5'f.AUATUSHHHGxH/HPHHWxHWHcDhHH)HHHG H)HHLe HHEHHwfDH蘰IMLH腪H5׫AUATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE % =IEIuHPH$H=CHJ-HCHDLl(AD$ uwtnIT$AD$ MeHkH+HD$dH3%(uSH[]A\A]HLBHթH$HjfH(I-LHިH5bfAUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE % =usIuH=HCHLl(AD$ /uet\IT$AD$ MeHkH+H[]A\A]fL"1H莨HwfDHIMLHէH5o'AUATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE % =IEIuHPH$H=HJ+HCHDLl(AD$ uwtnIT$AD$ MeHkH+HD$dH3%(uSH[]A\A]HL"H%H$HjfHxI-LHe.H5貧fAUATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE % =IEIuHPH$H=#HJ*HCHDLl(AD$ uwtnIT$AD$ MeHkH+HD$dH3%(uSH[]A\A]HLH赥H$HjfHI-LH辤H5BfAUATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE % =IEIuHPH$H=HJ)HCHDLl(AD$ uwtnIT$AD$ MeHkH+HD$dH3%(uSH[]A\A]HLBHEH$HjfH蘩I-LH腣NH5ҤfAUATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE % =IEIuHPH$H=CHJ(HCHDLl(AD$ uwtnIT$AD$ MeHkH+HD$dH3%(uSH[]A\A]HL"HբH$HjfH(I-LHޡH5bfAUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE % =usIuH=HCHLl(AD$ *uet\IT$AD$ MeHkH+H[]A\A]fL1H莡HwfDHIMLHՠH5o'AVAUATUSHHHCxH3HPHSxHSHcD`HH)HHHC@#HPHCL,1ɺH5H1H HHH5'@Ht x 1ɺH5HşHt x HCMcHcNtAE uDt;IUAE MnHCJH[]A\A]A^H蘥I,LH腟H5נAVAUATUSHHHCxH3HPHSxHSHcD`HH)HHHC@#HPHCL,1ɺH51H輞HHH5ט@蜞Ht x 1ɺH5ܘHuHt x HCMcHcNtAE uDt;IUAE MnHCJH[]A\A]A^HHI,LH5H5臟AVAUATUSHHHCxHKH3HPHSxHcPHH)HH+HcH4H,F % =LnHt)F % =HDp HC@#HPHCL$LDLH߉wHSLl*1HAD$ ‰twIT$AD$ MeHkH+[]A\A]A^fD1H葝HKI=DH#AHC@#GHʢICfLH赜H5USHHHGxHHPHWxHWHchHH)HHuF1ɺ H5eHH誠HH?HKHcHHCHHH[]HH5sUSHHHGxHHPHWxHWHchHH)HHuL1ɺAH5HHHH詞HKHcHHCHHH[]HH5ݜf.USHHHGxHHPHWxHWHchHH)HHuL1ɺAH5OHHtHH HKHcHHCHHH[]HH5L=f.AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#HPHCL$йA HH5脜1ҋ@ u1҃ 1D HcHCHcLlAD$ uBt9IT$AD$ MeHCHHH[]A\A]fHȟIMLH赙H5USHHHHCxH3HKHPIHSxHcPHI)LHuHHcHnLLHMtAAHHrH߹ jA$HSH+H[]H5mf.AUATUSHHHHCxH+HKHPHHSxHcPHH)HHHcHE1A L$HH߹ HHHpj诜ZYIHC H)H~.IuHߺ蝙HELcL#H[]A\A]HHHHH5|ff.USHHHHCxH+HKHPHHSxHcPHH)HHu)HcHHH4ѹ HH+H[]H5Dff.USHHHHCxH+HKHPHHSxHcPHH)HHu/HcHHAH4ѹ H` H+H[]H5vfDATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcH,L$Ht)F % =uKHHVHHH $ALH[HCHD(HHD$dH3%(u4H[]A\fDHHЖH $HH5֐苗fDATUSHGxHH/HPHWxHWHHcD`HH)HHu[HG H)H~:H߹McH5.HEHCJH[]A\f.HHPHHH5ܖff.ATUSHGxHH/HPHWxHWHHcD`HH)HHu[HG H)H~:H߹ McH5~HEHCJH[]A\f.HH蠓HHH5;,ff.AVAUATUSHGxHH/HPHWxHWHHcD`HH)HHHG H)HLuHH5HEHC L)HMnHH5ӎ萕IFHC L)H1ImHH5bIEHC H)H1H:LmHEHC L)HH߹11McIEHCJD H[]A\A]A^DHH0HLLH IDLLHIDHHH͑H'DLLH譑I3HH5E6fDAVAUATUSHHHCxH+HKHPHHSxHcPHH)HHHcLmH4L$F % =HDp HS L)HH5H襓IEEtLHC H)HH߹H5ŌsHEHCJD H[]A\A]A^f.LcL#[]A\A]A^úHA]LLHeIHhKfHHH=HYH5!ɒfAUATUSHHHGxH/HPHHWxHWHcDhHH)HHHG H)HLeHH5_HEHC L)HIl$HH5u-ID$HC H)H~|H߹McH5\HEHCJDHH[]A\A]DHH HLLLHIZDHHHݎHiHH5uffDATUSHGxHH/HPHWxHWHHcD`HH)HHHG H)H~uH߹McH5a H߹HEH54H߹HEH5+ϐHEHCJDH[]A\f.HHHsHH5yfATUSHGxHH/HPHWxHWHHcD`HH)HHu[HG H)H~:HߺH5Mc蓔HH訑HEHCJH[]A\@HH@HHH5۟̏ff.AVAUATUSHGxHH/HPHWxHWHHcD`HH)HHHG H)HH5LuH֓HHHEHC L)HH5yMnH蟓HH贐IFHC L)H1H5EImHkHH耐IEHC H)H1LmH9HHNHEHC L)HH11Mc HH IEHCJD H[]A\A]A^HH谋HLLH荋IDLLHmIDHHHMHDLLH-I+HH5ŝ趍fDAUATUSHHHHCxH3HPHHSxHcHCDjHH)HHHS H)HMcHJ,L$(A HI$HCA HJ4eH1HȍHSHHLd*蔎HI$HCLd(A HI$HCA HHt(HH1HaLcHH2II$HkH+H[]A\A]fHHHCH5ZKf.AUATUSHHHHCxH3HPHHSxHcHCDjHH)HHHS H)H8McHJ,L$(qE1H߹ I$HCA(HJ4jjZHY1HUHSHHLd*!HI$HCLd( L ܄ HI$HCA(HĄHt(HÄjP脋^1_HHHSHHLd*豌HI$HCLd( 蜏 HE1I$HCAHiHt( hjAXHAY1HzHSHHLd*(FHI$HCLd(01E1ɹHI$HCAH Ht(0hH8j謊AZHA[1H LcHH܋II$HkH+H[]A\A]HHpHCH5 f.AVAUATUSHGxHHHPHWxHWHchHH)HHHG@#HPHGL$о*HHchHHI躆HEmH HCDLtAD$ uEt<IT$AD$ MfHCHH[]A\A]A^賍IsLH蝌HH5ff.USHHHGxHHPHWxHWHchHH)HHuCHCHcHDHH[]HH5~@f.USHHHGxHHPHWxHWHchHH)HHu蓉HCHcHDHH[]HH5@f.AWAVAUATUSHHHL#HKdH%(HD$1HCxLHPHSxHcPHH)HHHcҾ Ml$HL4謊HAF  IM~HRH$ H5HËHLHjL$IA$HXHZH襈1HHhIHC L)HIVHcBD ЃHHH5gHDĆ1HHIEL#HD$dH3%(uwH[]A\A]A^A_ÐH$ HLH荅IAF HB@ aLLH腃IL`$脄H5AUATUSHHHHCxH+HKHPHHSxHcPHH)HHumHcH=kHH4L$1HH1IHC H)H~LmLcL#H[]A\A]@HHH赂HH5$D@USHHHGxHHPHWxHWHchHH)HHu8SHHHH荆HKHcHHCHHH[]HH5ДUSHHHGxHHPHWxHWHchHH)HHu[HHPH2Ht5H]HHHKHcHHCHHH[]DH1vH@H0HH5-@f.AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#HPHCL$кA HH5|dHPHHthHCHcHLlAD$ ҉uatXIT$AD$ MeHCHHH[]A\A]ÐHȇImHHUH@HfLH蕁H5AUATUSHHHHCxH3HPHSxHSHchHH)HH HC@#7HPHCL$HHVHH,@ H uzH trH ρ t_1HCAL$ HcLl%4'IT$AL$ MeHCHHH[]A\A]ËH Dt+H8tHFHHHxyfD@ H@ vHFH@ FHFH1fHf.@(HE"HI1HvH@H8HHVHH1HGHH@H@ _HVHH}1HH@H@ u2HHVHHT1HH@Hx HHVHH1H貄HH@H@ bHVHH1H耄HH@H@ HFHHu1HOH@H1HH|LH}~HHFHHHHzlH@1Ҁ80]f.HFHHu1H躃H@HHH`|HVH:1HxH@H@ HHFHHHHz BnDHFHH 1HH@HH8HHFH81HH@DHHVHH71H迂H@H@ %= &1H薂H@HHHx HHFHH1H`H@H@ HHFH8y1H0H@f1HH@HHHxHHFHH1HH@HH5}AUATUSHHHGxH/HPHHWxHWHcDhHH)HHHG H)HdHHPH2HHLe|HHEȀHHHpyHHH5HhFHEHC L)HHHPH2HHIl$i|HID$LzHC H)HHHPH2HtqHߺMc)|HEHCJDHH[]A\A]fDH1H[H@H0H1H;H@H0TH1HH@H0vHHyHLLHxIDHHHxH HH5uf{fDAVAUATUSHHHCxHKH3HPHSxHcPHH)HHHcH4H,F % =LvHt)F % =HDh HC@#HPHCL$DLHAzHSLl*1HAD$ ‰u~tuIT$AD$ MeHkH+[]A\A]A^@1HyHKIMDHwAHC@#WH~ISfLHxH5ryAVAUATUSHHHCxHKH3HPHSxHcPHH)HHHcH4H,F % =LvHt)F % =HDh HC@#HPHCL$DLH~HSLl*1HAD$ ‰u~tuIT$AD$ MeHkH+[]A\A]A^@1HxHKIMDHuAHC@#WHJ}ISfLH5wH5hqxAVAUATUSHHHCxHKH3HPHSxHcPHH)HHHcH4H,F % =LvHt)F % =HDh HC@#HPHCL$DLH{HSLl*1HAD$ ‰u~tuIT$AD$ MeHkH+[]A\A]A^@1HvHKIMDH3tAHC@#WH{ISfLHuH5owAVAUATUSHHHCxHKH3HPHSxHcPHH)HHHcH4H,F % =LvHt)F % =HDh HC@#HPHCL$DLHqwHSLl*1HAD$ ‰u~tuIT$AD$ MeHkH+[]A\A]A^@1H1uHKIMDHrAHC@#WHjzISfLHUtH5nuAUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#tkHPHCL$LHqHSLl*1HAD$ ‰uAt8IT$AD$ MeHkH+H[]A\A]DHpyILH]sH5mtDf.AWAVIAUATUSHHGxHPHWxHcHWHL$ HHH)HHHG@#HPHGL,1ҾLvH@!@{e1ҾLvK!@1ҾHCLIvAL$!@IID$C!@HCH@!@1H=mqAG!@ C!L{HcՃ࿃࿃@C!IFLcd$ J\AE AIUAE LkIFJIH[]A\A]A^A_H@Ht @!@uMAG!@^H={1pNfH={1p1C!@ HCHH{H=\l1pxDIu@wI-LLpHH5XIrfAVAUATUSHGxHHHPHWxHWHcD`HH)HHNHG@##HPHGL,пxq5jz1fH=AzfPHdsur5z90u15zf9pHMc.spHsHCHcNtAE uotfIUAE MnHCJH[]A\A]A^f=yRP@f=|yfkuILHUoHH5p@AUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#tcHPHCL$1AE ubHCLl(AD$ u`tWIT$AD$ MeHkH+H[]A\A]@Hxt1IAE tVLr1HfLHEnH5hoAVAUATUSHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#HPHCL$E11LHL7g~yr~L rHHgLH9P(Hߺ~ATnHCALl(AD$ uEt<IT$AD$ MeHkH+[]A\A]A^H sISLHmH=ohoH5gKnf.AVAUATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcL$H,Jt!F % =uoHLnHxH<$HOmL4$LHIVmLHHHAmHCJD HHD$dH3%(u6H[]A\A]A^@HHxlH<$IH5~f3mk@f.USHHHHCxHKH3HPHSxHcPHH)HHu/HcHH,H4HT)XoHCHD(HH[]H5elfATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHu{HcH,L$Ht)F % =u?HHVHHH $LHiHCHD(HHD$dH3%(u.H[]A\HHkH $HH5ek6jfDATUSHHHCxHKH3HPHSxHcPHH)HHuZHcH,L$Ht)F % =u#HVLHnHCHD(H[]A\1ҹHajHH5?e kSHHHCxHKH3HPHSxHcHHH)HHuDHcH4ыF % =uH@(H5dH߸DkHjH5djfATUSHHHCxHKH3HPHSxHcPHH)HHu]HcH,L$Ht)F % =u+H@(LH0iHCHD(H[]A\H+jH5dif.USHHHHCxHKH3HPHSxHcPHH)HHu4HcHH,H4HT)kHCHD(HH[]H5bdi@ATUSHHHCxHKH3HPHSxHcPHH)HHuZHcH,L$Ht)F % =u#HVLHtkHCHD(H[]A\1ҹHhHH5bhAUATUSHHHHCxH+HKHPHHSxHcPHH)HHHcҾ~LeHH HxlIHC L)MtBH~uMm(LifLHHhHHiID$H+H[]A\A]DH~SHߺ*H5fLHI0c1LHALzn~I>i~LhHtuH 5 LLHHHdHH8gHSHLcL#H[]A\A]A^A_f.L1HdHNHH5_GeH=S_1iffAWAVAUATUSHHHGxHHPHWxHWHchHH)HHHc L4L$gIAF % =Iv1HdLHIa1LHAL*m~Ig~LgHtuH LLHHHScHHeHSHLcL#H[]A\A]A^A_f.L1H>cHNHH5?^cH=^1efAUATUSHHHGxH/HPHHWxHWHcDhHH)HHHG H)HHLe hrHHEH`HC L)HHIl$grHID$HT`HC H)H~xHMcgurHHEH&`HCJDHH[]A\A]HH8`HDLLH`I\DHHH_HmHH5rbfDATUSHGxHH/HPHWxHWHHcD`HH)HHHG H)H~uHMcfrqHHEH3_Hf[qHHEH_HfDqHHEH^HCJDH[]A\@HH_HsHH5qafAWAVAUATUSHHH(H+dH%(HD$1HCxHHPHSxHSHcHHH)HHHcHL,L$Jt*F % =HDp Jt*F % =+HDh 1H5@[HaIAD$ % =I$MT$HHHL$HLE1A0jLHLT$WcL XZLT$A|$ ELD$LLAELHEDdHC H)HLeHH+HD$dH3%(H([]A\A]A^A_H\HSA"HT$LH_HL$IfDH\AHHH\HP]H5YH1`H5Yk_f.ATUSHGxHHHPHWxHWHchHH)HHuEHcH41L$_HHbHH`HSHLcL#[]A\HH5Y^DAVAUATUSHHH HKH3dH%(HD$1HCxHPHSxHcPHH)HHHcL,H,HCD$ @#HPHCL$AE % =IEIuLt$H@HD$HL$ E1LH]HSAL$ Ll*ʁƒ@tqHxlID$AL$ MeHkH+HD$dH3%(uTH []A\A]A^Lt$LHL\HaHbI'HLHa[H5WO]Df.gAVAUATUSHHH HKH3dH%(HD$1HCxHPHSxHcPHH)HHHcL,H,HCD$ @#HPHCL$AE % =IEIuLt$H@HD$HL$ E1LH]HSAL$ Ll*ʁƒ@tqHxlID$AL$ MeHkH+HD$dH3%(uTH []A\A]A^Lt$LHL[HaHx`I'HLHb_+ZH5U[Df.gAVAUATUSHHH HKH3dH%(HD$1HCxHPHSxHcPHH)HHHcL,H,HCD$ @#HPHCL$AE % =IEIuLt$H@HD$HL$ E1LHZHSAL$ Ll*ʁƒ@tqHxlID$AL$ MeHkH+HD$dH3%(uTH []A\A]A^Lt$LHLxYHaH^I'HLH]XH5KTZDf.gAVAUATUSHHH H3dH%(HD$1HCxHPHSxHSHchHH)HH?HCHcL$L4@#HPHCL,AF % =IIvHPHT$HL$HXHCHT$Jl AE HуHH?@IUAE LmLcL#HD$dH3%(urH []A\A]A^DHT$LHWHT$HQfDH8HLcL#@H]ILH\sVH5ROXDf.GAUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH4H,F % =unHDh HC@#twHPHCL$DiZHSAL$ Ll*HcЉ%u\tSIT$AL$ MeHkH+H[]A\A]úH3TAHC@#uH[IfLHUH5QWAVAUATUSHHL'dH%(HD$1HGxLHPHWxHWHchHH)HHHcIH4L,F % =Hp HH3[IHOHC L)HVIFHP(H8 HHt @$H8HSHIv@H@]lH@8H8x pHCJT(H$H@HP(H8 HHt@utH8HSJD*H$Hp@H@]OH@8H8x SHCJT(HCJD(HHD$dH3%(H[]A\A]A^@HH@HRHDH0Hp@t H6H]HH1UHHVFHH@HRHDH0HPt H6HHH1UHHxVQ1HUH8x H1HHp HJUHHVHhHHUH8x H1HHp HUHHUHHCJD(HLLH]QcRHH5pNS@AUATUSHHHGxHHPHWxHWHchHH)HH}HG@#tVHPHGL$HLHHcHP0ARHCLlAD$@u0MeHCHHH[]A\A]fDWIfDLHTHH5#cS@AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#HPHCL$HHP(H8 H1Ht1@t+HH@HIHLHHtItHHtHPLHHc'QHCLlAD$@u6MeHCHHH[]A\A]@HVIeLHSH5bQAUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#HHHCL$HcH,H@ H@P u91LH$PHCLl(AD$@ukMeHkH+H[]A\A]DHH@HRHL1HHtItHHtHPfHUHSIJ@LHMRH5 IH1JQH5BSP@f.USHHHHCxHKH3HPHSxHcPHH)HH~yHcH4H,F % =uFHp HT)HL)HtAHtBH1E17QHCHD(HH[]@HCMHKH5qJODf.AWAVAUATUHSHHGxL'HPMHWxHcHGHDzHI)IA;IcMHI)IcHtL4ЋF % =HP At+KEH}HcLqHcLA9uHExHHExH;L+mIʀLIHD(LeyRH]AHE H)H~VHHjSIcHHH SH]H[]A\A]A^A_fDLL$qKLL$1DHH޹HKHHT$QT$AHH5HIIcHHEHHH+[]A\@HSAHHHAHH5:?DD@AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#HPHCL$оHHcAHc L H H@HH HHCLlAD$ uHt?ID$*AD$ MeHCHHH[]A\A]@HGIm*LHAH5AS2CfAWAVAUATUSHHH(L#dH%(HD$1HCxLHPHSxHcHCJHH)HHHcIL4H,Jt0V   HLj Jt0F % =!HLvH@HD$HC L)H!Il$HC M|$L)H'HEHMgHPHT$FHT$HIGHrFHELLhH}CHL$LHEHHQBHEHT$HPHC L)HHEHIHheFHI$HHFL#HD$dH3%(H([]A\A]A^A_DH>IHCHT$"H@IfDLLH>IDLLHu>IDLLHU>IX?H5;@ff.AUATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE %=IEIuHPH$H=C8HJ5HCHDLl(AD$ uwtnIT$AD$ MeHkH+HD$dH3%(uSH[]A\A]HLBH=H58b?fAUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE %=usIuH=6HCHLl(AD$ 7uet\IT$AD$ MeHkH+H[]A\A]fL1H;HwfDHBIMLHAUATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE %=IEIuHPH$H=5HJ3HCHDLl(AD$ uwtnIT$AD$ MeHkH+HD$dH3%(uSH[]A\A]HLH%:H$HjfHxAI-LHe;.;H55I5LH8~8H5J3:fAUATUSHHHHKH3dH%(HD$1HCxHPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE %=IEIuHPH$H=s1HJ0HCHDLl(AD$ uwtnIT$AD$ MeHkH+HD$dH3%(uSH[]A\A]HLBH6H$HjfHX=I-LHE77H518fAUATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L,HC@#HPHCL$AE %=usIuH=#0HCHLl(AD$ 2uet\IT$AD$ MeHkH+H[]A\A]fL1H4HwfDHHMw11AHIGHz1ED`DeHC L)HHM~11A HIFH;1}vEHC L)HE1H߃}A[1LHIGH0UUHCMcJDhHH[]A\A]A^A_fLLH)IDLLH)IDLLH})IDLLH])IDLLH=)IDLLH)IDLLH(IDLLH(I3DLLH(ICDLLH(DeIeLLH}(DeILLH](DeILLH=(DeILLH(IHHZ.HH5:*fDATUSHHHHCxHKH3HPHSxHcPHH)HHHcH,L$Ht)F % =u[HFMd$I$H2HtVvVV1HH;*I$Ht@HHCHD(HH[]A\fD1H(HHD$[-HD$H5$)AVAUATUSHHHGxHHPHWxHWHcD`HH)HHHG@#HPHGL,о*H-HIH,MAVjAnHHMc*HCNtAE uAt8IUAE MnHCJHH[]A\A]A^Ð;-I`LH%,,%y@LHHD$,AnHD$WHH5R8C(AWAVAUATUHHSHHExHuHPHUxHUHcXHH)HHHE@#HPHEL$HOs H5P,H ȉ1ȃs ȉ1ȃv ȉ1ȃp ȉ1Jȉ ȉ1Bȉ ȉ1Bȉ ȉ1B1ɉ Љ1кD4D A1DA+INj@ % =IwIH=l+IHzE1ADE1E9pAAAWAWHEHcIcLtAD$ uht_IT$AD$ MfHEHHEH[]A\A]A^A_L"1Hn%MGH:fH*IBLH$LH)WH56%@AVAUATUSHGxHHHPHWxHWHcD`HH)HHqHG@#HPHGL,1H1(Px @ŃPH(1Ҁx ՋPP HZ(1Ҁx ՋPP H0(1Ҁx ՋPPHCMcHcNtAE uCt:IUAE MnHCJH[]A\A]A^;)ILH%#HH%(HH(HH(3HH'MHH5@41$AWAVAUIATUSHHGxHHPHWxHWHchHH)HHHG@#>HPHGL$L5Co H5LA Љ1Ѓx Љ1Ѓh Љ1Ѓm Љ1AVЉ Љ1AFЉ Љ1AFЉ 1ɉ1AFЉ Љ1Ѝ 1к&INj@ % =IwIH=I€HxA9XAWÃ'AWAH57L Љ1Ѓr Љ1Ѓa Љ1Ѓb Љ1Ѓo Љ1Ѓo Љ1Ѓf Љ1AVЉ Љ1AFЉ Љ1AFЉ Љ1AFЉ Љ1кD4D A1DAD%INj@ % =IwIH=IHz1҄1E9pAWAWIEHcHcLtAD$ At~IT$AD$ MfIEHIEH[]A\A]A^A_fL"1LMGHfL"1LMGHf;%ILL%LL%$LL$#HH5`0Q USHHok 88!HH$H1H5HT HHHH]fUSHHHGxHHPHWxHWHchHH)HHusHCHcHDHH[]HH5/@f.HHj 8j HDf.AUATUSHHHHCxH3HPHSxHSHchHH)HHHC@#tsHPHCL$rA1A9tcHCHcLlAD$ uUtLIT$AD$ MeHCHHH[]A\A]DH(#I1A9뎐LHH5f.WULdH1SH \HHZ HO HH%H5HWHH\H5JAHH/H5Q+HH.H5SHH{H5UHHH5[HH/zH5]HHxH5aHH#wH5eHHuH5kHHtH5&{HHrH5&eHH;qH5&OHHH5-9HHOH5&#HHH5& HHCH5&HHH5&HHgH5&HHH5'HHH5'HH5oH5&'HHmH5sHH)lH5']HHjH5$'GHH}iH56'1HHH5BHHH5FHHUH5HHHhH5&HHfH5'HHH5'HH+H5 HH *H5HH)H5kHHH5UHHH5?HHH5)HHH5HHH5HHH5HHH5^&HHH5HHQH5 HHkH5HH%H5yHHH5cHHH5MHHH57HHMH5!!HHH5# HHH5%HH[H5%HHH5HHϽH5HHH5HH3H5&HH|H5%qHHGxH5[HH1|H5%EHHH5/HHEH5HH%H5 HHY&H5 HHS&H5 HHM&H5 HHEH5 HHH5 HHH5 HHu@H5 iHHUH5 SHHCH5 =HH#H5'HHH5HH>H5HHSH5HH[H5#HHH5HH_H5#HHɯH5#HHsH5wHHH5aHH~H5KHHH55HH"H5HH5H5 HHH5HHH5HHcH5HHOH5HHH5HHH5 HHH5"oHHգH5YHH_H5"CHHIH5-HH H5HH=vH5HHH5HHH5HHH5HHH5HHH5HHHH5}HHcH5gHHH5QHHH5;HHH5%HHH5HHuH5HHH5HH)DH5HHsH5HHm:H5HHWH5@!HHH5R!uHH;H5d!_HHuH5v!IHHH5!3HHH5HHH5HH}H5HH|H5HHH5:!HH+H5HHH5HHςH5HH{H5mHHH5WHH zH5AHHwyH5+HHqxH5HHwH5HH5uH5HHtH5HHYpH5 HH3H5HHM\H5HHZH5{HHUH5eHHKH5OHHH59HH?H5#HHYTH5 HHTH5HHSH5HHgRH5HHRH5HHQH5HHH5HHOH5sHHiLH5]HHIH5GHHHH51HHgGH5HHFH5HHEH5HHDH5HH/H5HHiCH5HHBH5HH=BH5HH@H5kHH;H5UHH:H5?HH%:H5)HH9H5HH8H5HH=H5HH]&H56HH'%H5@HH1$H5RHH#H5]HH#H5]yHHo"H58cHH!H5LMHߺH5nZ H:Z HH  *H5+HZ HH5,H HH[] fATUSHY ;zHM;Ic1H5CH;HH[LHH]HA\/ Df.HHAY 8 HDf.USHHY tHH;;HD$ Ht};};HoH;ZT$ ;HBHtK;1HH[]fH1[]ú/H5pH=t11H5VH=Z1.H5<H=@1 0H5"H=&1 f.DUSHHW |$ ;dH %(H$1^ 1H5H] ;H$B H|$1HHD$HOW $; HT$;Ƅ$H $f$utD$ ; $;f HT$;H H4$1H*H$dH3 %(H[]@;a $;fK HT$;H8 H4$Hw; HH8u?;tQ HH5H1\ bH=1 ; HH + fDATUSHU ; H];Is 1H5SH ;HX [LHHU]HA\?Df.HHQU 8 HDf.USHHU ; H; HH;HD$ HK; H; H; HHT$;Hg H;R HH;H6 HtL;% HH=@H[]1BH5H=HW f1FH5H=HW D1EH5H=kHWW Gf1DH5H=CH/W f.CH5lH=1VH-V HHsv, ivckWARN %s:%dPerl_warner_nocontext %s:%dPerl_warner %s:%dcheckmhxfoobar13valuesv, uvsv, val%shv is not a hash reference%s-%d-Perl12345678901234567890123456foo%s%dDevel::PPPort::foobarDevel::PPPort::get_cvsDevel::PPPort::get_cvn_flagsname, createDevel::PPPortDevel::PPPort::VERSIONDevel::PPPort::VERSIONFAKEDevel::PPPort::GvTesthv, svsv, sv2testtwotest1test2onethreefoobarbazleftpv_p etty rightNý BatteríÁgætis Byrjunnormutf8_key[%-p]Op should not have had a sibKid had %d sibs, expected 2OpLASTSIB_set failed?HelloNo mg!sv, pvnum%.20g sv, nvsv, stringselfpackage, ...namesv, multi, flagsmainGV is already a PVGVthrow_elevelflags, name, version, ...sv, flags, ...methname, flags, ...subname, flags, ...p, croak_on_errorsv, flagssv, nlen, insvsv, nametest_value_13.36v5.26.0RealPPPort.cDevel::PPPort::HvNAME_getDevel::PPPort::HvNAMELEN_getDevel::PPPort::MY_CXT_1Devel::PPPort::MY_CXT_2Devel::PPPort::MY_CXT_CLONEDevel::PPPort::SvPVbyteDevel::PPPort::SvPV_nolenDevel::PPPort::SvPV_constDevel::PPPort::SvPV_mutableDevel::PPPort::SvPV_flagsDevel::PPPort::SvPV_forceDevel::PPPort::SvPV_nomgDevel::PPPort::SvPV_renewDevel::PPPort::SvREFCNTDevel::PPPort::TestSvUV_setDevel::PPPort::G_SCALARDevel::PPPort::G_ARRAYDevel::PPPort::G_DISCARDDevel::PPPort::eval_svDevel::PPPort::eval_pvDevel::PPPort::call_svDevel::PPPort::call_pvDevel::PPPort::call_argvDevel::PPPort::call_methodDevel::PPPort::load_moduleDevel::PPPort::CopSTASHPVDevel::PPPort::CopFILEDevel::PPPort::caller_cxDevel::PPPort::exceptionDevel::PPPort::croak_NVgfDevel::PPPort::grok_numberDevel::PPPort::grok_binDevel::PPPort::grok_hexDevel::PPPort::grok_octDevel::PPPort::Perl_grok_binDevel::PPPort::Perl_grok_hexDevel::PPPort::Perl_grok_octDevel::PPPort::GvSVnDevel::PPPort::isGV_with_GPDevel::PPPort::gv_fetchsvDevel::PPPort::gv_init_typeDevel::PPPort::iv_sizeDevel::PPPort::uv_sizeDevel::PPPort::iv_typeDevel::PPPort::uv_typeDevel::PPPort::mPUSHsDevel::PPPort::mPUSHpDevel::PPPort::mPUSHnDevel::PPPort::mPUSHiDevel::PPPort::mPUSHuDevel::PPPort::mXPUSHsDevel::PPPort::mXPUSHpDevel::PPPort::mXPUSHnDevel::PPPort::mXPUSHiDevel::PPPort::mXPUSHuDevel::PPPort::new_with_mgDevel::PPPort::as_stringDevel::PPPort::sv_catpv_mgDevel::PPPort::sv_catpvn_mgDevel::PPPort::sv_catsv_mgDevel::PPPort::sv_setiv_mgDevel::PPPort::sv_setnv_mgDevel::PPPort::sv_setpv_mgDevel::PPPort::sv_setpvn_mgDevel::PPPort::sv_setsv_mgDevel::PPPort::sv_setuv_mgDevel::PPPort::sv_usepvn_mgDevel::PPPort::SvVSTRING_mgDevel::PPPort::checkmemDevel::PPPort::SvRXOKDevel::PPPort::ptrtestsDevel::PPPort::gv_stashpvnDevel::PPPort::get_svDevel::PPPort::get_avDevel::PPPort::get_hvDevel::PPPort::get_cvDevel::PPPort::xsreturnDevel::PPPort::boolSVDevel::PPPort::DEFSVDevel::PPPort::DEFSV_modifyDevel::PPPort::ERRSVDevel::PPPort::UNDERBARDevel::PPPort::prepushDevel::PPPort::PERL_ABSDevel::PPPort::SVfDevel::PPPort::Perl_ppaddr_tDevel::PPPort::check_HeUTF8Devel::PPPort::check_c_arrayDevel::PPPort::newSV_typeDevel::PPPort::newSVpvnDevel::PPPort::newSVpvn_flagsDevel::PPPort::newSVpvn_utf8Devel::PPPort::pv_prettyDevel::PPPort::pv_displayDevel::PPPort::newSVpvsDevel::PPPort::newSVpvs_flagsDevel::PPPort::newSVpvs_shareDevel::PPPort::sv_catpvsDevel::PPPort::sv_setpvsDevel::PPPort::hv_fetchsDevel::PPPort::hv_storesDevel::PPPort::gv_fetchpvsDevel::PPPort::gv_stashpvsDevel::PPPort::newSVpvn_shareDevel::PPPort::my_snprintfDevel::PPPort::my_sprintfDevel::PPPort::my_strlfuncDevel::PPPort::vnewSVpvfDevel::PPPort::sv_vcatpvfDevel::PPPort::sv_vsetpvfDevel::PPPort::sv_catpvf_mgDevel::PPPort::sv_setpvf_mgDevel::PPPort::no_THX_argDevel::PPPort::with_THX_argDevel::PPPort::sv_setuvDevel::PPPort::newSVuvDevel::PPPort::sv_2uvDevel::PPPort::SvUVxDevel::PPPort::XSRETURN_UVDevel::PPPort::PUSHuDevel::PPPort::XPUSHuDevel::PPPort::PL_sv_undefDevel::PPPort::PL_sv_yesDevel::PPPort::PL_sv_noDevel::PPPort::PL_naDevel::PPPort::PL_SvDevel::PPPort::PL_tokenbufDevel::PPPort::PL_parserDevel::PPPort::PL_hexdigitDevel::PPPort::PL_hintsDevel::PPPort::PL_ppaddrDevel::PPPort::warnerDevel::PPPort::Perl_warnerDevel::PPPort::ckWARNDevel::PPPort::dXSTARGDevel::PPPort::dAXMARKfoobrbazhelloOp should have had a sib after moresib_setLast kid should not have a sibOpLASTSIB_set with NULL failed?Op should have had a sib after maybesibsetSorry, your princess is in another castle.Devel::PPPort::SvPV_flags_constDevel::PPPort::SvPV_flags_const_nolenDevel::PPPort::SvPV_flags_mutableDevel::PPPort::SvPV_force_nolenDevel::PPPort::SvPV_force_mutableDevel::PPPort::SvPV_force_nomgDevel::PPPort::SvPV_force_nomg_nolenDevel::PPPort::SvPV_force_flagsDevel::PPPort::SvPV_force_flags_nolenDevel::PPPort::SvPV_force_flags_mutableDevel::PPPort::SvPV_nolen_constDevel::PPPort::SvPV_nomg_constDevel::PPPort::SvPV_nomg_const_nolenDevel::PPPort::SvPV_nomg_nolenDevel::PPPort::TestSvPVX_constDevel::PPPort::TestSvPVX_mutableDevel::PPPort::TestSvSTASH_setDevel::PPPort::call_sv_G_METHODDevel::PPPort::Perl_grok_numberDevel::PPPort::gv_fetchpvn_flagsDevel::PPPort::new_with_other_mgDevel::PPPort::remove_null_magicDevel::PPPort::remove_other_magicDevel::PPPort::sv_magic_portableDevel::PPPort::OpSIBLING_testsDevel::PPPort::call_newCONSTSUB_1Devel::PPPort::call_newCONSTSUB_2Devel::PPPort::call_newCONSTSUB_3Devel::PPPort::newRV_inc_REFCNTDevel::PPPort::newRV_noinc_REFCNTDevel::PPPort::pv_escape_can_unicodeDevel::PPPort::Perl_sv_catpvf_mgDevel::PPPort::sv_catpvf_mg_nocontextDevel::PPPort::Perl_sv_setpvf_mgDevel::PPPort::sv_setpvf_mg_nocontextDevel::PPPort::compare_PL_signalsDevel::PPPort::other_variablesDevel::PPPort::no_dummy_parser_varsDevel::PPPort::dummy_parser_warningDevel::PPPort::Perl_warner_nocontext?п?test_value_2module2.cpanic: PL_parser == NULL in %s:%dDevel::PPPort::exception_caughtwarning: dummy PL_bufptr used in %s:%dboo panic: top_env, v=%d test_value_3module3.c;l,T|l|<<$<|$`t P   , 0 ,\    @ p ,   4 ` L  < ,$ |d ! \""D\#p$$%l&H'(L)) ,+`+\-<. .$,0`0L11l22<3h|89L;P\<l=>?@\A|B D|E0Fl,HI K |L\M O\PQXlR SST|ULlVVlW\X  YPY[]|^Ll_|`,bc(eflgg0ijkklX\r|tu\wPxzEAJ [ AAA 0x>FAA J0  AABG ,4?FAA j ABK ,@?FAA j ABK <p4@FBB A(A0' (A BBBF LAgFBB A(A0 (A BBBK H (A BBBA 8CZFBA A(G0 (A ABBF ,<(DFAA  ABK ,lDFAA p ABE <hE FBB A(A0E (A BBBH 88GeFBA A(J0 (A ABBJ llHEFBA A(J08B@F8D0e8A@F8C0^8B@G8E0]8F@G8E0k (A ABBD <LJFBB A(A0 (A BBBH (KbEAG C AAA (`KbEAG C AAA T KFBB B(A0A8JPXH`VXDP 8A0A(B BBBB 8xLMFBA A(J0y (A ABBE (MEAG ` AAA ($NEAG k AAF 8 N)FBA A(J0 (A ABBB 8HOXFBA A(J0 (A ABBA 8TFBA A(G0: (A ABBG <ViFBB A(A0 (A BBBE <WiFBB A(A0 (A BBBE <@YiFBB A(A0 (A BBBE <4ZiFBB A(A0 (A BBBE 8d[FBA A(J0 (A ABBF H(\WFBE B(A0A8DP] 8A0A(B BBBD <H<^FBB A(A0) (A BBBD 8_ FBA A(J0 (A ABBE <p`EFBB A(A0 (A BBBD @aFBB A(A0J@ 0A(A BBBE (H\bwEAJ X AAA 0tbFAA J0  AABA ,\cFAA q ABD cE,DdFAA u ABH ( d|EAJ ] AAA ,LeFAA q ABD L|e8FBA A(J0 (A ABBF p (A ABBB (xfxEAJ Y AAA (fxEAJ Y AAA H$ gGFBB B(A0A8G@ 8A0A(B BBBK Hp$hGFBB B(A0A8G@ 8A0A(B BBBK 8(iZFBA A(G0 (A ABBH ,LjFAA  ABE T( k%FBB B(A0A8J`hNpThA`h 8A0A(B BBBH ,lFAA p ABA @DmFBB A(A0JP  0A(A BBBH n @nFBB A(A0JP  0A(A BBBH Lo @`oFBB A(A0JP  0A(A BBBH  q @qFBB A(A0JP  0A(A BBBF r 8rFBA A(J0 (A ABBA @Lhs,FBB A(A0G@ 0A(A BBBE 8TvFBA A(G0 (A ABBG 8vFBA A(J0 (A ABBE 8 wBFBA A(J0 (A ABBF (D xEAJ  AAE Hp yFBB B(A0D8DP  8A0A(B BBBG H zFBB B(A0D8DP 8A0A(B BBBJ H!,|FBB B(A0D8DP+ 8A0A(B BBBF LT!}_FBB E(A0A8D 8A0A(B BBBF H!FBB B(A0D8DP+ 8A0A(B BBBF 8!FBA A(J0 (A ABBF ,,"hFAA  ABE 8\"(FBA A(J0 (A ABBE H"TFBB B(A0A8J` 8A0A(B BBBF 8"nFBA A(J@ (A ABBD 8 #D9FBA A(J0 (A ABBJ 8\#HnFBA A(J@ (A ABBD 8#|9FBA A(J0 (A ABBJ 8#nFBA A(J@ (A ABBD 8$nFBA A(J@ (A ABBD 8L$9FBA A(J0 (A ABBJ 8$nFBA A(J@ (A ABBD 8$ ~FBA A(J@ (A ABBG %dG A 8%FBA A(G0 (A ABBA X%|G A 8t% FBA A(G0 (A ABBA %G A (%8EAG j AAA H%FBB B(A0A8G@ 8A0A(B BBBJ 0D&FAA J0  AABG @x&MFBB A(A0G@ 0A(A BBBB H&ȚLFBB B(A0G8D@ 8A0A(B BBBD <'̜FBB A(A05 (A BBBH HH'LFBB E(A0A8D@. 8A0A(B BBBC $'WEAD vND('bEAG C AAA '\!HX8(tFBA A(J0 (A ABBF ,<(8EMZ FA(l(ȲaFAA ANE( !HX8($QEAD0 FAC D CAA ,(HEAG AAE ()aFAA ANEH)L!HX(`)dEAD0 DAD GNU:9xy!U6 F ( H,hy!py!o(( {!0 pP oooooy! )0)@)P)`)p)))))))))** *0*@*P*`*p*********++ +0+@+P+`+p+++++++++,, ,0,@,P,`,p,,,,,,,,,-- -0-@-P-`-p---------.. .0.@.P.`.p.........// /0/@/P/`/p/////////00 000@0P0`0p00000000011 101GA$3a1`9`9GA$3a1()GA$3a1H,P,GA$3a1`9: GA$3p864 :%GA$gcc 8.2.1 20180905 GA*GOW*EGA*GA+stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864`9`9 GA$3h864`9`9 GA$3p864%'GA$gcc 8.2.1 20180905 GA*GOW*EGA*GA+stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864`9`9 GA$3h864`9`9 GA$3p864'F,GA$gcc 8.2.1 20180905 GA*GOW*EGA*GA+stack_clashGA*cf_protectionGA+GLIBCXX_ASSERTIONS GA*FORTIFYGA*GA! GA* GA!stack_realign GA$3h864`9`9 GA$3h864`9`9GA$3a1F,F,GA$3a1F,F,GA$3a1) )GA$3a1P,U,PPPort.so-3.36-5.el8.x86_64.debugɎ7zXZִF!t/4 ]?Eh=ڊ2NGvkrOg⫙d֨9YBܻc>5*|TPs&X ڑWBX՜fF%4(ݳQ ӸX1]8K'i ^>RnVnҷA  rRO <9{m\<|g:4p-|Aj6&G;f>i 5}nU {!V*`wcvnqL#֐ژj /]?'8YBѾ x^vWdzp7P"WΪ3:+u~ T͢*b5-gCp7C` B:GZ 09$(K$J;QBZs .> :Gr;=h2j\'1tMF٤WÉ}ji㥋n)TD6ǁpqz:=nxzFcmڒb(8Ȋp9oYWf?tΛ?m=`&\\mX) юB㭼ev t+:_$6Ұ/C߷AA $%z"Fko, Fj,EX !uU.uKy0<ӑs$2C@yZ$9VH'% >XV.ʬkAUp^ >,fW@$8}k*,?iXWR=L F|*VMLJ|6uޚ]t^wʠNr:`|AʌIW%1 Tm&FZ̎oil+e%Oog<|u&ӓFn4v'&kL'9f[JS;nr 9g"F^8胜GOUfNBLe͠K$S| w߱5f8=k `\[ޢ!|i|l ?7E>H'= BB2 jtsjI;eWyZ"^NO;dXOWoGO$xw&D׃zt+xH-0upMOwn{?$5 &BTdۂ[lTDC:Fx:OޝI TCJm:/U47J#ѵcZSe1Jlm/Y@DqgGu8?Ӵ4!6oia\t_ s72J^ Uod-\ %t+)4TW XFuzl$V!.Ju,nh.1WXKS͏%󶺌lb6?e9u%KPZ/$`|$0NrRp;!o3Ъ'Oofzh Shb[N[Md-p̕m>nTŷǁe3HF%CdP*kfgT֬#nΛ_kvq_ "ޢ986"MoXS P{y#Ui(TfFiۀY!sm?|@Н36K0Һ$E2SJN# rc?6s(gw Sm|0i:ˤģh!v;Gm?N^UX aFE{pꆺ9t$F*rotOi9&D0Ԫ +s F:rx*l 1>WOCj;]l1HQ5"+rΌh0~W LhKQBc-S܀`󕭞tV> {/X&أZ?60;q˼O,)Of馱\G]J&=l[B2xr$g!MM=Yp;e=ZM= 9YjL%q>G1h[tv"\XesPbq[3j:X,;683&N ]r~:ȣ[Lfk!2h?T1#^VJJ-PI-B0|`qr+)MNX<αz]Pug^3]8{z^w.g6{Ɂ{xi @&E'X(ta />$z`>'/;QTtLm)*3a굘g4'U-s"=%vxTՒ羽`r"_qT4 47# {#% Lܴ4mRZZ&A+jJaڗ7:+G,QSMUirc,_ P/Ll{x?VZI)ϸ fvRdɆOc,b^z;ʷN:4܃݇\^]+/gb^ī陏  "u ='xZΞ4%P)rL8X:̮K(>3NpWb G,k̵؟ȼIh!)zgYZ.shstrtab.note.gnu.build-id.gnu.hash.dynsym.dynstr.gnu.version.gnu.version_r.rela.dyn.rela.plt.init.plt.sec.text.fini.rodata.eh_frame_hdr.eh_frame.note.gnu.property.init_array.fini_array.data.rel.ro.dynamic.got.data.bss.gnu.build.attributes.gnu_debuglink.gnu_debugdata $o((h(  0(( 8o"EoTppP^B0 h((c))0n@1@1 w`9`9}H,H, X,X,JDDJJ)HtHt hy!hypy!pyxy!xyy!y{!{! ! a  (8 X(PK!NN Peek/Peek.sonuȯPK!$:|| NPPPort.pmnu[PK!ij ))Size.pmnu[PK!mrFFbPeek.pmnu[PK!>> &<Size/Size.sonuȯPK!u*{PPPort/PPPort.sonuȯPK*