From: Marcus Holland-Moritz Date: Mon, 16 Jan 2006 18:13:28 +0000 (+0000) Subject: Upgrade to Devel::PPPort 3.07 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=0d0f8426d34914f807e7db21ac2afd72dac1beca;p=p5sagit%2Fp5-mst-13.2.git Upgrade to Devel::PPPort 3.07 p4raw-id: //depot/perl@26866 --- diff --git a/MANIFEST b/MANIFEST index a7d1f20..048efe8 100644 --- a/MANIFEST +++ b/MANIFEST @@ -350,9 +350,11 @@ ext/Devel/PPPort/parts/base/5008003 Devel::PPPort baseline todo file ext/Devel/PPPort/parts/base/5008004 Devel::PPPort baseline todo file ext/Devel/PPPort/parts/base/5008005 Devel::PPPort baseline todo file ext/Devel/PPPort/parts/base/5008006 Devel::PPPort baseline todo file +ext/Devel/PPPort/parts/base/5008007 Devel::PPPort baseline todo file ext/Devel/PPPort/parts/base/5009000 Devel::PPPort baseline todo file ext/Devel/PPPort/parts/base/5009001 Devel::PPPort baseline todo file ext/Devel/PPPort/parts/base/5009002 Devel::PPPort baseline todo file +ext/Devel/PPPort/parts/base/5009003 Devel::PPPort baseline todo file ext/Devel/PPPort/parts/embed.fnc Devel::PPPort Perl API listing ext/Devel/PPPort/parts/inc/call Devel::PPPort include ext/Devel/PPPort/parts/inc/cop Devel::PPPort include @@ -361,6 +363,7 @@ ext/Devel/PPPort/parts/inc/format Devel::PPPort include ext/Devel/PPPort/parts/inc/grok Devel::PPPort include ext/Devel/PPPort/parts/inc/limits Devel::PPPort include ext/Devel/PPPort/parts/inc/magic Devel::PPPort include +ext/Devel/PPPort/parts/inc/memory Devel::PPPort include ext/Devel/PPPort/parts/inc/misc Devel::PPPort include ext/Devel/PPPort/parts/inc/mPUSH Devel::PPPort include ext/Devel/PPPort/parts/inc/MY_CXT Devel::PPPort include @@ -369,10 +372,12 @@ ext/Devel/PPPort/parts/inc/newRV Devel::PPPort include ext/Devel/PPPort/parts/inc/ppphbin Devel::PPPort include ext/Devel/PPPort/parts/inc/ppphdoc Devel::PPPort include ext/Devel/PPPort/parts/inc/ppphtest Devel::PPPort include -ext/Devel/PPPort/parts/inc/SvPV Devel::PPPort include +ext/Devel/PPPort/parts/inc/Sv_set Devel::PPPort include ext/Devel/PPPort/parts/inc/sv_xpvf Devel::PPPort include +ext/Devel/PPPort/parts/inc/SvPV Devel::PPPort include ext/Devel/PPPort/parts/inc/threads Devel::PPPort include ext/Devel/PPPort/parts/inc/uv Devel::PPPort include +ext/Devel/PPPort/parts/inc/variables Devel::PPPort include ext/Devel/PPPort/parts/inc/version Devel::PPPort include ext/Devel/PPPort/parts/ppptools.pl Devel::PPPort various utilities ext/Devel/PPPort/parts/todo/5004000 Devel::PPPort todo file @@ -400,13 +405,15 @@ ext/Devel/PPPort/parts/todo/5008003 Devel::PPPort todo file ext/Devel/PPPort/parts/todo/5008004 Devel::PPPort todo file ext/Devel/PPPort/parts/todo/5008005 Devel::PPPort todo file ext/Devel/PPPort/parts/todo/5008006 Devel::PPPort todo file +ext/Devel/PPPort/parts/todo/5008007 Devel::PPPort todo file ext/Devel/PPPort/parts/todo/5009000 Devel::PPPort todo file ext/Devel/PPPort/parts/todo/5009001 Devel::PPPort todo file ext/Devel/PPPort/parts/todo/5009002 Devel::PPPort todo file -ext/Devel/PPPort/ppport_h.PL Devel::PPPort ppport.h writer +ext/Devel/PPPort/parts/todo/5009003 Devel::PPPort todo file ext/Devel/PPPort/PPPort.pm Devel::PPPort extension -ext/Devel/PPPort/PPPort_pm.PL Devel::PPPort PPPort.pm writer ext/Devel/PPPort/PPPort.xs Devel::PPPort extension +ext/Devel/PPPort/ppport_h.PL Devel::PPPort ppport.h writer +ext/Devel/PPPort/PPPort_pm.PL Devel::PPPort PPPort.pm writer ext/Devel/PPPort/PPPort_xs.PL Devel::PPPort PPPort.xs writer ext/Devel/PPPort/README Devel::PPPort Readme ext/Devel/PPPort/soak Devel::PPPort Test Harness to run under various Perls @@ -416,18 +423,21 @@ ext/Devel/PPPort/t/exception.t Devel::PPPort test file ext/Devel/PPPort/t/grok.t Devel::PPPort test file ext/Devel/PPPort/t/limits.t Devel::PPPort test file ext/Devel/PPPort/t/magic.t Devel::PPPort test file +ext/Devel/PPPort/t/memory.t Devel::PPPort test file ext/Devel/PPPort/t/misc.t Devel::PPPort test file ext/Devel/PPPort/t/mPUSH.t Devel::PPPort test file ext/Devel/PPPort/t/MY_CXT.t Devel::PPPort test file ext/Devel/PPPort/t/newCONSTSUB.t Devel::PPPort test file ext/Devel/PPPort/t/newRV.t Devel::PPPort test file -ext/Devel/PPPort/TODO Devel::PPPort Todo ext/Devel/PPPort/t/ppphtest.t Devel::PPPort test file -ext/Devel/PPPort/t/SvPV.t Devel::PPPort test file +ext/Devel/PPPort/t/Sv_set.t Devel::PPPort test file ext/Devel/PPPort/t/sv_xpvf.t Devel::PPPort test file +ext/Devel/PPPort/t/SvPV.t Devel::PPPort test file ext/Devel/PPPort/t/testutil.pl Devel::PPPort test utilities ext/Devel/PPPort/t/threads.t Devel::PPPort test file ext/Devel/PPPort/t/uv.t Devel::PPPort test file +ext/Devel/PPPort/t/variables.t Devel::PPPort test file +ext/Devel/PPPort/TODO Devel::PPPort Todo ext/Devel/PPPort/typemap Devel::PPPort Typemap ext/Digest/MD5/Changes Digest::MD5 extension changes ext/Digest/MD5/hints/dec_osf.pl Hints for named architecture diff --git a/ext/Devel/PPPort/Changes b/ext/Devel/PPPort/Changes index 30e6f68..f7ec955 100755 --- a/ext/Devel/PPPort/Changes +++ b/ext/Devel/PPPort/Changes @@ -1,3 +1,42 @@ +3.07 - 2006-01-16 + + * improve internals documentation in HACKERS + * minor internal cleanups + * thanks to Steve Peters for adding support for + the following API + SvMAGIC_set + SvPVX_const + SvPVX_mutable + SvRV_set + SvSTASH_set + SvUV_set + +3.06_04 - 2005-10-30 + + * add --strip / --unstrip options + * added support for the following API + Newx + Newxc + Newxz + XSRETURN + +3.06_03 - 2005-10-18 + + * fix extra ')' in PPPort_pm.PL + * fix compiler warnings + * fix test for PL_signals + * fix API listing + * more tests + +3.06_02 - 2005-10-18 + + * improve devel/buildperl.pl utility + * added support for the following API + dAXMARK + PL_signals + PERL_SIGNALS_UNSAFE_FLAG + XSprePUSH + 3.06_01 - 2005-06-25 * fix --compat-version argument checking diff --git a/ext/Devel/PPPort/HACKERS b/ext/Devel/PPPort/HACKERS index 7e386bd..42acd38 100644 --- a/ext/Devel/PPPort/HACKERS +++ b/ext/Devel/PPPort/HACKERS @@ -178,8 +178,8 @@ section. The code required to add to PPPort.xs for testing the implementation. This code goes into the C<=xshead>, C<=xsinit>, C<=xsmisc>, C<=xsboot> -and C<=xsubs> section. Have a look at the template in F -to see where the code ends up. +and C<=xsubs> section. Have a look at the template at the bottom +of F to see where the code ends up. =item * @@ -188,15 +188,65 @@ modules or syntax elements, as the test code should be able to run with Perl 5.003, which, for example, doesn't support C in C-loops: - for my $x (1, 2, 3) { } # won't work + for my $x (1, 2, 3) { } # won't work with 5.003 -You can use C to report success or failure. +You can use C to report success or failure: + + ok($got == 42); + ok($got, $expected); + +Regular expressions are not supported as the second argument to C, +because older perls do not support the C operator. =back It's usually the best approach to just copy an existing file and use it as a template. +=head2 Implementation Hints + +In the C<=implementation> section, you can use + + __UNDEFINED__ macro some definition + +instead of + + #ifndef macro + # define macro some definition + #endif + +The macro can have optional arguments and the definition can even +span multiple lines, like in + + __UNDEFINED__ SvMAGIC_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ + (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END + +This usually makes the code more compact and readable. And you +only have to add C<__UNDEFINED__> to the C<=provided> section. + +Version checking can be tricky if you want to do it correct. +You can use + + #if { VERSION < 5.9.3 } + +instead of + + #if ((PERL_VERSION < 9) || (PERL_VERSION == 9 && PERL_SUBVERSION < 3)) + +The version number can be either of the new form C<5.x.x> or of the older +form C<5.00x_yy>. Both are translated into the correct preprocessor +statements. It is also possible to combine this with other statements: + + #if { VERSION >= 5.004 } && !defined(sv_vcatpvf) + /* a */ + #elif { VERSION < 5.004_63 } && { VERSION != 5.004_05 } + /* b */ + #endif + +This not only works in the C<=implementation> section, but also in +the C<=xsubs>, C<=xsinit>, C<=xsmisc>, C<=xshead> and C<=xsboot> sections. + =head2 Testing To automatically test C with lots of different Perl @@ -217,9 +267,21 @@ use That's it. +=head2 Submitting Patches + +If you've added some functionality to C, please +consider submitting a patch with your work to either the author +(Emhx@cpan.orgE) or to the CPAN Request Tracker at +L. + +When submitting patches, please only add the relevant changes +and don't include the differences of the generated files. You +can use the C target to delete all autogenerated +files. + =head1 COPYRIGHT -Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. diff --git a/ext/Devel/PPPort/MANIFEST b/ext/Devel/PPPort/MANIFEST index 44cb9f0..8f493d0 100644 --- a/ext/Devel/PPPort/MANIFEST +++ b/ext/Devel/PPPort/MANIFEST @@ -9,7 +9,6 @@ HACKERS Makefile.PL MANIFEST MANIFEST.SKIP -META.yml mktests.PL module2.c module3.c @@ -40,9 +39,11 @@ parts/base/5008003 parts/base/5008004 parts/base/5008005 parts/base/5008006 +parts/base/5008007 parts/base/5009000 parts/base/5009001 parts/base/5009002 +parts/base/5009003 parts/embed.fnc parts/inc/call parts/inc/cop @@ -51,6 +52,7 @@ parts/inc/format parts/inc/grok parts/inc/limits parts/inc/magic +parts/inc/memory parts/inc/misc parts/inc/mPUSH parts/inc/MY_CXT @@ -59,10 +61,12 @@ parts/inc/newRV parts/inc/ppphbin parts/inc/ppphdoc parts/inc/ppphtest +parts/inc/Sv_set parts/inc/sv_xpvf parts/inc/SvPV parts/inc/threads parts/inc/uv +parts/inc/variables parts/inc/version parts/ppptools.pl parts/todo/5004000 @@ -90,9 +94,11 @@ parts/todo/5008003 parts/todo/5008004 parts/todo/5008005 parts/todo/5008006 +parts/todo/5008007 parts/todo/5009000 parts/todo/5009001 parts/todo/5009002 +parts/todo/5009003 PPPort.pm PPPort.xs ppport_h.PL @@ -106,16 +112,20 @@ t/exception.t t/grok.t t/limits.t t/magic.t +t/memory.t t/misc.t t/mPUSH.t t/MY_CXT.t t/newCONSTSUB.t t/newRV.t t/ppphtest.t +t/Sv_set.t t/sv_xpvf.t t/SvPV.t t/testutil.pl t/threads.t t/uv.t +t/variables.t TODO typemap +META.yml Module meta-data (added by MakeMaker) diff --git a/ext/Devel/PPPort/META.yml b/ext/Devel/PPPort/META.yml index f238de4..4eff2ab 100644 --- a/ext/Devel/PPPort/META.yml +++ b/ext/Devel/PPPort/META.yml @@ -1,10 +1,12 @@ -# http://module-build.sourceforge.net/META-spec.html -#XXXXXXX This is a prototype!!! It will change in the future!!! XXXXX# -name: Devel-PPPort -version: 3.06_01 -version_from: PPPort_pm.PL -installdirs: perl -requires: - -distribution_type: module -generated_by: ExtUtils::MakeMaker version 6.17 +--- #YAML:1.0 +name: Devel-PPPort +version: 3.07 +abstract: ~ +license: perl +generated_by: ExtUtils::MakeMaker version 6.30_01 +author: ~ +distribution_type: module +requires: +meta-spec: + url: ; + version: 1.1 diff --git a/ext/Devel/PPPort/Makefile.PL b/ext/Devel/PPPort/Makefile.PL index 446fbb1..f055ae0 100644 --- a/ext/Devel/PPPort/Makefile.PL +++ b/ext/Devel/PPPort/Makefile.PL @@ -4,13 +4,13 @@ # ################################################################################ # -# $Revision: 15 $ +# $Revision: 17 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:50 +0100 $ +# $Date: 2006/01/14 18:07:57 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # @@ -28,11 +28,11 @@ unless ($ENV{'PERL_CORE'}) { if ($ENV{'PERL_CORE'}) { # Pods will be built by installman. - @coreopts = ( MAN3PODS => {} ); + @moreopts = ( MAN3PODS => {} ); } else { # Devel::PPPort is in the core since 5.7.3 - @coreopts = ( INSTALLDIRS => ($] >= 5.007003 ? 'perl' : 'site') ); + @moreopts = ( INSTALLDIRS => ($] >= 5.007003 ? 'perl' : 'site') ); } @ARGV = map { /^--with-(.*)/ && ++$opt{$1} ? () : $_ } @ARGV; @@ -49,6 +49,11 @@ if ($opt{'apicheck'}) { push @clean, qw{ apicheck.c }; } +if (eval $ExtUtils::MakeMaker::VERSION >= 6.30_01) { + print "Setting license tag...\n"; + push @moreopts, LICENSE => 'perl'; +} + WriteMakefile( NAME => 'Devel::PPPort', VERSION_FROM => 'PPPort_pm.PL', @@ -60,7 +65,7 @@ WriteMakefile( XSPROTOARG => '-noprototypes', clean => { FILES => "@clean" }, depend => { '$(OBJECT)' => '$(H_FILES)' }, - @coreopts, + @moreopts, ); sub MY::postamble { diff --git a/ext/Devel/PPPort/PPPort.pm b/ext/Devel/PPPort/PPPort.pm index 133799d..d772df1 100644 --- a/ext/Devel/PPPort/PPPort.pm +++ b/ext/Devel/PPPort/PPPort.pm @@ -8,13 +8,13 @@ # ################################################################################ # -# $Revision: 36 $ +# $Revision: 41 $ # $Author: mhx $ -# $Date: 2005/06/25 17:56:28 +0200 $ +# $Date: 2006/01/14 18:07:56 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # @@ -133,6 +133,7 @@ in older Perl releases: CopSTASHPV_set CopyD dAX + dAXMARK DEFSV dITEMS dMY_CXT @@ -194,6 +195,9 @@ in older Perl releases: newRV_noinc newSVpvn newSVuv + Newx + Newxc + Newxz NOOP NUM2PTR NVef @@ -254,6 +258,7 @@ in older Perl releases: PERL_SCAN_SILENT_ILLDIGIT PERL_SHORT_MAX PERL_SHORT_MIN + PERL_SIGNALS_UNSAFE_FLAG PERL_SUBVERSION PERL_UCHAR_MAX PERL_UCHAR_MIN @@ -288,6 +293,7 @@ in older Perl releases: PL_ppaddr PL_rsfp PL_rsfp_filters + PL_signals PL_stack_base PL_stack_sp PL_stdingv @@ -346,12 +352,18 @@ in older Perl releases: sv_vsetpvf_mg SvGETMAGIC SvIV_nomg + SvMAGIC_set SvPV_force_nomg SvPV_nolen SvPV_nomg SvPVbyte + SvPVX_const + SvPVX_mutable + SvRV_set + SvSTASH_set SvUV SvUV_nomg + SvUV_set SvUVX SvUVx SvUVXx @@ -369,6 +381,8 @@ in older Perl releases: XCPT_TRY_START XPUSHmortal XPUSHu + XSprePUSH + XSRETURN XSRETURN_UV XST_mUV ZeroD @@ -386,12 +400,17 @@ Perl below which it is unsupported: =item perl 5.9.3 - SvMAGIC_set - SvRV_set + MULTICALL + POP_MULTICALL + PUSH_MULTICALL SvSTASH_set - SvUV_set av_arylen_p - dAXMARK + ckwarn + ckwarn_d + csighandler + dMULTICALL + doref + gv_const_sv hv_eiter_p hv_eiter_set hv_name_set @@ -401,9 +420,15 @@ Perl below which it is unsupported: hv_riter_p hv_riter_set is_utf8_string_loclen + my_sprintf + newGIVENOP newSVhek + newWHENOP newWHILEOP + ref + sortsv_flags stashpv_hvname_match + vverify =item perl 5.9.2 @@ -448,6 +473,7 @@ Perl below which it is unsupported: save_bool savestack_grow_cnt scan_vstring + seed sv_cat_decode sv_compile_2op sv_setpviv @@ -552,7 +578,6 @@ Perl below which it is unsupported: POPpbytex SvUOK bytes_from_utf8 - csighandler despatch_signals do_openn gv_handler @@ -569,9 +594,7 @@ Perl below which it is unsupported: 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 @@ -832,6 +855,7 @@ Perl below which it is unsupported: rsignal_state save_I16 save_gp + share_hek start_subparse sv_catpvf sv_catpvf_mg @@ -880,7 +904,7 @@ Version 3.x was ported back to CPAN by Marcus Holland-Moritz. =head1 COPYRIGHT -Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. @@ -901,7 +925,7 @@ require DynaLoader; use strict; use vars qw($VERSION @ISA $data); -$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.06_01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; +$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.07 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; @ISA = qw(DynaLoader); @@ -983,6 +1007,9 @@ SKIP |> --nochanges don't suggest changes |> --nofilter don't filter input files |> +|> --strip strip all script and doc functionality from +|> ppport.h (this, obviously, cannot be undone) +|> |> --list-provided list provided API |> --list-unsupported list unsupported API |> --api-info=name show Perl API portability information @@ -1026,7 +1053,7 @@ SKIP |>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 -|>up to a certain Perl version. +|>down to a certain Perl version. |> |>=head2 --cplusplus |> @@ -1059,6 +1086,13 @@ SKIP |>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. +|> |>=head2 --list-provided |> |>Lists the API elements for which compatibility is provided by @@ -1104,30 +1138,36 @@ SKIP |> |>=item * |> -|>If you use one of a few functions 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 +|>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 will be marked C in the list shown by -|>C<--list-provided>. +|>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, you want either C or global variants. +|>use such functions or variables, you want either C or global +|>variants. |> -|>For a C function, use: +|>For a C function or variable (used only in a single source +|>file), use: |> |> #define NEED_function +|> #define NEED_variable |> -|>For a global function, use: +|>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 one -|>function in your project. +|>Note that you mustn't have more than one global request for the +|>same function or variable in your project. |> -|> Function Static Request Global Request +|> Function / Variable Static Request Global Request |> ----------------------------------------------------------------------------------------- +|> PL_signals NEED_PL_signals NEED_PL_signals_GLOBAL |> eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL |> grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL |> grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL @@ -1145,8 +1185,8 @@ SKIP |> vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL |> |>To avoid namespace conflicts, you can change the namespace of the -|>explicitly exported functions using the C macro. -|>Just C<#define> the macro before including C: +|>explicitly exported functions / variables using the C +|>macro. Just C<#define> the macro before including C: |> |> #define DPPP_NAMESPACE MyOwnNamespace_ |> #include "ppport.h" @@ -1249,7 +1289,7 @@ SKIP |> |>=head1 COPYRIGHT |> -|>Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz. +|>Version 3.x, Copyright (c) 2004-2006, Marcus Holland-Moritz. |> |>Version 2.x, Copyright (C) 2001, Paul Marquess. |> @@ -1273,6 +1313,7 @@ my %opt = ( changes => 1, cplusplus => 0, filter => 1, + strip => 0, ); my($ppport) = $0 =~ /([\w.]+)$/; @@ -1282,7 +1323,7 @@ my $HS = "[ \t]"; # horizontal whitespace eval { require Getopt::Long; Getopt::Long::GetOptions(\%opt, qw( - help quiet diag! filter! hints! changes! cplusplus + help quiet diag! filter! hints! changes! cplusplus strip patch=s copy=s diff=s compat-version=s list-provided list-unsupported api-info=s )) or usage(); @@ -1294,6 +1335,7 @@ if ($@ and grep /^-/, @ARGV) { } usage() if $opt{help}; +strip() if $opt{strip}; if (exists $opt{'compat-version'}) { my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; @@ -1350,6 +1392,7 @@ ENTER||| ERRSV|5.004050||p EXTEND||| EXTERN_C|5.005000||p +F0convert|||n FREETMPS||| GIMME_V||5.004000|n GIMME|||n @@ -1390,6 +1433,7 @@ IVdf|5.006000||p LEAVE||| LVRET||| MARK||| +MULTICALL||5.009003| MY_CXT_CLONE|5.009002||p MY_CXT_INIT|5.007003||p MY_CXT|5.007003||p @@ -1402,9 +1446,9 @@ NVTYPE|5.006000||p NVef|5.006001||p NVff|5.006001||p NVgf|5.006001||p -Newc||| -Newz||| -New||| +Newxc|5.009003||p +Newxz|5.009003||p +Newx|5.009003||p Nullav||| Nullch||| Nullcv||| @@ -1481,6 +1525,7 @@ PERL_SCAN_GREATER_THAN_UV_MAX|5.007003||p PERL_SCAN_SILENT_ILLDIGIT|5.008001||p PERL_SHORT_MAX|5.004000||p PERL_SHORT_MIN|5.004000||p +PERL_SIGNALS_UNSAFE_FLAG|5.008001||p PERL_SUBVERSION|5.006000||p PERL_UCHAR_MAX|5.004000||p PERL_UCHAR_MIN|5.004000||p @@ -1521,6 +1566,7 @@ PL_ppaddr|5.006000||p PL_rsfp_filters|5.004050||p PL_rsfp|5.004050||p PL_rs|||n +PL_signals|5.008001||p PL_stack_base|5.004050||p PL_stack_sp|5.004050||p PL_stdingv|5.004050||p @@ -1530,6 +1576,7 @@ PL_sv_undef|5.004050||pn PL_sv_yes|5.004050||pn PL_tainted|5.004050||p PL_tainting|5.004050||p +POP_MULTICALL||5.009003| POPi|||n POPl|||n POPn|||n @@ -1543,6 +1590,7 @@ PTR2UV|5.006000||p PTR2ul|5.007001||p PTRV|5.006000||p PUSHMARK||| +PUSH_MULTICALL||5.009003| PUSHi||| PUSHmortal|5.009002||p PUSHn||| @@ -1622,7 +1670,7 @@ SvIsCOW||5.008003| SvLEN_set||| SvLEN||| SvLOCK||5.007003| -SvMAGIC_set||5.009003| +SvMAGIC_set|5.009003||p SvNIOK_off||| SvNIOKp||| SvNIOK||| @@ -1643,6 +1691,8 @@ SvPOK_only||| SvPOK_on||| SvPOKp||| SvPOK||| +SvPVX_const|5.009003||p +SvPVX_mutable|5.009003||p SvPVX||| SvPV_force_nomg|5.007002||p SvPV_force||| @@ -1667,11 +1717,11 @@ SvREFCNT||| SvROK_off||| SvROK_on||| SvROK||| -SvRV_set||5.009003| +SvRV_set|5.009003||p SvRV||| SvSETMAGIC||| SvSHARE||5.007003| -SvSTASH_set||5.009003| +SvSTASH_set|5.009003|5.009003|p SvSTASH||| SvSetMagicSV_nosteal||5.004000| SvSetMagicSV||5.004000| @@ -1692,7 +1742,7 @@ SvUTF8||5.006000| SvUVXx|5.004000||p SvUVX|5.004000||p SvUV_nomg|5.009001||p -SvUV_set||5.009003| +SvUV_set|5.009003||p SvUVx|5.004000||p SvUV|5.004000||p SvVOK||5.008001| @@ -1722,7 +1772,7 @@ XSRETURN_PV||| XSRETURN_UNDEF||| XSRETURN_UV|5.008001||p XSRETURN_YES||| -XSRETURN||| +XSRETURN|||p XST_mIV||| XST_mNO||| XST_mNV||| @@ -1732,6 +1782,7 @@ XST_mUV|5.008001||p XST_mYES||| XS_VERSION_BOOTCHECK||| XS_VERSION||| +XSprePUSH|5.006000||p XS||| ZeroD|5.009002||p Zero||| @@ -1744,6 +1795,10 @@ aTHX|5.006000||p add_data||| allocmy||| amagic_call||| +amagic_cmp_locale||| +amagic_cmp||| +amagic_i_ncmp||| +amagic_ncmp||| any_dup||| ao||| append_elem||| @@ -1752,8 +1807,6 @@ apply_attrs_my||| apply_attrs_string||5.006001| apply_attrs||| apply||| -asIV||| -asUV||| atfork_lock||5.007003|n atfork_unlock||5.007003|n av_arylen_p||5.009003| @@ -1800,6 +1853,7 @@ cast_i32||5.006000| cast_iv||5.006000| cast_ulong||5.006000| cast_uv||5.006000| +check_type_and_open||| check_uni||| checkcomma||| checkposixcc||| @@ -1834,6 +1888,7 @@ ck_return||| ck_rfun||| ck_rvconst||| ck_sassign||| +ck_say||| ck_select||| ck_shift||| ck_sort||| @@ -1844,6 +1899,8 @@ ck_substr||| ck_svconst||| ck_trunc||| ck_unpack||| +ckwarn_d||5.009003| +ckwarn||5.009003| cl_and||| cl_anything||| cl_init_zero||| @@ -1856,7 +1913,7 @@ cop_free||| cr_textfilter||| croak_nocontext|||vn croak|||v -csighandler||5.007001|n +csighandler||5.009003|n custom_op_desc||5.007003| custom_op_name||5.007003| cv_ckproto||| @@ -1867,10 +1924,11 @@ cv_undef||| cx_dump||5.005000| cx_dup||| cxinc||| -dAXMARK||5.009003| +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 @@ -1895,13 +1953,12 @@ debprof||| debstackptrs||5.007003| debstack||5.007003| deb||5.007003|v -del_he||| del_sv||| delimcpy||5.004000| -depcom||| deprecate_old||| deprecate||| despatch_signals||5.007001| +destroy_matcher||| die_nocontext|||vn die_where||| die|||v @@ -1942,6 +1999,7 @@ do_readline||| do_seek||| do_semop||| do_shmio||| +do_smartmatch||| do_spawn_nowait||| do_spawn||| do_sprintf||| @@ -1969,10 +2027,13 @@ dooneliner||| doopen_pm||| doparseform||| dopoptoeval||| +dopoptogiven||| dopoptolabel||| dopoptoloop||| dopoptosub_at||| dopoptosub||| +dopoptowhen||| +doref||5.009003| dounwind||| dowantarray||| dump_all||5.006000| @@ -1983,6 +2044,7 @@ dump_indent||5.006000|v dump_mstats||| dump_packsubs||5.006000| dump_sub||5.006000| +dump_sv_child||| dump_vindent||5.006000| dumpuntil||| dup_attrlist||| @@ -1993,6 +2055,7 @@ expect_number||| fbm_compile||5.005000| fbm_instr||5.005000| fd_on_nosuid_fs||| +feature_is_enabled||| filter_add||| filter_del||| filter_gets||| @@ -2004,6 +2067,7 @@ find_runcv||| find_rundefsvoffset||5.009002| find_script||| find_uninit_var||| +first_symbol|||n fold_constants||| forbid_setid||| force_ident||| @@ -2049,8 +2113,10 @@ group_end||| gv_AVadd||| gv_HVadd||| gv_IOadd||| +gv_SVadd||| gv_autoload4||5.004000| gv_check||| +gv_const_sv||5.009003| gv_dump||5.006000| gv_efullname3||5.004000| gv_efullname4||5.006001| @@ -2070,7 +2136,6 @@ gv_fullname||| gv_handler||5.007001| gv_init_sv||| gv_init||| -gv_share||| gv_stashpvn|5.006000||p gv_stashpv||| gv_stashsv||| @@ -2080,6 +2145,7 @@ hfreeentries||| hsplit||| hv_assert||5.009001| hv_auxinit||| +hv_backreferences_p||| hv_clear_placeholders||5.009001| hv_clear||| hv_delayfree_ent||5.004000| @@ -2101,6 +2167,7 @@ hv_iternext_flags||5.008000| hv_iternextsv||| hv_iternext||| hv_iterval||| +hv_kill_backrefs||| hv_ksplit||5.004000| hv_magic_check||| hv_magic||| @@ -2121,6 +2188,7 @@ ibcmp_utf8||5.007003| ibcmp||| incl_perldb||| incline||| +incpush_if_exists||| incpush||| ingroup||| init_argv_symbols||| @@ -2190,6 +2258,7 @@ is_utf8_ascii||5.006000| is_utf8_char_slow||| is_utf8_char||5.006000| is_utf8_cntrl||5.006000| +is_utf8_common||| is_utf8_digit||5.006000| is_utf8_graph||5.006000| is_utf8_idcont||5.008000| @@ -2218,6 +2287,7 @@ list||| load_module_nocontext|||vn load_module||5.006000|v localize||| +looks_like_bool||| looks_like_number||| lop||| mPUSHi|5.009002||p @@ -2284,10 +2354,12 @@ magic_set||| magic_sizepack||| magic_wipepack||| magicname||| +make_matcher||| make_trie||| malloced_size|||n malloc||5.007002|n markstack_grow||| +matcher_matches_sv||| measure_struct||| memEQ|5.004000||p memNE|5.004000||p @@ -2328,6 +2400,8 @@ my_betohl|||n my_betohs|||n my_bzero|||n my_chsize||| +my_clearenv||| +my_cxt_init||| my_exit_jump||| my_exit||| my_failure_exit||5.004000| @@ -2362,12 +2436,14 @@ my_popen_list||5.007001| my_popen||5.004000| my_setenv||| my_socketpair||5.007003|n +my_sprintf||5.009003|vn my_stat||| my_strftime||5.007002| my_swabn|||n my_swap||| my_unexec||| my||| +need_utf8|||n newANONATTRSUB||5.006000| newANONHASH||| newANONLIST||| @@ -2383,6 +2459,8 @@ newCVREF||| newDEFSVOP||| newFORM||| newFOROP||| +newGIVENOP||5.009003| +newGIVWHENOP||| newGVOP||| newGVREF||| newGVgen||| @@ -2423,6 +2501,7 @@ newSVsv||| newSVuv|5.006000||p newSV||| newUNOP||| +newWHENOP||5.009003| newWHILEOP||5.009003| newXSproto||5.006000| newXS||5.006000| @@ -2445,6 +2524,7 @@ not_a_number||| nothreadhook||5.008000| nuke_stacks||| num_overflow|||n +offer_nice_chunk||| oopsAV||| oopsCV||| oopsHV||| @@ -2528,16 +2608,16 @@ reentrant_free||| reentrant_init||| reentrant_retry|||vn reentrant_size||| +ref_array_or_hash||| refkids||| refto||| -ref||| +ref||5.009003| reg_node||| reganode||| regatom||| regbranch||| regclass_swash||5.007003| regclass||| -regcp_set_to||| regcppop||| regcppush||| regcurly||| @@ -2568,12 +2648,14 @@ report_evil_fh||| report_uninit||| require_errno||| require_pv||5.006000| +restore_magic||| rninstr||| rsignal_restore||| rsignal_save||| rsignal_state||5.004000| rsignal||5.004000| run_body||| +run_user_filter||| runops_debug||5.005000| runops_standard||5.005000| rvpv_dup||| @@ -2661,7 +2743,9 @@ scan_vstring||5.008001| scan_word||| scope||| screaminstr||5.005000| -seed||| +seed||5.008001| +sequence_num||| +sequence||| set_context||5.006000|n set_csh||| set_numeric_local||5.006000| @@ -2670,11 +2754,15 @@ set_numeric_standard||5.006000| setdefout||| setenv_getix||| share_hek_flags||| -share_hek||| +share_hek||5.004000| si_dup||| sighandler|||n simplify_sort||| skipspace||| +sortcv_stacked||| +sortcv_xsub||| +sortcv||| +sortsv_flags||5.009003| sortsv||5.007003| ss_dup||| stack_grow||| @@ -2689,6 +2777,8 @@ strLE||| strLT||| strNE||| str_to_version||5.006000| +stringify_regexp||| +strip_return||| strnEQ||| strnNE||| study_chunk||| @@ -2724,12 +2814,12 @@ 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.006000||p +sv_catpvn_mg|5.004050||p sv_catpvn_nomg|5.007002||p sv_catpvn||| sv_catpv||| sv_catsv_flags||5.007002| -sv_catsv_mg|5.006000||p +sv_catsv_mg|5.004050||p sv_catsv_nomg|5.007002||p sv_catsv||| sv_chop||| @@ -2747,6 +2837,7 @@ sv_derived_from||5.004000| sv_dump||| sv_dup||| sv_eq||| +sv_exp_grow||| sv_force_normal_flags||5.007001| sv_force_normal||5.006000| sv_free2||| @@ -2754,16 +2845,19 @@ sv_free_arenas||| sv_free||| sv_gets||5.004000| sv_grow||| +sv_i_ncmp||| sv_inc||| sv_insert||| sv_isa||| sv_isobject||| sv_iv||5.005000| +sv_kill_backrefs||| sv_len_utf8||5.006000| sv_len||| sv_magicext||5.007003| sv_magic||| sv_mortalcopy||| +sv_ncmp||| sv_newmortal||| sv_newref||| sv_nolocking||5.007003| @@ -2845,6 +2939,7 @@ sv_vsetpvf|5.006000|5.004000|p svtype||| swallow_bom||| swash_fetch||5.007002| +swash_get||| swash_init||5.006000| sys_intern_clear||| sys_intern_dup||| @@ -2868,10 +2963,12 @@ to_utf8_lower||5.007003| to_utf8_substr||| to_utf8_title||5.007003| to_utf8_upper||5.007003| +tokenize_use||| tokeq||| tokereport||| too_few_arguments||| too_many_arguments||| +uiv_2buf|||n unlnk||| unpack_rec||| unpack_str||5.007003| @@ -2879,12 +2976,11 @@ unpackstring||5.008001| unshare_hek_or_pvn||| unshare_hek||| unsharepvn||5.004000| +unwind_handler_stack||| upg_version||5.009000| usage||| -utf16_textfilter||| utf16_to_utf8_reversed||5.006001| utf16_to_utf8||5.006001| -utf16rev_textfilter||| utf8_distance||5.006000| utf8_hop||5.006000| utf8_length||5.007001| @@ -2893,11 +2989,11 @@ utf8_mg_pos||| utf8_to_bytes||5.006001| utf8_to_uvchr||5.007001| utf8_to_uvuni||5.007001| -utf8n_to_uvchr||5.007001| +utf8n_to_uvchr||| utf8n_to_uvuni||5.007001| utilize||| uvchr_to_utf8_flags||5.007003| -uvchr_to_utf8||5.007001| +uvchr_to_utf8||| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| validate_suid||| @@ -2905,6 +3001,8 @@ varname||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| +vdie_common||| +vdie_croak_common||| vdie||| vform||5.006000| visit||| @@ -2916,6 +3014,7 @@ 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||| @@ -2925,6 +3024,7 @@ warner||5.006000|v warn|||v watch||| whichsig||| +write_no_mem||| write_to_stderr||| yyerror||| yylex||| @@ -3559,6 +3659,35 @@ ENDUSAGE exit 2; } +sub strip +{ + my $self = do { local(@ARGV,$/)=($0); <> }; + $self =~ s/^$HS+Do NOT edit.*?(?=^-)//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"; + Devel::PPPort::WriteFile(\$0); + exit 0; +} +print <$0" or die "cannot strip $0: $!\n"; + print OUT $self; + + exit 0; +} + __DATA__ */ @@ -3936,20 +4065,18 @@ __DATA__ #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 +# 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)) +# 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))) @@ -3992,7 +4119,60 @@ __DATA__ # define XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END #endif -#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)) +#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 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 Poison +# define Poison(d,n,t) (void)memset((char*)(d), 0xAB, (n) * sizeof(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 + +#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5))) /* Replace: 1 */ # define PL_DBsingle DBsingle # define PL_DBsub DBsub @@ -4170,48 +4350,6 @@ typedef NVTYPE NV; #endif /* Replace: 0 */ - -#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 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 Poison -# define Poison(d,n,t) (void)memset((char*)(d), 0xAB, (n) * sizeof(t)) -#endif #ifndef dUNDERBAR # define dUNDERBAR dNOOP #endif @@ -4229,6 +4367,37 @@ typedef NVTYPE NV; #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_VERSION < 5) || ((PERL_VERSION == 5) && (PERL_SUBVERSION < 0))) +# undef XSRETURN +# define XSRETURN(off) \ + STMT_START { \ + PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ + return; \ + } STMT_END +#endif + +#ifndef PERL_SIGNALS_UNSAFE_FLAG + +#define PERL_SIGNALS_UNSAFE_FLAG 0x0001 + +#if defined(NEED_PL_signals) +static U32 DPPP_(my_PL_signals) = PERL_SIGNALS_UNSAFE_FLAG; +#elif defined(NEED_PL_signals_GLOBAL) +U32 DPPP_(my_PL_signals) = PERL_SIGNALS_UNSAFE_FLAG; +#else +extern U32 DPPP_(my_PL_signals); +#endif +#define PL_signals DPPP_(my_PL_signals) + +#endif #ifndef dTHR # define dTHR dNOOP #endif @@ -4475,7 +4644,7 @@ DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv) * case below uses it to declare the data as static. */ #define START_MY_CXT -#if (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION < 68 )) +#if ((PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 68))) /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) @@ -4689,6 +4858,62 @@ DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp) #ifndef sv_pvn_force # define sv_pvn_force(sv, len) SvPV_force(sv, len) #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_VERSION < 9) || ((PERL_VERSION == 9) && (PERL_SUBVERSION < 3))) +#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_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION < 0))) +#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_VERSION > 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION >= 0))) && !defined(vnewSVpvf) #if defined(NEED_vnewSVpvf) @@ -5345,7 +5570,7 @@ DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) return TRUE; } } -#endif /* PERL_VERSION */ +#endif #endif /* USE_LOCALE_NUMERIC */ /* always try "." if numeric radix didn't match because * we may have data from different locales mixed */ diff --git a/ext/Devel/PPPort/PPPort.xs b/ext/Devel/PPPort/PPPort.xs index dd6465f..a2ebac4 100644 --- a/ext/Devel/PPPort/PPPort.xs +++ b/ext/Devel/PPPort/PPPort.xs @@ -8,13 +8,13 @@ * ******************************************************************************** * -* $Revision: 8 $ +* $Revision: 9 $ * $Author: mhx $ -* $Date: 2005/01/31 08:10:55 +0100 $ +* $Date: 2006/01/14 18:07:55 +0100 $ * ******************************************************************************** * -* Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +* Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. * Version 2.x, Copyright (C) 2001, Paul Marquess. * Version 1.x, Copyright (C) 1999, Kenneth Albanowski. * @@ -62,6 +62,9 @@ #define NEED_sv_2pv_nolen #define NEED_sv_2pvbyte +/* ---- from parts/inc/variables ---- */ +#define NEED_PL_signals + /* =========== END XSINIT =================================================== */ #include "ppport.h" @@ -85,6 +88,19 @@ XS(XS_Devel__PPPort_dXSTARG) XSRETURN(1); } +XS(XS_Devel__PPPort_dAXMARK); /* prototype */ +XS(XS_Devel__PPPort_dAXMARK) +{ + dSP; + dAXMARK; + dITEMS; + IV iv; + SP -= items; + iv = SvIV(ST(0)) - 1; + PUSHs(sv_2mortal(newSViv(iv))); + XSRETURN(1); +} + /* ---- from parts/inc/MY_CXT ---- */ #define MY_CXT_KEY "Devel::PPPort::_guts" XS_VERSION @@ -146,6 +162,15 @@ static void test_sv_vsetpvf(pTHX_ SV *sv, const char *pat, ...) va_end(args); } +/* ---- from parts/inc/variables ---- */ +U32 get_PL_signals_1(void) +{ + return PL_signals; +} + +extern U32 get_PL_signals_2(void); +extern U32 get_PL_signals_3(void); + /* =========== END XSMISC =================================================== */ MODULE = Devel::PPPort PACKAGE = Devel::PPPort @@ -153,6 +178,7 @@ MODULE = Devel::PPPort PACKAGE = Devel::PPPort BOOT: /* ---- from parts/inc/misc ---- */ newXS("Devel::PPPort::dXSTARG", XS_Devel__PPPort_dXSTARG, file); + newXS("Devel::PPPort::dAXMARK", XS_Devel__PPPort_dAXMARK, file); /* ---- from parts/inc/MY_CXT ---- */ { @@ -538,6 +564,40 @@ sv_usepvn_mg(sv, sv2) sv_usepvn_mg(sv, copy, len); ##---------------------------------------------------------------------- +## XSUBs from parts/inc/memory +##---------------------------------------------------------------------- + +int +checkmem() + PREINIT: + char *p; + + CODE: + RETVAL = 0; + Newx(p, 6, char); + CopyD("Hello", p, 6, char); + if (memEQ(p, "Hello", 6)) + RETVAL++; + ZeroD(p, 6, char); + if (memEQ(p, "\0\0\0\0\0\0", 6)) + RETVAL++; + Poison(p, 6, char); + if (memNE(p, "\0\0\0\0\0\0", 6)) + RETVAL++; + Safefree(p); + + Newxz(p, 6, char); + if (memEQ(p, "\0\0\0\0\0\0", 6)) + RETVAL++; + Safefree(p); + + Newxc(p, 3, short, char); + Safefree(p); + + OUTPUT: + RETVAL + +##---------------------------------------------------------------------- ## XSUBs from parts/inc/misc ##---------------------------------------------------------------------- @@ -596,6 +656,18 @@ newSVpvn() XPUSHs(newSVpvn(NULL, 0)); XSRETURN(5); +void +xsreturn(two) + int two + PPCODE: + XPUSHs(newSVpvn("test1", 5)); + if (two) + XPUSHs(newSVpvn("test2", 5)); + if (two) + XSRETURN(2); + else + XSRETURN(1); + SV * PL_sv_undef() CODE: @@ -658,6 +730,16 @@ UNDERBAR() OUTPUT: RETVAL +void +prepush() + CODE: + { + dXSTARG; + XSprePUSH; + PUSHi(42); + XSRETURN(1); + } + ##---------------------------------------------------------------------- ## XSUBs from parts/inc/mPUSH ##---------------------------------------------------------------------- @@ -802,6 +884,36 @@ newRV_noinc_REFCNT() RETVAL ##---------------------------------------------------------------------- +## XSUBs from parts/inc/Sv_set +##---------------------------------------------------------------------- + +IV +TestSvUV_set(sv, val) + SV *sv + UV val + CODE: + SvUV_set(sv, val); + RETVAL = SvUVX(sv) == val ? 42 : -1; + OUTPUT: + RETVAL + +IV +TestSvPVX_const(sv) + SV *sv + CODE: + RETVAL = strEQ(SvPVX_const(sv), "mhx") ? 43 : -1; + OUTPUT: + RETVAL + +IV +TestSvPVX_mutable(sv) + SV *sv + CODE: + RETVAL = strEQ(SvPVX_mutable(sv), "mhx") ? 44 : -1; + OUTPUT: + RETVAL + +##---------------------------------------------------------------------- ## XSUBs from parts/inc/sv_xpvf ##---------------------------------------------------------------------- @@ -898,7 +1010,7 @@ SvPVbyte(sv) const char *str; CODE: str = SvPVbyte(sv, len); - RETVAL = strEQ(str, "mhx") ? len : -1; + RETVAL = strEQ(str, "mhx") ? (IV) len : (IV) -1; OUTPUT: RETVAL @@ -992,3 +1104,17 @@ XPUSHu() TARG = sv_newmortal(); XPUSHu(43); XSRETURN(1); + +##---------------------------------------------------------------------- +## XSUBs from parts/inc/variables +##---------------------------------------------------------------------- + +int +compare_PL_signals() + CODE: + { + U32 ref = get_PL_signals_1(); + RETVAL = ref == get_PL_signals_2() && ref == get_PL_signals_3(); + } + OUTPUT: + RETVAL diff --git a/ext/Devel/PPPort/PPPort_pm.PL b/ext/Devel/PPPort/PPPort_pm.PL index 61ac6b2..0246b21 100644 --- a/ext/Devel/PPPort/PPPort_pm.PL +++ b/ext/Devel/PPPort/PPPort_pm.PL @@ -4,13 +4,13 @@ # ################################################################################ # -# $Revision: 36 $ +# $Revision: 41 $ # $Author: mhx $ -# $Date: 2005/06/25 17:56:28 +0200 $ +# $Date: 2006/01/14 18:07:56 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # @@ -50,12 +50,12 @@ $data =~ s{^(.*)__PROVIDED_API__(\s*?)^} my $format = sprintf '%%-%ds %%-%ds %%s', $len+2, $len+5; $len = 3*$len + 23; -$data =~ s/^(.*)__EXPLICIT_API__(\s*?)^/ - sprintf("$1$format\n", 'Function', 'Static Request', 'Global Request') . +$data =~ s!^(.*)__EXPLICIT_API__(\s*?)^! + sprintf("$1$format\n", 'Function / Variable', 'Static Request', 'Global Request') . $1 . '-'x$len . "\n" . - join('', map { sprintf "$1$format\n", "$_()", "NEED_$_", "NEED_${_}_GLOBAL" } + join('', map { sprintf "$1$format\n", $explicit{$_} eq 'var' ? $_ : "$_()", "NEED_$_", "NEED_${_}_GLOBAL" } sort keys %explicit) - /gem; + !gem; } my %raw_base = %{&parse_todo('parts/base')}; @@ -188,6 +188,32 @@ sub expand ) \s*$} {expand_undefined($2, $1, $3)}gemx; + $code =~ s{^([^\S\r\n]*)__NEED_VAR__\s+(.*?)\s+(\w+)(?:\s*=\s*([^;]+?)\s*;\s*)?$} + {expand_need_var($1, $3, $2, $4)}gem; + return $code; +} + +sub expand_need_var +{ + my($indent, $var, $type, $init) = @_; + + $explicit{$var} = 'var'; + + my $myvar = "$DPPP(my_$var)"; + + my $code = < '/tmp/perl/install//', - build => '/tmp/perl/build/', - source => '/tmp/perl/source', - force => 0, + prefix => '/tmp/perl/install//', + build => '/tmp/perl/build/', + source => '/tmp/perl/source', + force => 0, + test => 0, + install => 1, ); my %config = ( @@ -42,11 +47,11 @@ my %config = ( }, thread => { config_args => '-des -Dusethreads', - masked_versions => [ qr/^perl5\.00[01234]/ ], + masked_versions => [ qr/^5\.00[01234]/ ], }, thread5005 => { config_args => '-des -Duse5005threads', - masked_versions => [ qr/^perl5\.00[012345]|^perl-5.(9|\d\d)/ ], + masked_versions => [ qr/^5\.00[012345]|^5.(9|\d\d)/ ], }, debug => { config_args => '-des -Doptimize=-g', @@ -56,12 +61,12 @@ my %config = ( my @patch = ( { perl => [ - qr/^perl5\.00[01234]/, + qr/^5\.00[01234]/, qw/ - perl5.005 - perl5.005_01 - perl5.005_02 - perl5.005_03 + 5.005 + 5.005_01 + 5.005_02 + 5.005_03 /, ], subs => [ @@ -71,13 +76,13 @@ my @patch = ( { perl => [ qw/ - perl-5.6.0 - perl-5.6.1 - perl-5.7.0 - perl-5.7.1 - perl-5.7.2 - perl-5.7.3 - perl-5.8.0 + 5.6.0 + 5.6.1 + 5.7.0 + 5.7.1 + 5.7.2 + 5.7.3 + 5.8.0 /, ], subs => [ @@ -86,7 +91,7 @@ my @patch = ( }, { perl => [ - qr/^perl5\.004_0[1234]/, + qr/^5\.004_0[1234]/, ], subs => [ [ \&patch_doio ], @@ -99,9 +104,12 @@ my(%perl, @perls); GetOptions(\%opt, qw( config=s@ prefix=s + build=s source=s perl=s@ force + test + install! )) or pod2usage(2); if (exists $opt{config}) { @@ -114,8 +122,8 @@ else { } find(sub { - /^(perl-?(5\..*))\.tar.gz$/ or return; - $perl{$1} = { version => $2, source => $File::Find::name }; + /^(perl-?(5\..*))\.tar\.(gz|bz2)$/ or return; + $perl{$1} = { version => $2, source => $File::Find::name, compress => $3 }; }, $opt{source}); if (exists $opt{perl}) { @@ -131,16 +139,14 @@ else { @perls = sort keys %perl; } -$ENV{PATH} = "~/bin:$ENV{PATH}"; # use ccache - my %current; for my $cfg (@{$opt{config}}) { for my $perl (@perls) { my $config = $config{$cfg}; - %current = (config => $cfg, perl => $perl); + %current = (config => $cfg, perl => $perl, version => $perl{$perl}{version}); - if (is($config->{masked_versions}, $perl)) { + if (is($config->{masked_versions}, $current{version})) { print STDERR "skipping $perl for configuration $cfg (masked)\n"; next; } @@ -196,7 +202,7 @@ sub buildperl my $d = extract_source($perl{$perl}); chdir $d or die "chdir $d: $!\n"; - patch_source($perl); + patch_source($perl{$perl}{version}); build_and_install($perl{$perl}); } @@ -204,35 +210,39 @@ sub buildperl sub extract_source { my $perl = shift; - my $target = "perl-$perl->{version}"; - for my $dir ("perl$perl->{version}", "perl-$perl->{version}") { - if (-d $dir) { - print "removing old build directory $dir\n"; - rmtree($dir); - } - } + print "reading $perl->{source}\n"; - print "extracting $perl->{source}\n"; + my $target; - run_or_die("tar xzf $perl->{source}"); + for my $f (Archive::Tar->list_archive($perl->{source})) { + my($t) = $f =~ /^([^\\\/]+)/ or die "ooops, should always match...\n"; + die "refusing to extract $perl->{source}, as it would not extract to a single directory\n" + if defined $target and $target ne $t; + $target = $t; + } - if ($perl->{version} !~ /^\d+\.\d+\.\d+/ && -d "perl-$perl->{version}") { - $target = "perl$perl->{version}"; - rename "perl-$perl->{version}", $target or die "rename: $!\n"; + if (-d $target) { + print "removing old build directory $target\n"; + rmtree($target); } - -d $target or die "$target not found\n"; + print "extracting $perl->{source}\n"; + + Archive::Tar->extract_archive($perl->{source}) + or die "extract failed: " . Archive::Tar->error() . "\n"; + + -d $target or die "oooops, $target not found\n"; return $target; } sub patch_source { - my $perl = shift; + my $version = shift; for my $p (@patch) { - if (is($p->{perl}, $perl)) { + if (is($p->{perl}, $version)) { for my $s (@{$p->{subs}}) { my($sub, @args) = @$s; $sub->(@args); @@ -251,8 +261,13 @@ sub build_and_install run_or_die("./Configure $config{$current{config}}{config_args} -Dusedevel -Uinstallusrbinperl -Dprefix=$prefix"); run_or_die("sed -i -e '/^.*/d' -e '/^.*/d' makefile x2p/makefile"); run_or_die("make all"); - # run("make test"); - run_or_die("make install"); + run("make test") if $opt{test}; + if ($opt{install}) { + run_or_die("make install"); + } + else { + print "\n*** NOT INSTALLING PERL ***\n\n"; + } } sub patch_db @@ -315,3 +330,77 @@ sub run # print "[running @_]\n"; system "@_" and warn "@_: $?\n"; } + +__END__ + +=head1 NAME + +buildperl.pl - build/install perl distributions + +=head1 SYNOPSIS + + perl buildperl.pl [options] + + --help show this help + + --source=directory directory containing source tarballs + [default: /tmp/perl/source] + + --build=directory directory used for building perls [EXPAND] + [default: /tmp/perl/build/] + + --prefix=directory use this installation prefix [EXPAND] + [default: /tmp/perl/install//] + + --config=configuration build this configuration [MULTI] + [default: all possible configurations] + + --perl=version build this version of perl [MULTI] + [default: all possible versions] + + --force rebuild and install already installed versions + + --test run test suite after building + + --noinstall don't install after building + + options tagged with [MULTI] can be given multiple times + + options tagged with [EXPAND] expand the following items + + versioned perl directory (e.g. 'perl-5.6.1') + perl version (e.g. '5.6.1') + name of the configuration (e.g. 'default') + +=head1 EXAMPLES + +The following examples assume that your Perl source tarballs are +in F. If they are somewhere else, use the C<--source> +option to specify a different source directory. + +To build a default configuration of perl5.004_05 and install it +to F, you would say: + + buildperl.pl --prefix='/opt/' --perl=5.004_05 --config=default + +To build debugging configurations of all perls in the source directory +and install them to F, use: + + buildperl.pl --prefix='/opt/' --config=debug + +To build all configurations for perl-5.8.5 and perl-5.8.6, test them +and don't install them, run: + + buildperl.pl --perl=5.8.5 --perl=5.8.6 --test --noinstall + +=head1 COPYRIGHT + +Copyright (c) 2004-2005, Marcus Holland-Moritz. + +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. + diff --git a/ext/Devel/PPPort/devel/mkapidoc.sh b/ext/Devel/PPPort/devel/mkapidoc.sh index c0dccac..356ff51 100644 --- a/ext/Devel/PPPort/devel/mkapidoc.sh +++ b/ext/Devel/PPPort/devel/mkapidoc.sh @@ -5,13 +5,13 @@ # ################################################################################ # -# $Revision: 7 $ +# $Revision: 8 $ # $Author: mhx $ -# $Date: 2005/03/10 18:21:59 +0100 $ +# $Date: 2006/01/14 22:41:14 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # diff --git a/ext/Devel/PPPort/devel/mktodo b/ext/Devel/PPPort/devel/mktodo index 3c6cd7d..d7155c8 100644 --- a/ext/Devel/PPPort/devel/mktodo +++ b/ext/Devel/PPPort/devel/mktodo @@ -5,13 +5,13 @@ # ################################################################################ # -# $Revision: 8 $ +# $Revision: 10 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:49 +0100 $ +# $Date: 2006/01/14 23:02:12 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # @@ -51,6 +51,8 @@ for (1 .. $#perls) { shift @perls; +$ENV{SKIP_PPPHTEST} = 1; + for (@perls) { my $todo = do { my $v = $_->{todo}; $v =~ s/\D+//g; $v }; -e "$outdir/$todo" and next; diff --git a/ext/Devel/PPPort/devel/mktodo.pl b/ext/Devel/PPPort/devel/mktodo.pl index 05d921b..f66fc00 100644 --- a/ext/Devel/PPPort/devel/mktodo.pl +++ b/ext/Devel/PPPort/devel/mktodo.pl @@ -5,13 +5,13 @@ # ################################################################################ # -# $Revision: 7 $ +# $Revision: 8 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:50 +0100 $ +# $Date: 2006/01/14 22:41:14 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # diff --git a/ext/Devel/PPPort/devel/scanprov b/ext/Devel/PPPort/devel/scanprov index 9d1a8d4..fb5bc79 100644 --- a/ext/Devel/PPPort/devel/scanprov +++ b/ext/Devel/PPPort/devel/scanprov @@ -5,13 +5,13 @@ # ################################################################################ # -# $Revision: 5 $ +# $Revision: 6 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:50 +0100 $ +# $Date: 2006/01/14 22:41:14 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # diff --git a/ext/Devel/PPPort/mktests.PL b/ext/Devel/PPPort/mktests.PL index cb8a874..98ef486 100644 --- a/ext/Devel/PPPort/mktests.PL +++ b/ext/Devel/PPPort/mktests.PL @@ -4,13 +4,13 @@ # ################################################################################ # -# $Revision: 20 $ +# $Revision: 21 $ # $Author: mhx $ -# $Date: 2005/03/10 18:45:54 +0100 $ +# $Date: 2006/01/14 18:07:56 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # diff --git a/ext/Devel/PPPort/module2.c b/ext/Devel/PPPort/module2.c index 0687c13..ccadd29 100644 --- a/ext/Devel/PPPort/module2.c +++ b/ext/Devel/PPPort/module2.c @@ -4,13 +4,13 @@ * ******************************************************************************** * -* $Revision: 6 $ +* $Revision: 8 $ * $Author: mhx $ -* $Date: 2005/01/31 08:10:50 +0100 $ +* $Date: 2006/01/14 18:07:57 +0100 $ * ******************************************************************************** * -* Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +* Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. * Version 2.x, Copyright (C) 2001, Paul Marquess. * Version 1.x, Copyright (C) 1999, Kenneth Albanowski. * @@ -28,9 +28,15 @@ #endif #define NEED_newCONSTSUB_GLOBAL +#define NEED_PL_signals_GLOBAL #include "ppport.h" void call_newCONSTSUB_2(void) { newCONSTSUB(gv_stashpv("Devel::PPPort", FALSE), "test_value_2", newSViv(2)); } + +U32 get_PL_signals_2(void) +{ + return PL_signals; +} diff --git a/ext/Devel/PPPort/module3.c b/ext/Devel/PPPort/module3.c index 7ce5b60..7c9eac8 100644 --- a/ext/Devel/PPPort/module3.c +++ b/ext/Devel/PPPort/module3.c @@ -4,13 +4,13 @@ * ******************************************************************************** * -* $Revision: 6 $ +* $Revision: 8 $ * $Author: mhx $ -* $Date: 2005/02/02 21:47:34 +0100 $ +* $Date: 2006/01/14 18:07:56 +0100 $ * ******************************************************************************** * -* Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +* Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. * Version 2.x, Copyright (C) 2001, Paul Marquess. * Version 1.x, Copyright (C) 1999, Kenneth Albanowski. * @@ -59,3 +59,7 @@ void call_newCONSTSUB_3(void) newCONSTSUB(gv_stashpv("Devel::PPPort", FALSE), "test_value_3", newSViv(3)); } +U32 get_PL_signals_3(void) +{ + return PL_signals; +} diff --git a/ext/Devel/PPPort/parts/apicheck.pl b/ext/Devel/PPPort/parts/apicheck.pl index d737afe..d17345b 100644 --- a/ext/Devel/PPPort/parts/apicheck.pl +++ b/ext/Devel/PPPort/parts/apicheck.pl @@ -5,13 +5,13 @@ # ################################################################################ # -# $Revision: 13 $ +# $Revision: 14 $ # $Author: mhx $ -# $Date: 2005/06/25 16:47:31 +0200 $ +# $Date: 2006/01/14 18:07:58 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # diff --git a/ext/Devel/PPPort/parts/apidoc.fnc b/ext/Devel/PPPort/parts/apidoc.fnc index 0f82489..1a7609b 100644 --- a/ext/Devel/PPPort/parts/apidoc.fnc +++ b/ext/Devel/PPPort/parts/apidoc.fnc @@ -88,6 +88,7 @@ Ams||dAX Ams||dAXMARK Ams||dITEMS Ams||dMARK +Ams||dMULTICALL Ams||dORIGMARK Ams||dSP Ams||dUNDERBAR @@ -97,6 +98,9 @@ Ams||dXSI32 Ams||ENTER Ams||FREETMPS Ams||LEAVE +Ams||MULTICALL +Ams||POP_MULTICALL +Ams||PUSH_MULTICALL Ams||PUTBACK Ams||SAVETMPS Ams||SPAGAIN @@ -170,9 +174,9 @@ Am|void|mXPUSHi|IV iv Am|void|mXPUSHn|NV nv Am|void|mXPUSHp|char* str|STRLEN len Am|void|mXPUSHu|UV uv -Am|void|Newc|int id|void* ptr|int nitems|type|cast -Am|void|New|int id|void* ptr|int nitems|type -Am|void|Newz|int id|void* ptr|int nitems|type +Am|void|Newxc|void* ptr|int nitems|type|cast +Am|void|Newx|void* ptr|int nitems|type +Am|void|Newxz|void* ptr|int nitems|type Am|void|Poison|void* dest|int nitems|type Am|void|PUSHi|IV iv Am|void|PUSHMARK|SP diff --git a/ext/Devel/PPPort/parts/base/5004000 b/ext/Devel/PPPort/parts/base/5004000 index f5f031f..523a205 100644 --- a/ext/Devel/PPPort/parts/base/5004000 +++ b/ext/Devel/PPPort/parts/base/5004000 @@ -21,11 +21,13 @@ SvUV # U SvUVX # U SvUVx # U XPUSHu # U +do_open # E (Perl_do_open) gv_efullname3 # U gv_fullname3 # U my_memcmp # U newRV_inc # E sv_2uv # U +sv_taint # U PERL_INT_MAX # added by devel/scanprov PERL_INT_MIN # added by devel/scanprov PERL_LONG_MAX # added by devel/scanprov diff --git a/ext/Devel/PPPort/parts/base/5004050 b/ext/Devel/PPPort/parts/base/5004050 index d1ca35e..0888015 100644 --- a/ext/Devel/PPPort/parts/base/5004050 +++ b/ext/Devel/PPPort/parts/base/5004050 @@ -4,6 +4,8 @@ PL_sv_no # E PL_sv_undef # E PL_sv_yes # E SvGETMAGIC # U +sv_catpvn_mg # U +sv_catsv_mg # U AvFILLp # added by devel/scanprov DEFSV # added by devel/scanprov ERRSV # added by devel/scanprov diff --git a/ext/Devel/PPPort/parts/base/5006000 b/ext/Devel/PPPort/parts/base/5006000 index 1a7dd17..9d9f62c 100644 --- a/ext/Devel/PPPort/parts/base/5006000 +++ b/ext/Devel/PPPort/parts/base/5006000 @@ -68,7 +68,6 @@ do_hv_dump # E do_join # E (Perl_do_join) do_magic_dump # E do_op_dump # E -do_open # E (Perl_do_open) do_open9 # E do_pmop_dump # E do_sprintf # E (Perl_do_sprintf) @@ -111,7 +110,6 @@ gv_dump # E gv_efullname # E (Perl_gv_efullname) gv_fetchfile # E (Perl_gv_fetchfile) gv_fetchmeth # E (Perl_gv_fetchmeth) -gv_fetchmethod # E (Perl_gv_fetchmethod) gv_fetchmethod_autoload # E (Perl_gv_fetchmethod_autoload) gv_fetchpv # E (Perl_gv_fetchpv) gv_fullname # E (Perl_gv_fullname) @@ -131,11 +129,9 @@ hv_free_ent # E (Perl_hv_free_ent) hv_iterinit # E (Perl_hv_iterinit) hv_iterkey # E (Perl_hv_iterkey) hv_iterkeysv # E (Perl_hv_iterkeysv) -hv_iternext # E (Perl_hv_iternext) hv_iternextsv # E (Perl_hv_iternextsv) hv_iterval # E (Perl_hv_iterval) hv_ksplit # E (Perl_hv_ksplit) -hv_magic # E (Perl_hv_magic) hv_store # E (Perl_hv_store) hv_store_ent # E (Perl_hv_store_ent) hv_undef # E (Perl_hv_undef) @@ -343,6 +339,7 @@ set_context # U set_numeric_local # E (perl_set_numeric_local) set_numeric_radix # E set_numeric_standard # E (perl_set_numeric_standard) +share_hek # E (Perl_share_hek) stack_grow # E (Perl_stack_grow) start_subparse # E (Perl_start_subparse) str_to_version # E @@ -362,8 +359,6 @@ sv_catpv # E (Perl_sv_catpv) sv_catpv_mg # E (Perl_sv_catpv_mg) sv_catpvf # E (Perl_sv_catpvf) sv_catpvf_mg # E (Perl_sv_catpvf_mg) -sv_catpvn_mg # E (Perl_sv_catpvn_mg) -sv_catsv_mg # E (Perl_sv_catsv_mg) sv_chop # E (Perl_sv_chop) sv_clear # E (Perl_sv_clear) sv_cmp # E (Perl_sv_cmp) @@ -373,7 +368,7 @@ sv_dec # E (Perl_sv_dec) sv_derived_from # E (Perl_sv_derived_from) sv_dump # E (Perl_sv_dump) sv_eq # E (Perl_sv_eq) -sv_force_normal # E +sv_force_normal # U sv_free # E (Perl_sv_free) sv_gets # E (Perl_sv_gets) sv_grow # E (Perl_sv_grow) @@ -422,11 +417,9 @@ sv_setref_pvn # E (Perl_sv_setref_pvn) sv_setsv_mg # E (Perl_sv_setsv_mg) sv_setuv # E (Perl_sv_setuv) sv_setuv_mg # E (Perl_sv_setuv_mg) -sv_taint # E (Perl_sv_taint) sv_tainted # E (Perl_sv_tainted) sv_true # E (Perl_sv_true) sv_unmagic # E (Perl_sv_unmagic) -sv_unref # E (Perl_sv_unref) sv_untaint # E (Perl_sv_untaint) sv_upgrade # E (Perl_sv_upgrade) sv_usepvn # E (Perl_sv_usepvn) @@ -492,6 +485,7 @@ UVTYPE # added by devel/scanprov UVof # added by devel/scanprov UVuf # added by devel/scanprov UVxf # added by devel/scanprov +XSprePUSH # added by devel/scanprov aTHX # added by devel/scanprov aTHX_ # added by devel/scanprov dNOOP # added by devel/scanprov diff --git a/ext/Devel/PPPort/parts/base/5007001 b/ext/Devel/PPPort/parts/base/5007001 index 4c436af..be36e35 100644 --- a/ext/Devel/PPPort/parts/base/5007001 +++ b/ext/Devel/PPPort/parts/base/5007001 @@ -2,7 +2,6 @@ POPpbytex # E SvUOK # U bytes_from_utf8 # E -csighandler # U despatch_signals # U do_openn # U gv_handler # E @@ -19,9 +18,7 @@ sv_utf8_upgrade # E (Perl_sv_utf8_upgrade) utf8_length # U utf8_to_uvchr # U utf8_to_uvuni # U -utf8n_to_uvchr # U utf8n_to_uvuni # U -uvchr_to_utf8 # E uvuni_to_utf8 # E PTR2ul # added by devel/scanprov UVXf # added by devel/scanprov diff --git a/ext/Devel/PPPort/parts/base/5008001 b/ext/Devel/PPPort/parts/base/5008001 index 0804976..2060d15 100644 --- a/ext/Devel/PPPort/parts/base/5008001 +++ b/ext/Devel/PPPort/parts/base/5008001 @@ -7,6 +7,7 @@ packlist # U save_bool # U savestack_grow_cnt # U scan_vstring # E +seed # U sv_cat_decode # U sv_compile_2op # E (Perl_sv_compile_2op) sv_setpviv # U @@ -17,4 +18,6 @@ PERL_GCC_BRACE_GROUPS_FORBIDDEN # added by devel/scanprov PERL_MAGIC_utf8 # added by devel/scanprov PERL_MAGIC_vstring # added by devel/scanprov PERL_SCAN_SILENT_ILLDIGIT # added by devel/scanprov +PERL_SIGNALS_UNSAFE_FLAG # added by devel/scanprov +PL_signals # added by devel/scanprov XST_mUV # added by devel/scanprov diff --git a/ext/Devel/PPPort/parts/base/5008007 b/ext/Devel/PPPort/parts/base/5008007 new file mode 100644 index 0000000..7d656f0 --- /dev/null +++ b/ext/Devel/PPPort/parts/base/5008007 @@ -0,0 +1 @@ +5.008007 diff --git a/ext/Devel/PPPort/parts/base/5009003 b/ext/Devel/PPPort/parts/base/5009003 new file mode 100644 index 0000000..c448c06 --- /dev/null +++ b/ext/Devel/PPPort/parts/base/5009003 @@ -0,0 +1,40 @@ +5.009003 +MULTICALL # E +Newx # E +Newxc # E +Newxz # E +POP_MULTICALL # E +PUSH_MULTICALL # E +SvMAGIC_set # U +SvRV_set # U +SvSTASH_set # E +SvUV_set # U +av_arylen_p # E +ckwarn # U +ckwarn_d # U +csighandler # E (Perl_csighandler) +dAXMARK # E +dMULTICALL # E +doref # E +gv_const_sv # E +hv_eiter_p # E +hv_eiter_set # U +hv_name_set # U +hv_placeholders_get # U +hv_placeholders_p # E +hv_placeholders_set # U +hv_riter_p # E +hv_riter_set # U +is_utf8_string_loclen # U +my_sprintf # U +newGIVENOP # E +newSVhek # E +newWHENOP # E +newWHILEOP # E (Perl_newWHILEOP) +ref # E (Perl_ref) +sortsv_flags # U +stashpv_hvname_match # U +vverify # U +PERL_BCDVERSION # added by devel/scanprov +SvPVX_const # added by devel/scanprov +SvPVX_mutable # added by devel/scanprov diff --git a/ext/Devel/PPPort/parts/embed.fnc b/ext/Devel/PPPort/parts/embed.fnc index c05c422..2f0a8fd 100644 --- a/ext/Devel/PPPort/parts/embed.fnc +++ b/ext/Devel/PPPort/parts/embed.fnc @@ -11,7 +11,7 @@ : d function has documentation with its source : s static function, should have an S_ prefix in : source file; for macros (m), suffix the usage -: example with a semicolon +: example with a semicolon : n has no implicit interpreter/thread context argument : p function has a Perl_ prefix : f function takes printf style format string, varargs @@ -28,6 +28,7 @@ : R Return value must not be ignored. : P pure function: no effects except the return value; : return value depends only on parms and/or globals +: (see also L for those flags.) : : Pointer parameters that must not be passed NULLs should be prefixed with NN. : @@ -44,30 +45,31 @@ START_EXTERN_C #if defined(PERL_IMPLICIT_SYS) -Ano |PerlInterpreter* |perl_alloc_using \ - |struct IPerlMem* m|struct IPerlMem* ms \ - |struct IPerlMem* mp|struct IPerlEnv* e \ - |struct IPerlStdIO* io|struct IPerlLIO* lio \ - |struct IPerlDir* d|struct IPerlSock* s \ - |struct IPerlProc* p +Ano |PerlInterpreter*|perl_alloc_using \ + |NN struct IPerlMem* m|NN struct IPerlMem* ms \ + |NN struct IPerlMem* mp|NN struct IPerlEnv* e \ + |NN struct IPerlStdIO* io|NN struct IPerlLIO* lio \ + |NN struct IPerlDir* d|NN struct IPerlSock* s \ + |NN struct IPerlProc* p #endif Anod |PerlInterpreter* |perl_alloc Anod |void |perl_construct |NN PerlInterpreter* interp Anod |int |perl_destruct |NN PerlInterpreter* interp Anod |void |perl_free |NN PerlInterpreter* interp Anod |int |perl_run |NN PerlInterpreter* interp -Anod |int |perl_parse |PerlInterpreter* interp|XSINIT_t xsinit \ - |int argc|char** argv|char** env -AnpR |bool |doing_taint |int argc|char** argv|char** env +Anod |int |perl_parse |NN PerlInterpreter* interp|XSINIT_t xsinit \ + |int argc|NULLOK char** argv|NULLOK char** env +AnpR |bool |doing_taint |int argc|NULLOK char** argv|NULLOK char** env #if defined(USE_ITHREADS) -Anod |PerlInterpreter*|perl_clone|PerlInterpreter* interp|UV flags +Anod |PerlInterpreter*|perl_clone|NN PerlInterpreter* interp|UV flags # if defined(PERL_IMPLICIT_SYS) -Ano |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \ - |struct IPerlMem* m|struct IPerlMem* ms \ - |struct IPerlMem* mp|struct IPerlEnv* e \ - |struct IPerlStdIO* io|struct IPerlLIO* lio \ - |struct IPerlDir* d|struct IPerlSock* s \ - |struct IPerlProc* p +Ano |PerlInterpreter*|perl_clone_using \ + |NN PerlInterpreter *interp|UV flags \ + |NN struct IPerlMem* m|NN struct IPerlMem* ms \ + |NN struct IPerlMem* mp|NN struct IPerlEnv* e \ + |NN struct IPerlStdIO* io|NN struct IPerlLIO* lio \ + |NN struct IPerlDir* d|NN struct IPerlSock* s \ + |NN struct IPerlProc* p # endif #endif @@ -76,49 +78,49 @@ Aanop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size Aanop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes Anop |Free_t |mfree |Malloc_t where #if defined(MYMALLOC) -npR |MEM_SIZE|malloced_size |void *p +npR |MEM_SIZE|malloced_size |NN void *p #endif -Anp |void* |get_context -Anp |void |set_context |void *thx +AnpR |void* |get_context +Anp |void |set_context |NN void *thx END_EXTERN_C /* functions with flag 'n' should come before here */ START_EXTERN_C # include "pp_proto.h" -Ap |SV* |amagic_call |SV* left|SV* right|int method|int dir -Ap |bool |Gv_AMupdate |HV* stash -Ap |CV* |gv_handler |HV* stash|I32 id -p |OP* |append_elem |I32 optype|OP* head|OP* tail -p |OP* |append_list |I32 optype|LISTOP* first|LISTOP* last -p |I32 |apply |I32 type|SV** mark|SV** sp -ApM |void |apply_attrs_string|const char *stashpv|CV *cv|const char *attrstr|STRLEN len -Apd |void |av_clear |AV* ar -Apd |SV* |av_delete |AV* ar|I32 key|I32 flags -ApdR |bool |av_exists |AV* ar|I32 key +Ap |SV* |amagic_call |NN SV* left|NN SV* right|int method|int dir +Ap |bool |Gv_AMupdate |NN HV* stash +ApR |CV* |gv_handler |NULLOK HV* stash|I32 id +p |OP* |append_elem |I32 optype|NULLOK OP* first|NULLOK OP* last +p |OP* |append_list |I32 optype|NULLOK LISTOP* first|NULLOK LISTOP* last +p |I32 |apply |I32 type|NN SV** mark|NN SV** sp +ApM |void |apply_attrs_string|NN const char *stashpv|NN CV *cv|NN const char *attrstr|STRLEN len +Apd |void |av_clear |NN AV* ar +Apd |SV* |av_delete |NN AV* ar|I32 key|I32 flags +ApdR |bool |av_exists |NN AV* ar|I32 key Apd |void |av_extend |NN AV* ar|I32 key pR |AV* |av_fake |I32 size|NN SV** svp -ApdR |SV** |av_fetch |AV* ar|I32 key|I32 lval -Apd |void |av_fill |AV* ar|I32 fill -ApdR |I32 |av_len |const AV* ar +ApdR |SV** |av_fetch |NN AV* ar|I32 key|I32 lval +Apd |void |av_fill |NN AV* ar|I32 fill +ApdR |I32 |av_len |NN const AV* ar ApdR |AV* |av_make |I32 size|NN SV** svp -Apd |SV* |av_pop |AV* ar -Apd |void |av_push |AV* ar|SV* val -p |void |av_reify |AV* ar -ApdR |SV* |av_shift |AV* ar -Apd |SV** |av_store |AV* ar|I32 key|SV* val -Apd |void |av_undef |AV* ar -Apd |void |av_unshift |AV* ar|I32 num -Apo |SV** |av_arylen_p |AV* av +Apd |SV* |av_pop |NN AV* ar +Apd |void |av_push |NN AV* ar|NN SV* val +p |void |av_reify |NN AV* ar +ApdR |SV* |av_shift |NN AV* ar +Apd |SV** |av_store |NN AV* ar|I32 key|NULLOK SV* val +Apd |void |av_undef |NN AV* ar +Apd |void |av_unshift |NN AV* ar|I32 num +Apo |SV** |av_arylen_p |NN AV* av pR |OP* |bind_match |I32 type|NN OP* left|NN OP* pat -pR |OP* |block_end |I32 floor|OP* seq +pR |OP* |block_end |I32 floor|NULLOK OP* seq ApR |I32 |block_gimme pR |int |block_start |int full p |void |boot_core_UNIVERSAL p |void |boot_core_PerlIO Ap |void |call_list |I32 oldscope|NN AV* av_list -pR |bool |cando |Mode_t mode|Uid_t effective|NN const Stat_t* statbufp +pR |bool |cando |Mode_t mode|bool effective|NN const Stat_t* statbufp ApR |U32 |cast_ulong |NV f ApR |I32 |cast_i32 |NV f ApR |IV |cast_iv |NV f @@ -126,43 +128,45 @@ ApR |UV |cast_uv |NV f #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP) ApR |I32 |my_chsize |int fd|Off_t length #endif -pR |OP* |convert |I32 optype|I32 flags|OP* o -Afprd |void |croak |const char* pat|... -Apr |void |vcroak |const char* pat|va_list* args +pR |OP* |convert |I32 optype|I32 flags|NULLOK OP* o +: croak()'s first parm can be NULL. Otherwise, mod_perl breaks. +Afprd |void |croak |NULLOK const char* pat|... +Apr |void |vcroak |NN const char* pat|NULLOK va_list* args #if defined(PERL_IMPLICIT_CONTEXT) -Afnrp |void |croak_nocontext|const char* pat|... -Afnp |OP* |die_nocontext |const char* pat|... -Afnp |void |deb_nocontext |const char* pat|... -Afnp |char* |form_nocontext |const char* pat|... -Anp |void |load_module_nocontext|U32 flags|SV* name|SV* ver|... -Afnp |SV* |mess_nocontext |const char* pat|... -Afnp |void |warn_nocontext |const char* pat|... -Afnp |void |warner_nocontext|U32 err|const char* pat|... -Afnp |SV* |newSVpvf_nocontext|const char* pat|... -Afnp |void |sv_catpvf_nocontext|SV* sv|const char* pat|... -Afnp |void |sv_setpvf_nocontext|SV* sv|const char* pat|... -Afnp |void |sv_catpvf_mg_nocontext|SV* sv|const char* pat|... -Afnp |void |sv_setpvf_mg_nocontext|SV* sv|const char* pat|... -Afnp |int |fprintf_nocontext|PerlIO* stream|const char* fmt|... -Afnp |int |printf_nocontext|const char* fmt|... -#endif -p |void |cv_ckproto |NN const CV* cv|const GV* gv|const char* p +Afnrp |void |croak_nocontext|NN const char* pat|... +Afnp |OP* |die_nocontext |NN const char* pat|... +Afnp |void |deb_nocontext |NN const char* pat|... +Afnp |char* |form_nocontext |NN const char* pat|... +Anp |void |load_module_nocontext|U32 flags|NN SV* name|NN SV* ver|... +Afnp |SV* |mess_nocontext |NN const char* pat|... +Afnp |void |warn_nocontext |NN const char* pat|... +Afnp |void |warner_nocontext|U32 err|NN const char* pat|... +Afnp |SV* |newSVpvf_nocontext|NN const char* pat|... +Afnp |void |sv_catpvf_nocontext|NN SV* sv|NN const char* pat|... +Afnp |void |sv_setpvf_nocontext|NN SV* sv|NN const char* pat|... +Afnp |void |sv_catpvf_mg_nocontext|NN SV* sv|NN const char* pat|... +Afnp |void |sv_setpvf_mg_nocontext|NN SV* sv|NN const char* pat|... +Afnp |int |fprintf_nocontext|NN PerlIO* stream|NN const char* fmt|... +Afnp |int |printf_nocontext|NN const char* fmt|... +#endif +p |void |cv_ckproto |NN const CV* cv|NULLOK const GV* gv|NULLOK const char* p pd |CV* |cv_clone |NN CV* proto -Apd |SV* |cv_const_sv |CV* cv -p |SV* |op_const_sv |const OP* o|CV* cv -Apd |void |cv_undef |CV* cv -Ap |void |cx_dump |PERL_CONTEXT* cs -Ap |SV* |filter_add |filter_t funcp|SV* datasv -Ap |void |filter_del |filter_t funcp -Ap |I32 |filter_read |int idx|SV* buffer|int maxlen +ApdR |SV* |gv_const_sv |NN GV* gv +ApdR |SV* |cv_const_sv |NULLOK CV* cv +pR |SV* |op_const_sv |NULLOK const OP* o|NULLOK CV* cv +Apd |void |cv_undef |NN CV* cv +Ap |void |cx_dump |NN PERL_CONTEXT* cx +Ap |SV* |filter_add |NULLOK filter_t funcp|NULLOK SV* datasv +Ap |void |filter_del |NN filter_t funcp +ApR |I32 |filter_read |int idx|NN SV* buffer|int maxlen ApPR |char** |get_op_descs ApPR |char** |get_op_names pPR |const char* |get_no_modify pPR |U32* |get_opargs ApPR |PPADDR_t*|get_ppaddr EpR |I32 |cxinc -Afp |void |deb |const char* pat|... -Ap |void |vdeb |const char* pat|va_list* args +Afp |void |deb |NN const char* pat|... +Ap |void |vdeb |NN const char* pat|NULLOK va_list* args Ap |void |debprofdump Ap |I32 |debop |NN const OP* o Ap |I32 |debstack @@ -171,146 +175,150 @@ Ap |char* |delimcpy |NN char* to|NN const char* toend|NN const char* from \ |NN const char* fromend|int delim|NN I32* retlen p |void |deprecate |NN const char* s p |void |deprecate_old |NN const char* s -Afp |OP* |die |const char* pat|... -p |OP* |vdie |const char* pat|va_list* args -p |OP* |die_where |const char* message|STRLEN msglen +Afp |OP* |die |NULLOK const char* pat|... +p |OP* |vdie |NULLOK const char* pat|NULLOK va_list* args +p |OP* |die_where |NULLOK const char* message|STRLEN msglen Ap |void |dounwind |I32 cxix -p |bool |do_aexec |SV* really|SV** mark|SV** sp -p |bool |do_aexec5 |SV* really|SV** mark|SV** sp|int fd|int flag +pmb |bool |do_aexec |NULLOK SV* really|NN SV** mark|NN SV** sp +p |bool |do_aexec5 |NULLOK SV* really|NN SV** mark|NN SV** sp|int fd|int flag Ap |int |do_binmode |NN PerlIO *fp|int iotype|int mode p |void |do_chop |NN SV* asv|NN SV* sv Ap |bool |do_close |NN GV* gv|bool not_implicit p |bool |do_eof |NN GV* gv -p |bool |do_exec |NN char* cmd -#if defined(WIN32) || defined(SYMBIAN) -Ap |int |do_aspawn |SV* really|SV** mark|SV** sp -Ap |int |do_spawn |char* cmd -Ap |int |do_spawn_nowait|char* cmd + +#ifdef PERL_DEFAULT_DO_EXEC3_IMPLEMENTATION +pmb |bool |do_exec |NN const char* cmd +#else +p |bool |do_exec |NN const char* cmd +#endif + +#if defined(WIN32) || defined(__SYMBIAN32__) +Ap |int |do_aspawn |NN SV* really|NN SV** mark|NN SV** sp +Ap |int |do_spawn |NN char* cmd +Ap |int |do_spawn_nowait|NN char* cmd #endif #if !defined(WIN32) -p |bool |do_exec3 |char* cmd|int fd|int flag +p |bool |do_exec3 |NN const char* cmd|int fd|int flag #endif p |void |do_execfree #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM) -p |I32 |do_ipcctl |I32 optype|SV** mark|SV** sp -p |I32 |do_ipcget |I32 optype|SV** mark|SV** sp -p |I32 |do_msgrcv |SV** mark|SV** sp -p |I32 |do_msgsnd |SV** mark|SV** sp -p |I32 |do_semop |SV** mark|SV** sp -p |I32 |do_shmio |I32 optype|SV** mark|SV** sp +p |I32 |do_ipcctl |I32 optype|NN SV** mark|NN SV** sp +p |I32 |do_ipcget |I32 optype|NN SV** mark|NN SV** sp +p |I32 |do_msgrcv |NN SV** mark|NN SV** sp +p |I32 |do_msgsnd |NN SV** mark|NN SV** sp +p |I32 |do_semop |NN SV** mark|NN SV** sp +p |I32 |do_shmio |I32 optype|NN SV** mark|NN SV** sp #endif Ap |void |do_join |NN SV* sv|NN SV* del|NN SV** mark|NN SV** sp p |OP* |do_kv -Ap |bool |do_open |GV* gv|char* name|I32 len|int as_raw \ - |int rawmode|int rawperm|PerlIO* supplied_fp -Ap |bool |do_open9 |GV *gv|char *name|I32 len|int as_raw \ - |int rawmode|int rawperm|PerlIO *supplied_fp \ - |SV *svs|I32 num -Ap |bool |do_openn |GV *gv|char *name|I32 len|int as_raw \ - |int rawmode|int rawperm|PerlIO *supplied_fp \ - |SV **svp|I32 num -p |void |do_pipe |SV* sv|GV* rgv|GV* wgv -p |bool |do_print |SV* sv|PerlIO* fp -p |OP* |do_readline -p |I32 |do_chomp |SV* sv -p |bool |do_seek |GV* gv|Off_t pos|int whence -Ap |void |do_sprintf |SV* sv|I32 len|SV** sarg -p |Off_t |do_sysseek |GV* gv|Off_t pos|int whence -p |Off_t |do_tell |GV* gv -p |I32 |do_trans |SV* sv +Apmb |bool |do_open |NN GV* gv|NN const char* name|I32 len|int as_raw \ + |int rawmode|int rawperm|NULLOK PerlIO* supplied_fp +Ap |bool |do_open9 |NN GV *gv|NN const char *name|I32 len|int as_raw \ + |int rawmode|int rawperm|NULLOK PerlIO *supplied_fp \ + |NN SV *svs|I32 num +Ap |bool |do_openn |NN GV *gv|NN const char *name|I32 len|int as_raw \ + |int rawmode|int rawperm|NULLOK PerlIO *supplied_fp \ + |NULLOK SV **svp|I32 num +p |void |do_pipe |NN SV* sv|NULLOK GV* rgv|NULLOK GV* wgv +p |bool |do_print |NULLOK SV* sv|NN PerlIO* fp +pR |OP* |do_readline +p |I32 |do_chomp |NN SV* sv +p |bool |do_seek |NULLOK GV* gv|Off_t pos|int whence +Ap |void |do_sprintf |NN SV* sv|I32 len|NN SV** sarg +p |Off_t |do_sysseek |NN GV* gv|Off_t pos|int whence +pR |Off_t |do_tell |NN GV* gv +p |I32 |do_trans |NN SV* sv p |UV |do_vecget |NN SV* sv|I32 offset|I32 size p |void |do_vecset |NN SV* sv -p |void |do_vop |I32 optype|SV* sv|SV* left|SV* right -p |OP* |dofile |OP* term -Ap |I32 |dowantarray +p |void |do_vop |I32 optype|NN SV* sv|NN SV* left|NN SV* right +p |OP* |dofile |NN OP* term|I32 force_builtin +ApR |I32 |dowantarray Ap |void |dump_all Ap |void |dump_eval #if defined(DUMP_FDS) -Ap |void |dump_fds |char* s +Ap |void |dump_fds |NN char* s #endif -Ap |void |dump_form |const GV* gv -Ap |void |gv_dump |GV* gv -Ap |void |op_dump |const OP* arg -Ap |void |pmop_dump |PMOP* pm -Ap |void |dump_packsubs |const HV* stash +Ap |void |dump_form |NN const GV* gv +Ap |void |gv_dump |NN GV* gv +Ap |void |op_dump |NN const OP* arg +Ap |void |pmop_dump |NULLOK PMOP* pm +Ap |void |dump_packsubs |NN const HV* stash Ap |void |dump_sub |NN const GV* gv -Apd |void |fbm_compile |SV* sv|U32 flags -Apd |char* |fbm_instr |unsigned char* big|unsigned char* bigend \ - |SV* littlesv|U32 flags -p |char* |find_script |const char *scriptname|bool dosearch \ - |const char **search_ext|I32 flags -p |OP* |force_list |NN OP* arg +Apd |void |fbm_compile |NN SV* sv|U32 flags +ApdR |char* |fbm_instr |NN unsigned char* big|NN unsigned char* bigend \ + |NN SV* littlesv|U32 flags +p |char* |find_script |NN const char *scriptname|bool dosearch \ + |NULLOK const char *const *const search_ext|I32 flags +p |OP* |force_list |NULLOK OP* arg p |OP* |fold_constants |NN OP* arg -Afpd |char* |form |const char* pat|... -Ap |char* |vform |const char* pat|va_list* args +Afpd |char* |form |NN const char* pat|... +Ap |char* |vform |NN const char* pat|NULLOK va_list* args Ap |void |free_tmps -p |OP* |gen_constant_list|OP* o +p |OP* |gen_constant_list|NULLOK OP* o #if !defined(HAS_GETENV_LEN) -p |char* |getenv_len |const char* key|unsigned long *len +p |char* |getenv_len |NN const char* key|NN unsigned long *len #endif -Ap |void |gp_free |GV* gv -Ap |GP* |gp_ref |GP* gp +Ap |void |gp_free |NULLOK GV* gv +Ap |GP* |gp_ref |NULLOK GP* gp Ap |GV* |gv_AVadd |NN GV* gv Ap |GV* |gv_HVadd |NN GV* gv Ap |GV* |gv_IOadd |NN GV* gv -ApR |GV* |gv_autoload4 |HV* stash|NN const char* name|STRLEN len|I32 method -Ap |void |gv_check |HV* stash -Ap |void |gv_efullname |SV* sv|const GV* gv -Apmb |void |gv_efullname3 |SV* sv|const GV* gv|const char* prefix -Ap |void |gv_efullname4 |SV* sv|const GV* gv|const char* prefix|bool keepmain +ApR |GV* |gv_autoload4 |NULLOK HV* stash|NN const char* name|STRLEN len|I32 method +Ap |void |gv_check |NN HV* stash +Ap |void |gv_efullname |NN SV* sv|NN const GV* gv +Apmb |void |gv_efullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix +Ap |void |gv_efullname4 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain Ap |GV* |gv_fetchfile |NN const char* name -Apd |GV* |gv_fetchmeth |HV* stash|const char* name|STRLEN len \ - |I32 level -Apd |GV* |gv_fetchmeth_autoload |HV* stash|const char* name|STRLEN len \ - |I32 level -Apd |GV* |gv_fetchmethod |HV* stash|const char* name -Apd |GV* |gv_fetchmethod_autoload|HV* stash|const char* name \ - |I32 autoload -Ap |GV* |gv_fetchpv |const char* name|I32 add|I32 sv_type -Ap |void |gv_fullname |SV* sv|const GV* gv -Apmb |void |gv_fullname3 |SV* sv|const GV* gv|const char* prefix -Ap |void |gv_fullname4 |SV* sv|const GV* gv|const char* prefix|bool keepmain -Ap |void |gv_init |NN GV* gv|HV* stash|NN const char* name|STRLEN len|int multi -Apd |HV* |gv_stashpv |const char* name|I32 create -Apd |HV* |gv_stashpvn |const char* name|U32 namelen|I32 create -Apd |HV* |gv_stashsv |SV* sv|I32 create -Apd |void |hv_clear |HV* tb -Ap |void |hv_delayfree_ent|HV* hv|HE* entry -Apd |SV* |hv_delete |HV* tb|const char* key|I32 klen|I32 flags -Apd |SV* |hv_delete_ent |HV* tb|SV* key|I32 flags|U32 hash -ApdR |bool |hv_exists |HV* tb|const char* key|I32 klen -ApdR |bool |hv_exists_ent |HV* tb|SV* key|U32 hash -Apd |SV** |hv_fetch |HV* tb|const char* key|I32 klen|I32 lval -Apd |HE* |hv_fetch_ent |HV* tb|SV* key|I32 lval|U32 hash -Ap |void |hv_free_ent |NN HV* hv|HE* entry +Apd |GV* |gv_fetchmeth |NULLOK HV* stash|NN const char* name|STRLEN len|I32 level +Apd |GV* |gv_fetchmeth_autoload |NULLOK HV* stash|NN const char* name|STRLEN len|I32 level +Apdmb |GV* |gv_fetchmethod |NULLOK HV* stash|NN const char* name +Apd |GV* |gv_fetchmethod_autoload|NULLOK HV* stash|NN const char* name|I32 autoload +Ap |GV* |gv_fetchpv |NN const char* name|I32 add|I32 sv_type +Ap |void |gv_fullname |NN SV* sv|NN const GV* gv +Apmb |void |gv_fullname3 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix +Ap |void |gv_fullname4 |NN SV* sv|NN const GV* gv|NULLOK const char* prefix|bool keepmain +Ap |void |gv_init |NN GV* gv|NULLOK HV* stash|NN const char* name|STRLEN len|int multi +Apd |HV* |gv_stashpv |NN const char* name|I32 create +Apd |HV* |gv_stashpvn |NN const char* name|U32 namelen|I32 create +Apd |HV* |gv_stashsv |NULLOK SV* sv|I32 create +Apd |void |hv_clear |NULLOK HV* tb +Ap |void |hv_delayfree_ent|NN HV* hv|NULLOK HE* entry +Apd |SV* |hv_delete |NULLOK HV* tb|NN const char* key|I32 klen|I32 flags +Apd |SV* |hv_delete_ent |NULLOK HV* tb|NN SV* key|I32 flags|U32 hash +ApdR |bool |hv_exists |NULLOK HV* tb|NN const char* key|I32 klen +ApdR |bool |hv_exists_ent |NULLOK HV* tb|NN SV* key|U32 hash +Apd |SV** |hv_fetch |NULLOK HV* tb|NN const char* key|I32 klen|I32 lval +Apd |HE* |hv_fetch_ent |NULLOK HV* tb|NN SV* key|I32 lval|U32 hash +Ap |void |hv_free_ent |NN HV* hv|NULLOK HE* entryK Apd |I32 |hv_iterinit |NN HV* tb ApdR |char* |hv_iterkey |NN HE* entry|NN I32* retlen ApdR |SV* |hv_iterkeysv |NN HE* entry -ApdR |HE* |hv_iternext |NN HV* tb +ApdRbm |HE* |hv_iternext |NN HV* tb ApdR |SV* |hv_iternextsv |NN HV* hv|NN char** key|NN I32* retlen ApMdR |HE* |hv_iternext_flags|NN HV* tb|I32 flags ApdR |SV* |hv_iterval |NN HV* tb|NN HE* entry Ap |void |hv_ksplit |NN HV* hv|IV newmax -Apd |void |hv_magic |HV* hv|GV* gv|int how -Apd |SV** |hv_store |HV* tb|const char* key|I32 klen|SV* val \ +Apdbm |void |hv_magic |NN HV* hv|NULLOK GV* gv|int how +Apd |SV** |hv_store |NULLOK HV* tb|NULLOK const char* key|I32 klen|NULLOK SV* val \ |U32 hash -Apd |HE* |hv_store_ent |HV* tb|SV* key|SV* val|U32 hash -ApM |SV** |hv_store_flags |HV* tb|const char* key|I32 klen|SV* val \ +Apd |HE* |hv_store_ent |NULLOK HV* tb|NULLOK SV* key|NULLOK SV* val|U32 hash +ApM |SV** |hv_store_flags |NULLOK HV* tb|NULLOK const char* key|I32 klen|NULLOK SV* val \ |U32 hash|int flags -Apd |void |hv_undef |HV* tb +Apd |void |hv_undef |NULLOK HV* tb ApP |I32 |ibcmp |NN const char* a|NN const char* b|I32 len ApP |I32 |ibcmp_locale |NN const char* a|NN const char* b|I32 len -Apd |I32 |ibcmp_utf8 |NN const char* a|char **pe1|UV l1|bool u1|NN const char* b|char **pe2|UV l2|bool u2 -pR |bool |ingroup |Gid_t testgid|Uid_t effective +Apd |I32 |ibcmp_utf8 |NN const char* a|NULLOK char **pe1|UV l1|bool u1 \ + |NN const char* b|NULLOK char **pe2|UV l2|bool u2 +pR |bool |ingroup |Gid_t testgid|bool effective p |void |init_argv_symbols|int argc|NN char **argv p |void |init_debugger Ap |void |init_stacks -Ap |void |init_tm |struct tm *ptm +Ap |void |init_tm |NN struct tm *ptm pd |U32 |intro_my ApPR |char* |instr |NN const char* big|NN const char* little -pR |bool |io_close |NN IO* io|bool not_implicit -pR |OP* |invert |OP* cmd -dpR |bool |is_gv_magical |const char *name|STRLEN len|U32 flags +p |bool |io_close |NN IO* io|bool not_implicit +pR |OP* |invert |NULLOK OP* cmd +dpR |bool |is_gv_magical |NN const char *name|STRLEN len|U32 flags ApR |I32 |is_lvalue_sub ApPR |U32 |to_uni_upper_lc|U32 c ApPR |U32 |to_uni_title_lc|U32 c @@ -349,8 +357,8 @@ ApPR |bool |is_uni_punct_lc|UV c ApPR |bool |is_uni_xdigit_lc|UV c Apd |STRLEN |is_utf8_char |NN const U8 *p Apd |bool |is_utf8_string |NN const U8 *s|STRLEN len -Apd |bool |is_utf8_string_loc|NN const U8 *s|STRLEN len|const U8 **p -Apd |bool |is_utf8_string_loclen|NN const U8 *s|STRLEN len|const U8 **ep|STRLEN *el +Apdmb |bool |is_utf8_string_loc|NN const U8 *s|STRLEN len|NULLOK const U8 **p +Apd |bool |is_utf8_string_loclen|NN const U8 *s|STRLEN len|NULLOK const U8 **ep|NULLOK STRLEN *el ApR |bool |is_utf8_alnum |NN const U8 *p ApR |bool |is_utf8_alnumc |NN const U8 *p ApR |bool |is_utf8_idfirst|NN const U8 *p @@ -371,96 +379,97 @@ p |OP* |jmaybe |NN OP* arg pP |I32 |keyword |NN const char* d|I32 len Ap |void |leave_scope |I32 base p |void |lex_end -p |void |lex_start |SV* line -Ap |void |op_null |OP* o -p |void |op_clear |OP* o +p |void |lex_start |NN SV* line +Ap |void |op_null |NN OP* o +p |void |op_clear |NN OP* o Ap |void |op_refcnt_lock Ap |void |op_refcnt_unlock -p |OP* |linklist |OP* o -p |OP* |list |OP* o -p |OP* |listkids |OP* o -Apd |void |load_module|U32 flags|SV* name|SV* ver|... -Ap |void |vload_module|U32 flags|SV* name|SV* ver|va_list* args -p |OP* |localize |OP* arg|I32 lexical +p |OP* |linklist |NN OP* o +p |OP* |list |NULLOK OP* o +p |OP* |listkids |NULLOK OP* o +Apd |void |load_module|U32 flags|NN SV* name|NULLOK SV* ver|... +Ap |void |vload_module|U32 flags|NN SV* name|NULLOK SV* ver|NULLOK va_list* args +p |OP* |localize |NN OP* arg|I32 lexical ApdR |I32 |looks_like_number|NN SV* sv -Apd |UV |grok_bin |NN const char* start|NN STRLEN* len_p|NN I32* flags|NV *result -Apd |UV |grok_hex |NN const char* start|NN STRLEN* len_p|NN I32* flags|NV *result -Apd |int |grok_number |NN const char *pv|STRLEN len|UV *valuep -ApdR |bool |grok_numeric_radix|const char **sp|const char *send -Apd |UV |grok_oct |const char* start|STRLEN* len_p|I32* flags|NV *result -p |int |magic_clearenv |SV* sv|MAGIC* mg -p |int |magic_clear_all_env|SV* sv|MAGIC* mg -p |int |magic_clearpack|SV* sv|MAGIC* mg -p |int |magic_clearsig |SV* sv|MAGIC* mg -p |int |magic_existspack|SV* sv|MAGIC* mg -p |int |magic_freeregexp|SV* sv|MAGIC* mg -p |int |magic_freeovrld|SV* sv|MAGIC* mg -p |int |magic_get |SV* sv|MAGIC* mg -p |int |magic_getarylen|SV* sv|MAGIC* mg -p |int |magic_getdefelem|SV* sv|MAGIC* mg -p |int |magic_getglob |SV* sv|MAGIC* mg -p |int |magic_getnkeys |SV* sv|MAGIC* mg -p |int |magic_getpack |SV* sv|MAGIC* mg -p |int |magic_getpos |SV* sv|MAGIC* mg -p |int |magic_getsig |SV* sv|MAGIC* mg -p |int |magic_getsubstr|SV* sv|MAGIC* mg -p |int |magic_gettaint |SV* sv|MAGIC* mg -p |int |magic_getuvar |SV* sv|MAGIC* mg -p |int |magic_getvec |SV* sv|MAGIC* mg -p |U32 |magic_len |SV* sv|MAGIC* mg -p |int |magic_nextpack |SV* sv|MAGIC* mg|SV* key -p |U32 |magic_regdata_cnt|SV* sv|MAGIC* mg -p |int |magic_regdatum_get|SV* sv|MAGIC* mg -pr |int |magic_regdatum_set|SV* sv|MAGIC* mg -p |int |magic_set |SV* sv|MAGIC* mg -p |int |magic_setamagic|SV* sv|MAGIC* mg -p |int |magic_setarylen|SV* sv|MAGIC* mg -p |int |magic_freearylen_p|SV* sv|MAGIC* mg -p |int |magic_setbm |SV* sv|MAGIC* mg -p |int |magic_setdbline|SV* sv|MAGIC* mg -p |int |magic_setdefelem|SV* sv|MAGIC* mg -p |int |magic_setenv |SV* sv|MAGIC* mg -p |int |magic_setfm |SV* sv|MAGIC* mg -p |int |magic_setisa |SV* sv|MAGIC* mg -p |int |magic_setglob |SV* sv|MAGIC* mg -p |int |magic_setmglob |SV* sv|MAGIC* mg -p |int |magic_setnkeys |SV* sv|MAGIC* mg -p |int |magic_setpack |SV* sv|MAGIC* mg -p |int |magic_setpos |SV* sv|MAGIC* mg -p |int |magic_setregexp|SV* sv|MAGIC* mg -p |int |magic_setsig |SV* sv|MAGIC* mg -p |int |magic_setsubstr|SV* sv|MAGIC* mg -p |int |magic_settaint |SV* sv|MAGIC* mg -p |int |magic_setuvar |SV* sv|MAGIC* mg -p |int |magic_setvec |SV* sv|MAGIC* mg -p |int |magic_setutf8 |SV* sv|MAGIC* mg -p |int |magic_set_all_env|SV* sv|MAGIC* mg -p |U32 |magic_sizepack |SV* sv|MAGIC* mg -p |int |magic_wipepack |SV* sv|MAGIC* mg -p |void |magicname |const char* sym|const char* name|I32 namlen +Apd |UV |grok_bin |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result +Apd |UV |grok_hex |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result +Apd |int |grok_number |NN const char *pv|STRLEN len|NULLOK UV *valuep +ApdR |bool |grok_numeric_radix|NN const char **sp|NN const char *send +Apd |UV |grok_oct |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result +p |int |magic_clearenv |NN SV* sv|NN MAGIC* mg +p |int |magic_clear_all_env|NN SV* sv|NN MAGIC* mg +p |int |magic_clearpack|NN SV* sv|NN MAGIC* mg +p |int |magic_clearsig |NN SV* sv|NN MAGIC* mg +p |int |magic_existspack|NN SV* sv|NN MAGIC* mg +p |int |magic_freeregexp|NN SV* sv|NN MAGIC* mg +p |int |magic_freeovrld|NN SV* sv|NN MAGIC* mg +p |int |magic_get |NN SV* sv|NN MAGIC* mg +p |int |magic_getarylen|NN SV* sv|NN const MAGIC* mg +p |int |magic_getdefelem|NN SV* sv|NN MAGIC* mg +p |int |magic_getglob |NN SV* sv|NN MAGIC* mg +p |int |magic_getnkeys |NN SV* sv|NN MAGIC* mg +p |int |magic_getpack |NN SV* sv|NN MAGIC* mg +p |int |magic_getpos |NN SV* sv|NN MAGIC* mg +p |int |magic_getsig |NN SV* sv|NN MAGIC* mg +p |int |magic_getsubstr|NN SV* sv|NN MAGIC* mg +p |int |magic_gettaint |NN SV* sv|NN MAGIC* mg +p |int |magic_getuvar |NN SV* sv|NN MAGIC* mg +p |int |magic_getvec |NN SV* sv|NN MAGIC* mg +p |U32 |magic_len |NN SV* sv|NN MAGIC* mg +p |int |magic_nextpack |NN SV* sv|NN MAGIC* mg|NN SV* key +p |U32 |magic_regdata_cnt|NN SV* sv|NN MAGIC* mg +p |int |magic_regdatum_get|NN SV* sv|NN MAGIC* mg +pr |int |magic_regdatum_set|NN SV* sv|NN MAGIC* mg +p |int |magic_set |NN SV* sv|NN MAGIC* mg +p |int |magic_setamagic|NN SV* sv|NN MAGIC* mg +p |int |magic_setarylen|NN SV* sv|NN MAGIC* mg +p |int |magic_freearylen_p|NN SV* sv|NN MAGIC* mg +p |int |magic_setbm |NN SV* sv|NN MAGIC* mg +p |int |magic_setdbline|NN SV* sv|NN MAGIC* mg +p |int |magic_setdefelem|NN SV* sv|NN MAGIC* mg +p |int |magic_setenv |NN SV* sv|NN MAGIC* mg +p |int |magic_setfm |NN SV* sv|NN MAGIC* mg +p |int |magic_setisa |NN SV* sv|NN MAGIC* mg +p |int |magic_setglob |NN SV* sv|NN MAGIC* mg +p |int |magic_setmglob |NN SV* sv|NN MAGIC* mg +p |int |magic_setnkeys |NN SV* sv|NN MAGIC* mg +p |int |magic_setpack |NN SV* sv|NN MAGIC* mg +p |int |magic_setpos |NN SV* sv|NN MAGIC* mg +p |int |magic_setregexp|NN SV* sv|NN MAGIC* mg +p |int |magic_setsig |NN SV* sv|NN MAGIC* mg +p |int |magic_setsubstr|NN SV* sv|NN MAGIC* mg +p |int |magic_settaint |NN SV* sv|NN MAGIC* mg +p |int |magic_setuvar |NN SV* sv|NN MAGIC* mg +p |int |magic_setvec |NN SV* sv|NN MAGIC* mg +p |int |magic_setutf8 |NN SV* sv|NN MAGIC* mg +p |int |magic_set_all_env|NN SV* sv|NN MAGIC* mg +p |U32 |magic_sizepack |NN SV* sv|NN MAGIC* mg +p |int |magic_wipepack |NN SV* sv|NN MAGIC* mg +p |void |magicname |NN const char* sym|NULLOK const char* name|I32 namlen Ap |void |markstack_grow #if defined(USE_LOCALE_COLLATE) -p |int |magic_setcollxfrm|SV* sv|MAGIC* mg -p |char* |mem_collxfrm |const char* s|STRLEN len|STRLEN* xlen -#endif -Afp |SV* |mess |const char* pat|... -Ap |SV* |vmess |const char* pat|va_list* args -p |void |qerror |SV* err -Apd |void |sortsv |SV ** array|size_t num_elts|SVCOMPARE_t cmp -Apd |int |mg_clear |SV* sv -Apd |int |mg_copy |SV* sv|SV* nsv|const char* key|I32 klen -pd |void |mg_localize |SV* sv|SV* nsv -Apd |MAGIC* |mg_find |const SV* sv|int type -Apd |int |mg_free |SV* sv -Apd |int |mg_get |SV* sv -Apd |U32 |mg_length |SV* sv -Apd |void |mg_magical |SV* sv -Apd |int |mg_set |SV* sv -Ap |I32 |mg_size |SV* sv -Ap |void |mini_mktime |struct tm *pm -p |OP* |mod |OP* o|I32 type -p |int |mode_from_discipline|SV* discp -Ap |char* |moreswitches |char* s +p |int |magic_setcollxfrm|NN SV* sv|NN MAGIC* mg +p |char* |mem_collxfrm |NN const char* s|STRLEN len|NN STRLEN* xlen +#endif +Afp |SV* |mess |NN const char* pat|... +Ap |SV* |vmess |NN const char* pat|NULLOK va_list* args +p |void |qerror |NN SV* err +Apd |void |sortsv |NN SV** array|size_t num_elts|SVCOMPARE_t cmp +Apd |void |sortsv_flags |NN SV** array|size_t num_elts|SVCOMPARE_t cmp|U32 flags +Apd |int |mg_clear |NN SV* sv +Apd |int |mg_copy |NN SV* sv|NN SV* nsv|NULLOK const char* key|I32 klen +pd |void |mg_localize |NN SV* sv|NN SV* nsv +ApdR |MAGIC* |mg_find |NULLOK const SV* sv|int type +Apd |int |mg_free |NN SV* sv +Apd |int |mg_get |NN SV* sv +Apd |U32 |mg_length |NN SV* sv +Apd |void |mg_magical |NN SV* sv +Apd |int |mg_set |NN SV* sv +Ap |I32 |mg_size |NN SV* sv +Ap |void |mini_mktime |NN struct tm *pm +p |OP* |mod |NULLOK OP* o|I32 type +p |int |mode_from_discipline|NULLOK SV* discp +Ap |char* |moreswitches |NN char* s p |OP* |my |NN OP* o Ap |NV |my_atof |NN const char *s #if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY)) @@ -482,53 +491,54 @@ AnpP |I32 |my_memcmp |NN const char* s1|NN const char* s2|I32 len #if !defined(HAS_MEMSET) Anp |void* |my_memset |NN char* loc|I32 ch|I32 len #endif -Ap |I32 |my_pclose |PerlIO* ptr -Ap |PerlIO*|my_popen |char* cmd|char* mode -Ap |PerlIO*|my_popen_list |char* mode|int n|SV ** args -Ap |void |my_setenv |const char* nam|const char* val +Ap |I32 |my_pclose |NULLOK PerlIO* ptr +Ap |PerlIO*|my_popen |NN const char* cmd|NN const char* mode +Ap |PerlIO*|my_popen_list |NN char* mode|int n|NN SV ** args +Ap |void |my_setenv |NULLOK const char* nam|NULLOK const char* val Ap |I32 |my_stat -Ap |char * |my_strftime |const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst +Ap |char * |my_strftime |NN const char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst #if defined(MYSWAP) ApPa |short |my_swap |short s ApPa |long |my_htonl |long l ApPa |long |my_ntohl |long l #endif p |void |my_unexec -Apa |OP* |newANONLIST |OP* o -Apa |OP* |newANONHASH |OP* o -Ap |OP* |newANONSUB |I32 floor|OP* proto|OP* block -Apa |OP* |newASSIGNOP |I32 flags|OP* left|I32 optype|OP* right -Apa |OP* |newCONDOP |I32 flags|OP* expr|OP* trueop|OP* falseop -Apd |CV* |newCONSTSUB |HV* stash|const char* name|SV* sv -Ap |void |newFORM |I32 floor|OP* o|OP* block -Apa |OP* |newFOROP |I32 flags|char* label|line_t forline \ - |OP* sclr|OP* expr|OP*block|OP*cont -Apa |OP* |newLOGOP |I32 optype|I32 flags|OP* left|OP* right -Apa |OP* |newLOOPEX |I32 type|OP* label -Apa |OP* |newLOOPOP |I32 flags|I32 debuggable|OP* expr|OP* block +Apa |OP* |newANONLIST |NULLOK OP* o +Apa |OP* |newANONHASH |NULLOK OP* o +Ap |OP* |newANONSUB |I32 floor|NULLOK OP* proto|NULLOK OP* block +Apa |OP* |newASSIGNOP |I32 flags|NULLOK OP* left|I32 optype|NULLOK OP* right +Apa |OP* |newCONDOP |I32 flags|NN OP* first|NULLOK OP* trueop|NULLOK OP* falseop +Apd |CV* |newCONSTSUB |NULLOK HV* stash|NULLOK const char* name|NULLOK SV* sv +Ap |void |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block +Apa |OP* |newFOROP |I32 flags|NULLOK char* label|line_t forline \ + |NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont +Apa |OP* |newGIVENOP |NN OP* cond|NN OP* block|PADOFFSET defsv_off +Apa |OP* |newLOGOP |I32 optype|I32 flags|NN OP* left|NN OP* right +Apa |OP* |newLOOPEX |I32 type|NN OP* label +Apa |OP* |newLOOPOP |I32 flags|I32 debuggable|NULLOK OP* expr|NULLOK OP* block Apa |OP* |newNULLLIST Apa |OP* |newOP |I32 optype|I32 flags Ap |void |newPROG |NN OP* o -Apa |OP* |newRANGE |I32 flags|OP* left|OP* right -Apa |OP* |newSLICEOP |I32 flags|OP* subscript|OP* listop -Apa |OP* |newSTATEOP |I32 flags|char* label|OP* o -Ap |CV* |newSUB |I32 floor|OP* o|OP* proto|OP* block -Apd |CV* |newXS |NN const char* name|XSUBADDR_t f|NN const char* filename +Apa |OP* |newRANGE |I32 flags|NN OP* left|NN OP* right +Apa |OP* |newSLICEOP |I32 flags|NULLOK OP* subscript|NULLOK OP* listop +Apa |OP* |newSTATEOP |I32 flags|NULLOK char* label|NULLOK OP* o +Ap |CV* |newSUB |I32 floor|NULLOK OP* o|NULLOK OP* proto|NULLOK OP* block +Apd |CV* |newXS |NULLOK const char* name|NN XSUBADDR_t f|NN const char* filename Apda |AV* |newAV Apa |OP* |newAVREF |NN OP* o -Apa |OP* |newBINOP |I32 type|I32 flags|OP* first|OP* last -Apa |OP* |newCVREF |I32 flags|OP* o -Apa |OP* |newGVOP |I32 type|I32 flags|GV* gv -Apa |GV* |newGVgen |const char* pack -Apa |OP* |newGVREF |I32 type|OP* o +Apa |OP* |newBINOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last +Apa |OP* |newCVREF |I32 flags|NULLOK OP* o +Apa |OP* |newGVOP |I32 type|I32 flags|NN GV* gv +Apa |GV* |newGVgen |NN const char* pack +Apa |OP* |newGVREF |I32 type|NULLOK OP* o ApaR |OP* |newHVREF |NN OP* o ApdaR |HV* |newHV -ApaR |HV* |newHVhv |HV* hv +ApaR |HV* |newHVhv |NULLOK HV* hv Apa |IO* |newIO -Apa |OP* |newLISTOP |I32 type|I32 flags|OP* first|OP* last -Apa |OP* |newPADOP |I32 type|I32 flags|SV* sv +Apa |OP* |newLISTOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last +Apa |OP* |newPADOP |I32 type|I32 flags|NULLOK SV* sv Apa |OP* |newPMOP |I32 type|I32 flags -Apa |OP* |newPVOP |I32 type|I32 flags|char* pv +Apa |OP* |newPVOP |I32 type|I32 flags|NULLOK char* pv Apa |SV* |newRV |NN SV* pref Apda |SV* |newRV_noinc |NN SV *sv Apda |SV* |newSV |STRLEN len @@ -537,36 +547,38 @@ Apa |OP* |newSVOP |I32 type|I32 flags|NN SV* sv Apda |SV* |newSViv |IV i Apda |SV* |newSVuv |UV u Apda |SV* |newSVnv |NV n -Apda |SV* |newSVpv |const char* s|STRLEN len -Apda |SV* |newSVpvn |const char* s|STRLEN len -Apda |SV* |newSVhek |const HEK *hek -Apda |SV* |newSVpvn_share |const char* s|I32 len|U32 hash -Afpda |SV* |newSVpvf |const char* pat|... -Ap |SV* |vnewSVpvf |const char* pat|va_list* args +Apda |SV* |newSVpv |NULLOK const char* s|STRLEN len +Apda |SV* |newSVpvn |NULLOK const char* s|STRLEN len +Apda |SV* |newSVhek |NULLOK const HEK *hek +Apda |SV* |newSVpvn_share |NULLOK const char* s|I32 len|U32 hash +Afpda |SV* |newSVpvf |NN const char* pat|... +Apa |SV* |vnewSVpvf |NN const char* pat|NULLOK va_list* args Apda |SV* |newSVrv |NN SV* rv|NULLOK const char* classname Apda |SV* |newSVsv |NULLOK SV* old -Apa |OP* |newUNOP |I32 type|I32 flags|OP* first -Apa |OP* |newWHILEOP |I32 flags|I32 debuggable|LOOP* loop \ - |I32 whileline|OP* expr|OP* block|OP* cont \ +Apa |OP* |newUNOP |I32 type|I32 flags|NULLOK OP* first +Apa |OP* |newWHENOP |NULLOK OP* cond|NN OP* block +Apa |OP* |newWHILEOP |I32 flags|I32 debuggable|NULLOK LOOP* loop \ + |I32 whileline|NULLOK OP* expr|NULLOK OP* block|NULLOK OP* cont \ |I32 has_my Apa |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems Ap |char* |scan_vstring |NN const char *vstr|NN SV *sv Apd |const char* |scan_version |NN const char *vstr|NN SV *sv|bool qv -Apd |SV* |new_version |SV *ver -Apd |SV* |upg_version |SV *ver -Apd |SV* |vnumify |SV *vs -Apd |SV* |vnormal |SV *vs -Apd |SV* |vstringify |SV *vs +Apd |SV* |new_version |NN SV *ver +Apd |SV* |upg_version |NN SV *ver +Apd |bool |vverify |NN SV *vs +Apd |SV* |vnumify |NN SV *vs +Apd |SV* |vnormal |NN SV *vs +Apd |SV* |vstringify |NN SV *vs Apd |int |vcmp |NN SV *lvs|NN SV *rvs -p |PerlIO*|nextargv |GV* gv -ApP |char* |ninstr |const char* big|const char* bigend \ - |const char* little|const char* lend -pr |OP* |oopsCV |OP* o -Ap |void |op_free |OP* arg -p |void |package |OP* o +p |PerlIO*|nextargv |NN GV* gv +ApP |char* |ninstr |NN const char* big|NN const char* bigend \ + |NN const char* little|NN const char* lend +pr |OP* |oopsCV |NN OP* o +Ap |void |op_free |NULLOK OP* arg +p |void |package |NN OP* o pd |PADOFFSET|pad_alloc |I32 optype|U32 tmptype p |PADOFFSET|allocmy |NN char* name -pd |PADOFFSET|pad_findmy |NN const char* name +pdR |PADOFFSET|pad_findmy |NN const char* name Ap |PADOFFSET|find_rundefsvoffset | pR |OP* |oopsAV |NN OP* o pR |OP* |oopsHV |NN OP* o @@ -575,68 +587,72 @@ Apd |SV* |pad_sv |PADOFFSET po pd |void |pad_free |PADOFFSET po pd |void |pad_reset pd |void |pad_swipe |PADOFFSET po|bool refadjust -p |void |peep |OP* o -dopM |PerlIO*|start_glob |SV* pattern|IO *io +p |void |peep |NULLOK OP* o +dopM |PerlIO*|start_glob |NN SV* pattern|NN IO *io #if defined(USE_REENTRANT_API) Ap |void |reentrant_size Ap |void |reentrant_init Ap |void |reentrant_free -Anp |void* |reentrant_retry|const char*|... +Anp |void* |reentrant_retry|NN const char*|... #endif -Ap |void |call_atexit |ATEXIT_t fn|void *ptr +Ap |void |call_atexit |ATEXIT_t fn|NULLOK void *ptr Apd |I32 |call_argv |NN const char* sub_name|I32 flags|NN char** argv Apd |I32 |call_method |NN const char* methname|I32 flags Apd |I32 |call_pv |NN const char* sub_name|I32 flags -Apd |I32 |call_sv |SV* sv|I32 flags +Apd |I32 |call_sv |NN SV* sv|I32 flags Ap |void |despatch_signals +Ap |OP * |doref |NN OP *o|I32 type|bool set_op_ref Apd |SV* |eval_pv |NN const char* p|I32 croak_on_error Apd |I32 |eval_sv |NN SV* sv|I32 flags Apd |SV* |get_sv |NN const char* name|I32 create Apd |AV* |get_av |NN const char* name|I32 create -Apd |HV* |get_hv |const char* name|I32 create -Apd |CV* |get_cv |const char* name|I32 create +Apd |HV* |get_hv |NN const char* name|I32 create +Apd |CV* |get_cv |NN const char* name|I32 create Ap |int |init_i18nl10n |int printwarn Ap |int |init_i18nl14n |int printwarn -Ap |void |new_collate |NN char* newcoll -Ap |void |new_ctype |NN char* newctype -Ap |void |new_numeric |NN char* newcoll +Ap |void |new_collate |NULLOK const char* newcoll +Ap |void |new_ctype |NN const char* newctype +Ap |void |new_numeric |NULLOK const char* newcoll Ap |void |set_numeric_local Ap |void |set_numeric_radix Ap |void |set_numeric_standard Apd |void |require_pv |NN const char* pv -Apd |void |pack_cat |SV *cat|const char *pat|const char *patend|SV **beglist|SV **endlist|SV ***next_in_list|U32 flags -Apd |void |packlist |SV *cat|const char *pat|const char *patend|SV **beglist|SV **endlist +Apd |void |pack_cat |NN SV *cat|NN const char *pat|NN const char *patend \ + |NN SV **beglist|NN SV **endlist|NN SV ***next_in_list|U32 flags +Apd |void |packlist |NN SV *cat|NN const char *pat|NN const char *patend|NN SV **beglist|NN SV **endlist +#ifdef PERL_USES_PL_PIDSTATUS p |void |pidgone |Pid_t pid|int status +#endif Ap |void |pmflag |NN U32* pmfl|int ch p |OP* |pmruntime |NN OP* pm|NN OP* expr|bool isreg -p |OP* |pmtrans |NN OP* o|NN OP* expr|OP* repl +p |OP* |pmtrans |NN OP* o|NN OP* expr|NN OP* repl Ap |void |pop_scope -p |OP* |prepend_elem |I32 optype|OP* head|OP* tail +p |OP* |prepend_elem |I32 optype|NULLOK OP* head|NULLOK OP* tail Ap |void |push_scope -p |OP* |ref |OP* o|I32 type -p |OP* |refkids |OP* o|I32 type +Amb |OP* |ref |NULLOK OP* o|I32 type +p |OP* |refkids |NULLOK OP* o|I32 type Ap |void |regdump |NN regexp* r -Ap |SV* |regclass_swash |const struct regnode *n|bool doinit|SV **listsvp|SV **altsvp +Ap |SV* |regclass_swash |NN const struct regnode *n|bool doinit|NULLOK SV **listsvp|NULLOK SV **altsvp Ap |I32 |pregexec |NN regexp* prog|NN char* stringarg \ |NN char* strend|NN char* strbeg|I32 minend \ |NN SV* screamer|U32 nosave -Ap |void |pregfree |struct regexp* r +Ap |void |pregfree |NULLOK struct regexp* r Ap |regexp*|pregcomp |NN char* exp|NN char* xend|NN PMOP* pm -Ap |char* |re_intuit_start|regexp* prog|SV* sv|char* strpos \ - |char* strend|U32 flags \ - |struct re_scream_pos_data_s *data -Ap |SV* |re_intuit_string|regexp* prog +Ap |char* |re_intuit_start|NN regexp* prog|NULLOK SV* sv|NN char* strpos \ + |NN char* strend|U32 flags \ + |NULLOK struct re_scream_pos_data_s *data +Ap |SV* |re_intuit_string|NN regexp* prog Ap |I32 |regexec_flags |NN regexp* prog|NN char* stringarg \ |NN char* strend|NN char* strbeg|I32 minend \ - |SV* screamer|void* data|U32 flags + |NN SV* screamer|NULLOK void* data|U32 flags ApR |regnode*|regnext |NN regnode* p -Ep |void |regprop |SV* sv|const regnode* o +Ep |void |regprop |NN SV* sv|NN const regnode* o Ap |void |repeatcpy |NN char* to|NN const char* from|I32 len|I32 count ApP |char* |rninstr |NN const char* big|NN const char* bigend \ |NN const char* little|NN const char* lend Ap |Sighandler_t|rsignal |int i|Sighandler_t t -p |int |rsignal_restore|int i|Sigsave_t* t -p |int |rsignal_save |int i|Sighandler_t t1|Sigsave_t* t2 +p |int |rsignal_restore|int i|NULLOK Sigsave_t* t +p |int |rsignal_save |int i|Sighandler_t t1|NN Sigsave_t* t2 Ap |Sighandler_t|rsignal_state|int i p |void |rxres_free |NN void** rsp p |void |rxres_restore |NN void** rsp|NN REGEXP* prx @@ -644,85 +660,90 @@ p |void |rxres_save |NN void** rsp|NN REGEXP* prx #if !defined(HAS_RENAME) p |I32 |same_dirent |NN const char* a|NN const char* b #endif -Apda |char* |savepv |NN const char* pv -Apda |char* |savepvn |NN const char* pv|I32 len -Apda |char* |savesharedpv |const char* pv +Apda |char* |savepv |NULLOK const char* pv +Apda |char* |savepvn |NULLOK const char* pv|I32 len +Apda |char* |savesharedpv |NULLOK const char* pv Apda |char* |savesvpv |NN SV* sv Ap |void |savestack_grow Ap |void |savestack_grow_cnt |I32 need -Ap |void |save_aelem |const AV* av|I32 idx|SV **sptr +Ap |void |save_aelem |NN const AV* av|I32 idx|NN SV **sptr Ap |I32 |save_alloc |I32 size|I32 pad -Ap |void |save_aptr |AV** aptr -Ap |AV* |save_ary |GV* gv -Ap |void |save_bool |bool* boolp -Ap |void |save_clearsv |SV** svp -Ap |void |save_delete |HV* hv|char* key|I32 klen -Ap |void |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|void* p -Ap |void |save_destructor_x|DESTRUCTORFUNC_t f|void* p -Ap |void |save_freesv |SV* sv -p |void |save_freeop |OP* o -Ap |void |save_freepv |char* pv -Ap |void |save_generic_svref|SV** sptr -Ap |void |save_generic_pvref|char** str -Ap |void |save_shared_pvref|char** str -Ap |void |save_gp |GV* gv|I32 empty -Ap |HV* |save_hash |GV* gv -Ap |void |save_helem |HV* hv|SV *key|SV **sptr +Ap |void |save_aptr |NN AV** aptr +Ap |AV* |save_ary |NN GV* gv +Ap |void |save_bool |NN bool* boolp +Ap |void |save_clearsv |NN SV** svp +Ap |void |save_delete |NN HV* hv|NN char* key|I32 klen +Ap |void |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|NN void* p +Ap |void |save_destructor_x|DESTRUCTORFUNC_t f|NULLOK void* p +Ap |void |save_freesv |NULLOK SV* sv +p |void |save_freeop |NULLOK OP* o +Ap |void |save_freepv |NULLOK char* pv +Ap |void |save_generic_svref|NN SV** sptr +Ap |void |save_generic_pvref|NN char** str +Ap |void |save_shared_pvref|NN char** str +Ap |void |save_gp |NN GV* gv|I32 empty +Ap |HV* |save_hash |NN GV* gv +Ap |void |save_helem |NN HV* hv|NN SV *key|NN SV **sptr Apr |void |save_hints -Ap |void |save_hptr |HV** hptr -Ap |void |save_I16 |I16* intp -Ap |void |save_I32 |I32* intp -Ap |void |save_I8 |I8* bytep -Ap |void |save_int |int* intp -Ap |void |save_item |SV* item -Ap |void |save_iv |IV* iv -Ap |void |save_list |SV** sarg|I32 maxsarg -Ap |void |save_long |long* longp -Ap |void |save_mortalizesv|SV* sv -Ap |void |save_nogv |GV* gv +Ap |void |save_hptr |NN HV** hptr +Ap |void |save_I16 |NN I16* intp +Ap |void |save_I32 |NN I32* intp +Ap |void |save_I8 |NN I8* bytep +Ap |void |save_int |NN int* intp +Ap |void |save_item |NN SV* item +Ap |void |save_iv |NN IV* iv +Ap |void |save_list |NN SV** sarg|I32 maxsarg +Ap |void |save_long |NN long* longp +Ap |void |save_mortalizesv|NN SV* sv +Ap |void |save_nogv |NULLOK GV* gv p |void |save_op -Ap |SV* |save_scalar |GV* gv -Ap |void |save_pptr |char** pptr -Ap |void |save_vptr |void* pptr +Ap |SV* |save_scalar |NN GV* gv +Ap |void |save_pptr |NN char** pptr +Ap |void |save_vptr |NN void* pptr Ap |void |save_re_context Ap |void |save_padsv |PADOFFSET off -Ap |void |save_sptr |SV** sptr -Ap |SV* |save_svref |SV** sptr +Ap |void |save_sptr |NN SV** sptr +Ap |SV* |save_svref |NN SV** sptr Apr |SV** |save_threadsv |PADOFFSET i -p |OP* |sawparens |OP* o -p |OP* |scalar |OP* o -p |OP* |scalarkids |OP* o -p |OP* |scalarseq |OP* o -p |OP* |scalarvoid |OP* o -Apd |NV |scan_bin |const char* start|STRLEN len|STRLEN* retlen -Apd |NV |scan_hex |const char* start|STRLEN len|STRLEN* retlen -Ap |char* |scan_num |const char* s|YYSTYPE *lvalp -Apd |NV |scan_oct |const char* start|STRLEN len|STRLEN* retlen -p |OP* |scope |OP* o -Ap |char* |screaminstr |SV* bigsv|SV* littlesv|I32 start_shift \ - |I32 end_shift|I32 *state|I32 last +p |OP* |sawparens |NULLOK OP* o +p |OP* |scalar |NULLOK OP* o +p |OP* |scalarkids |NULLOK OP* o +p |OP* |scalarseq |NULLOK OP* o +p |OP* |scalarvoid |NN OP* o +Apd |NV |scan_bin |NN const char* start|STRLEN len|NN STRLEN* retlen +Apd |NV |scan_hex |NN const char* start|STRLEN len|NN STRLEN* retlen +Ap |char* |scan_num |NN const char* s|NN YYSTYPE *lvalp +Apd |NV |scan_oct |NN const char* start|STRLEN len|NN STRLEN* retlen +p |OP* |scope |NULLOK OP* o +Ap |char* |screaminstr |NN SV *bigstr|NN SV *littlestr|I32 start_shift \ + |I32 end_shift|NN I32 *oldposp|I32 last #if !defined(VMS) -p |I32 |setenv_getix |const char* nam -#endif -p |void |setdefout |GV* gv -p |HEK* |share_hek |const char* sv|I32 len|U32 hash +p |I32 |setenv_getix |NN const char* nam +#endif +p |void |setdefout |NULLOK GV* gv +Ap |HEK* |share_hek |NN const char* str|I32 len|U32 hash +#if defined(HAS_SIGACTION) && defined(SA_SIGINFO) +np |Signal_t |sighandler |int sig|... +Anp |Signal_t |csighandler |int sig|... +#else np |Signal_t |sighandler |int sig Anp |Signal_t |csighandler |int sig -Ap |SV** |stack_grow |NN SV** sp|NN SV**p|int n -ApR |I32 |start_subparse |I32 is_format|U32 flags -p |void |sub_crush_depth|CV* cv +#endif +Ap |SV** |stack_grow |NN SV** sp|NN SV** p|int n +Ap |I32 |start_subparse |I32 is_format|U32 flags +p |void |sub_crush_depth|NN CV* cv Apd |bool |sv_2bool |NN SV* sv -Apd |CV* |sv_2cv |NN SV* sv|HV** st|GV** gvp|I32 lref +Apd |CV* |sv_2cv |NULLOK SV* sv|NN HV** st|NN GV** gvp|I32 lref Apd |IO* |sv_2io |NN SV* sv Amb |IV |sv_2iv |NN SV* sv Apd |IV |sv_2iv_flags |NN SV* sv|I32 flags -Apd |SV* |sv_2mortal |NN SV* sv +Apd |SV* |sv_2mortal |NULLOK SV* sv Apd |NV |sv_2nv |NN SV* sv -Amb |char* |sv_2pv |NN SV* sv|STRLEN* lp -Apd |char* |sv_2pv_flags |NN SV* sv|STRLEN* lp|I32 flags -Apd |char* |sv_2pvutf8 |NN SV* sv|STRLEN* lp -Apd |char* |sv_2pvbyte |NN SV* sv|STRLEN* lp -Ap |char* |sv_pvn_nomg |NN SV* sv|STRLEN* lp +Amb |char* |sv_2pv |NN SV* sv|NULLOK STRLEN* lp +Apd |char* |sv_2pv_flags |NN SV* sv|NULLOK STRLEN* lp|I32 flags +Apd |char* |sv_2pvutf8 |NN SV* sv|NULLOK STRLEN* lp +Apd |char* |sv_2pvbyte |NN SV* sv|NULLOK STRLEN* lp +Ap |char* |sv_pvn_nomg |NN SV* sv|NULLOK STRLEN* lp Amb |UV |sv_2uv |NN SV* sv Apd |UV |sv_2uv_flags |NN SV* sv|I32 flags Apd |IV |sv_iv |NN SV* sv @@ -731,16 +752,16 @@ Apd |NV |sv_nv |NN SV* sv Apd |char* |sv_pvn |NN SV *sv|NN STRLEN *len Apd |char* |sv_pvutf8n |NN SV *sv|NN STRLEN *len Apd |char* |sv_pvbyten |NN SV *sv|NN STRLEN *len -Apd |I32 |sv_true |NN SV *sv +Apd |I32 |sv_true |NULLOK SV *sv pd |void |sv_add_arena |NN char* ptr|U32 size|U32 flags Apd |int |sv_backoff |NN SV* sv Apd |SV* |sv_bless |NN SV* sv|NN HV* stash -Afpd |void |sv_catpvf |NN SV* sv|const char* pat|... -Apd |void |sv_vcatpvf |NN SV* sv|const char* pat|va_list* args -Apd |void |sv_catpv |NN SV* sv|const char* ptr -Amdb |void |sv_catpvn |NN SV* sv|const char* ptr|STRLEN len -Amdb |void |sv_catsv |NN SV* dsv|SV* ssv -Apd |void |sv_chop |NN SV* sv|const char* ptr +Afpd |void |sv_catpvf |NN SV* sv|NN const char* pat|... +Apd |void |sv_vcatpvf |NN SV* sv|NN const char* pat|NULLOK va_list* args +Apd |void |sv_catpv |NN SV* sv|NN const char* ptr +Amdb |void |sv_catpvn |NN SV* sv|NN const char* ptr|STRLEN len +Amdb |void |sv_catsv |NN SV* dsv|NULLOK SV* ssv +Apd |void |sv_chop |NN SV* sv|NULLOK const char* ptr pd |I32 |sv_clean_all pd |void |sv_clean_objs Apd |void |sv_clear |NN SV* sv @@ -754,8 +775,8 @@ Apd |int |getcwd_sv |NN SV* sv Apd |void |sv_dec |NN SV* sv Ap |void |sv_dump |NN SV* sv ApdR |bool |sv_derived_from|NN SV* sv|NN const char* name -Apd |I32 |sv_eq |NN SV* sv1|NN SV* sv2 -Apd |void |sv_free |SV* sv +Apd |I32 |sv_eq |NULLOK SV* sv1|NULLOK SV* sv2 +Apd |void |sv_free |NULLOK SV* sv poMX |void |sv_free2 |NN SV* sv pd |void |sv_free_arenas Apd |char* |sv_gets |NN SV* sv|NN PerlIO* fp|I32 append @@ -763,117 +784,132 @@ Apd |char* |sv_grow |NN SV* sv|STRLEN newlen Apd |void |sv_inc |NN SV* sv Apd |void |sv_insert |NN SV* bigsv|STRLEN offset|STRLEN len \ |NN const char* little|STRLEN littlelen -Apd |int |sv_isa |NN SV* sv|const char* name -Apd |int |sv_isobject |NN SV* sv -Apd |STRLEN |sv_len |NN SV* sv -Apd |STRLEN |sv_len_utf8 |NN SV* sv -Apd |void |sv_magic |NN SV* sv|SV* obj|int how|const char* name \ +Apd |int |sv_isa |NULLOK SV* sv|NN const char* name +Apd |int |sv_isobject |NULLOK SV* sv +Apd |STRLEN |sv_len |NULLOK SV* sv +Apd |STRLEN |sv_len_utf8 |NULLOK SV* sv +Apd |void |sv_magic |NN SV* sv|NULLOK SV* obj|int how|NULLOK const char* name \ |I32 namlen -Apd |MAGIC *|sv_magicext |NN SV* sv|SV* obj|int how|const MGVTBL *vtbl \ - |const char* name|I32 namlen +Apd |MAGIC *|sv_magicext |NN SV* sv|NULLOK SV* obj|int how|NULLOK const MGVTBL *vtbl \ + |NULLOK const char* name|I32 namlen ApdaR |SV* |sv_mortalcopy |NULLOK SV* oldsv ApdR |SV* |sv_newmortal Apd |SV* |sv_newref |NULLOK SV* sv -Ap |char* |sv_peek |SV* sv -Apd |void |sv_pos_u2b |SV* sv|NN I32* offsetp|I32* lenp -Apd |void |sv_pos_b2u |SV* sv|NN I32* offsetp -Amdb |char* |sv_pvn_force |SV* sv|STRLEN* lp -Apd |char* |sv_pvutf8n_force|SV* sv|STRLEN* lp -Apd |char* |sv_pvbyten_force|SV* sv|STRLEN* lp -Apd |char* |sv_recode_to_utf8 |SV* sv|SV *encoding -Apd |bool |sv_cat_decode |SV* dsv|SV *encoding|SV *ssv|int *offset \ - |char* tstr|int tlen +Ap |char* |sv_peek |NULLOK SV* sv +Apd |void |sv_pos_u2b |NULLOK SV* sv|NN I32* offsetp|NULLOK I32* lenp +Apd |void |sv_pos_b2u |NULLOK SV* sv|NN I32* offsetp +Amdb |char* |sv_pvn_force |NN SV* sv|NULLOK STRLEN* lp +Apd |char* |sv_pvutf8n_force|NN SV* sv|NULLOK STRLEN* lp +Apd |char* |sv_pvbyten_force|NN SV* sv|NULLOK STRLEN* lp +Apd |char* |sv_recode_to_utf8 |NN SV* sv|NN SV *encoding +Apd |bool |sv_cat_decode |NN SV* dsv|NN SV *encoding|NN SV *ssv|NN int *offset \ + |NN char* tstr|int tlen ApdR |char* |sv_reftype |NN const SV* sv|int ob Apd |void |sv_replace |NN SV* sv|NN SV* nsv Apd |void |sv_report_used -Apd |void |sv_reset |NN const char* s|HV* stash -Afpd |void |sv_setpvf |SV* sv|const char* pat|... -Apd |void |sv_vsetpvf |SV* sv|const char* pat|va_list* args -Apd |void |sv_setiv |SV* sv|IV num +Apd |void |sv_reset |NN const char* s|NULLOK HV* stash +Afpd |void |sv_setpvf |NN SV* sv|NN const char* pat|... +Apd |void |sv_vsetpvf |NN SV* sv|NN const char* pat|NULLOK va_list* args +Apd |void |sv_setiv |NN SV* sv|IV num Apdb |void |sv_setpviv |NN SV* sv|IV num -Apd |void |sv_setuv |SV* sv|UV num -Apd |void |sv_setnv |SV* sv|NV num -Apd |SV* |sv_setref_iv |SV* rv|const char* classname|IV iv -Apd |SV* |sv_setref_uv |SV* rv|const char* classname|UV uv -Apd |SV* |sv_setref_nv |SV* rv|const char* classname|NV nv -Apd |SV* |sv_setref_pv |SV* rv|const char* classname|NULLOK void* pv -Apd |SV* |sv_setref_pvn |SV* rv|const char* classname|NN const char* pv|STRLEN n -Apd |void |sv_setpv |SV* sv|const char* ptr -Apd |void |sv_setpvn |NN SV* sv|const char* ptr|STRLEN len -Amdb |void |sv_setsv |SV* dsv|SV* ssv -Apd |void |sv_taint |SV* sv -ApdR |bool |sv_tainted |SV* sv +Apd |void |sv_setuv |NN SV* sv|UV num +Apd |void |sv_setnv |NN SV* sv|NV num +Apd |SV* |sv_setref_iv |NN SV* rv|NULLOK const char* classname|IV iv +Apd |SV* |sv_setref_uv |NN SV* rv|NULLOK const char* classname|UV uv +Apd |SV* |sv_setref_nv |NN SV* rv|NULLOK const char* classname|NV nv +Apd |SV* |sv_setref_pv |NN SV* rv|NULLOK const char* classname|NULLOK void* pv +Apd |SV* |sv_setref_pvn |NN SV* rv|NULLOK const char* classname|NN const char* pv|STRLEN n +Apd |void |sv_setpv |NN SV* sv|NULLOK const char* ptr +Apd |void |sv_setpvn |NN SV* sv|NULLOK const char* ptr|STRLEN len +Amdb |void |sv_setsv |NN SV* dsv|NULLOK SV* ssv +Amdb |void |sv_taint |NN SV* sv +ApdR |bool |sv_tainted |NN SV* sv Apd |int |sv_unmagic |NN SV* sv|int type -Apd |void |sv_unref |NN SV* sv +Apdmb |void |sv_unref |NN SV* sv Apd |void |sv_unref_flags |NN SV* sv|U32 flags Apd |void |sv_untaint |NN SV* sv Apd |void |sv_upgrade |NN SV* sv|U32 mt -Apd |void |sv_usepvn |NN SV* sv|char* ptr|STRLEN len +Apd |void |sv_usepvn |NN SV* sv|NULLOK char* ptr|STRLEN len Apd |void |sv_vcatpvfn |NN SV* sv|NN const char* pat|STRLEN patlen \ - |va_list* args|SV** svargs|I32 svmax \ - |bool *maybe_tainted + |NULLOK va_list* args|NULLOK SV** svargs|I32 svmax \ + |NULLOK bool *maybe_tainted Apd |void |sv_vsetpvfn |NN SV* sv|NN const char* pat|STRLEN patlen \ - |va_list* args|SV** svargs|I32 svmax \ - |bool *maybe_tainted -Ap |NV |str_to_version |SV *sv -Ap |SV* |swash_init |const char* pkg|const char* name|SV* listsv|I32 minbits|I32 none -Ap |UV |swash_fetch |SV *sv|const U8 *ptr|bool do_utf8 + |NULLOK va_list* args|NULLOK SV** svargs|I32 svmax \ + |NULLOK bool *maybe_tainted +ApR |NV |str_to_version |NN SV *sv +Ap |SV* |swash_init |NN const char* pkg|NN const char* name|NN SV* listsv|I32 minbits|I32 none +Ap |UV |swash_fetch |NN SV *swash|NN const U8 *ptr|bool do_utf8 Ap |void |taint_env -Ap |void |taint_proper |const char* f|const char* s -Apd |UV |to_utf8_case |NN const U8 *p|NN U8* ustrp|STRLEN *lenp|SV **swash|const char *normal|const char *special -Apd |UV |to_utf8_lower |NN const U8 *p|NN U8* ustrp|STRLEN *lenp -Apd |UV |to_utf8_upper |NN const U8 *p|NN U8* ustrp|STRLEN *lenp -Apd |UV |to_utf8_title |NN const U8 *p|NN U8* ustrp|STRLEN *lenp -Apd |UV |to_utf8_fold |NN const U8 *p|NN U8* ustrp|STRLEN *lenp +Ap |void |taint_proper |NULLOK const char* f|NN const char* s +Apd |UV |to_utf8_case |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp \ + |NN SV **swashp|NN const char *normal|NN const char *special +Apd |UV |to_utf8_lower |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp +Apd |UV |to_utf8_upper |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp +Apd |UV |to_utf8_title |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp +Apd |UV |to_utf8_fold |NN const U8 *p|NN U8* ustrp|NULLOK STRLEN *lenp #if defined(UNLINK_ALL_VERSIONS) -Ap |I32 |unlnk |char* f -#endif -Apd |I32 |unpack_str |const char *pat|const char *patend|const char *s|const char *strbeg|const char *strend|char **new_s|I32 ocnt|U32 flags -Apd |I32 |unpackstring |const char *pat|const char *patend|const char *s|const char *strend|U32 flags -Ap |void |unsharepvn |const char* sv|I32 len|U32 hash -p |void |unshare_hek |HEK* hek -p |void |utilize |int aver|I32 floor|OP* version|OP* idop|OP* arg -Ap |U8* |utf16_to_utf8 |U8* p|U8 *d|I32 bytelen|I32 *newlen -Ap |U8* |utf16_to_utf8_reversed|U8* p|U8 *d|I32 bytelen|I32 *newlen +Ap |I32 |unlnk |NN const char* f +#endif +Apd |I32 |unpack_str |NN const char *pat|NN const char *patend|NN const char *s \ + |NULLOK const char *strbeg|NN const char *strend|NULLOK char **new_s \ + |I32 ocnt|U32 flags +Apd |I32 |unpackstring |NN const char *pat|NN const char *patend|NN const char *s \ + |NN const char *strend|U32 flags +Ap |void |unsharepvn |NULLOK const char* sv|I32 len|U32 hash +p |void |unshare_hek |NULLOK HEK* hek +p |void |utilize |int aver|I32 floor|NULLOK OP* version|NN OP* idop|NULLOK OP* arg +Ap |U8* |utf16_to_utf8 |NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen +Ap |U8* |utf16_to_utf8_reversed|NN U8* p|NN U8 *d|I32 bytelen|NN I32 *newlen AdpPR |STRLEN |utf8_length |NN const U8* s|NN const U8 *e ApdPR |IV |utf8_distance |NN const U8 *a|NN const U8 *b ApdPR |U8* |utf8_hop |NN const U8 *s|I32 off ApMd |U8* |utf8_to_bytes |NN U8 *s|NN STRLEN *len -ApMd |U8* |bytes_from_utf8|const U8 *s|STRLEN *len|bool *is_utf8 -ApMd |U8* |bytes_to_utf8 |const U8 *s|STRLEN *len -Apd |UV |utf8_to_uvchr |const U8 *s|STRLEN* retlen -Apd |UV |utf8_to_uvuni |const U8 *s|STRLEN* retlen -Adp |UV |utf8n_to_uvchr |const U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags -Adp |UV |utf8n_to_uvuni |const U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags +ApMd |U8* |bytes_from_utf8|NN const U8 *s|NN STRLEN *len|NULLOK bool *is_utf8 +ApMd |U8* |bytes_to_utf8 |NN const U8 *s|NN STRLEN *len +Apd |UV |utf8_to_uvchr |NN const U8 *s|NULLOK STRLEN *retlen +Apd |UV |utf8_to_uvuni |NN const U8 *s|NULLOK STRLEN *retlen + +#ifdef EBCDIC +Adp |UV |utf8n_to_uvchr |NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags +#else +Adpbm |UV |utf8n_to_uvchr |NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags +#endif + +Adp |UV |utf8n_to_uvuni |NN const U8 *s|STRLEN curlen|NULLOK STRLEN *retlen|U32 flags + +#ifdef EBCDIC Apd |U8* |uvchr_to_utf8 |NN U8 *d|UV uv -Ap |U8* |uvuni_to_utf8 |NN U8 *d|UV uv +#else +Apdbm |U8* |uvchr_to_utf8 |NN U8 *d|UV uv +#endif + +Apbm |U8* |uvuni_to_utf8 |NN U8 *d|UV uv Ap |U8* |uvchr_to_utf8_flags |NN U8 *d|UV uv|UV flags Apd |U8* |uvuni_to_utf8_flags |NN U8 *d|UV uv|UV flags -Apd |char* |pv_uni_display |SV *dsv|const U8 *spv|STRLEN len \ - |STRLEN pvlim|UV flags -ApdR |char* |sv_uni_display |SV *dsv|SV *ssv|STRLEN pvlim|UV flags -p |void |vivify_defelem |SV* sv -p |void |vivify_ref |SV* sv|U32 to_what -p |I32 |wait4pid |Pid_t pid|int* statusp|int flags -p |U32 |parse_unicode_opts|const char **popt -p |U32 |seed -p |UV |get_hash_seed -p |void |report_evil_fh |const GV *gv|const IO *io|I32 op -pd |void |report_uninit |SV* uninit_sv -Afpd |void |warn |const char* pat|... -Ap |void |vwarn |const char* pat|va_list* args -Afp |void |warner |U32 err|const char* pat|... -Ap |void |vwarner |U32 err|const char* pat|va_list* args -p |void |watch |char** addr -Ap |I32 |whichsig |const char* sig -p |void |write_to_stderr|const char* message|int msglen -p |int |yyerror |const char* s +Apd |char* |pv_uni_display |NN SV *dsv|NN const U8 *spv|STRLEN len|STRLEN pvlim|UV flags +ApdR |char* |sv_uni_display |NN SV *dsv|NN SV *ssv|STRLEN pvlim|UV flags +p |void |vivify_defelem |NN SV* sv +p |void |vivify_ref |NN SV* sv|U32 to_what +p |I32 |wait4pid |Pid_t pid|NN int* statusp|int flags +p |U32 |parse_unicode_opts|NN const char **popt +Ap |U32 |seed +pR |UV |get_hash_seed +p |void |report_evil_fh |NULLOK const GV *gv|NULLOK const IO *io|I32 op +pd |void |report_uninit |NULLOK SV* uninit_sv +Afpd |void |warn |NN const char* pat|... +Ap |void |vwarn |NN const char* pat|NULLOK va_list* args +Afp |void |warner |U32 err|NN const char* pat|... +Ap |void |vwarner |U32 err|NN const char* pat|NULLOK va_list* args +p |void |watch |NN char** addr +Ap |I32 |whichsig |NN const char* sig +p |void |write_to_stderr|NN const char* message|int msglen +p |int |yyerror |NN const char* s p |int |yylex p |int |yyparse -p |int |yywarn |const char* s +p |int |yywarn |NN const char* s #if defined(MYMALLOC) -Ap |void |dump_mstats |char* s -Ap |int |get_mstats |perl_mstats_t *buf|int buflen|int level +Ap |void |dump_mstats |NN char* s +Ap |int |get_mstats |NN perl_mstats_t *buf|int buflen|int level #endif Anpa |Malloc_t|safesysmalloc |MEM_SIZE nbytes Anpa |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size @@ -882,82 +918,82 @@ Anp |Free_t |safesysfree |Malloc_t where #if defined(PERL_GLOBAL_STRUCT) Ap |struct perl_vars *|GetVars Ap |struct perl_vars*|init_global_struct -Ap |void |free_global_struct|struct perl_vars* +Ap |void |free_global_struct|NN struct perl_vars *plvarsp #endif Ap |int |runops_standard Ap |int |runops_debug -Afpd |void |sv_catpvf_mg |SV *sv|const char* pat|... -Apd |void |sv_vcatpvf_mg |SV* sv|const char* pat|va_list* args -Apd |void |sv_catpv_mg |SV *sv|const char *ptr -Apd |void |sv_catpvn_mg |SV *sv|const char *ptr|STRLEN len -Apd |void |sv_catsv_mg |SV *dstr|SV *sstr -Afpd |void |sv_setpvf_mg |SV *sv|const char* pat|... -Apd |void |sv_vsetpvf_mg |SV* sv|const char* pat|va_list* args -Apd |void |sv_setiv_mg |SV *sv|IV i +Afpd |void |sv_catpvf_mg |NN SV *sv|NN const char* pat|... +Apd |void |sv_vcatpvf_mg |NN SV* sv|NN const char* pat|NULLOK va_list* args +Apd |void |sv_catpv_mg |NN SV *sv|NN const char *ptr +Apdbm |void |sv_catpvn_mg |NN SV *sv|NN const char *ptr|STRLEN len +Apdbm |void |sv_catsv_mg |NN SV *dstr|NULLOK SV *sstr +Afpd |void |sv_setpvf_mg |NN SV *sv|NN const char* pat|... +Apd |void |sv_vsetpvf_mg |NN SV* sv|NN const char* pat|NULLOK va_list* args +Apd |void |sv_setiv_mg |NN SV *sv|IV i Apdb |void |sv_setpviv_mg |NN SV *sv|IV iv -Apd |void |sv_setuv_mg |SV *sv|UV u -Apd |void |sv_setnv_mg |SV *sv|NV num -Apd |void |sv_setpv_mg |SV *sv|const char *ptr -Apd |void |sv_setpvn_mg |SV *sv|const char *ptr|STRLEN len -Apd |void |sv_setsv_mg |SV *dstr|SV *sstr -Apd |void |sv_usepvn_mg |SV *sv|char *ptr|STRLEN len -Ap |MGVTBL*|get_vtbl |int vtbl_id -Ap |char* |pv_display |SV *dsv|const char *pv|STRLEN cur|STRLEN len \ +Apd |void |sv_setuv_mg |NN SV *sv|UV u +Apd |void |sv_setnv_mg |NN SV *sv|NV num +Apd |void |sv_setpv_mg |NN SV *sv|NULLOK const char *ptr +Apd |void |sv_setpvn_mg |NN SV *sv|NN const char *ptr|STRLEN len +Apd |void |sv_setsv_mg |NN SV *dstr|NULLOK SV *sstr +Apd |void |sv_usepvn_mg |NN SV *sv|NULLOK char *ptr|STRLEN len +ApR |MGVTBL*|get_vtbl |int vtbl_id +Ap |char* |pv_display |NN SV *dsv|NN const char *pv|STRLEN cur|STRLEN len \ |STRLEN pvlim -Afp |void |dump_indent |I32 level|NN PerlIO *file|const char* pat|... -Ap |void |dump_vindent |I32 level|NN PerlIO *file|const char* pat \ - |va_list *args -Ap |void |do_gv_dump |I32 level|NN PerlIO *file|const char *name|GV *sv -Ap |void |do_gvgv_dump |I32 level|NN PerlIO *file|const char *name|GV *sv -Ap |void |do_hv_dump |I32 level|NN PerlIO *file|const char *name|HV *sv -Ap |void |do_magic_dump |I32 level|NN PerlIO *file|const MAGIC *mg|I32 nest \ +Afp |void |dump_indent |I32 level|NN PerlIO *file|NN const char* pat|... +Ap |void |dump_vindent |I32 level|NN PerlIO *file|NN const char* pat \ + |NULLOK va_list *args +Ap |void |do_gv_dump |I32 level|NN PerlIO *file|NN const char *name|NN GV *sv +Ap |void |do_gvgv_dump |I32 level|NN PerlIO *file|NN const char *name|NN GV *sv +Ap |void |do_hv_dump |I32 level|NN PerlIO *file|NN const char *name|NN HV *sv +Ap |void |do_magic_dump |I32 level|NN PerlIO *file|NN const MAGIC *mg|I32 nest \ |I32 maxnest|bool dumpops|STRLEN pvlim -Ap |void |do_op_dump |I32 level|NN PerlIO *file|const OP *o -Ap |void |do_pmop_dump |I32 level|NN PerlIO *file|const PMOP *pm +Ap |void |do_op_dump |I32 level|NN PerlIO *file|NULLOK const OP *o +Ap |void |do_pmop_dump |I32 level|NN PerlIO *file|NULLOK const PMOP *pm Ap |void |do_sv_dump |I32 level|NN PerlIO *file|NULLOK SV *sv|I32 nest \ |I32 maxnest|bool dumpops|STRLEN pvlim Ap |void |magic_dump |NULLOK const MAGIC *mg Ap |void |reginitcolors -Apd |char* |sv_2pv_nolen |SV* sv -Apd |char* |sv_2pvutf8_nolen|SV* sv -Apd |char* |sv_2pvbyte_nolen|SV* sv -Amdb |char* |sv_pv |SV *sv -Amdb |char* |sv_pvutf8 |SV *sv -Amdb |char* |sv_pvbyte |SV *sv -Amdb |STRLEN |sv_utf8_upgrade|SV *sv -ApdM |bool |sv_utf8_downgrade|SV *sv|bool fail_ok -Apd |void |sv_utf8_encode |SV *sv -ApdM |bool |sv_utf8_decode |SV *sv -Apd |void |sv_force_normal|SV *sv -Apd |void |sv_force_normal_flags|SV *sv|U32 flags +ApdRmb |char* |sv_2pv_nolen |NN SV* sv +ApdRmb |char* |sv_2pvutf8_nolen|NN SV* sv +ApdRmb |char* |sv_2pvbyte_nolen|NN SV* sv +AmdbR |char* |sv_pv |NN SV *sv +AmdbR |char* |sv_pvutf8 |NN SV *sv +AmdbR |char* |sv_pvbyte |NN SV *sv +Amdb |STRLEN |sv_utf8_upgrade|NN SV *sv +ApdM |bool |sv_utf8_downgrade|NN SV *sv|bool fail_ok +Apd |void |sv_utf8_encode |NN SV *sv +ApdM |bool |sv_utf8_decode |NN SV *sv +Apdmb |void |sv_force_normal|NN SV *sv +Apd |void |sv_force_normal_flags|NN SV *sv|U32 flags Ap |void |tmps_grow |I32 n -Apd |SV* |sv_rvweaken |SV *sv -p |int |magic_killbackrefs|SV *sv|MAGIC *mg -Ap |OP* |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block -Ap |CV* |newATTRSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block -Apr |void |newMYSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block -p |OP * |my_attrs |NN OP *o|OP *attrs +Apd |SV* |sv_rvweaken |NN SV *sv +p |int |magic_killbackrefs|NN SV *sv|NN MAGIC *mg +Ap |OP* |newANONATTRSUB |I32 floor|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block +Ap |CV* |newATTRSUB |I32 floor|NULLOK OP *o|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block +Apr |void |newMYSUB |I32 floor|NULLOK OP *o|NULLOK OP *proto|NULLOK OP *attrs|NULLOK OP *block +p |OP * |my_attrs |NN OP *o|NULLOK OP *attrs p |void |boot_core_xsutils #if defined(USE_ITHREADS) -Apa |PERL_CONTEXT*|cx_dup |PERL_CONTEXT* cx|I32 ix|I32 max|CLONE_PARAMS* param -Apa |PERL_SI*|si_dup |PERL_SI* si|CLONE_PARAMS* param -Apa |ANY* |ss_dup |NN PerlInterpreter* proto_perl|CLONE_PARAMS* param -Apa |void* |any_dup |void* v|NN const PerlInterpreter* proto_perl -Apa |HE* |he_dup |HE* e|bool shared|CLONE_PARAMS* param -Apa |HEK* |hek_dup |HEK* e|CLONE_PARAMS* param -Apa |REGEXP*|re_dup |const REGEXP* r|CLONE_PARAMS* param -Apa |PerlIO*|fp_dup |PerlIO* fp|char type|CLONE_PARAMS* param -Apa |DIR* |dirp_dup |DIR* dp -Apa |GP* |gp_dup |GP* gp|CLONE_PARAMS* param -Apa |MAGIC* |mg_dup |NN MAGIC* mg|CLONE_PARAMS* param -Apa |SV* |sv_dup |NN SV* sstr|CLONE_PARAMS* param -Ap |void |rvpv_dup |NN SV* dstr|NN SV *sstr|CLONE_PARAMS* param +ApR |PERL_CONTEXT*|cx_dup |NULLOK PERL_CONTEXT* cx|I32 ix|I32 max|NN CLONE_PARAMS* param +ApR |PERL_SI*|si_dup |NULLOK PERL_SI* si|NN CLONE_PARAMS* param +Apa |ANY* |ss_dup |NN PerlInterpreter* proto_perl|NN CLONE_PARAMS* param +ApR |void* |any_dup |NULLOK void* v|NN const PerlInterpreter* proto_perl +ApR |HE* |he_dup |NULLOK const HE* e|bool shared|NN CLONE_PARAMS* param +ApR |HEK* |hek_dup |NULLOK HEK* e|NN CLONE_PARAMS* param +ApR |REGEXP*|re_dup |NULLOK const REGEXP* r|NN CLONE_PARAMS* param +Ap |PerlIO*|fp_dup |NULLOK PerlIO* fp|char type|NN CLONE_PARAMS* param +ApR |DIR* |dirp_dup |NULLOK DIR* dp +ApR |GP* |gp_dup |NULLOK GP* gp|NN CLONE_PARAMS* param +ApR |MAGIC* |mg_dup |NULLOK MAGIC* mg|NN CLONE_PARAMS* param +ApR |SV* |sv_dup |NULLOK const SV* sstr|NN CLONE_PARAMS* param +Ap |void |rvpv_dup |NN SV* dstr|NN const SV *sstr|NN CLONE_PARAMS* param Apa |PTR_TBL_t*|ptr_table_new -Apa |void* |ptr_table_fetch|NN PTR_TBL_t *tbl|NN const void *sv -Ap |void |ptr_table_store|NN PTR_TBL_t *tbl|const void *oldsv|NN void *newsv +ApR |void* |ptr_table_fetch|NN PTR_TBL_t *tbl|NN const void *sv +Ap |void |ptr_table_store|NN PTR_TBL_t *tbl|NULLOK const void *oldsv|NN void *newsv Ap |void |ptr_table_split|NN PTR_TBL_t *tbl -Ap |void |ptr_table_clear|PTR_TBL_t *tbl -Ap |void |ptr_table_free|PTR_TBL_t *tbl +Ap |void |ptr_table_clear|NULLOK PTR_TBL_t *tbl +Ap |void |ptr_table_free|NULLOK PTR_TBL_t *tbl # if defined(HAVE_INTERP_INTERN) Ap |void |sys_intern_dup |NN struct interp_intern* src|NN struct interp_intern* dst # endif @@ -971,12 +1007,12 @@ ApR |char * |custom_op_name |NN const OP* op ApR |char * |custom_op_desc |NN const OP* op #if defined(PERL_OLD_COPY_ON_WRITE) -pMX |int |sv_release_IVX |SV *sv +pMX |int |sv_release_IVX |NN SV *sv #endif -Adp |void |sv_nosharing |SV * -Adp |void |sv_nolocking |SV * -Adp |void |sv_nounlocking |SV * +Adp |void |sv_nosharing |NULLOK SV *sv +Adpbm |void |sv_nolocking |NULLOK SV *sv +Adpbm |void |sv_nounlocking |NULLOK SV *sv Adp |int |nothreadhook END_EXTERN_C @@ -997,24 +1033,28 @@ s |void |require_errno |NN GV *gv #if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT) s |void |hsplit |NN HV *hv -s |void |hfreeentries |HV *hv +s |void |hfreeentries |NN HV *hv sa |HE* |new_he -s |void |del_he |NN HE *p sa |HEK* |save_hek_flags |NN const char *str|I32 len|U32 hash|int flags s |void |hv_magic_check |NN HV *hv|NN bool *needs_copy|NN bool *needs_store s |void |unshare_hek_or_pvn|NULLOK const HEK* hek|NULLOK const char* str|I32 len|U32 hash sR |HEK* |share_hek_flags|NN const char* sv|I32 len|U32 hash|int flags rs |void |hv_notallowed |int flags|NN const char *key|I32 klen|NN const char *msg s |struct xpvhv_aux*|hv_auxinit|NN HV *hv -sM |SV* |hv_delete_common|HV* tb|SV* key_sv|const char* key|STRLEN klen|int k_flags|I32 d_flags|U32 hash -sM |HE* |hv_fetch_common|HV* tb|SV* key_sv|const char* key|STRLEN klen|int flags|int action|SV* val|U32 hash +sM |SV* |hv_delete_common|NULLOK HV* tb|NULLOK SV* keysv|NULLOK const char* key \ + |STRLEN klen|int k_flags|I32 d_flags|U32 hash +sM |HE* |hv_fetch_common|NULLOK HV* tb|NULLOK SV* keysv|NULLOK const char* key \ + |STRLEN klen|int flags|int action|NULLOK SV* val|U32 hash #endif #if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT) s |void |save_magic |I32 mgs_ix|NN SV *sv s |int |magic_methpack |NN SV *sv|NN const MAGIC *mg|NN const char *meth s |int |magic_methcall |NN SV *sv|NN const MAGIC *mg|NN const char *meth|I32 f \ - |int n|SV *val + |int n|NULLOK SV *val +s |void |restore_magic |NN const void *p +s |void |unwind_handler_stack|NN const void *p + #endif #if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT) @@ -1049,6 +1089,7 @@ pR |OP* |ck_return |NN OP *o pR |OP* |ck_rfun |NN OP *o pR |OP* |ck_rvconst |NN OP *o pR |OP* |ck_sassign |NN OP *o +pR |OP* |ck_say |NN OP *o pR |OP* |ck_select |NN OP *o pR |OP* |ck_shift |NN OP *o pR |OP* |ck_sort |NN OP *o @@ -1060,92 +1101,122 @@ pR |OP* |ck_svconst |NN OP *o pR |OP* |ck_trunc |NN OP *o pR |OP* |ck_unpack |NN OP *o sR |bool |is_handle_constructor|NN const OP *o|I32 numargs -sR |I32 |is_list_assignment|const OP *o +sR |I32 |is_list_assignment|NULLOK const OP *o s |void |cop_free |NN COP *cop -s |OP* |modkids |OP *o|I32 type +s |OP* |modkids |NULLOK OP *o|I32 type s |OP* |scalarboolean |NN OP *o sR |OP* |newDEFSVOP sR |OP* |new_logop |I32 type|I32 flags|NN OP **firstp|NN OP **otherp s |void |simplify_sort |NN OP *o -s |const char* |gv_ename |GV *gv -s |bool |scalar_mod_type|const OP *o|I32 type -s |OP * |my_kid |OP *o|OP *attrs|OP **imopsp -s |OP * |dup_attrlist |OP *o -s |void |apply_attrs |HV *stash|SV *target|OP *attrs|bool for_my -s |void |apply_attrs_my |HV *stash|OP *target|OP *attrs|OP **imopsp +s |const char* |gv_ename |NN GV *gv +s |bool |scalar_mod_type|NN const OP *o|I32 type +s |OP * |my_kid |NULLOK OP *o|NULLOK OP *attrs|NN OP **imopsp +s |OP * |dup_attrlist |NN OP *o +s |void |apply_attrs |NN HV *stash|NN SV *target|NULLOK OP *attrs|bool for_my +s |void |apply_attrs_my |NN HV *stash|NN OP *target|NULLOK OP *attrs|NN OP **imopsp s |void |bad_type |I32 n|NN const char *t|NN const char *name|NN const OP *kid s |void |no_bareword_allowed|NN const OP *o sR |OP* |no_fh_allowed|NN OP *o sR |OP* |too_few_arguments|NN OP *o|NN const char* name sR |OP* |too_many_arguments|NN OP *o|NN const char* name +s |bool |looks_like_bool|NN OP* o +s |OP* |newGIVWHENOP |NULLOK OP* cond|NN OP *block \ + |I32 enter_opcode|I32 leave_opcode \ + |PADOFFSET entertarg +s |OP* |ref_array_or_hash|NULLOK OP* cond #endif #if defined(PL_OP_SLAB_ALLOC) -ApR |void* |Slab_Alloc |int m|size_t sz -Ap |void |Slab_Free |void *op +Apa |void* |Slab_Alloc |int m|size_t sz +Ap |void |Slab_Free |NN void *op #endif #if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT) s |void |find_beginning -s |void |forbid_setid |const char * s -s |void |incpush |const char *dir|bool addsubdirs|bool addoldvers|bool usesep|bool canrelocate +s |void |forbid_setid |NN const char * s +s |void |incpush |NULLOK const char *dir|bool addsubdirs|bool addoldvers|bool usesep|bool canrelocate s |void |init_interp s |void |init_ids s |void |init_lexer s |void |init_main_stash s |void |init_perllib -s |void |init_postdump_symbols|int|char **|char ** +s |void |init_postdump_symbols|int argc|NN char **argv|NULLOK char **env s |void |init_predump_symbols rs |void |my_exit_jump s |void |nuke_stacks -s |void |open_script |const char *scriptname|bool dosearch|SV *sv -s |void |usage |const char *name -s |void |validate_suid |const char *validarg|const char *scriptname +s |void |open_script |NN const char *scriptname|bool dosearch|NN SV *sv +s |void |usage |NN const char *name +s |void |validate_suid |NN const char *validarg|NN const char *scriptname # if defined(IAMSUID) s |int |fd_on_nosuid_fs|int fd # endif -s |void* |parse_body |char **env|XSINIT_t xsinit +s |void* |parse_body |NULLOK char **env|XSINIT_t xsinit rs |void |run_body |I32 oldscope -s |void |call_body |const OP *myop|bool is_eval -s |void* |call_list_body |CV *cv +s |void |call_body |NN const OP *myop|bool is_eval +s |void* |call_list_body |NN CV *cv +s |SV * |incpush_if_exists|NN SV *dir #endif #if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT) -sR |SV* |refto |SV* sv +sR |SV* |refto |NN SV* sv #endif #if defined(PERL_IN_PP_PACK_C) || defined(PERL_DECL_PROT) -s |I32 |unpack_rec |struct tempsym* symptr|const char *s|const char *strbeg|const char *strend|const char **new_s -s |SV ** |pack_rec |SV *cat|struct tempsym* symptr|SV **beglist|SV **endlist +s |I32 |unpack_rec |NN struct tempsym* symptr|NN const char *s \ + |NN const char *strbeg|NN const char *strend|NULLOK const char **new_s +s |SV ** |pack_rec |NN SV *cat|NN struct tempsym* symptr|NN SV **beglist|NN SV **endlist s |SV* |mul128 |NN SV *sv|U8 m s |I32 |measure_struct |NN struct tempsym* symptr s |bool |next_symbol |NN struct tempsym* symptr sR |SV* |is_an_int |NN const char *s|STRLEN l s |int |div128 |NN SV *pnum|NN bool *done s |const char *|group_end |NN const char *pat|NN const char *patend|char ender -s |const char *|get_num |NN const char *ppat|NN I32 *lenptr +sR |const char *|get_num |NN const char *ppat|NN I32 *lenptr +ns |bool |need_utf8 |NN const char *pat|NN const char *patend +ns |char |first_symbol |NN const char *pat|NN const char *patend +sR |char * |sv_exp_grow |NN SV *sv|STRLEN needed #endif #if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT) -sR |OP* |docatch |OP *o +sR |OP* |docatch |NULLOK OP *o s |void |docatch_body -sR |OP* |dofindlabel |OP *o|const char *label|OP **opstack|OP **oplimit -sR |OP* |doparseform |SV *sv +sR |OP* |dofindlabel |NN OP *o|NN const char *label|NN OP **opstack|NN OP **oplimit +sR |OP* |doparseform |NN SV *sv snR |bool |num_overflow |NV value|I32 fldsize|I32 frcsize sR |I32 |dopoptoeval |I32 startingblock +sR |I32 |dopoptogiven |I32 startingblock sR |I32 |dopoptolabel |NN const char *label sR |I32 |dopoptoloop |I32 startingblock sR |I32 |dopoptosub |I32 startingblock -sR |I32 |dopoptosub_at |const PERL_CONTEXT* cxstk|I32 startingblock -s |void |save_lines |AV *array|SV *sv -sR |OP* |doeval |int gimme|OP** startop|CV* outside|U32 seq -sR |PerlIO *|doopen_pm |const char *name|const char *mode +sR |I32 |dopoptosub_at |NN const PERL_CONTEXT* cxstk|I32 startingblock +sR |I32 |dopoptowhen |I32 startingblock +s |void |save_lines |NULLOK AV *array|NN SV *sv +sR |OP* |doeval |int gimme|NULLOK OP** startop|NULLOK CV* outside|U32 seq +sR |PerlIO *|check_type_and_open|NN const char *name|NN const char *mode +sR |PerlIO *|doopen_pm |NN const char *name|NN const char *mode sR |bool |path_is_absolute|NN const char *name +sR |I32 |run_user_filter|int idx|NN SV *buf_sv|int maxlen +sR |PMOP* |make_matcher |NN regexp* re +sR |bool |matcher_matches_sv|NN PMOP* matcher|NN SV* sv +s |void |destroy_matcher|NN PMOP* matcher +s |OP* |do_smartmatch |NULLOK HV* seen_this|NULLOK HV* seen_other #endif #if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT) s |void |do_oddball |NN HV *hash|NN SV **relem|NN SV **firstrelem sR |CV* |get_db_sub |NN SV **svp|NN CV *cv -sR |SV* |method_common |NN SV* meth|U32* hashp +sR |SV* |method_common |NN SV* meth|NULLOK U32* hashp +#endif + +#if defined(PERL_IN_PP_SORT_C) || defined(PERL_DECL_PROT) +s |I32 |sv_ncmp |NN SV *a|NN SV *b +s |I32 |sv_i_ncmp |NN SV *a|NN SV *b +s |I32 |amagic_ncmp |NN SV *a|NN SV *b +s |I32 |amagic_i_ncmp |NN SV *a|NN SV *b +s |I32 |amagic_cmp |NN SV *a|NN SV *b +s |I32 |amagic_cmp_locale|NN SV *a|NN SV *b +s |I32 |sortcv |NN SV *a|NN SV *b +s |I32 |sortcv_xsub |NN SV *a|NN SV *b +s |I32 |sortcv_stacked |NN SV *a|NN SV *b #endif #if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT) @@ -1170,31 +1241,31 @@ Es |void |reginsert |NN struct RExC_state_t *state|U8 op|NN regnode *opnd Es |void |regoptail |NN struct RExC_state_t *state|NN regnode *p|NN regnode *val Es |void |regtail |NN struct RExC_state_t *state|NN regnode *p|NN regnode *val Es |char* |regwhite |NN char *p|NN const char *e -Es |char* |nextchar |NN struct RExC_state_t* +Es |char* |nextchar |NN struct RExC_state_t *state # ifdef DEBUGGING -Es |regnode*|dumpuntil |regnode *start|regnode *node \ - |regnode *last|SV* sv|I32 l +Es |regnode*|dumpuntil |NN regnode *start|NN regnode *node \ + |NULLOK regnode *last|NN SV* sv|I32 l Es |void |put_byte |NN SV* sv|int c # endif -Es |void |scan_commit |struct RExC_state_t*|struct scan_data_t *data -Es |void |cl_anything |NN struct RExC_state_t*|NN struct regnode_charclass_class *cl +Es |void |scan_commit |NN struct RExC_state_t* state|NN struct scan_data_t *data +Es |void |cl_anything |NN struct RExC_state_t* state|NN struct regnode_charclass_class *cl Es |int |cl_is_anything |NN const struct regnode_charclass_class *cl -Es |void |cl_init |NN struct RExC_state_t*|NN struct regnode_charclass_class *cl -Es |void |cl_init_zero |NN struct RExC_state_t*|NN struct regnode_charclass_class *cl +Es |void |cl_init |NN struct RExC_state_t* state|NN struct regnode_charclass_class *cl +Es |void |cl_init_zero |NN struct RExC_state_t* state|NN struct regnode_charclass_class *cl Es |void |cl_and |NN struct regnode_charclass_class *cl \ - |const struct regnode_charclass_class *and_with -Es |void |cl_or |NN struct RExC_state_t*|NN struct regnode_charclass_class *cl \ + |NN const struct regnode_charclass_class *and_with +Es |void |cl_or |NN struct RExC_state_t* state|NN struct regnode_charclass_class *cl \ |NN const struct regnode_charclass_class *or_with -Es |I32 |study_chunk |struct RExC_state_t*|regnode **scanp|I32 *deltap \ - |regnode *last|struct scan_data_t *data \ +Es |I32 |study_chunk |NN struct RExC_state_t* state|NN regnode **scanp \ + |NN I32 *deltap|NN regnode *last|NULLOK struct scan_data_t *data \ |U32 flags|U32 depth -Es |I32 |add_data |struct RExC_state_t*|I32 n|const char *s -rs |void |re_croak2 |const char* pat1|const char* pat2|... -Es |I32 |regpposixcc |struct RExC_state_t*|I32 value -Es |void |checkposixcc |struct RExC_state_t* +Es |I32 |add_data |NN struct RExC_state_t* state|I32 n|NN const char *s +rs |void |re_croak2 |NN const char* pat1|NN const char* pat2|... +Es |I32 |regpposixcc |NN struct RExC_state_t* state|I32 value +Es |void |checkposixcc |NN struct RExC_state_t* state -Es |I32 |make_trie |struct RExC_state_t*|regnode *startbranch \ - |regnode *first|regnode *last|regnode *tail \ +Es |I32 |make_trie |NN struct RExC_state_t* state|NN regnode *startbranch \ + |NN regnode *first|NN regnode *last|NN regnode *tail \ |U32 flags #endif @@ -1202,15 +1273,15 @@ Es |I32 |make_trie |struct RExC_state_t*|regnode *startbranch \ ERs |I32 |regmatch |NN regnode *prog ERs |I32 |regrepeat |NN const regnode *p|I32 max ERs |I32 |regrepeat_hard |NN regnode *p|I32 max|NN I32 *lp -ERs |I32 |regtry |regexp *prog|char *startpos -ERs |bool |reginclass |NN const regnode *n|NN const U8 *p|STRLEN *lenp|bool do_utf8sv_is_utf8 +ERs |I32 |regtry |NN regexp *prog|NN char *startpos +ERs |bool |reginclass |NN const regnode *n|NN const U8 *p|NULLOK STRLEN *lenp\ + |bool do_utf8sv_is_utf8 Es |CHECKPOINT|regcppush |I32 parenfloor Es |char*|regcppop -Es |char*|regcp_set_to |I32 ss -Es |void |cache_re |regexp *prog -ERs |U8* |reghop |U8 *pos|I32 off -ERs |U8* |reghop3 |U8 *pos|I32 off|U8 *lim -ERs |U8* |reghopmaybe |U8 *pos|I32 off +Es |void |cache_re |NN regexp *prog +ERs |U8* |reghop |NN U8 *pos|I32 off +ERs |U8* |reghop3 |NN U8 *pos|I32 off|NN U8 *lim +ERs |U8* |reghopmaybe |NN U8 *pos|I32 off ERs |U8* |reghopmaybe3 |NN U8 *pos|I32 off|NN U8 *lim ERs |char* |find_byclass |NN regexp * prog|NN regnode *c|NN char *s|NN const char *strend|I32 norun Es |void |to_utf8_substr |NN regexp * prog @@ -1219,34 +1290,39 @@ Es |void |to_byte_substr |NN regexp * prog #if defined(PERL_IN_DUMP_C) || defined(PERL_DECL_PROT) s |CV* |deb_curcv |I32 ix -s |void |debprof |const OP *o +s |void |debprof |NN const OP *o +s |void |sequence |NULLOK const OP *o +s |UV |sequence_num |NULLOK const OP *o #endif #if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT) -s |SV* |save_scalar_at |SV **sptr +s |SV* |save_scalar_at |NN SV **sptr +#endif + +#if defined(PERL_IN_GV_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_PAD_C) || defined(PERL_DECL_PROT) +po |void |sv_add_backref |NN SV *tsv|NN SV *sv +#endif + +#if defined(PERL_IN_HV_C) || defined(PERL_IN_MG_C) || defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT) +poM |int |sv_kill_backrefs |NN SV *sv|NN AV *av #endif #if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT) -sR |IV |asIV |NN SV* sv -sR |UV |asUV |NN SV* sv +nsR |char * |uiv_2buf |NN char *buf|IV iv|UV uv|int is_uv|NN char **peob s |void |sv_unglob |NN SV* sv s |void |not_a_number |NN SV *sv s |I32 |visit |NN SVFUNC_t f|U32 flags|U32 mask -s |void |sv_add_backref |NN SV *tsv|NN SV *sv -s |void |sv_del_backref |NN SV *sv -sR |SV * |varname |NULLOK GV *gv|NN const char *gvtype|PADOFFSET targ \ +s |void |sv_del_backref |NN SV *target|NN SV *ref +sR |SV * |varname |NULLOK GV *gv|const char gvtype|PADOFFSET targ \ |NULLOK SV *keyname|I32 aindex|int subscript_type # ifdef DEBUGGING -s |void |del_sv |SV *p +s |void |del_sv |NN SV *p # endif # if !defined(NV_PRESERVES_UV) -s |int |sv_2iuv_non_preserve |SV *sv|I32 numtype +s |int |sv_2iuv_non_preserve |NN SV *sv|I32 numtype # endif sR |I32 |expect_number |NN char** pattern # -# if defined(USE_ITHREADS) -s |SV* |gv_share |SV *sv|CLONE_PARAMS *param -# endif s |bool |utf8_mg_pos |NN SV *sv|NN MAGIC **mgp|NN STRLEN **cachep \ |I32 i|NN I32 *offsetp|I32 uoff \ |NN const U8 **sp|NN const U8 *start \ @@ -1254,77 +1330,82 @@ s |bool |utf8_mg_pos |NN SV *sv|NN MAGIC **mgp|NN STRLEN **cachep \ s |bool |utf8_mg_pos_init |NN SV *sv|NN MAGIC **mgp \ |NN STRLEN **cachep|I32 i|I32 offsetp \ |NN const U8 *s|NN const U8 *start +s |char * |stringify_regexp|NN SV *sv|NN MAGIC *mg|NULLOK STRLEN *lp +sn |char * |F0convert |NV nv|NN char *endbuf|NN STRLEN *len #if defined(PERL_OLD_COPY_ON_WRITE) -sM |void |sv_release_COW |SV *sv|const char *pvx|STRLEN len|SV *after +sM |void |sv_release_COW |NN SV *sv|NN const char *pvx|STRLEN len|NN SV *after #endif #endif #if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT) s |void |check_uni s |void |force_next |I32 type -s |char* |force_version |char *start|int guessing -s |char* |force_word |char *start|int token|int check_keyword \ +s |char* |force_version |NN char *start|int guessing +s |char* |force_word |NN char *start|int token|int check_keyword \ |int allow_pack|int allow_tick -s |SV* |tokeq |SV *sv +s |SV* |tokeq |NN SV *sv s |int |pending_ident -s |char* |scan_const |NN char *start -s |char* |scan_formline |NN char *s -s |char* |scan_heredoc |NN char *s +sR |char* |scan_const |NN char *start +sR |char* |scan_formline |NN char *s +sR |char* |scan_heredoc |NN char *s s |char* |scan_ident |NN char *s|NN const char *send|NN char *dest \ |STRLEN destlen|I32 ck_uni -s |char* |scan_inputsymbol|char *start -s |char* |scan_pat |char *start|I32 type -s |char* |scan_str |char *start|int keep_quoted|int keep_delims -s |char* |scan_subst |char *start -s |char* |scan_trans |char *start -s |char* |scan_word |char *s|char *dest|STRLEN destlen \ - |int allow_package|STRLEN *slp -s |char* |skipspace |char *s -s |char* |swallow_bom |U8 *s +sR |char* |scan_inputsymbol|NN char *start +sR |char* |scan_pat |NN char *start|I32 type +sR |char* |scan_str |NN char *start|int keep_quoted|int keep_delims +sR |char* |scan_subst |NN char *start +sR |char* |scan_trans |NN char *start +s |char* |scan_word |NN char *s|NN char *dest|STRLEN destlen \ + |int allow_package|NN STRLEN *slp +sR |char* |skipspace |NN char *s +sR |char* |swallow_bom |NN U8 *s s |void |checkcomma |NN char *s|NN const char *name|NN const char *what -s |void |force_ident |const char *s|int kind -s |void |incline |char *s -s |int |intuit_method |char *s|GV *gv -s |int |intuit_more |char *s -s |I32 |lop |I32 f|int x|char *s -rs |void |missingterm |char *s -s |void |no_op |const char *what|char *s +s |bool |feature_is_enabled|NN char* name|STRLEN namelen +s |void |force_ident |NN const char *s|int kind +s |void |incline |NN char *s +s |int |intuit_method |NN char *s|NULLOK GV *gv|NULLOK CV *cv +s |int |intuit_more |NN char *s +s |I32 |lop |I32 f|int x|NN char *s +rs |void |missingterm |NULLOK char *s +s |void |no_op |NN const char *what|NULLOK char *s s |void |set_csh -s |I32 |sublex_done -s |I32 |sublex_push -s |I32 |sublex_start -s |char * |filter_gets |SV *sv|PerlIO *fp|STRLEN append -s |HV * |find_in_my_stash|const char *pkgname|I32 len -s |SV* |new_constant |const char *s|STRLEN len|const char *key|SV *sv \ - |SV *pv|const char *type -# if defined(DEBUGGING) -s |int |tokereport |const char *s|I32 rv -# endif +sR |I32 |sublex_done +sR |I32 |sublex_push +sR |I32 |sublex_start +sR |char * |filter_gets |NN SV *sv|NN PerlIO *fp|STRLEN append +sR |HV * |find_in_my_stash|NN const char *pkgname|I32 len +sR |char * |tokenize_use |int is_use|NN char *s +s |SV* |new_constant |NULLOK const char *s|STRLEN len|NN const char *key|NN SV *sv \ + |NULLOK SV *pv|NULLOK const char *type s |int |ao |int toketype -s |void |depcom s |const char*|incl_perldb -#if 0 -s |I32 |utf16_textfilter|int idx|SV *sv|int maxlen -s |I32 |utf16rev_textfilter|int idx|SV *sv|int maxlen -#endif # if defined(PERL_CR_FILTER) -s |I32 |cr_textfilter |int idx|SV *sv|int maxlen +s |I32 |cr_textfilter |int idx|NULLOK SV *sv|int maxlen +s |void |strip_return |NN SV *sv +# endif +# if defined(DEBUGGING) +s |int |tokereport |I32 rv # endif #endif #if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT) -s |SV*|isa_lookup |HV *stash|const char *name|HV *name_stash|int len|int level +s |SV*|isa_lookup |NULLOK HV *stash|NN const char *name|NULLOK HV *name_stash|int len|int level #endif #if defined(PERL_IN_LOCALE_C) || defined(PERL_DECL_PROT) #if defined(USE_LOCALE_NUMERIC) || defined(USE_LOCALE_COLLATE) -s |char* |stdize_locale |char* locs +s |char* |stdize_locale |NN char* locs #endif #endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) -s |COP* |closest_cop |COP *cop|OP *o +s |COP* |closest_cop |NN COP *cop|NULLOK const OP *o s |SV* |mess_alloc +s |const char *|vdie_croak_common|NULLOK const char *pat|NULLOK va_list *args \ + |NULLOK STRLEN *msglen|NULLOK I32* utf8 +s |bool |vdie_common |NULLOK const char *message|STRLEN msglen\ + |I32 utf8|bool warn +sr |char * |write_no_mem #endif #if defined(PERL_IN_NUMERIC_C) || defined(PERL_DECL_PROT) @@ -1333,95 +1414,100 @@ sn |NV|mulexp10 |NV value|I32 exponent #if defined(PERL_IN_UTF8_C) || defined(PERL_DECL_PROT) s |STRLEN |is_utf8_char_slow|NN const U8 *s|const STRLEN len +sR |bool |is_utf8_common |NN const U8 *const p|NN SV **swash|NN const char * const swashname +sR |SV* |swash_get |NN SV* swash|UV start|UV span #endif START_EXTERN_C Apd |void |sv_setsv_flags |NN SV* dsv|NULLOK SV* ssv|I32 flags Apd |void |sv_catpvn_flags|NN SV* sv|NN const char* ptr|STRLEN len|I32 flags -Apd |void |sv_catsv_flags |NN SV* dsv|SV* ssv|I32 flags +Apd |void |sv_catsv_flags |NN SV* dsv|NULLOK SV* ssv|I32 flags Apd |STRLEN |sv_utf8_upgrade_flags|NN SV *sv|I32 flags -Apd |char* |sv_pvn_force_flags|SV* sv|STRLEN* lp|I32 flags +Apd |char* |sv_pvn_force_flags|NN SV* sv|NULLOK STRLEN* lp|I32 flags Apd |void |sv_copypv |NN SV* dsv|NN SV* ssv Ap |char* |my_atof2 |NN const char *s|NN NV* value Apn |int |my_socketpair |int family|int type|int protocol|int fd[2] #ifdef PERL_OLD_COPY_ON_WRITE -pMXE |SV* |sv_setsv_cow |SV* dsv|SV* ssv +pMXE |SV* |sv_setsv_cow |NN SV* dsv|NN SV* ssv #endif #if defined(USE_PERLIO) && !defined(USE_SFIO) -Ap |int |PerlIO_close |PerlIO *f -Ap |int |PerlIO_fill |PerlIO *f -Ap |int |PerlIO_fileno |PerlIO *f -Ap |int |PerlIO_eof |PerlIO *f -Ap |int |PerlIO_error |PerlIO *f -Ap |int |PerlIO_flush |PerlIO *f -Ap |void |PerlIO_clearerr |PerlIO *f -Ap |void |PerlIO_set_cnt |PerlIO *f|int cnt -Ap |void |PerlIO_set_ptrcnt |PerlIO *f|NN STDCHAR *ptr|int cnt -Ap |void |PerlIO_setlinebuf |PerlIO *f -Ap |SSize_t|PerlIO_read |PerlIO *f|NN void *buf|Size_t count -Ap |SSize_t|PerlIO_write |PerlIO *f|NN const void *buf|Size_t count -Ap |SSize_t|PerlIO_unread |PerlIO *f|NN const void *buf|Size_t count -Ap |Off_t |PerlIO_tell |PerlIO *f -Ap |int |PerlIO_seek |PerlIO *f|Off_t offset|int whence - -Ap |STDCHAR *|PerlIO_get_base |PerlIO *f -Ap |STDCHAR *|PerlIO_get_ptr |PerlIO *f -Ap |int |PerlIO_get_bufsiz |PerlIO *f -Ap |int |PerlIO_get_cnt |PerlIO *f - -Ap |PerlIO *|PerlIO_stdin -Ap |PerlIO *|PerlIO_stdout -Ap |PerlIO *|PerlIO_stderr +Ap |int |PerlIO_close |NULLOK PerlIO *f +Ap |int |PerlIO_fill |NULLOK PerlIO *f +Ap |int |PerlIO_fileno |NULLOK PerlIO *f +Ap |int |PerlIO_eof |NULLOK PerlIO *f +Ap |int |PerlIO_error |NULLOK PerlIO *f +Ap |int |PerlIO_flush |NULLOK PerlIO *f +Ap |void |PerlIO_clearerr |NULLOK PerlIO *f +Ap |void |PerlIO_set_cnt |NULLOK PerlIO *f|int cnt +Ap |void |PerlIO_set_ptrcnt |NULLOK PerlIO *f|NN STDCHAR *ptr|int cnt +Ap |void |PerlIO_setlinebuf |NULLOK PerlIO *f +Ap |SSize_t|PerlIO_read |NULLOK PerlIO *f|NN void *buf|Size_t count +Ap |SSize_t|PerlIO_write |NULLOK PerlIO *f|NN const void *buf|Size_t count +Ap |SSize_t|PerlIO_unread |NULLOK PerlIO *f|NN const void *buf|Size_t count +Ap |Off_t |PerlIO_tell |NULLOK PerlIO *f +Ap |int |PerlIO_seek |NULLOK PerlIO *f|Off_t offset|int whence + +Ap |STDCHAR *|PerlIO_get_base |NULLOK PerlIO *f +Ap |STDCHAR *|PerlIO_get_ptr |NULLOK PerlIO *f +ApR |int |PerlIO_get_bufsiz |NULLOK PerlIO *f +ApR |int |PerlIO_get_cnt |NULLOK PerlIO *f + +ApR |PerlIO *|PerlIO_stdin +ApR |PerlIO *|PerlIO_stdout +ApR |PerlIO *|PerlIO_stderr #endif /* PERLIO_LAYERS */ p |void |deb_stack_all #ifdef PERL_IN_DEB_C -s |void |deb_stack_n |SV** stack_base|I32 stack_min \ +s |void |deb_stack_n |NN SV** stack_base|I32 stack_min \ |I32 stack_max|I32 mark_min|I32 mark_max #endif pda |PADLIST*|pad_new |int flags -pd |void |pad_undef |CV* cv +pd |void |pad_undef |NN CV* cv pd |PADOFFSET|pad_add_name |NN const char *name\ - |HV* typestash|HV* ourstash \ - |bool clone -pd |PADOFFSET|pad_add_anon |SV* sv|OPCODE op_type + |NULLOK HV* typestash|NULLOK HV* ourstash|bool clone +pd |PADOFFSET|pad_add_anon |NN SV* sv|OPCODE op_type pd |void |pad_check_dup |NN const char* name|bool is_our|NN const HV* ourstash #ifdef DEBUGGING pd |void |pad_setsv |PADOFFSET po|NN SV* sv #endif pd |void |pad_block_start|int full pd |void |pad_tidy |padtidy_type type -pd |void |do_dump_pad |I32 level|NN PerlIO *file|PADLIST *padlist|int full -pd |void |pad_fixup_inner_anons|NN PADLIST *padlist|CV *old_cv|CV *new_cv +pd |void |do_dump_pad |I32 level|NN PerlIO *file|NULLOK PADLIST *padlist|int full +pd |void |pad_fixup_inner_anons|NN PADLIST *padlist|NN CV *old_cv|NN CV *new_cv -pd |void |pad_push |NN PADLIST *padlist|int depth +pdX |void |pad_push |NN PADLIST *padlist|int depth pR |HV* |pad_compname_type|const PADOFFSET po #if defined(PERL_IN_PAD_C) || defined(PERL_DECL_PROT) -sd |PADOFFSET|pad_findlex |const char *name|const CV* cv|U32 seq|int warn \ - |SV** out_capture|SV** out_name_sv \ - |int *out_flags +sd |PADOFFSET|pad_findlex |NN const char *name|NN const CV* cv|U32 seq|int warn \ + |NULLOK SV** out_capture|NN SV** out_name_sv \ + |NN int *out_flags # if defined(DEBUGGING) sd |void |cv_dump |NN const CV *cv|NN const char *title # endif #endif -pdR |CV* |find_runcv |U32 *db_seqp +pdR |CV* |find_runcv |NULLOK U32 *db_seqp p |void |free_tied_hv_pool #if defined(DEBUGGING) -p |int |get_debug_opts |const char **s|bool givehelp +pR |int |get_debug_opts |NN const char **s|bool givehelp #endif -Ap |void |save_set_svflags|SV* sv|U32 mask|U32 val +Ap |void |save_set_svflags|NULLOK SV* sv|U32 mask|U32 val Apod |void |hv_assert |NN HV* tb ApdR |SV* |hv_scalar |NN HV* hv ApoR |I32* |hv_riter_p |NN HV* hv ApoR |HE** |hv_eiter_p |NN HV* hv Apo |void |hv_riter_set |NN HV* hv|I32 riter -Apo |void |hv_eiter_set |NN HV* hv|HE* eiter -Apo |void |hv_name_set |NN HV* hv|const char *name|I32 len|int flags +Apo |void |hv_eiter_set |NN HV* hv|NULLOK HE* eiter +Ap |void |hv_name_set |NN HV* hv|NULLOK const char *name|I32 len|int flags +poM |AV** |hv_backreferences_p |NN HV* hv +#if defined(PERL_IN_DUMP_C) || defined(PERL_IN_HV_C) || defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT) +poM |void |hv_kill_backrefs |NN HV* hv +#endif Apd |void |hv_clear_placeholders |NN HV* hb ApoR |I32* |hv_placeholders_p |NN HV* hv ApoR |I32 |hv_placeholders_get |NN HV* hv @@ -1429,7 +1515,7 @@ Apo |void |hv_placeholders_set |NN HV* hv|I32 ph p |SV* |magic_scalarpack|NN HV* hv|NN MAGIC* mg #ifdef PERL_IN_SV_C -sMd |SV* |find_uninit_var|OP* obase|SV* uninit_sv|bool top +sMd |SV* |find_uninit_var|NULLOK OP* obase|NULLOK SV* uninit_sv|bool top #endif #ifdef PERL_NEED_MY_HTOLE16 @@ -1506,14 +1592,37 @@ np |long |my_htobel |long n np |long |my_betohl |long n #endif -np |void |my_swabn |void* ptr|int n +np |void |my_swabn |NN void* ptr|int n -Ap |GV* |gv_fetchpvn_flags|const char* name|STRLEN len|I32 flags|I32 sv_type -Ap |GV* |gv_fetchsv|SV *name|I32 flags|I32 sv_type -dpR |bool |is_gv_magical_sv|SV *name|U32 flags +Ap |GV* |gv_fetchpvn_flags|NN const char* name|STRLEN len|I32 flags|I32 sv_type +Ap |GV* |gv_fetchsv|NN SV *name|I32 flags|I32 sv_type +dpR |bool |is_gv_magical_sv|NN SV *name|U32 flags ApR |bool |stashpv_hvname_match|NN const COP *cop|NN const HV *hv +#ifdef DEBUG_LEAKING_SCALARS_FORK_DUMP +p |void |dump_sv_child |NN SV *sv +#endif + +#ifdef PERL_DONT_CREATE_GVSV +Ap |GV* |gv_SVadd |NN GV* gv +#endif +Apo |bool |ckwarn |U32 w +Apo |bool |ckwarn_d |U32 w + +p |void |offer_nice_chunk |NN void *chunk|U32 chunk_size + +#ifndef SPRINTF_RETURNS_STRLEN +Apnod |int |my_sprintf |NN char *buffer|NN const char *pat|... +#endif + +px |void |my_clearenv + +#ifdef PERL_IMPLICIT_CONTEXT +Apo |void* |my_cxt_init |NN int *index|size_t size +#endif + + END_EXTERN_C /* * ex: set ts=8 sts=4 sw=4 noet: diff --git a/ext/Devel/PPPort/parts/inc/MY_CXT b/ext/Devel/PPPort/parts/inc/MY_CXT index 3592d6c..36d4d61 100644 --- a/ext/Devel/PPPort/parts/inc/MY_CXT +++ b/ext/Devel/PPPort/parts/inc/MY_CXT @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 11 $ +## $Revision: 13 $ ## $Author: mhx $ -## $Date: 2005/03/10 18:08:41 +0100 $ +## $Date: 2006/01/14 18:08:03 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## @@ -61,7 +61,7 @@ _aMY_CXT * case below uses it to declare the data as static. */ #define START_MY_CXT -#if (PERL_VERSION < 4 || (PERL_VERSION == 4 && PERL_SUBVERSION < 68 )) +#if { VERSION < 5.004_68 } /* Fetches the SV that keeps the per-interpreter data. */ #define dMY_CXT_SV \ SV *my_cxt_sv = get_sv(MY_CXT_KEY, FALSE) diff --git a/ext/Devel/PPPort/parts/inc/SvPV b/ext/Devel/PPPort/parts/inc/SvPV index bb4c0f5..e35bef4 100644 --- a/ext/Devel/PPPort/parts/inc/SvPV +++ b/ext/Devel/PPPort/parts/inc/SvPV @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 11 $ +## $Revision: 13 $ ## $Author: mhx $ -## $Date: 2005/03/10 18:08:41 +0100 $ +## $Date: 2006/01/14 18:08:01 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## @@ -118,7 +118,7 @@ SvPVbyte(sv) const char *str; CODE: str = SvPVbyte(sv, len); - RETVAL = strEQ(str, "mhx") ? len : -1; + RETVAL = strEQ(str, "mhx") ? (IV) len : (IV) -1; OUTPUT: RETVAL diff --git a/ext/Devel/PPPort/parts/inc/Sv_set b/ext/Devel/PPPort/parts/inc/Sv_set new file mode 100644 index 0000000..2463478 --- /dev/null +++ b/ext/Devel/PPPort/parts/inc/Sv_set @@ -0,0 +1,99 @@ +################################################################################ +## +## $Revision: 3 $ +## $Author: mhx $ +## $Date: 2006/01/14 18:07:58 +0100 $ +## +################################################################################ +## +## Version 3.x, Copyright (C) 2004-2006, 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. +## +################################################################################ + +=provides + +__UNDEFINED__ + +=implementation + +__UNDEFINED__ SvMAGIC_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ + (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END + +#if { VERSION < 5.9.3 } + +__UNDEFINED__ SvPVX_const(sv) ((const char*) (0 + SvPVX(sv))) +__UNDEFINED__ SvPVX_mutable(sv) (0 + SvPVX(sv)) + +__UNDEFINED__ SvRV_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ + (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END + +#else + +__UNDEFINED__ SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv)) +__UNDEFINED__ SvPVX_mutable(sv) ((sv)->sv_u.svu_pv) + +__UNDEFINED__ SvRV_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) >= SVt_RV); \ + ((sv)->sv_u.svu_rv = (val)); } STMT_END + +#endif + +__UNDEFINED__ SvSTASH_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \ + (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END + +#if { VERSION < 5.004 } + +__UNDEFINED__ SvUV_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ + (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END + +#else + +__UNDEFINED__ SvUV_set(sv, val) \ + STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \ + (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END + +#endif + +=xsubs + +IV +TestSvUV_set(sv, val) + SV *sv + UV val + CODE: + SvUV_set(sv, val); + RETVAL = SvUVX(sv) == val ? 42 : -1; + OUTPUT: + RETVAL + +IV +TestSvPVX_const(sv) + SV *sv + CODE: + RETVAL = strEQ(SvPVX_const(sv), "mhx") ? 43 : -1; + OUTPUT: + RETVAL + +IV +TestSvPVX_mutable(sv) + SV *sv + CODE: + RETVAL = strEQ(SvPVX_mutable(sv), "mhx") ? 44 : -1; + OUTPUT: + RETVAL + +=tests plan => 3 + +my $foo = 5; +ok(&Devel::PPPort::TestSvUV_set($foo, 12345), 42); +ok(&Devel::PPPort::TestSvPVX_const("mhx"), 43); +ok(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44); diff --git a/ext/Devel/PPPort/parts/inc/call b/ext/Devel/PPPort/parts/inc/call index bffb313..a78373d 100644 --- a/ext/Devel/PPPort/parts/inc/call +++ b/ext/Devel/PPPort/parts/inc/call @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 8 $ +## $Revision: 9 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:51 +0100 $ +## $Date: 2006/01/14 18:07:59 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/cop b/ext/Devel/PPPort/parts/inc/cop index b12fdfb..e64a1d7 100644 --- a/ext/Devel/PPPort/parts/inc/cop +++ b/ext/Devel/PPPort/parts/inc/cop @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 4 $ +## $Revision: 5 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:51 +0100 $ +## $Date: 2006/01/14 18:08:00 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/exception b/ext/Devel/PPPort/parts/inc/exception index cc1ba26..454f726 100644 --- a/ext/Devel/PPPort/parts/inc/exception +++ b/ext/Devel/PPPort/parts/inc/exception @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 3 $ +## $Revision: 4 $ ## $Author: mhx $ -## $Date: 2005/02/02 21:48:36 +0100 $ +## $Date: 2006/01/14 18:07:59 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/format b/ext/Devel/PPPort/parts/inc/format index da2048b..f4cd133 100644 --- a/ext/Devel/PPPort/parts/inc/format +++ b/ext/Devel/PPPort/parts/inc/format @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 4 $ +## $Revision: 5 $ ## $Author: mhx $ -## $Date: 2005/03/10 18:08:37 +0100 $ +## $Date: 2006/01/14 18:08:02 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/grok b/ext/Devel/PPPort/parts/inc/grok index 782e0dd..d1c4c40 100644 --- a/ext/Devel/PPPort/parts/inc/grok +++ b/ext/Devel/PPPort/parts/inc/grok @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 8 $ +## $Revision: 10 $ ## $Author: mhx $ -## $Date: 2005/03/10 18:08:40 +0100 $ +## $Date: 2006/01/14 18:08:03 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## @@ -76,7 +76,7 @@ grok_numeric_radix(pTHX_ const char **sp, const char *send) return TRUE; } } -#endif /* PERL_VERSION */ +#endif #endif /* USE_LOCALE_NUMERIC */ /* always try "." if numeric radix didn't match because * we may have data from different locales mixed */ diff --git a/ext/Devel/PPPort/parts/inc/limits b/ext/Devel/PPPort/parts/inc/limits index 1cec183..1259141 100644 --- a/ext/Devel/PPPort/parts/inc/limits +++ b/ext/Devel/PPPort/parts/inc/limits @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 3 $ +## $Revision: 4 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:51 +0100 $ +## $Date: 2006/01/14 18:08:01 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/mPUSH b/ext/Devel/PPPort/parts/inc/mPUSH index 51bed81..fdbd701 100644 --- a/ext/Devel/PPPort/parts/inc/mPUSH +++ b/ext/Devel/PPPort/parts/inc/mPUSH @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 5 $ +## $Revision: 6 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:52 +0100 $ +## $Date: 2006/01/14 18:08:01 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/magic b/ext/Devel/PPPort/parts/inc/magic index ccda7ec..f649f5d 100644 --- a/ext/Devel/PPPort/parts/inc/magic +++ b/ext/Devel/PPPort/parts/inc/magic @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 8 $ +## $Revision: 9 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:52 +0100 $ +## $Date: 2006/01/14 18:08:03 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/memory b/ext/Devel/PPPort/parts/inc/memory new file mode 100644 index 0000000..8e2eb3d --- /dev/null +++ b/ext/Devel/PPPort/parts/inc/memory @@ -0,0 +1,81 @@ +################################################################################ +## +## $Revision: 1 $ +## $Author: mhx $ +## $Date: 2005/10/30 11:26:42 +0100 $ +## +################################################################################ +## +## Version 3.x, Copyright (C) 2004-2005, 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. +## +################################################################################ + +=provides + +__UNDEFINED__ + +=implementation + +#ifdef HAS_MEMCMP +__UNDEFINED__ memNE(s1,s2,l) (memcmp(s1,s2,l)) +__UNDEFINED__ memEQ(s1,s2,l) (!memcmp(s1,s2,l)) +#else +__UNDEFINED__ memNE(s1,s2,l) (bcmp(s1,s2,l)) +__UNDEFINED__ memEQ(s1,s2,l) (!bcmp(s1,s2,l)) +#endif + +__UNDEFINED__ MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) +__UNDEFINED__ CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) +#ifdef HAS_MEMSET +__UNDEFINED__ ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) +#else +__UNDEFINED__ ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)), d) +#endif + +__UNDEFINED__ Poison(d,n,t) (void)memset((char*)(d), 0xAB, (n) * sizeof(t)) + +__UNDEFINED__ Newx(v,n,t) New(0,v,n,t) +__UNDEFINED__ Newxc(v,n,t,c) Newc(0,v,n,t,c) +__UNDEFINED__ Newxz(v,n,t) Newz(0,v,n,t) + +=xsubs + +int +checkmem() + PREINIT: + char *p; + + CODE: + RETVAL = 0; + Newx(p, 6, char); + CopyD("Hello", p, 6, char); + if (memEQ(p, "Hello", 6)) + RETVAL++; + ZeroD(p, 6, char); + if (memEQ(p, "\0\0\0\0\0\0", 6)) + RETVAL++; + Poison(p, 6, char); + if (memNE(p, "\0\0\0\0\0\0", 6)) + RETVAL++; + Safefree(p); + + Newxz(p, 6, char); + if (memEQ(p, "\0\0\0\0\0\0", 6)) + RETVAL++; + Safefree(p); + + Newxc(p, 3, short, char); + Safefree(p); + + OUTPUT: + RETVAL + +=tests plan => 1 + +ok(Devel::PPPort::checkmem(), 4); + diff --git a/ext/Devel/PPPort/parts/inc/misc b/ext/Devel/PPPort/parts/inc/misc index 3fd37fa..b22c973 100644 --- a/ext/Devel/PPPort/parts/inc/misc +++ b/ext/Devel/PPPort/parts/inc/misc @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 22 $ +## $Revision: 30 $ ## $Author: mhx $ -## $Date: 2005/06/11 09:37:31 +0200 $ +## $Date: 2006/01/14 18:08:03 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## @@ -33,11 +33,12 @@ END_EXTERN_C EXTERN_C STMT_START STMT_END +XSRETURN /PL_\w+/ =implementation -#if (PERL_VERSION < 4) || ((PERL_VERSION == 4) && (PERL_SUBVERSION <= 5)) +#if { VERSION <= 5.004_05 } /* Replace: 1 */ # define PL_DBsingle DBsingle # define PL_DBsub DBsub @@ -189,24 +190,6 @@ __UNDEFINED__ get_av perl_get_av __UNDEFINED__ get_hv perl_get_hv /* Replace: 0 */ -#ifdef HAS_MEMCMP -__UNDEFINED__ memNE(s1,s2,l) (memcmp(s1,s2,l)) -__UNDEFINED__ memEQ(s1,s2,l) (!memcmp(s1,s2,l)) -#else -__UNDEFINED__ memNE(s1,s2,l) (bcmp(s1,s2,l)) -__UNDEFINED__ memEQ(s1,s2,l) (!bcmp(s1,s2,l)) -#endif - -__UNDEFINED__ MoveD(s,d,n,t) memmove((char*)(d),(char*)(s), (n) * sizeof(t)) -__UNDEFINED__ CopyD(s,d,n,t) memcpy((char*)(d),(char*)(s), (n) * sizeof(t)) -#ifdef HAS_MEMSET -__UNDEFINED__ ZeroD(d,n,t) memzero((char*)(d), (n) * sizeof(t)) -#else -__UNDEFINED__ ZeroD(d,n,t) ((void)memzero((char*)(d), (n) * sizeof(t)),d) -#endif - -__UNDEFINED__ Poison(d,n,t) (void)memset((char*)(d), 0xAB, (n) * sizeof(t)) - __UNDEFINED__ dUNDERBAR dNOOP __UNDEFINED__ UNDERBAR DEFSV @@ -215,6 +198,21 @@ __UNDEFINED__ dITEMS I32 items = SP - MARK __UNDEFINED__ dXSTARG SV * targ = sv_newmortal() +__UNDEFINED__ dAXMARK I32 ax = POPMARK; \ + register SV ** const mark = PL_stack_base + ax++ + + +__UNDEFINED__ XSprePUSH (sp = PL_stack_base + ax - 1) + +#if { VERSION < 5.005 } +# undef XSRETURN +# define XSRETURN(off) \ + STMT_START { \ + PL_stack_sp = PL_stack_base + ax + ((off) - 1); \ + return; \ + } STMT_END +#endif + =xsmisc XS(XS_Devel__PPPort_dXSTARG); /* prototype */ @@ -229,9 +227,23 @@ XS(XS_Devel__PPPort_dXSTARG) XSRETURN(1); } +XS(XS_Devel__PPPort_dAXMARK); /* prototype */ +XS(XS_Devel__PPPort_dAXMARK) +{ + dSP; + dAXMARK; + dITEMS; + IV iv; + SP -= items; + iv = SvIV(ST(0)) - 1; + PUSHs(sv_2mortal(newSViv(iv))); + XSRETURN(1); +} + =xsboot newXS("Devel::PPPort::dXSTARG", XS_Devel__PPPort_dXSTARG, file); +newXS("Devel::PPPort::dAXMARK", XS_Devel__PPPort_dAXMARK, file); =xsubs @@ -290,6 +302,18 @@ newSVpvn() XPUSHs(newSVpvn(NULL, 0)); XSRETURN(5); +void +xsreturn(two) + int two + PPCODE: + XPUSHs(newSVpvn("test1", 5)); + if (two) + XPUSHs(newSVpvn("test2", 5)); + if (two) + XSRETURN(2); + else + XSRETURN(1); + SV * PL_sv_undef() CODE: @@ -352,7 +376,17 @@ UNDERBAR() OUTPUT: RETVAL -=tests plan => 32 +void +prepush() + CODE: + { + dXSTARG; + XSprePUSH; + PUSHi(42); + XSRETURN(1); + } + +=tests plan => 38 use vars qw($my_sv @my_av %my_hv); @@ -376,6 +410,18 @@ $_ = "Fred"; ok(&Devel::PPPort::DEFSV(), "Fred"); ok(&Devel::PPPort::UNDERBAR(), "Fred"); +if ($] >= 5.009002) { + eval q{ + my $_ = "Tony"; + ok(&Devel::PPPort::DEFSV(), "Fred"); + ok(&Devel::PPPort::UNDERBAR(), "Tony"); + }; +} +else { + ok(1); + ok(1); +} + eval { 1 }; ok(!&Devel::PPPort::ERRSV()); eval { cannot_call_this_one() }; @@ -406,4 +452,9 @@ ok(!&Devel::PPPort::get_cv('not_my_cv', 0)); ok(&Devel::PPPort::get_cv('not_my_cv', 1)); ok(Devel::PPPort::dXSTARG(42), 43); +ok(Devel::PPPort::dAXMARK(4711), 4710); + +ok(Devel::PPPort::prepush(), 42); +ok(join(':', Devel::PPPort::xsreturn(0)), 'test1'); +ok(join(':', Devel::PPPort::xsreturn(1)), 'test1:test2'); diff --git a/ext/Devel/PPPort/parts/inc/newCONSTSUB b/ext/Devel/PPPort/parts/inc/newCONSTSUB index 9bf81d1..f4841e4 100644 --- a/ext/Devel/PPPort/parts/inc/newCONSTSUB +++ b/ext/Devel/PPPort/parts/inc/newCONSTSUB @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 9 $ +## $Revision: 10 $ ## $Author: mhx $ -## $Date: 2005/03/10 18:08:41 +0100 $ +## $Date: 2006/01/14 18:08:02 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/newRV b/ext/Devel/PPPort/parts/inc/newRV index 2a4f909..b47c78f 100644 --- a/ext/Devel/PPPort/parts/inc/newRV +++ b/ext/Devel/PPPort/parts/inc/newRV @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 5 $ +## $Revision: 6 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:52 +0100 $ +## $Date: 2006/01/14 18:08:02 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/ppphbin b/ext/Devel/PPPort/parts/inc/ppphbin index e3d32dd..13d5b54 100644 --- a/ext/Devel/PPPort/parts/inc/ppphbin +++ b/ext/Devel/PPPort/parts/inc/ppphbin @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 28 $ +## $Revision: 31 $ ## $Author: mhx $ -## $Date: 2005/03/10 18:08:41 +0100 $ +## $Date: 2006/01/14 18:08:02 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## @@ -30,6 +30,7 @@ my %opt = ( changes => 1, cplusplus => 0, filter => 1, + strip => 0, ); my($ppport) = $0 =~ /([\w.]+)$/; @@ -39,7 +40,7 @@ my $HS = "[ \t]"; # horizontal whitespace eval { require Getopt::Long; Getopt::Long::GetOptions(\%opt, qw( - help quiet diag! filter! hints! changes! cplusplus + help quiet diag! filter! hints! changes! cplusplus strip patch=s copy=s diff=s compat-version=s list-provided list-unsupported api-info=s )) or usage(); @@ -51,6 +52,7 @@ if ($@ and grep /^-/, @ARGV) { } usage() if $opt{help}; +strip() if $opt{strip}; if (exists $opt{'compat-version'}) { my($r,$v,$s) = eval { parse_version($opt{'compat-version'}) }; @@ -710,3 +712,32 @@ ENDUSAGE exit 2; } + +sub strip +{ + my $self = do { local(@ARGV,$/)=($0); <> }; + $self =~ s/^$HS+Do NOT edit.*?(?=^-)//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"; + Devel::PPPort::WriteFile(\$0); + exit 0; +} +print <$0" or die "cannot strip $0: $!\n"; + print OUT $self; + + exit 0; +} diff --git a/ext/Devel/PPPort/parts/inc/ppphdoc b/ext/Devel/PPPort/parts/inc/ppphdoc index 36c072f..76efe7b 100644 --- a/ext/Devel/PPPort/parts/inc/ppphdoc +++ b/ext/Devel/PPPort/parts/inc/ppphdoc @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 21 $ +## $Revision: 25 $ ## $Author: mhx $ -## $Date: 2005/02/27 21:13:25 +0100 $ +## $Date: 2006/01/14 18:08:00 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## @@ -21,6 +21,8 @@ NEED_function NEED_function_GLOBAL +NEED_variable +NEED_variable_GLOBAL DPPP_NAMESPACE =implementation @@ -52,6 +54,9 @@ ppport.h - Perl/Pollution/Portability version __VERSION__ --nochanges don't suggest changes --nofilter don't filter input files + --strip strip all script and doc functionality from + ppport.h (this, obviously, cannot be undone) + --list-provided list provided API --list-unsupported list unsupported API --api-info=name show Perl API portability information @@ -95,7 +100,7 @@ Tell F to check for compatibility with the given Perl version. The default is to check for compatibility with Perl version __MIN_PERL__. You can use this option to reduce the output of F if you intend to be backward compatible only -up to a certain Perl version. +down to a certain Perl version. =head2 --cplusplus @@ -128,6 +133,13 @@ unless these are also deactivated. 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. + =head2 --list-provided Lists the API elements for which compatibility is provided by @@ -173,33 +185,38 @@ will provide wrappers for older Perl versions. =item * -If you use one of a few functions 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 +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 will be marked C in the list shown by -C<--list-provided>. +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, you want either C or global variants. +use such functions or variables, you want either C or global +variants. -For a C function, use: +For a C function or variable (used only in a single source +file), use: #define NEED_function + #define NEED_variable -For a global function, use: +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 one -function in your project. +Note that you mustn't have more than one global request for the +same function or variable in your project. __EXPLICIT_API__ To avoid namespace conflicts, you can change the namespace of the -explicitly exported functions using the C macro. -Just C<#define> the macro before including C: +explicitly exported functions / variables using the C +macro. Just C<#define> the macro before including C: #define DPPP_NAMESPACE MyOwnNamespace_ #include "ppport.h" @@ -302,7 +319,7 @@ module from CPAN. =head1 COPYRIGHT -Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz. +Version 3.x, Copyright (c) 2004-2006, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. diff --git a/ext/Devel/PPPort/parts/inc/ppphtest b/ext/Devel/PPPort/parts/inc/ppphtest index fda3362..aaf8126 100644 --- a/ext/Devel/PPPort/parts/inc/ppphtest +++ b/ext/Devel/PPPort/parts/inc/ppphtest @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 26 $ +## $Revision: 29 $ ## $Author: mhx $ -## $Date: 2005/06/24 19:03:21 +0200 $ +## $Date: 2006/01/14 23:01:37 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## @@ -15,7 +15,16 @@ ## ################################################################################ -=tests plan => 197 +=tests plan => 202 + +BEGIN { + if ($ENV{'SKIP_PPPHTEST'}) { + for (1 .. 202) { + ok(1); + } + exit 0; + } +} use File::Path qw/rmtree mkpath/; use Config; @@ -737,3 +746,29 @@ newSViv(); newSViv(); +=============================================================================== + +# check if explicit variables are handled propery + +my $o = ppport(qw(--copy=a)); +ok($o =~ /^Needs to include.*ppport\.h/m); +ok($o =~ /^Uses PL_signals/m); +ok($o =~ /^File needs PL_signals, adding static request/m); +ok(eq_files('MyExt.xsa', 'MyExt.ra')); + +unlink qw(MyExt.xsa); + +---------------------------- MyExt.xs ----------------------------------------- + +PL_signals = 123; +if (PL_signals == 42) + foo(); + +---------------------------- MyExt.ra ----------------------------------------- + +#define NEED_PL_signals +#include "ppport.h" +PL_signals = 123; +if (PL_signals == 42) + foo(); + diff --git a/ext/Devel/PPPort/parts/inc/sv_xpvf b/ext/Devel/PPPort/parts/inc/sv_xpvf index 3276960..f29ffec 100644 --- a/ext/Devel/PPPort/parts/inc/sv_xpvf +++ b/ext/Devel/PPPort/parts/inc/sv_xpvf @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 3 $ +## $Revision: 4 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:54 +0100 $ +## $Date: 2006/01/14 18:07:59 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/threads b/ext/Devel/PPPort/parts/inc/threads index e002e6c..9302db6 100644 --- a/ext/Devel/PPPort/parts/inc/threads +++ b/ext/Devel/PPPort/parts/inc/threads @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 4 $ +## $Revision: 5 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:54 +0100 $ +## $Date: 2006/01/14 18:08:00 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/inc/uv b/ext/Devel/PPPort/parts/inc/uv index e3f0400..0f4e697 100644 --- a/ext/Devel/PPPort/parts/inc/uv +++ b/ext/Devel/PPPort/parts/inc/uv @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 10 $ +## $Revision: 12 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:54 +0100 $ +## $Date: 2006/01/14 18:08:01 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## @@ -17,26 +17,20 @@ =provides -sv_setuv -newSVuv __UNDEFINED__ =implementation -#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 +__UNDEFINED__ 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 + +__UNDEFINED__ newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv)) __UNDEFINED__ sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv))) __UNDEFINED__ SvUVX(sv) ((UV)SvIVX(sv)) diff --git a/ext/Devel/PPPort/parts/inc/variables b/ext/Devel/PPPort/parts/inc/variables new file mode 100644 index 0000000..f5dc3b4 --- /dev/null +++ b/ext/Devel/PPPort/parts/inc/variables @@ -0,0 +1,62 @@ +################################################################################ +## +## $Revision: 4 $ +## $Author: mhx $ +## $Date: 2006/01/14 18:07:58 +0100 $ +## +################################################################################ +## +## Version 3.x, Copyright (C) 2004-2006, 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. +## +################################################################################ + +=provides + +PL_signals +PERL_SIGNALS_UNSAFE_FLAG + +=implementation + +#ifndef PERL_SIGNALS_UNSAFE_FLAG + +#define PERL_SIGNALS_UNSAFE_FLAG 0x0001 + +__NEED_VAR__ U32 PL_signals = PERL_SIGNALS_UNSAFE_FLAG; + +#endif + +=xsinit + +#define NEED_PL_signals + +=xsmisc + +U32 get_PL_signals_1(void) +{ + return PL_signals; +} + +extern U32 get_PL_signals_2(void); +extern U32 get_PL_signals_3(void); + +=xsubs + +int +compare_PL_signals() + CODE: + { + U32 ref = get_PL_signals_1(); + RETVAL = ref == get_PL_signals_2() && ref == get_PL_signals_3(); + } + OUTPUT: + RETVAL + +=tests plan => 1 + +ok(Devel::PPPort::compare_PL_signals()); + diff --git a/ext/Devel/PPPort/parts/inc/version b/ext/Devel/PPPort/parts/inc/version index c5ef47a..14034c8 100644 --- a/ext/Devel/PPPort/parts/inc/version +++ b/ext/Devel/PPPort/parts/inc/version @@ -1,12 +1,12 @@ ################################################################################ ## -## $Revision: 5 $ +## $Revision: 6 $ ## $Author: mhx $ -## $Date: 2005/03/10 18:08:42 +0100 $ +## $Date: 2006/01/14 18:08:02 +0100 $ ## ################################################################################ ## -## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## diff --git a/ext/Devel/PPPort/parts/ppptools.pl b/ext/Devel/PPPort/parts/ppptools.pl index e78f89a..6283a0b 100644 --- a/ext/Devel/PPPort/parts/ppptools.pl +++ b/ext/Devel/PPPort/parts/ppptools.pl @@ -4,13 +4,13 @@ # ################################################################################ # -# $Revision: 15 $ +# $Revision: 16 $ # $Author: mhx $ -# $Date: 2005/06/24 19:01:33 +0200 $ +# $Date: 2006/01/14 18:07:58 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # diff --git a/ext/Devel/PPPort/parts/todo/5004000 b/ext/Devel/PPPort/parts/todo/5004000 index 58f01f5..e4fa09a 100644 --- a/ext/Devel/PPPort/parts/todo/5004000 +++ b/ext/Devel/PPPort/parts/todo/5004000 @@ -44,6 +44,7 @@ rsignal # E rsignal_state # E save_I16 # U save_gp # U +share_hek # E start_subparse # E (Perl_start_subparse) sv_catpvf # U sv_catpvf_mg # U diff --git a/ext/Devel/PPPort/parts/todo/5007001 b/ext/Devel/PPPort/parts/todo/5007001 index b5039ce..553e6d6 100644 --- a/ext/Devel/PPPort/parts/todo/5007001 +++ b/ext/Devel/PPPort/parts/todo/5007001 @@ -2,7 +2,6 @@ POPpbytex # E SvUOK # U bytes_from_utf8 # E -csighandler # U despatch_signals # U do_openn # U gv_handler # E @@ -19,7 +18,5 @@ sv_utf8_upgrade # E (Perl_sv_utf8_upgrade) utf8_length # U utf8_to_uvchr # U utf8_to_uvuni # U -utf8n_to_uvchr # U utf8n_to_uvuni # U -uvchr_to_utf8 # E uvuni_to_utf8 # E diff --git a/ext/Devel/PPPort/parts/todo/5008001 b/ext/Devel/PPPort/parts/todo/5008001 index 595263f..d269061 100644 --- a/ext/Devel/PPPort/parts/todo/5008001 +++ b/ext/Devel/PPPort/parts/todo/5008001 @@ -6,6 +6,7 @@ packlist # U save_bool # U savestack_grow_cnt # U scan_vstring # E +seed # U sv_cat_decode # U sv_compile_2op # E (Perl_sv_compile_2op) sv_setpviv # U diff --git a/ext/Devel/PPPort/parts/todo/5008007 b/ext/Devel/PPPort/parts/todo/5008007 new file mode 100644 index 0000000..7d656f0 --- /dev/null +++ b/ext/Devel/PPPort/parts/todo/5008007 @@ -0,0 +1 @@ +5.008007 diff --git a/ext/Devel/PPPort/parts/todo/5009003 b/ext/Devel/PPPort/parts/todo/5009003 new file mode 100644 index 0000000..26b4e46 --- /dev/null +++ b/ext/Devel/PPPort/parts/todo/5009003 @@ -0,0 +1,30 @@ +5.009003 +MULTICALL # E +POP_MULTICALL # E +PUSH_MULTICALL # E +SvSTASH_set # E +av_arylen_p # E +ckwarn # U +ckwarn_d # U +csighandler # E (Perl_csighandler) +dMULTICALL # E +doref # E +gv_const_sv # E +hv_eiter_p # E +hv_eiter_set # U +hv_name_set # U +hv_placeholders_get # U +hv_placeholders_p # E +hv_placeholders_set # U +hv_riter_p # E +hv_riter_set # U +is_utf8_string_loclen # U +my_sprintf # U +newGIVENOP # E +newSVhek # E +newWHENOP # E +newWHILEOP # E (Perl_newWHILEOP) +ref # E (Perl_ref) +sortsv_flags # U +stashpv_hvname_match # U +vverify # U diff --git a/ext/Devel/PPPort/ppport_h.PL b/ext/Devel/PPPort/ppport_h.PL index c19336c..96cbab1 100644 --- a/ext/Devel/PPPort/ppport_h.PL +++ b/ext/Devel/PPPort/ppport_h.PL @@ -4,13 +4,13 @@ # ################################################################################ # -# $Revision: 5 $ +# $Revision: 6 $ # $Author: mhx $ -# $Date: 2005/03/10 18:45:41 +0100 $ +# $Date: 2006/01/14 22:38:30 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # diff --git a/ext/Devel/PPPort/soak b/ext/Devel/PPPort/soak index c0b11ab..23db958 100644 --- a/ext/Devel/PPPort/soak +++ b/ext/Devel/PPPort/soak @@ -7,13 +7,13 @@ # ################################################################################ # -# $Revision: 8 $ +# $Revision: 9 $ # $Author: mhx $ -# $Date: 2005/02/27 21:16:42 +0100 $ +# $Date: 2006/01/14 18:07:57 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. # @@ -32,7 +32,7 @@ use Pod::Usage; use List::Util qw(max); use Config; -my $VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.06_01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; +my $VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.07 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; $| = 1; my $verbose = 0; @@ -172,7 +172,7 @@ soak - Test Perl modules with multiple Perl releases =head1 COPYRIGHT -Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz. +Version 3.x, Copyright (c) 2004-2006, Marcus Holland-Moritz. Version 2.x, Copyright (C) 2001, Paul Marquess. diff --git a/ext/Devel/PPPort/t/Sv_set.t b/ext/Devel/PPPort/t/Sv_set.t new file mode 100644 index 0000000..20956ed --- /dev/null +++ b/ext/Devel/PPPort/t/Sv_set.t @@ -0,0 +1,42 @@ +################################################################################ +# +# !!!!! Do NOT edit this file directly! !!!!! +# +# Edit mktests.PL and/or parts/inc/Sv_set instead. +# +################################################################################ + +BEGIN { + if ($ENV{'PERL_CORE'}) { + chdir 't' if -d 't'; + @INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext'; + require Config; import Config; + use vars '%Config'; + if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) { + print "1..0 # Skip -- Perl configured without Devel::PPPort module\n"; + exit 0; + } + } + else { + unshift @INC, 't'; + } + + eval "use Test"; + if ($@) { + require 'testutil.pl'; + print "1..3\n"; + } + else { + plan(tests => 3); + } +} + +use Devel::PPPort; +use strict; +$^W = 1; + +my $foo = 5; +ok(&Devel::PPPort::TestSvUV_set($foo, 12345), 42); +ok(&Devel::PPPort::TestSvPVX_const("mhx"), 43); +ok(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44); + diff --git a/ext/Devel/PPPort/t/memory.t b/ext/Devel/PPPort/t/memory.t new file mode 100644 index 0000000..a1b574d --- /dev/null +++ b/ext/Devel/PPPort/t/memory.t @@ -0,0 +1,39 @@ +################################################################################ +# +# !!!!! Do NOT edit this file directly! !!!!! +# +# Edit mktests.PL and/or parts/inc/memory instead. +# +################################################################################ + +BEGIN { + if ($ENV{'PERL_CORE'}) { + chdir 't' if -d 't'; + @INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext'; + require Config; import Config; + use vars '%Config'; + if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) { + print "1..0 # Skip -- Perl configured without Devel::PPPort module\n"; + exit 0; + } + } + else { + unshift @INC, 't'; + } + + eval "use Test"; + if ($@) { + require 'testutil.pl'; + print "1..1\n"; + } + else { + plan(tests => 1); + } +} + +use Devel::PPPort; +use strict; +$^W = 1; + +ok(Devel::PPPort::checkmem(), 4); + diff --git a/ext/Devel/PPPort/t/misc.t b/ext/Devel/PPPort/t/misc.t index cad7bf5..81dde3e 100644 --- a/ext/Devel/PPPort/t/misc.t +++ b/ext/Devel/PPPort/t/misc.t @@ -24,10 +24,10 @@ BEGIN { eval "use Test"; if ($@) { require 'testutil.pl'; - print "1..32\n"; + print "1..38\n"; } else { - plan(tests => 32); + plan(tests => 38); } } @@ -57,6 +57,18 @@ $_ = "Fred"; ok(&Devel::PPPort::DEFSV(), "Fred"); ok(&Devel::PPPort::UNDERBAR(), "Fred"); +if ($] >= 5.009002) { + eval q{ + my $_ = "Tony"; + ok(&Devel::PPPort::DEFSV(), "Fred"); + ok(&Devel::PPPort::UNDERBAR(), "Tony"); + }; +} +else { + ok(1); + ok(1); +} + eval { 1 }; ok(!&Devel::PPPort::ERRSV()); eval { cannot_call_this_one() }; @@ -87,4 +99,10 @@ ok(!&Devel::PPPort::get_cv('not_my_cv', 0)); ok(&Devel::PPPort::get_cv('not_my_cv', 1)); ok(Devel::PPPort::dXSTARG(42), 43); +ok(Devel::PPPort::dAXMARK(4711), 4710); + +ok(Devel::PPPort::prepush(), 42); + +ok(join(':', Devel::PPPort::xsreturn(0)), 'test1'); +ok(join(':', Devel::PPPort::xsreturn(1)), 'test1:test2'); diff --git a/ext/Devel/PPPort/t/ppphtest.t b/ext/Devel/PPPort/t/ppphtest.t index 9040c92..d6dc344 100644 --- a/ext/Devel/PPPort/t/ppphtest.t +++ b/ext/Devel/PPPort/t/ppphtest.t @@ -24,10 +24,10 @@ BEGIN { eval "use Test"; if ($@) { require 'testutil.pl'; - print "1..197\n"; + print "1..202\n"; } else { - plan(tests => 197); + plan(tests => 202); } } @@ -35,6 +35,15 @@ use Devel::PPPort; use strict; $^W = 1; +BEGIN { + if ($ENV{'SKIP_PPPHTEST'}) { + for (1 .. 202) { + ok(1); + } + exit 0; + } +} + use File::Path qw/rmtree mkpath/; use Config; @@ -755,3 +764,29 @@ newSViv(); newSViv(); +=============================================================================== + +# check if explicit variables are handled propery + +my $o = ppport(qw(--copy=a)); +ok($o =~ /^Needs to include.*ppport\.h/m); +ok($o =~ /^Uses PL_signals/m); +ok($o =~ /^File needs PL_signals, adding static request/m); +ok(eq_files('MyExt.xsa', 'MyExt.ra')); + +unlink qw(MyExt.xsa); + +---------------------------- MyExt.xs ----------------------------------------- + +PL_signals = 123; +if (PL_signals == 42) + foo(); + +---------------------------- MyExt.ra ----------------------------------------- + +#define NEED_PL_signals +#include "ppport.h" +PL_signals = 123; +if (PL_signals == 42) + foo(); + diff --git a/ext/Devel/PPPort/t/testutil.pl b/ext/Devel/PPPort/t/testutil.pl index 408553f..a4879d8 100644 --- a/ext/Devel/PPPort/t/testutil.pl +++ b/ext/Devel/PPPort/t/testutil.pl @@ -14,7 +14,7 @@ } elsif (!defined $result) { $ok = 0; } elsif (ref($expected) eq 'Regexp') { - $ok = $result =~ /$expected/; + die "using regular expression objects is not backwards compatible"; } else { $ok = $result eq $expected; } diff --git a/ext/Devel/PPPort/t/variables.t b/ext/Devel/PPPort/t/variables.t new file mode 100644 index 0000000..8a0dafe --- /dev/null +++ b/ext/Devel/PPPort/t/variables.t @@ -0,0 +1,39 @@ +################################################################################ +# +# !!!!! Do NOT edit this file directly! !!!!! +# +# Edit mktests.PL and/or parts/inc/variables instead. +# +################################################################################ + +BEGIN { + if ($ENV{'PERL_CORE'}) { + chdir 't' if -d 't'; + @INC = ('../lib', '../ext/Devel/PPPort/t') if -d '../lib' && -d '../ext'; + require Config; import Config; + use vars '%Config'; + if (" $Config{'extensions'} " !~ m[ Devel/PPPort ]) { + print "1..0 # Skip -- Perl configured without Devel::PPPort module\n"; + exit 0; + } + } + else { + unshift @INC, 't'; + } + + eval "use Test"; + if ($@) { + require 'testutil.pl'; + print "1..1\n"; + } + else { + plan(tests => 1); + } +} + +use Devel::PPPort; +use strict; +$^W = 1; + +ok(Devel::PPPort::compare_PL_signals()); + diff --git a/ext/Devel/PPPort/typemap b/ext/Devel/PPPort/typemap index 653722a..3a0f2b6 100644 --- a/ext/Devel/PPPort/typemap +++ b/ext/Devel/PPPort/typemap @@ -4,13 +4,13 @@ # ################################################################################ # -# $Revision: 4 $ +# $Revision: 5 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:55 +0100 $ +# $Date: 2006/01/14 18:07:55 +0100 $ # ################################################################################ # -# Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz. +# Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz. # Version 2.x, Copyright (C) 2001, Paul Marquess. # Version 1.x, Copyright (C) 1999, Kenneth Albanowski. #