diff options
author | Nicholas Clark <nick@ccl4.org> | 2006-01-12 20:03:51 +0000 |
---|---|---|
committer | Nicholas Clark <nick@ccl4.org> | 2006-01-12 20:03:51 +0000 |
commit | 4a5826852ee095d233fab172b67097a331a21e42 (patch) | |
tree | 1197a71f384c6cefac3149951774a167943e17e2 /ext | |
parent | e10b8885ef748ea8a5b40bab4b29dc0de484ee94 (diff) | |
download | perl-4a5826852ee095d233fab172b67097a331a21e42.tar.gz |
Upgrade to Devel::PPPort 3.06_01
p4raw-id: //depot/perl@26809
Diffstat (limited to 'ext')
32 files changed, 1955 insertions, 1460 deletions
diff --git a/ext/Devel/PPPort/Changes b/ext/Devel/PPPort/Changes index 8eb53f6475..30e6f68f63 100755 --- a/ext/Devel/PPPort/Changes +++ b/ext/Devel/PPPort/Changes @@ -1,3 +1,13 @@ +3.06_01 - 2005-06-25 + + * fix --compat-version argument checking + * filter files passed on the command line by default + to make sure 'perl ppport.h *' does something useful + * add --nofilter option to override the filtering + * testsuite now hopefully supports MacOS Classic + * check definedness of PERL_UNUSED_DECL + * update API info + 3.06 - 2005-02-02 * fix cpan #11327: make fails with syntax error diff --git a/ext/Devel/PPPort/HACKERS b/ext/Devel/PPPort/HACKERS index 8aa9c571ae..7e386bdb8e 100644 --- a/ext/Devel/PPPort/HACKERS +++ b/ext/Devel/PPPort/HACKERS @@ -11,15 +11,15 @@ lying around in this distribution. =head1 DESCRIPTION -=head2 How to build 87 versions of Perl +=head2 How to build 98 versions of Perl C<Devel::PPPort> supports Perl versions between 5.003 and bleadperl. To guarantee this support, I need some of these versions on my -machine. I currently have 87 different Perl version/configuration +machine. I currently have 98 different Perl version/configuration combinations installed on my laptop. As many of the old Perl distributions need patching to compile -cleanly on newer systems (and because building 87 Perls by hand +cleanly on newer systems (and because building 98 Perls by hand just isn't fun), I wrote a tool to build all the different versions and configurations. You can find it in F<devel/buildperl.pl>. It can currently build the following Perl releases: @@ -129,7 +129,8 @@ in the root directory of the distribution. Finally, add the remaining baseline information by running - perl devel/scanprov + perl Makefile.PL && make + perl devel/scanprov write =back @@ -204,12 +205,13 @@ all Perl binaries you want to test. =head2 Special Makefile targets -You can use +You can use make regen -to regenerate all of the autogenerated files. To get rid of -all generated files (except for parts/todo/*), use +to regenerate all of the autogenerated files. To get rid of all +generated files (except for F<parts/todo/*> and F<parts/base/*>), +use make purge_all diff --git a/ext/Devel/PPPort/META.yml b/ext/Devel/PPPort/META.yml index ba52479555..f238de4c24 100644 --- a/ext/Devel/PPPort/META.yml +++ b/ext/Devel/PPPort/META.yml @@ -1,7 +1,7 @@ # 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 +version: 3.06_01 version_from: PPPort_pm.PL installdirs: perl requires: diff --git a/ext/Devel/PPPort/PPPort.pm b/ext/Devel/PPPort/PPPort.pm index 8aebac51a9..133799d89f 100644 --- a/ext/Devel/PPPort/PPPort.pm +++ b/ext/Devel/PPPort/PPPort.pm @@ -8,9 +8,9 @@ # ################################################################################ # -# $Revision: 33 $ +# $Revision: 36 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:55 +0100 $ +# $Date: 2005/06/25 17:56:28 +0200 $ # ################################################################################ # @@ -45,12 +45,12 @@ C<Devel::PPPort> contains a single function, called C<WriteFile>. Its only purpose is to write the F<ppport.h> C header file. This file contains a series of macros and, if explicitly requested, functions that allow XS modules to be built using older versions of Perl. Currently, -Perl versions from 5.003 to 5.9.2 are supported. +Perl versions from 5.003 to 5.9.3 are supported. -This module is used by C<h2xs> to write the file F<ppport.h>. +This module is used by C<h2xs> to write the file F<ppport.h>. =head2 Why use ppport.h? - + You should use F<ppport.h> in modern code so that your code will work with the widest range of Perl interpreters possible, without significant additional work. @@ -69,7 +69,7 @@ They are most probably no XS writers. Also, don't make F<ppport.h> optional. Rather, just take the most recent copy of F<ppport.h> that you can find (e.g. by generating it with the latest C<Devel::PPPort> release from CPAN), copy it into your project, adjust your project to -use it, and distribute the header along with your module. +use it, and distribute the header along with your module. =head2 Running ppport.h @@ -99,7 +99,7 @@ Otherwise it returns a false value. =head1 COMPATIBILITY -F<ppport.h> supports Perl versions from 5.003 to 5.9.2 +F<ppport.h> supports Perl versions from 5.003 to 5.9.3 in threaded and non-threaded configurations. =head2 Provided Perl compatibility API @@ -384,6 +384,27 @@ Perl below which it is unsupported: =over 4 +=item perl 5.9.3 + + SvMAGIC_set + SvRV_set + SvSTASH_set + SvUV_set + av_arylen_p + dAXMARK + hv_eiter_p + hv_eiter_set + hv_name_set + hv_placeholders_get + hv_placeholders_p + hv_placeholders_set + hv_riter_p + hv_riter_set + is_utf8_string_loclen + newSVhek + newWHILEOP + stashpv_hvname_match + =item perl 5.9.2 SvPVbyte_force @@ -764,10 +785,6 @@ Perl below which it is unsupported: save_aelem save_helem -=item perl 5.004_04 - - newWHILEOP - =item perl 5.004 GIMME_V @@ -884,12 +901,13 @@ require DynaLoader; use strict; use vars qw($VERSION @ISA $data); -$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.06 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; +$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.06_01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; @ISA = qw(DynaLoader); bootstrap Devel::PPPort; +sub _init_data { $data = do { local $/; <DATA> }; my $now = localtime; @@ -898,12 +916,13 @@ bootstrap Devel::PPPort; $data =~ s/__VERSION__/$VERSION/g; $data =~ s/__DATE__/$now/g; $data =~ s/__PKG__/$pkg/g; - $data =~ s/^POD\s//gm; + $data =~ s/^\|>//gm; } sub WriteFile { my $file = shift || 'ppport.h'; + defined $data or _init_data(); my $copy = $data; $copy =~ s/\bppport\.h\b/$file/g; @@ -923,317 +942,325 @@ __DATA__ /* ---------------------------------------------------------------------- - ppport.h -- Perl/Pollution/Portability Version __VERSION__ - + ppport.h -- Perl/Pollution/Portability Version __VERSION__ + Automatically created by __PKG__ running under perl __PERL_VERSION__ on __DATE__. - + Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. - + Use 'perldoc ppport.h' to view the documentation below. ---------------------------------------------------------------------- SKIP -POD =pod -POD -POD =head1 NAME -POD -POD ppport.h - Perl/Pollution/Portability version __VERSION__ -POD -POD =head1 SYNOPSIS -POD -POD perl ppport.h [options] [files] -POD -POD --help show short help -POD -POD --patch=file write one patch file with changes -POD --copy=suffix write changed copies with suffix -POD --diff=program use diff program and options -POD -POD --compat-version=version provide compatibility with Perl version -POD --cplusplus accept C++ comments -POD -POD --quiet don't output anything except fatal errors -POD --nodiag don't show diagnostics -POD --nohints don't show hints -POD --nochanges don't suggest changes -POD -POD --list-provided list provided API -POD --list-unsupported list unsupported API -POD --api-info=name show Perl API portability information -POD -POD =head1 COMPATIBILITY -POD -POD This version of F<ppport.h> is designed to support operation with Perl -POD installations back to 5.003, and has been tested up to 5.9.2. -POD -POD =head1 OPTIONS -POD -POD =head2 --help -POD -POD Display a brief usage summary. -POD -POD =head2 --patch=I<file> -POD -POD If this option is given, a single patch file will be created if -POD any changes are suggested. This requires a working diff program -POD to be installed on your system. -POD -POD =head2 --copy=I<suffix> -POD -POD If this option is given, a copy of each file will be saved with -POD the given suffix that contains the suggested changes. This does -POD not require any external programs. -POD -POD If neither C<--patch> or C<--copy> are given, the default is to -POD simply print the diffs for each file. This requires either -POD C<Text::Diff> or a C<diff> program to be installed. -POD -POD =head2 --diff=I<program> -POD -POD Manually set the diff program and options to use. The default -POD is to use C<Text::Diff>, when installed, and output unified -POD context diffs. -POD -POD =head2 --compat-version=I<version> -POD -POD Tell F<ppport.h> to check for compatibility with the given -POD Perl version. The default is to check for compatibility with Perl -POD version 5.003. You can use this option to reduce the output -POD of F<ppport.h> if you intend to be backward compatible only -POD up to a certain Perl version. -POD -POD =head2 --cplusplus -POD -POD Usually, F<ppport.h> will detect C++ style comments and -POD replace them with C style comments for portability reasons. -POD Using this option instructs F<ppport.h> to leave C++ -POD comments untouched. -POD -POD =head2 --quiet -POD -POD Be quiet. Don't print anything except fatal errors. -POD -POD =head2 --nodiag -POD -POD Don't output any diagnostic messages. Only portability -POD alerts will be printed. -POD -POD =head2 --nohints -POD -POD Don't output any hints. Hints often contain useful portability -POD notes. -POD -POD =head2 --nochanges -POD -POD Don't suggest any changes. Only give diagnostic output and hints -POD unless these are also deactivated. -POD -POD =head2 --list-provided -POD -POD Lists the API elements for which compatibility is provided by -POD F<ppport.h>. Also lists if it must be explicitly requested, -POD if it has dependencies, and if there are hints for it. -POD -POD =head2 --list-unsupported -POD -POD Lists the API elements that are known not to be supported by -POD F<ppport.h> and below which version of Perl they probably -POD won't be available or work. -POD -POD =head2 --api-info=I<name> -POD -POD Show portability information for API elements matching I<name>. -POD If I<name> is surrounded by slashes, it is interpreted as a regular -POD expression. -POD -POD =head1 DESCRIPTION -POD -POD In order for a Perl extension (XS) module to be as portable as possible -POD across differing versions of Perl itself, certain steps need to be taken. -POD -POD =over 4 -POD -POD =item * -POD -POD Including this header is the first major one. This alone will give you -POD access to a large part of the Perl API that hasn't been available in -POD earlier Perl releases. Use -POD -POD perl ppport.h --list-provided -POD -POD to see which API elements are provided by ppport.h. -POD -POD =item * -POD -POD You should avoid using deprecated parts of the API. For example, using -POD global Perl variables without the C<PL_> prefix is deprecated. Also, -POD some API functions used to have a C<perl_> prefix. Using this form is -POD also deprecated. You can safely use the supported API, as F<ppport.h> -POD will provide wrappers for older Perl versions. -POD -POD =item * -POD -POD If you use one of a few functions that were not present in earlier -POD versions of Perl, and that can't be provided using a macro, you have -POD to explicitly request support for these functions by adding one or -POD more C<#define>s in your source code before the inclusion of F<ppport.h>. -POD -POD These functions will be marked C<explicit> in the list shown by -POD C<--list-provided>. -POD -POD Depending on whether you module has a single or multiple files that -POD use such functions, you want either C<static> or global variants. -POD -POD For a C<static> function, use: -POD -POD #define NEED_function -POD -POD For a global function, use: -POD -POD #define NEED_function_GLOBAL -POD -POD Note that you mustn't have more than one global request for one -POD function in your project. -POD -POD Function Static Request Global Request -POD ----------------------------------------------------------------------------------------- -POD eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL -POD grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL -POD grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL -POD grok_number() NEED_grok_number NEED_grok_number_GLOBAL -POD grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL -POD grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL -POD newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL -POD newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL -POD sv_2pv_nolen() NEED_sv_2pv_nolen NEED_sv_2pv_nolen_GLOBAL -POD sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL -POD sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL -POD sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL -POD sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL -POD sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL -POD vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL -POD -POD To avoid namespace conflicts, you can change the namespace of the -POD explicitly exported functions using the C<DPPP_NAMESPACE> macro. -POD Just C<#define> the macro before including C<ppport.h>: -POD -POD #define DPPP_NAMESPACE MyOwnNamespace_ -POD #include "ppport.h" -POD -POD The default namespace is C<DPPP_>. -POD -POD =back -POD -POD The good thing is that most of the above can be checked by running -POD F<ppport.h> on your source code. See the next section for -POD details. -POD -POD =head1 EXAMPLES -POD -POD To verify whether F<ppport.h> is needed for your module, whether you -POD should make any changes to your code, and whether any special defines -POD should be used, F<ppport.h> can be run as a Perl script to check your -POD source code. Simply say: -POD -POD perl ppport.h -POD -POD The result will usually be a list of patches suggesting changes -POD that should at least be acceptable, if not necessarily the most -POD efficient solution, or a fix for all possible problems. -POD -POD If you know that your XS module uses features only available in -POD newer Perl releases, if you're aware that it uses C++ comments, -POD and if you want all suggestions as a single patch file, you could -POD use something like this: -POD -POD perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff -POD -POD If you only want your code to be scanned without any suggestions -POD for changes, use: -POD -POD perl ppport.h --nochanges -POD -POD You can specify a different C<diff> program or options, using -POD the C<--diff> option: -POD -POD perl ppport.h --diff='diff -C 10' -POD -POD This would output context diffs with 10 lines of context. -POD -POD To display portability information for the C<newSVpvn> function, -POD use: -POD -POD perl ppport.h --api-info=newSVpvn -POD -POD Since the argument to C<--api-info> can be a regular expression, -POD you can use -POD -POD perl ppport.h --api-info=/_nomg$/ -POD -POD to display portability information for all C<_nomg> functions or -POD -POD perl ppport.h --api-info=/./ -POD -POD to display information for all known API elements. -POD -POD =head1 BUGS -POD -POD If this version of F<ppport.h> is causing failure during -POD the compilation of this module, please check if newer versions -POD of either this module or C<Devel::PPPort> are available on CPAN -POD before sending a bug report. -POD -POD If F<ppport.h> was generated using the latest version of -POD C<Devel::PPPort> and is causing failure of this module, please -POD file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>. -POD -POD Please include the following information: -POD -POD =over 4 -POD -POD =item 1. -POD -POD The complete output from running "perl -V" -POD -POD =item 2. -POD -POD This file. -POD -POD =item 3. -POD -POD The name and version of the module you were trying to build. -POD -POD =item 4. -POD -POD A full log of the build that failed. -POD -POD =item 5. -POD -POD Any other information that you think could be relevant. -POD -POD =back -POD -POD For the latest version of this code, please get the C<Devel::PPPort> -POD module from CPAN. -POD -POD =head1 COPYRIGHT -POD -POD Version 3.x, Copyright (c) 2004-2005, Marcus Holland-Moritz. -POD -POD Version 2.x, Copyright (C) 2001, Paul Marquess. -POD -POD Version 1.x, Copyright (C) 1999, Kenneth Albanowski. -POD -POD This program is free software; you can redistribute it and/or -POD modify it under the same terms as Perl itself. -POD -POD =head1 SEE ALSO -POD -POD See L<Devel::PPPort>. +|>=pod +|> +|>=head1 NAME +|> +|>ppport.h - Perl/Pollution/Portability version __VERSION__ +|> +|>=head1 SYNOPSIS +|> +|> perl ppport.h [options] [source files] +|> +|> Searches current directory for files if no [source files] are given +|> +|> --help show short help +|> +|> --patch=file write one patch file with changes +|> --copy=suffix write changed copies with suffix +|> --diff=program use diff program and options +|> +|> --compat-version=version provide compatibility with Perl version +|> --cplusplus accept C++ comments +|> +|> --quiet don't output anything except fatal errors +|> --nodiag don't show diagnostics +|> --nohints don't show hints +|> --nochanges don't suggest changes +|> --nofilter don't filter input files +|> +|> --list-provided list provided API +|> --list-unsupported list unsupported API +|> --api-info=name show Perl API portability information +|> +|>=head1 COMPATIBILITY +|> +|>This version of F<ppport.h> is designed to support operation with Perl +|>installations back to 5.003, and has been tested up to 5.9.3. +|> +|>=head1 OPTIONS +|> +|>=head2 --help +|> +|>Display a brief usage summary. +|> +|>=head2 --patch=I<file> +|> +|>If this option is given, a single patch file will be created if +|>any changes are suggested. This requires a working diff program +|>to be installed on your system. +|> +|>=head2 --copy=I<suffix> +|> +|>If this option is given, a copy of each file will be saved with +|>the given suffix that contains the suggested changes. This does +|>not require any external programs. +|> +|>If neither C<--patch> or C<--copy> are given, the default is to +|>simply print the diffs for each file. This requires either +|>C<Text::Diff> or a C<diff> program to be installed. +|> +|>=head2 --diff=I<program> +|> +|>Manually set the diff program and options to use. The default +|>is to use C<Text::Diff>, when installed, and output unified +|>context diffs. +|> +|>=head2 --compat-version=I<version> +|> +|>Tell F<ppport.h> to check for compatibility with the given +|>Perl version. The default is to check for compatibility with Perl +|>version 5.003. You can use this option to reduce the output +|>of F<ppport.h> if you intend to be backward compatible only +|>up to a certain Perl version. +|> +|>=head2 --cplusplus +|> +|>Usually, F<ppport.h> will detect C++ style comments and +|>replace them with C style comments for portability reasons. +|>Using this option instructs F<ppport.h> to leave C++ +|>comments untouched. +|> +|>=head2 --quiet +|> +|>Be quiet. Don't print anything except fatal errors. +|> +|>=head2 --nodiag +|> +|>Don't output any diagnostic messages. Only portability +|>alerts will be printed. +|> +|>=head2 --nohints +|> +|>Don't output any hints. Hints often contain useful portability +|>notes. +|> +|>=head2 --nochanges +|> +|>Don't suggest any changes. Only give diagnostic output and hints +|>unless these are also deactivated. +|> +|>=head2 --nofilter +|> +|>Don't filter the list of input files. By default, files not looking +|>like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. +|> +|>=head2 --list-provided +|> +|>Lists the API elements for which compatibility is provided by +|>F<ppport.h>. Also lists if it must be explicitly requested, +|>if it has dependencies, and if there are hints for it. +|> +|>=head2 --list-unsupported +|> +|>Lists the API elements that are known not to be supported by +|>F<ppport.h> and below which version of Perl they probably +|>won't be available or work. +|> +|>=head2 --api-info=I<name> +|> +|>Show portability information for API elements matching I<name>. +|>If I<name> is surrounded by slashes, it is interpreted as a regular +|>expression. +|> +|>=head1 DESCRIPTION +|> +|>In order for a Perl extension (XS) module to be as portable as possible +|>across differing versions of Perl itself, certain steps need to be taken. +|> +|>=over 4 +|> +|>=item * +|> +|>Including this header is the first major one. This alone will give you +|>access to a large part of the Perl API that hasn't been available in +|>earlier Perl releases. Use +|> +|> perl ppport.h --list-provided +|> +|>to see which API elements are provided by ppport.h. +|> +|>=item * +|> +|>You should avoid using deprecated parts of the API. For example, using +|>global Perl variables without the C<PL_> prefix is deprecated. Also, +|>some API functions used to have a C<perl_> prefix. Using this form is +|>also deprecated. You can safely use the supported API, as F<ppport.h> +|>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 +|>more C<#define>s in your source code before the inclusion of F<ppport.h>. +|> +|>These functions will be marked C<explicit> 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<static> or global variants. +|> +|>For a C<static> function, use: +|> +|> #define NEED_function +|> +|>For a global function, use: +|> +|> #define NEED_function_GLOBAL +|> +|>Note that you mustn't have more than one global request for one +|>function in your project. +|> +|> Function Static Request Global Request +|> ----------------------------------------------------------------------------------------- +|> eval_pv() NEED_eval_pv NEED_eval_pv_GLOBAL +|> grok_bin() NEED_grok_bin NEED_grok_bin_GLOBAL +|> grok_hex() NEED_grok_hex NEED_grok_hex_GLOBAL +|> grok_number() NEED_grok_number NEED_grok_number_GLOBAL +|> grok_numeric_radix() NEED_grok_numeric_radix NEED_grok_numeric_radix_GLOBAL +|> grok_oct() NEED_grok_oct NEED_grok_oct_GLOBAL +|> newCONSTSUB() NEED_newCONSTSUB NEED_newCONSTSUB_GLOBAL +|> newRV_noinc() NEED_newRV_noinc NEED_newRV_noinc_GLOBAL +|> sv_2pv_nolen() NEED_sv_2pv_nolen NEED_sv_2pv_nolen_GLOBAL +|> sv_2pvbyte() NEED_sv_2pvbyte NEED_sv_2pvbyte_GLOBAL +|> sv_catpvf_mg() NEED_sv_catpvf_mg NEED_sv_catpvf_mg_GLOBAL +|> sv_catpvf_mg_nocontext() NEED_sv_catpvf_mg_nocontext NEED_sv_catpvf_mg_nocontext_GLOBAL +|> sv_setpvf_mg() NEED_sv_setpvf_mg NEED_sv_setpvf_mg_GLOBAL +|> sv_setpvf_mg_nocontext() NEED_sv_setpvf_mg_nocontext NEED_sv_setpvf_mg_nocontext_GLOBAL +|> vnewSVpvf() NEED_vnewSVpvf NEED_vnewSVpvf_GLOBAL +|> +|>To avoid namespace conflicts, you can change the namespace of the +|>explicitly exported functions using the C<DPPP_NAMESPACE> macro. +|>Just C<#define> the macro before including C<ppport.h>: +|> +|> #define DPPP_NAMESPACE MyOwnNamespace_ +|> #include "ppport.h" +|> +|>The default namespace is C<DPPP_>. +|> +|>=back +|> +|>The good thing is that most of the above can be checked by running +|>F<ppport.h> on your source code. See the next section for +|>details. +|> +|>=head1 EXAMPLES +|> +|>To verify whether F<ppport.h> is needed for your module, whether you +|>should make any changes to your code, and whether any special defines +|>should be used, F<ppport.h> can be run as a Perl script to check your +|>source code. Simply say: +|> +|> perl ppport.h +|> +|>The result will usually be a list of patches suggesting changes +|>that should at least be acceptable, if not necessarily the most +|>efficient solution, or a fix for all possible problems. +|> +|>If you know that your XS module uses features only available in +|>newer Perl releases, if you're aware that it uses C++ comments, +|>and if you want all suggestions as a single patch file, you could +|>use something like this: +|> +|> perl ppport.h --compat-version=5.6.0 --cplusplus --patch=test.diff +|> +|>If you only want your code to be scanned without any suggestions +|>for changes, use: +|> +|> perl ppport.h --nochanges +|> +|>You can specify a different C<diff> program or options, using +|>the C<--diff> option: +|> +|> perl ppport.h --diff='diff -C 10' +|> +|>This would output context diffs with 10 lines of context. +|> +|>To display portability information for the C<newSVpvn> function, +|>use: +|> +|> perl ppport.h --api-info=newSVpvn +|> +|>Since the argument to C<--api-info> can be a regular expression, +|>you can use +|> +|> perl ppport.h --api-info=/_nomg$/ +|> +|>to display portability information for all C<_nomg> functions or +|> +|> perl ppport.h --api-info=/./ +|> +|>to display information for all known API elements. +|> +|>=head1 BUGS +|> +|>If this version of F<ppport.h> is causing failure during +|>the compilation of this module, please check if newer versions +|>of either this module or C<Devel::PPPort> are available on CPAN +|>before sending a bug report. +|> +|>If F<ppport.h> was generated using the latest version of +|>C<Devel::PPPort> and is causing failure of this module, please +|>file a bug report using the CPAN Request Tracker at L<http://rt.cpan.org/>. +|> +|>Please include the following information: +|> +|>=over 4 +|> +|>=item 1. +|> +|>The complete output from running "perl -V" +|> +|>=item 2. +|> +|>This file. +|> +|>=item 3. +|> +|>The name and version of the module you were trying to build. +|> +|>=item 4. +|> +|>A full log of the build that failed. +|> +|>=item 5. +|> +|>Any other information that you think could be relevant. +|> +|>=back +|> +|>For the latest version of this code, please get the C<Devel::PPPort> +|>module from CPAN. +|> +|>=head1 COPYRIGHT +|> +|>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. +|> +|>=head1 SEE ALSO +|> +|>See L<Devel::PPPort>. =cut @@ -1245,6 +1272,7 @@ my %opt = ( hints => 1, changes => 1, cplusplus => 0, + filter => 1, ); my($ppport) = $0 =~ /([\w.]+)$/; @@ -1254,7 +1282,7 @@ my $HS = "[ \t]"; # horizontal whitespace eval { require Getopt::Long; Getopt::Long::GetOptions(\%opt, qw( - help quiet diag! hints! changes! cplusplus + help quiet diag! filter! hints! changes! cplusplus patch=s copy=s diff=s compat-version=s list-provided list-unsupported api-info=s )) or usage(); @@ -1273,7 +1301,7 @@ if (exists $opt{'compat-version'}) { die "Invalid version number format: '$opt{'compat-version'}'\n"; } die "Only Perl 5 is supported\n" if $r != 5; - die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $v >= 1000; + die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; } else { @@ -1286,32 +1314,8 @@ my $cce = '*'.'/'; my $rccs = quotemeta $ccs; my $rcce = quotemeta $cce; -my @files; - -if (@ARGV) { - @files = map { glob $_ } @ARGV; -} -else { - eval { - require File::Find; - File::Find::find(sub { - $File::Find::name =~ /\.(xs|c|h|cc)$/i - and push @files, $File::Find::name; - }, '.'); - }; - if ($@) { - @files = map { glob $_ } qw(*.xs *.c *.h *.cc); - } - my %filter = map { /(.*)\.xs$/ ? ("$1.c" => 1) : () } @files; - @files = grep { !/\b\Q$ppport\E$/i && !exists $filter{$_} } @files; -} - -unless (@files) { - die "No input files given!\n"; -} - my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ - ? ( $1 => { + ? ( $1 => { ($2 ? ( base => $2 ) : ()), ($3 ? ( todo => $3 ) : ()), (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), @@ -1410,6 +1414,7 @@ ORIGMARK||| PAD_BASE_SV||| PAD_CLONE_VARS||| PAD_COMPNAME_FLAGS||| +PAD_COMPNAME_GEN_set||| PAD_COMPNAME_GEN||| PAD_COMPNAME_OURSTASH||| PAD_COMPNAME_PV||| @@ -1422,7 +1427,7 @@ PAD_SET_CUR_NOSAVE||| PAD_SET_CUR||| PAD_SVl||| PAD_SV||| -PERL_BCDVERSION|5.009002||p +PERL_BCDVERSION|5.009003||p PERL_GCC_BRACE_GROUPS_FORBIDDEN|5.008001||p PERL_INT_MAX|5.004000||p PERL_INT_MIN|5.004000||p @@ -1609,12 +1614,15 @@ SvIOKp||| SvIOK||| SvIVX||| SvIV_nomg|5.009001||p +SvIV_set||| SvIVx||| SvIV||| SvIsCOW_shared_hash||5.008003| SvIsCOW||5.008003| +SvLEN_set||| SvLEN||| SvLOCK||5.007003| +SvMAGIC_set||5.009003| SvNIOK_off||| SvNIOKp||| SvNIOK||| @@ -1624,6 +1632,7 @@ SvNOK_on||| SvNOKp||| SvNOK||| SvNVX||| +SvNV_set||| SvNVx||| SvNV||| SvOK||| @@ -1639,6 +1648,7 @@ SvPV_force_nomg|5.007002||p SvPV_force||| SvPV_nolen|5.006000||p SvPV_nomg|5.007002||p +SvPV_set||| SvPVbyte_force||5.009002| SvPVbyte_nolen||5.006000| SvPVbytex_force||5.006000| @@ -1657,9 +1667,11 @@ SvREFCNT||| SvROK_off||| SvROK_on||| SvROK||| +SvRV_set||5.009003| SvRV||| SvSETMAGIC||| SvSHARE||5.007003| +SvSTASH_set||5.009003| SvSTASH||| SvSetMagicSV_nosteal||5.004000| SvSetMagicSV||5.004000| @@ -1680,6 +1692,7 @@ SvUTF8||5.006000| SvUVXx|5.004000||p SvUVX|5.004000||p SvUV_nomg|5.009001||p +SvUV_set||5.009003| SvUVx|5.004000||p SvUV|5.004000||p SvVOK||5.008001| @@ -1743,6 +1756,7 @@ asIV||| asUV||| atfork_lock||5.007003|n atfork_unlock||5.007003|n +av_arylen_p||5.009003| av_clear||| av_delete||5.006000| av_exists||5.006000| @@ -1789,6 +1803,47 @@ cast_uv||5.006000| check_uni||| checkcomma||| checkposixcc||| +ck_anoncode||| +ck_bitop||| +ck_concat||| +ck_defined||| +ck_delete||| +ck_die||| +ck_eof||| +ck_eval||| +ck_exec||| +ck_exists||| +ck_exit||| +ck_ftst||| +ck_fun||| +ck_glob||| +ck_grep||| +ck_index||| +ck_join||| +ck_lengthconst||| +ck_lfun||| +ck_listiob||| +ck_match||| +ck_method||| +ck_null||| +ck_open||| +ck_repeat||| +ck_require||| +ck_retarget||| +ck_return||| +ck_rfun||| +ck_rvconst||| +ck_sassign||| +ck_select||| +ck_shift||| +ck_sort||| +ck_spair||| +ck_split||| +ck_subr||| +ck_substr||| +ck_svconst||| +ck_trunc||| +ck_unpack||| cl_and||| cl_anything||| cl_init_zero||| @@ -1812,6 +1867,7 @@ cv_undef||| cx_dump||5.005000| cx_dup||| cxinc||| +dAXMARK||5.009003| dAX|5.007002||p dITEMS|5.007002||p dMARK||| @@ -1841,18 +1897,6 @@ debstack||5.007003| deb||5.007003|v del_he||| del_sv||| -del_xiv||| -del_xnv||| -del_xpvav||| -del_xpvbm||| -del_xpvcv||| -del_xpvhv||| -del_xpviv||| -del_xpvlv||| -del_xpvmg||| -del_xpvnv||| -del_xpv||| -del_xrv||| delimcpy||5.004000| depcom||| deprecate_old||| @@ -1916,7 +1960,6 @@ do_vecset||| do_vop||| docatch_body||| docatch||| -doencodes||| doeval||| dofile||| dofindlabel||| @@ -1972,6 +2015,7 @@ form_nocontext|||vn form||5.004000|v fp_dup||| fprintf_nocontext|||vn +free_global_struct||| free_tied_hv_pool||| free_tmps||| gen_constant_list||| @@ -2031,15 +2075,19 @@ gv_stashpvn|5.006000||p gv_stashpv||| gv_stashsv||| he_dup||| +hek_dup||| hfreeentries||| hsplit||| hv_assert||5.009001| +hv_auxinit||| hv_clear_placeholders||5.009001| hv_clear||| hv_delayfree_ent||5.004000| hv_delete_common||| hv_delete_ent||5.004000| hv_delete||| +hv_eiter_p||5.009003| +hv_eiter_set||5.009003| hv_exists_ent||5.004000| hv_exists||| hv_fetch_common||| @@ -2056,7 +2104,13 @@ hv_iterval||| hv_ksplit||5.004000| hv_magic_check||| hv_magic||| +hv_name_set||5.009003| hv_notallowed||| +hv_placeholders_get||5.009003| +hv_placeholders_p||5.009003| +hv_placeholders_set||5.009003| +hv_riter_p||5.009003| +hv_riter_set||5.009003| hv_scalar||5.009001| hv_store_ent||5.004000| hv_store_flags||5.008000| @@ -2071,6 +2125,7 @@ incpush||| ingroup||| init_argv_symbols||| init_debugger||| +init_global_struct||| init_i18nl10n||5.006000| init_i18nl14n||5.006000| init_ids||| @@ -2098,6 +2153,7 @@ is_an_int||| is_gv_magical_sv||| is_gv_magical||| is_handle_constructor||| +is_list_assignment||| is_lvalue_sub||5.007001| is_uni_alnum_lc||5.006000| is_uni_alnumc_lc||5.006000| @@ -2131,6 +2187,7 @@ is_utf8_alnumc||5.006000| is_utf8_alnum||5.006000| is_utf8_alpha||5.006000| is_utf8_ascii||5.006000| +is_utf8_char_slow||| is_utf8_char||5.006000| is_utf8_cntrl||5.006000| is_utf8_digit||5.006000| @@ -2142,6 +2199,7 @@ is_utf8_mark||5.006000| is_utf8_print||5.006000| is_utf8_punct||5.006000| is_utf8_space||5.006000| +is_utf8_string_loclen||5.009003| is_utf8_string_loc||5.008001| is_utf8_string||5.006001| is_utf8_upper||5.006000| @@ -2155,7 +2213,6 @@ leave_scope||| lex_end||| lex_start||| linklist||| -list_assignment||| listkids||| list||| load_module_nocontext|||vn @@ -2177,6 +2234,7 @@ magic_clearpack||| magic_clearsig||| magic_dump||5.006000| magic_existspack||| +magic_freearylen_p||| magic_freeovrld||| magic_freeregexp||| magic_getarylen||| @@ -2226,6 +2284,7 @@ magic_set||| magic_sizepack||| magic_wipepack||| magicname||| +make_trie||| malloced_size|||n malloc||5.007002|n markstack_grow||| @@ -2245,6 +2304,7 @@ mg_find||| mg_free||| mg_get||| mg_length||5.005000| +mg_localize||| mg_magical||| mg_set||| mg_size||5.005000| @@ -2253,20 +2313,6 @@ missingterm||| mode_from_discipline||| modkids||| mod||| -more_he||| -more_sv||| -more_xiv||| -more_xnv||| -more_xpvav||| -more_xpvbm||| -more_xpvcv||| -more_xpvhv||| -more_xpviv||| -more_xpvlv||| -more_xpvmg||| -more_xpvnv||| -more_xpv||| -more_xrv||| moreswitches||| mul128||| mulexp10|||n @@ -2364,6 +2410,7 @@ newSTATEOP||| newSUB||| newSVOP||| newSVREF||| +newSVhek||5.009003| newSViv||| newSVnv||| newSVpvf_nocontext|||vn @@ -2376,7 +2423,7 @@ newSVsv||| newSVuv|5.006000||p newSV||| newUNOP||| -newWHILEOP||5.004040| +newWHILEOP||5.009003| newXSproto||5.006000| newXS||5.006000| new_collate||5.006000| @@ -2387,18 +2434,6 @@ new_logop||| new_numeric||5.006000| new_stackinfo||5.005000| new_version||5.009000| -new_xiv||| -new_xnv||| -new_xpvav||| -new_xpvbm||| -new_xpvcv||| -new_xpvhv||| -new_xpviv||| -new_xpvlv||| -new_xpvmg||| -new_xpvnv||| -new_xpv||| -new_xrv||| next_symbol||| nextargv||| nextchar||| @@ -2434,6 +2469,7 @@ pad_add_name||| pad_alloc||| pad_block_start||| pad_check_dup||| +pad_compname_type||| pad_findlex||| pad_findmy||| pad_fixup_inner_anons||| @@ -2540,6 +2576,7 @@ rsignal||5.004000| run_body||| runops_debug||5.005000| runops_standard||5.005000| +rvpv_dup||| rxres_free||| rxres_restore||| rxres_save||| @@ -2643,6 +2680,7 @@ ss_dup||| stack_grow||| start_glob||| start_subparse||5.004000| +stashpv_hvname_match||5.009003| stdize_locale||| strEQ||| strGE||| @@ -2863,6 +2901,7 @@ uvchr_to_utf8||5.007001| uvuni_to_utf8_flags||5.007003| uvuni_to_utf8||5.007001| validate_suid||| +varname||| vcmp||5.009000| vcroak||5.006000| vdeb||5.007003| @@ -2981,6 +3020,44 @@ if (exists $opt{'list-provided'}) { exit 0; } +my @files; +my @srcext = qw( xs c h cc cpp ); +my $srcext = join '|', @srcext; + +if (@ARGV) { + my %seen; + @files = grep { -f && !exists $seen{$_} } map { glob $_ } @ARGV; +} +else { + eval { + require File::Find; + File::Find::find(sub { + $File::Find::name =~ /\.($srcext)$/i + and push @files, $File::Find::name; + }, '.'); + }; + if ($@) { + @files = map { glob "*.$_" } @srcext; + } +} + +if (!@ARGV || $opt{filter}) { + my(@in, @out); + my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; + for (@files) { + my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/\.($srcext)$/i; + push @{ $out ? \@out : \@in }, $_; + } + if (@ARGV && @out) { + warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); + } + @files = @in; +} + +unless (@files) { + die "No input files given!\n"; +} + my(%files, %global, %revreplace); %revreplace = reverse %replace; my $filename; @@ -3515,7 +3592,7 @@ __DATA__ #define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION) -/* It is very unlikely that anyone will try to use this with Perl 6 +/* It is very unlikely that anyone will try to use this with Perl 6 (or greater), but who knows. */ #if PERL_REVISION != 5 @@ -4001,7 +4078,7 @@ typedef NVTYPE NV; # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else -# define PTR2ul(p) INT2PTR(unsigned long,p) +# define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif /* !INT2PTR */ @@ -4167,15 +4244,15 @@ typedef NVTYPE NV; #endif #ifndef pTHX_ -# define pTHX_ +# define pTHX_ #endif #ifndef aTHX -# define aTHX +# define aTHX #endif #ifndef aTHX_ -# define aTHX_ +# define aTHX_ #endif #ifndef dTHXoa # define dTHXoa(x) dTHXa(x) @@ -4493,7 +4570,7 @@ DPPP_(my_newCONSTSUB)(HV *stash, char *name, SV *sv) #ifndef NVef # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ - defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ + defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ # define NVef PERL_PRIeldbl # define NVff PERL_PRIfldbl # define NVgf PERL_PRIgldbl @@ -4523,7 +4600,7 @@ extern char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv); char * DPPP_(my_sv_2pv_nolen)(pTHX_ register SV *sv) -{ +{ STRLEN n_a; return sv_2pv(sv, &n_a); } @@ -4567,7 +4644,7 @@ extern char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp); char * DPPP_(my_sv_2pvbyte)(pTHX_ register SV *sv, STRLEN *lp) -{ +{ sv_utf8_downgrade(sv,0); return SvPV(sv,*lp); } @@ -5245,12 +5322,12 @@ DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) { #ifdef USE_LOCALE_NUMERIC #ifdef PL_numeric_radix_sv - if (PL_numeric_radix_sv && IN_LOCALE) { + if (PL_numeric_radix_sv && IN_LOCALE) { STRLEN len; char* radix = SvPV(PL_numeric_radix_sv, len); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; - return TRUE; + return TRUE; } } #else @@ -5261,11 +5338,11 @@ DPPP_(my_grok_numeric_radix)(pTHX_ const char **sp, const char *send) dTHR; /* needed for older threaded perls */ struct lconv *lc = localeconv(); char *radix = lc->decimal_point; - if (radix && IN_LOCALE) { + if (radix && IN_LOCALE) { STRLEN len = strlen(radix); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; - return TRUE; + return TRUE; } } #endif /* PERL_VERSION */ @@ -5578,7 +5655,7 @@ DPPP_(my_grok_bin)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) warn("Illegal binary digit '%c' ignored", *s); break; } - + if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) @@ -5680,7 +5757,7 @@ DPPP_(my_grok_hex)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) warn("Illegal hexadecimal digit '%c' ignored", *s); break; } - + if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) @@ -5773,7 +5850,7 @@ DPPP_(my_grok_oct)(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) } break; } - + if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) diff --git a/ext/Devel/PPPort/PPPort.xs b/ext/Devel/PPPort/PPPort.xs index 731741b770..dd6465feb5 100644 --- a/ext/Devel/PPPort/PPPort.xs +++ b/ext/Devel/PPPort/PPPort.xs @@ -87,13 +87,13 @@ XS(XS_Devel__PPPort_dXSTARG) /* ---- from parts/inc/MY_CXT ---- */ #define MY_CXT_KEY "Devel::PPPort::_guts" XS_VERSION - + typedef struct { /* Put Global Data in here */ - int dummy; + int dummy; } my_cxt_t; - -START_MY_CXT + +START_MY_CXT /* ---- from parts/inc/newCONSTSUB ---- */ void call_newCONSTSUB_1(void) diff --git a/ext/Devel/PPPort/PPPort_pm.PL b/ext/Devel/PPPort/PPPort_pm.PL index e99223016c..61ac6b2c76 100644 --- a/ext/Devel/PPPort/PPPort_pm.PL +++ b/ext/Devel/PPPort/PPPort_pm.PL @@ -4,9 +4,9 @@ # ################################################################################ # -# $Revision: 33 $ +# $Revision: 36 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:55 +0100 $ +# $Date: 2005/06/25 17:56:28 +0200 $ # ################################################################################ # @@ -47,7 +47,7 @@ $data =~ s{^(.*)__PROVIDED_API__(\s*?)^} for (keys %explicit) { length > $len and $len = length; } - my $format = sprintf "%%-%ds %%-%ds %%-%ds", $len+2, $len+5, $len+12; + my $format = sprintf '%%-%ds %%-%ds %%s', $len+2, $len+5; $len = 3*$len + 23; $data =~ s/^(.*)__EXPLICIT_API__(\s*?)^/ @@ -125,7 +125,7 @@ $data =~ s{^__UNSUPPORTED_API__(\s*?)^} {join "\n", @todo}gem; $data =~ s{__MIN_PERL__}{5.003}g; -$data =~ s{__MAX_PERL__}{5.9.2}g; +$data =~ s{__MAX_PERL__}{5.9.3}g; open FH, ">PPPort.pm" or die "PPPort.pm: $!\n"; print FH $data; @@ -196,7 +196,7 @@ sub expand_undefined my($macro, $withargs, $def) = @_; my $rv = "#ifndef $macro\n# define "; - if (defined $def) { + if (defined $def && $def =~ /\S/) { $rv .= sprintf "%-30s %s", $withargs, $def; } else { @@ -309,9 +309,9 @@ __DATA__ # ################################################################################ # -# $Revision: 33 $ +# $Revision: 36 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:55 +0100 $ +# $Date: 2005/06/25 17:56:28 +0200 $ # ################################################################################ # @@ -348,10 +348,10 @@ contains a series of macros and, if explicitly requested, functions that allow XS modules to be built using older versions of Perl. Currently, Perl versions from __MIN_PERL__ to __MAX_PERL__ are supported. -This module is used by C<h2xs> to write the file F<ppport.h>. +This module is used by C<h2xs> to write the file F<ppport.h>. =head2 Why use ppport.h? - + You should use F<ppport.h> in modern code so that your code will work with the widest range of Perl interpreters possible, without significant additional work. @@ -370,7 +370,7 @@ They are most probably no XS writers. Also, don't make F<ppport.h> optional. Rather, just take the most recent copy of F<ppport.h> that you can find (e.g. by generating it with the latest C<Devel::PPPort> release from CPAN), copy it into your project, adjust your project to -use it, and distribute the header along with your module. +use it, and distribute the header along with your module. =head2 Running ppport.h @@ -473,12 +473,13 @@ require DynaLoader; use strict; use vars qw($VERSION @ISA $data); -$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.06 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; +$VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.06_01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; @ISA = qw(DynaLoader); bootstrap Devel::PPPort; +sub _init_data { $data = do { local $/; <DATA> }; my $now = localtime; @@ -487,12 +488,13 @@ bootstrap Devel::PPPort; $data =~ s/__VERSION__/$VERSION/g; $data =~ s/__DATE__/$now/g; $data =~ s/__PKG__/$pkg/g; - $data =~ s/^POD\s//gm; + $data =~ s/^\|>//gm; } sub WriteFile { my $file = shift || 'ppport.h'; + defined $data or _init_data(); my $copy = $data; $copy =~ s/\bppport\.h\b/$file/g; @@ -512,21 +514,21 @@ __DATA__ /* ---------------------------------------------------------------------- - ppport.h -- Perl/Pollution/Portability Version __VERSION__ - + ppport.h -- Perl/Pollution/Portability Version __VERSION__ + Automatically created by __PKG__ running under perl __PERL_VERSION__ on __DATE__. - + Do NOT edit this file directly! -- Edit PPPort_pm.PL and the includes in parts/inc/ instead. - + Use 'perldoc ppport.h' to view the documentation below. ---------------------------------------------------------------------- SKIP -%include ppphdoc { indent => 'POD ' } +%include ppphdoc { indent => '|>' } %include ppphbin diff --git a/ext/Devel/PPPort/devel/buildperl.pl b/ext/Devel/PPPort/devel/buildperl.pl index b26a3e9e3e..5a1c13b4d9 100644 --- a/ext/Devel/PPPort/devel/buildperl.pl +++ b/ext/Devel/PPPort/devel/buildperl.pl @@ -5,9 +5,9 @@ # ################################################################################ # -# $Revision: 4 $ +# $Revision: 6 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:49 +0100 $ +# $Date: 2005/03/10 18:10:17 +0100 $ # ################################################################################ # @@ -37,18 +37,18 @@ my %opt = ( ); my %config = ( - default => { + default => { config_args => '-des', }, - thread => { + thread => { config_args => '-des -Dusethreads', masked_versions => [ qr/^perl5\.00[01234]/ ], }, - thread5005 => { + thread5005 => { config_args => '-des -Duse5005threads', masked_versions => [ qr/^perl5\.00[012345]|^perl-5.(9|\d\d)/ ], }, - debug => { + debug => { config_args => '-des -Doptimize=-g', }, ); @@ -173,7 +173,7 @@ sub expand sub is { my($s1, $s2) = @_; - + defined $s1 != defined $s2 and return 0; ref $s2 and ($s1, $s2) = ($s2, $s1); @@ -270,7 +270,7 @@ sub patch_doio @@ -75,6 +75,16 @@ # endif #endif - + +#if _SEM_SEMUN_UNDEFINED +union semun +{ diff --git a/ext/Devel/PPPort/devel/mkapidoc.sh b/ext/Devel/PPPort/devel/mkapidoc.sh index 74da36f982..c0dccac151 100644 --- a/ext/Devel/PPPort/devel/mkapidoc.sh +++ b/ext/Devel/PPPort/devel/mkapidoc.sh @@ -5,9 +5,9 @@ # ################################################################################ # -# $Revision: 6 $ +# $Revision: 7 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:49 +0100 $ +# $Date: 2005/03/10 18:21:59 +0100 $ # ################################################################################ # @@ -64,7 +64,7 @@ fi if isperlroot $PERLROOT; then grep -hr '^=for apidoc' $PERLROOT | sed -e 's/=for apidoc //' | grep '|' | sort | uniq \ | perl -e'$f=pop;open(F,$f)||die"$f:$!";while(<F>){(split/\|/)[2]=~/(\w+)/;$h{$1}++} - while(<>){(split/\|/)[2]=~/(\w+)/;$h{$1}||print}' $EMBED >$OUTPUT + while(<>){s/[ \t]+$//;(split/\|/)[2]=~/(\w+)/;$h{$1}||print}' $EMBED >$OUTPUT else usage fi diff --git a/ext/Devel/PPPort/mktests.PL b/ext/Devel/PPPort/mktests.PL index 684a5cafba..cb8a874673 100644 --- a/ext/Devel/PPPort/mktests.PL +++ b/ext/Devel/PPPort/mktests.PL @@ -4,9 +4,9 @@ # ################################################################################ # -# $Revision: 19 $ +# $Revision: 20 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:50 +0100 $ +# $Date: 2005/03/10 18:45:54 +0100 $ # ################################################################################ # @@ -44,7 +44,7 @@ for $file (glob 'parts/inc/*') { $tmpl =~ s/__SOURCE__/$file/mg; $tmpl =~ s/__PLAN__/$spec->{OPTIONS}{tests}{plan}/mg; $tmpl =~ s/^__TESTS__$/$spec->{tests}/mg; - + open FH, ">$testfile" or die "$testfile: $!\n"; print FH $tmpl; close FH; diff --git a/ext/Devel/PPPort/parts/apicheck.pl b/ext/Devel/PPPort/parts/apicheck.pl index b4b668f74d..d737afe628 100644 --- a/ext/Devel/PPPort/parts/apicheck.pl +++ b/ext/Devel/PPPort/parts/apicheck.pl @@ -5,9 +5,9 @@ # ################################################################################ # -# $Revision: 11 $ +# $Revision: 13 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:51 +0100 $ +# $Date: 2005/06/25 16:47:31 +0200 $ # ################################################################################ # @@ -85,18 +85,22 @@ my %ignorerv = ( ); my %stack = ( - ORIGMARK => ['dORIGMARK;'], - POPpx => ['STRLEN n_a;'], - POPpbytex => ['STRLEN n_a;'], - PUSHp => ['dTARG;'], - PUSHn => ['dTARG;'], - PUSHi => ['dTARG;'], - PUSHu => ['dTARG;'], - XPUSHp => ['dTARG;'], - XPUSHn => ['dTARG;'], - XPUSHi => ['dTARG;'], - XPUSHu => ['dTARG;'], - UNDERBAR => ['dUNDERBAR;'], + ORIGMARK => ['dORIGMARK;'], + POPpx => ['STRLEN n_a;'], + POPpbytex => ['STRLEN n_a;'], + PUSHp => ['dTARG;'], + PUSHn => ['dTARG;'], + PUSHi => ['dTARG;'], + PUSHu => ['dTARG;'], + XPUSHp => ['dTARG;'], + XPUSHn => ['dTARG;'], + XPUSHi => ['dTARG;'], + XPUSHu => ['dTARG;'], + UNDERBAR => ['dUNDERBAR;'], + XCPT_TRY_START => ['dXCPT;'], + XCPT_TRY_END => ['dXCPT;'], + XCPT_CATCH => ['dXCPT;'], + XCPT_RETHROW => ['dXCPT;'], ); my %postcode = ( @@ -136,6 +140,8 @@ print OUT <<HEAD; #include "EXTERN.h" #include "perl.h" + +#define NO_XSLOCKS #include "XSUB.h" #ifndef DPPP_APICHECK_NO_PPPORT_H @@ -192,7 +198,11 @@ for $f (@f) { push @arg, qw(VARarg1 VARarg2 VARarg3); last; } - my($n, $p, $d) = $a =~ /^(\w+(?:\s+\w+)*)\s*(\**)((?:\[[^\]]*\])*)$/ or die; + my($n, $p, $d) = $a =~ /^ (\w+(?:\s+\w+)*)\s* # type name => $n + (\**) # pointer => $p + ((?:\[[^\]]*\])*) # dimension => $d + $/x + or die "$0 - cannot parse argument: [$a]\n"; if (exists $amap{$n}) { push @arg, $amap{$n}; next; diff --git a/ext/Devel/PPPort/parts/apidoc.fnc b/ext/Devel/PPPort/parts/apidoc.fnc index 0e67f047d4..0f824893ae 100644 --- a/ext/Devel/PPPort/parts/apidoc.fnc +++ b/ext/Devel/PPPort/parts/apidoc.fnc @@ -85,11 +85,13 @@ Am|NV|SvNVX|SV* sv Amn|(whatever)|RETVAL Amn|(whatever)|THIS Ams||dAX +Ams||dAXMARK Ams||dITEMS Ams||dMARK Ams||dORIGMARK Ams||dSP Ams||dUNDERBAR +Ams||dXCPT Ams||dXSARGS Ams||dXSI32 Ams||ENTER @@ -112,6 +114,7 @@ Am|SV*|ST|int ix Am|SV*|SvREFCNT_inc|SV* sv Am|SV*|SvRV|SV* sv Am|svtype|SvTYPE|SV* sv +Ams||XCPT_RETHROW Ams||XSRETURN_EMPTY Ams||XSRETURN_NO Ams||XSRETURN_UNDEF @@ -129,7 +132,7 @@ AmU||HEf_SVKEY AmU||MARK AmU||newXSproto|char* name|XSUBADDR_t f|char* filename|const char *proto AmU||Nullav -AmU||Nullch +AmU||Nullch AmU||Nullcv AmU||Nullhv AmU||Nullsv @@ -148,6 +151,9 @@ Am|UV|SvUV_nomg|SV* sv Am|UV|SvUV|SV* sv Am|UV|SvUVx|SV* sv Am|UV|SvUVX|SV* sv +AmU||XCPT_CATCH +AmU||XCPT_TRY_END +AmU||XCPT_TRY_START AmU||XS AmU||XS_VERSION Am|void *|CopyD|void* src|void* dest|int nitems|type @@ -187,18 +193,24 @@ Am|void|SvIOK_off|SV* sv Am|void|SvIOK_only|SV* sv Am|void|SvIOK_only_UV|SV* sv Am|void|SvIOK_on|SV* sv +Am|void|SvIV_set|SV* sv|IV val +Am|void|SvLEN_set|SV* sv|STRLEN len Am|void|SvLOCK|SV* sv +Am|void|SvMAGIC_set|SV* sv|MAGIC* val Am|void|SvNIOK_off|SV* sv Am|void|SvNOK_off|SV* sv Am|void|SvNOK_only|SV* sv Am|void|SvNOK_on|SV* sv +Am|void|SvNV_set|SV* sv|NV val Am|void|SvPOK_off|SV* sv Am|void|SvPOK_only|SV* sv Am|void|SvPOK_only_UTF8|SV* sv Am|void|SvPOK_on|SV* sv +Am|void|SvPV_set|SV* sv|char* val Am|void|SvREFCNT_dec|SV* sv Am|void|SvROK_off|SV* sv Am|void|SvROK_on|SV* sv +Am|void|SvRV_set|SV* sv|SV* val Am|void|SvSetMagicSV_nosteal|SV* dsv|SV* ssv Am|void|SvSETMAGIC|SV* sv Am|void|SvSetMagicSV|SV* dsb|SV* ssv @@ -206,6 +218,7 @@ Am|void|sv_setsv_nomg|SV* dsv|SV* ssv Am|void|SvSetSV_nosteal|SV* dsv|SV* ssv Am|void|SvSetSV|SV* dsb|SV* ssv Am|void|SvSHARE|SV* sv +Am|void|SvSTASH_set|SV* sv|STASH* val Am|void|SvTAINTED_off|SV* sv Am|void|SvTAINTED_on|SV* sv Am|void|SvTAINT|SV* sv @@ -214,6 +227,7 @@ Am|void|SvUOK|SV* sv Am|void|SvUPGRADE|SV* sv|svtype type Am|void|SvUTF8_off|SV *sv Am|void|SvUTF8_on|SV *sv +Am|void|SvUV_set|SV* sv|UV val Am|void|XPUSHi|IV iv Am|void|XPUSHmortal Am|void|XPUSHn|NV nv @@ -247,6 +261,7 @@ mn|SV*|PL_ofs_sv mn|SV*|PL_rs ms||djSP m|STRLEN|PAD_COMPNAME_GEN|PADOFFSET po +m|STRLEN|PAD_COMPNAME_GEN_set|PADOFFSET po|int gen m|SV *|CX_CURPAD_SV|struct context|PADOFFSET po m|SV *|PAD_BASE_SV |PADLIST padlist|PADOFFSET po m|SV *|PAD_SETSV |PADOFFSET po|SV* sv diff --git a/ext/Devel/PPPort/parts/base/5006000 b/ext/Devel/PPPort/parts/base/5006000 index f26d1726ed..1a7dd17e89 100644 --- a/ext/Devel/PPPort/parts/base/5006000 +++ b/ext/Devel/PPPort/parts/base/5006000 @@ -7,6 +7,7 @@ SvIOK_notUV # U SvIOK_only_UV # U SvNV # E SvNVX # E +SvNV_set # E SvNVx # E SvPOK_only_UTF8 # U SvPV_nolen # E @@ -263,7 +264,6 @@ newSVrv # E (Perl_newSVrv) newSVsv # E (Perl_newSVsv) newSVuv # E newUNOP # E (Perl_newUNOP) -newWHILEOP # E (Perl_newWHILEOP) newXS # E (Perl_newXS) newXSproto # E new_collate # E (perl_new_collate) diff --git a/ext/Devel/PPPort/parts/base/5009002 b/ext/Devel/PPPort/parts/base/5009002 index 69a452632d..ffc0ffc7ce 100644 --- a/ext/Devel/PPPort/parts/base/5009002 +++ b/ext/Devel/PPPort/parts/base/5009002 @@ -4,9 +4,14 @@ MoveD # E PUSHmortal # E SvPVbyte_force # E UNDERBAR # E +XCPT_CATCH # E +XCPT_RETHROW # E +XCPT_TRY_END # E +XCPT_TRY_START # E XPUSHmortal # E ZeroD # E dUNDERBAR # E +dXCPT # E find_rundefsvoffset # U gv_fetchpvn_flags # E gv_fetchsv # E @@ -23,9 +28,3 @@ op_refcnt_unlock # U savesvpv # E vnormal # E MY_CXT_CLONE # added by devel/scanprov -PERL_BCDVERSION # added by devel/scanprov -XCPT_CATCH # added by devel/scanprov -XCPT_RETHROW # added by devel/scanprov -XCPT_TRY_END # added by devel/scanprov -XCPT_TRY_START # added by devel/scanprov -dXCPT # added by devel/scanprov diff --git a/ext/Devel/PPPort/parts/embed.fnc b/ext/Devel/PPPort/parts/embed.fnc index c33d6cd544..c05c4220ac 100644 --- a/ext/Devel/PPPort/parts/embed.fnc +++ b/ext/Devel/PPPort/parts/embed.fnc @@ -24,6 +24,17 @@ : b binary backward compatibility; function is a macro : but has also Perl_ implementation (which is exported) : U suppress usage example in autogenerated documentation +: a allocates memory a la malloc/calloc. Is also "R". +: 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 +: +: Pointer parameters that must not be passed NULLs should be prefixed with NN. +: +: Pointer parameters that may be NULL should be prefixed with NULLOK. This has +: no effect on output yet. It's a notation for the maintainers to know "I have +: defined whether NULL is OK or not" rather than having neither NULL or NULLOK, +: which is ambiguous. : : Individual flags may be separated by whitespace. : @@ -41,13 +52,13 @@ Ano |PerlInterpreter* |perl_alloc_using \ |struct IPerlProc* p #endif Anod |PerlInterpreter* |perl_alloc -Anod |void |perl_construct |PerlInterpreter* interp -Anod |int |perl_destruct |PerlInterpreter* interp -Anod |void |perl_free |PerlInterpreter* interp -Anod |int |perl_run |PerlInterpreter* interp +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 -Anp |bool |doing_taint |int argc|char** argv|char** env +AnpR |bool |doing_taint |int argc|char** argv|char** env #if defined(USE_ITHREADS) Anod |PerlInterpreter*|perl_clone|PerlInterpreter* interp|UV flags # if defined(PERL_IMPLICIT_SYS) @@ -60,12 +71,12 @@ Ano |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \ # endif #endif -Anop |Malloc_t|malloc |MEM_SIZE nbytes -Anop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size -Anop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes +Aanop |Malloc_t|malloc |MEM_SIZE nbytes +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) -np |MEM_SIZE|malloced_size |void *p +npR |MEM_SIZE|malloced_size |void *p #endif Anp |void* |get_context @@ -82,39 +93,40 @@ 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|char *stashpv|CV *cv|char *attrstr|STRLEN len +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 -Apd |bool |av_exists |AV* ar|I32 key -Apd |void |av_extend |AV* ar|I32 key -p |AV* |av_fake |I32 size|SV** svp -Apd |SV** |av_fetch |AV* ar|I32 key|I32 lval +ApdR |bool |av_exists |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 -Apd |I32 |av_len |AV* ar -Apd |AV* |av_make |I32 size|SV** svp +ApdR |I32 |av_len |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 -Apd |SV* |av_shift |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 -p |OP* |bind_match |I32 type|OP* left|OP* pat -p |OP* |block_end |I32 floor|OP* seq -Ap |I32 |block_gimme -p |int |block_start |int full +Apo |SV** |av_arylen_p |AV* av +pR |OP* |bind_match |I32 type|NN OP* left|NN OP* pat +pR |OP* |block_end |I32 floor|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|AV* av_list -p |bool |cando |Mode_t mode|Uid_t effective|Stat_t* statbufp -Ap |U32 |cast_ulong |NV f -Ap |I32 |cast_i32 |NV f -Ap |IV |cast_iv |NV f -Ap |UV |cast_uv |NV f +Ap |void |call_list |I32 oldscope|NN AV* av_list +pR |bool |cando |Mode_t mode|Uid_t effective|NN const Stat_t* statbufp +ApR |U32 |cast_ulong |NV f +ApR |I32 |cast_i32 |NV f +ApR |IV |cast_iv |NV f +ApR |UV |cast_uv |NV f #if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP) -Ap |I32 |my_chsize |int fd|Off_t length +ApR |I32 |my_chsize |int fd|Off_t length #endif -p |OP* |convert |I32 optype|I32 flags|OP* o +pR |OP* |convert |I32 optype|I32 flags|OP* o Afprd |void |croak |const char* pat|... Apr |void |vcroak |const char* pat|va_list* args #if defined(PERL_IMPLICIT_CONTEXT) @@ -134,43 +146,43 @@ 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 |CV* cv|GV* gv|char* p -pd |CV* |cv_clone |CV* proto +p |void |cv_ckproto |NN const CV* cv|const GV* gv|const char* p +pd |CV* |cv_clone |NN CV* proto Apd |SV* |cv_const_sv |CV* cv -p |SV* |op_const_sv |OP* o|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 -Ap |char** |get_op_descs -Ap |char** |get_op_names -p |char* |get_no_modify -p |U32* |get_opargs -Ap |PPADDR_t*|get_ppaddr -Ep |I32 |cxinc +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 Ap |void |debprofdump -Ap |I32 |debop |OP* o +Ap |I32 |debop |NN const OP* o Ap |I32 |debstack Ap |I32 |debstackptrs -Ap |char* |delimcpy |char* to|char* toend|char* from \ - |char* fromend|int delim|I32* retlen -p |void |deprecate |char* s -p |void |deprecate_old |char* s +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 |char* message|STRLEN msglen +p |OP* |die_where |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 -Ap |int |do_binmode |PerlIO *fp|int iotype|int mode -p |void |do_chop |SV* asv|SV* sv -Ap |bool |do_close |GV* gv|bool not_implicit -p |bool |do_eof |GV* gv -p |bool |do_exec |char* cmd -#if defined(WIN32) +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 @@ -187,7 +199,7 @@ 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 #endif -Ap |void |do_join |SV* sv|SV* del|SV** mark|SV** sp +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 @@ -206,8 +218,8 @@ 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 -p |UV |do_vecget |SV* sv|I32 offset|I32 size -p |void |do_vecset |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 @@ -216,19 +228,19 @@ Ap |void |dump_eval #if defined(DUMP_FDS) Ap |void |dump_fds |char* s #endif -Ap |void |dump_form |GV* gv +Ap |void |dump_form |const GV* gv Ap |void |gv_dump |GV* gv -Ap |void |op_dump |OP* arg +Ap |void |op_dump |const OP* arg Ap |void |pmop_dump |PMOP* pm -Ap |void |dump_packsubs |HV* stash -Ap |void |dump_sub |GV* gv +Ap |void |dump_packsubs |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 |char *scriptname|bool dosearch \ - |char **search_ext|I32 flags -p |OP* |force_list |OP* arg -p |OP* |fold_constants |OP* arg +p |char* |find_script |const char *scriptname|bool dosearch \ + |const char **search_ext|I32 flags +p |OP* |force_list |NN OP* arg +p |OP* |fold_constants |NN OP* arg Afpd |char* |form |const char* pat|... Ap |char* |vform |const char* pat|va_list* args Ap |void |free_tmps @@ -238,16 +250,15 @@ p |char* |getenv_len |const char* key|unsigned long *len #endif Ap |void |gp_free |GV* gv Ap |GP* |gp_ref |GP* gp -Ap |GV* |gv_AVadd |GV* gv -Ap |GV* |gv_HVadd |GV* gv -Ap |GV* |gv_IOadd |GV* gv -Ap |GV* |gv_autoload4 |HV* stash|const char* name|STRLEN len \ - |I32 method +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|GV* gv -Amb |void |gv_efullname3 |SV* sv|GV* gv|const char* prefix -Ap |void |gv_efullname4 |SV* sv|GV* gv|const char* prefix|bool keepmain -Ap |GV* |gv_fetchfile |const char* name +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 +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 \ @@ -256,11 +267,10 @@ 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|GV* gv -Amb |void |gv_fullname3 |SV* sv|GV* gv|const char* prefix -Ap |void |gv_fullname4 |SV* sv|GV* gv|const char* prefix|bool keepmain -Ap |void |gv_init |GV* gv|HV* stash|const char* name \ - |STRLEN len|int multi +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 @@ -268,19 +278,19 @@ 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 -Apd |bool |hv_exists |HV* tb|const char* key|I32 klen -Apd |bool |hv_exists_ent |HV* tb|SV* key|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 |HV* hv|HE* entry -Apd |I32 |hv_iterinit |HV* tb -Apd |char* |hv_iterkey |HE* entry|I32* retlen -Apd |SV* |hv_iterkeysv |HE* entry -Apd |HE* |hv_iternext |HV* tb -Apd |SV* |hv_iternextsv |HV* hv|char** key|I32* retlen -ApMd |HE* |hv_iternext_flags|HV* tb|I32 flags -Apd |SV* |hv_iterval |HV* tb|HE* entry -Ap |void |hv_ksplit |HV* hv|IV newmax +Ap |void |hv_free_ent |NN HV* hv|HE* entry +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 +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 \ |U32 hash @@ -288,76 +298,77 @@ 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 \ |U32 hash|int flags Apd |void |hv_undef |HV* tb -Ap |I32 |ibcmp |const char* a|const char* b|I32 len -Ap |I32 |ibcmp_locale |const char* a|const char* b|I32 len -Apd |I32 |ibcmp_utf8 |const char* a|char **pe1|UV l1|bool u1|const char* b|char **pe2|UV l2|bool u2 -p |bool |ingroup |Gid_t testgid|Uid_t effective -p |void |init_argv_symbols|int|char ** +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 +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 pd |U32 |intro_my -Ap |char* |instr |const char* big|const char* little -p |bool |io_close |IO* io|bool not_implicit -p |OP* |invert |OP* cmd -dp |bool |is_gv_magical |char *name|STRLEN len|U32 flags -Ap |I32 |is_lvalue_sub -Ap |U32 |to_uni_upper_lc|U32 c -Ap |U32 |to_uni_title_lc|U32 c -Ap |U32 |to_uni_lower_lc|U32 c -Ap |bool |is_uni_alnum |UV c -Ap |bool |is_uni_alnumc |UV c -Ap |bool |is_uni_idfirst |UV c -Ap |bool |is_uni_alpha |UV c -Ap |bool |is_uni_ascii |UV c -Ap |bool |is_uni_space |UV c -Ap |bool |is_uni_cntrl |UV c -Ap |bool |is_uni_graph |UV c -Ap |bool |is_uni_digit |UV c -Ap |bool |is_uni_upper |UV c -Ap |bool |is_uni_lower |UV c -Ap |bool |is_uni_print |UV c -Ap |bool |is_uni_punct |UV c -Ap |bool |is_uni_xdigit |UV c -Ap |UV |to_uni_upper |UV c|U8 *p|STRLEN *lenp -Ap |UV |to_uni_title |UV c|U8 *p|STRLEN *lenp -Ap |UV |to_uni_lower |UV c|U8 *p|STRLEN *lenp -Ap |UV |to_uni_fold |UV c|U8 *p|STRLEN *lenp -Ap |bool |is_uni_alnum_lc|UV c -Ap |bool |is_uni_alnumc_lc|UV c -Ap |bool |is_uni_idfirst_lc|UV c -Ap |bool |is_uni_alpha_lc|UV c -Ap |bool |is_uni_ascii_lc|UV c -Ap |bool |is_uni_space_lc|UV c -Ap |bool |is_uni_cntrl_lc|UV c -Ap |bool |is_uni_graph_lc|UV c -Ap |bool |is_uni_digit_lc|UV c -Ap |bool |is_uni_upper_lc|UV c -Ap |bool |is_uni_lower_lc|UV c -Ap |bool |is_uni_print_lc|UV c -Ap |bool |is_uni_punct_lc|UV c -Ap |bool |is_uni_xdigit_lc|UV c -Apd |STRLEN |is_utf8_char |U8 *p -Apd |bool |is_utf8_string |U8 *s|STRLEN len -Apd |bool |is_utf8_string_loc|U8 *s|STRLEN len|U8 **p -Ap |bool |is_utf8_alnum |U8 *p -Ap |bool |is_utf8_alnumc |U8 *p -Ap |bool |is_utf8_idfirst|U8 *p -Ap |bool |is_utf8_idcont |U8 *p -Ap |bool |is_utf8_alpha |U8 *p -Ap |bool |is_utf8_ascii |U8 *p -Ap |bool |is_utf8_space |U8 *p -Ap |bool |is_utf8_cntrl |U8 *p -Ap |bool |is_utf8_digit |U8 *p -Ap |bool |is_utf8_graph |U8 *p -Ap |bool |is_utf8_upper |U8 *p -Ap |bool |is_utf8_lower |U8 *p -Ap |bool |is_utf8_print |U8 *p -Ap |bool |is_utf8_punct |U8 *p -Ap |bool |is_utf8_xdigit |U8 *p -Ap |bool |is_utf8_mark |U8 *p -p |OP* |jmaybe |OP* arg -p |I32 |keyword |char* d|I32 len +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 +ApR |I32 |is_lvalue_sub +ApPR |U32 |to_uni_upper_lc|U32 c +ApPR |U32 |to_uni_title_lc|U32 c +ApPR |U32 |to_uni_lower_lc|U32 c +ApPR |bool |is_uni_alnum |UV c +ApPR |bool |is_uni_alnumc |UV c +ApPR |bool |is_uni_idfirst |UV c +ApPR |bool |is_uni_alpha |UV c +ApPR |bool |is_uni_ascii |UV c +ApPR |bool |is_uni_space |UV c +ApPR |bool |is_uni_cntrl |UV c +ApPR |bool |is_uni_graph |UV c +ApPR |bool |is_uni_digit |UV c +ApPR |bool |is_uni_upper |UV c +ApPR |bool |is_uni_lower |UV c +ApPR |bool |is_uni_print |UV c +ApPR |bool |is_uni_punct |UV c +ApPR |bool |is_uni_xdigit |UV c +Ap |UV |to_uni_upper |UV c|NN U8 *p|NN STRLEN *lenp +Ap |UV |to_uni_title |UV c|NN U8 *p|NN STRLEN *lenp +Ap |UV |to_uni_lower |UV c|NN U8 *p|NN STRLEN *lenp +Ap |UV |to_uni_fold |UV c|NN U8 *p|NN STRLEN *lenp +ApPR |bool |is_uni_alnum_lc|UV c +ApPR |bool |is_uni_alnumc_lc|UV c +ApPR |bool |is_uni_idfirst_lc|UV c +ApPR |bool |is_uni_alpha_lc|UV c +ApPR |bool |is_uni_ascii_lc|UV c +ApPR |bool |is_uni_space_lc|UV c +ApPR |bool |is_uni_cntrl_lc|UV c +ApPR |bool |is_uni_graph_lc|UV c +ApPR |bool |is_uni_digit_lc|UV c +ApPR |bool |is_uni_upper_lc|UV c +ApPR |bool |is_uni_lower_lc|UV c +ApPR |bool |is_uni_print_lc|UV c +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 +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 +ApR |bool |is_utf8_idcont |NN const U8 *p +ApR |bool |is_utf8_alpha |NN const U8 *p +ApR |bool |is_utf8_ascii |NN const U8 *p +ApR |bool |is_utf8_space |NN const U8 *p +ApR |bool |is_utf8_cntrl |NN const U8 *p +ApR |bool |is_utf8_digit |NN const U8 *p +ApR |bool |is_utf8_graph |NN const U8 *p +ApR |bool |is_utf8_upper |NN const U8 *p +ApR |bool |is_utf8_lower |NN const U8 *p +ApR |bool |is_utf8_print |NN const U8 *p +ApR |bool |is_utf8_punct |NN const U8 *p +ApR |bool |is_utf8_xdigit |NN const U8 *p +ApR |bool |is_utf8_mark |NN const U8 *p +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 @@ -371,12 +382,12 @@ 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 -Apd |I32 |looks_like_number|SV* sv -Apd |UV |grok_bin |char* start|STRLEN* len|I32* flags|NV *result -Apd |UV |grok_hex |char* start|STRLEN* len|I32* flags|NV *result -Apd |int |grok_number |const char *pv|STRLEN len|UV *valuep -Apd |bool |grok_numeric_radix|const char **sp|const char *send -Apd |UV |grok_oct |char* start|STRLEN* len|I32* flags|NV *result +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 @@ -400,15 +411,13 @@ 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 -p |int |magic_regdatum_set|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 -#if defined(USE_LOCALE_COLLATE) -p |int |magic_setcollxfrm|SV* sv|MAGIC* mg -#endif p |int |magic_setdefelem|SV* sv|MAGIC* mg p |int |magic_setenv |SV* sv|MAGIC* mg p |int |magic_setfm |SV* sv|MAGIC* mg @@ -428,9 +437,10 @@ 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 |char* sym|char* name|I32 namlen +p |void |magicname |const char* sym|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|... @@ -439,7 +449,8 @@ 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 -Apd |MAGIC* |mg_find |SV* sv|int type +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 @@ -450,13 +461,13 @@ 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 |OP* |my |OP* o -Ap |NV |my_atof |const 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)) -Anp |char* |my_bcopy |const char* from|char* to|I32 len +Anp |char* |my_bcopy |NN const char* from|NN char* to|I32 len #endif #if !defined(HAS_BZERO) && !defined(HAS_MEMSET) -Anp |char* |my_bzero |char* loc|I32 len +Anp |char* |my_bzero |NN char* loc|I32 len #endif Apr |void |my_exit |U32 status Apr |void |my_failure_exit @@ -466,98 +477,99 @@ Anp |void |atfork_lock Anp |void |atfork_unlock Ap |I32 |my_lstat #if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP) -Anp |I32 |my_memcmp |const char* s1|const char* s2|I32 len +AnpP |I32 |my_memcmp |NN const char* s1|NN const char* s2|I32 len #endif #if !defined(HAS_MEMSET) -Anp |void* |my_memset |char* loc|I32 ch|I32 len +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 |char* nam|char* val +Ap |void |my_setenv |const char* nam|const char* val Ap |I32 |my_stat -Ap |char * |my_strftime |char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst +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 #if defined(MYSWAP) -Ap |short |my_swap |short s -Ap |long |my_htonl |long l -Ap |long |my_ntohl |long l +ApPa |short |my_swap |short s +ApPa |long |my_htonl |long l +ApPa |long |my_ntohl |long l #endif p |void |my_unexec -Ap |OP* |newANONLIST |OP* o -Ap |OP* |newANONHASH |OP* o +Apa |OP* |newANONLIST |OP* o +Apa |OP* |newANONHASH |OP* o Ap |OP* |newANONSUB |I32 floor|OP* proto|OP* block -Ap |OP* |newASSIGNOP |I32 flags|OP* left|I32 optype|OP* right -Ap |OP* |newCONDOP |I32 flags|OP* expr|OP* trueop|OP* falseop -Apd |CV* |newCONSTSUB |HV* stash|char* name|SV* sv +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 -Ap |OP* |newFOROP |I32 flags|char* label|line_t forline \ +Apa |OP* |newFOROP |I32 flags|char* label|line_t forline \ |OP* sclr|OP* expr|OP*block|OP*cont -Ap |OP* |newLOGOP |I32 optype|I32 flags|OP* left|OP* right -Ap |OP* |newLOOPEX |I32 type|OP* label -Ap |OP* |newLOOPOP |I32 flags|I32 debuggable|OP* expr|OP* block -Ap |OP* |newNULLLIST -Ap |OP* |newOP |I32 optype|I32 flags -Ap |void |newPROG |OP* o -Ap |OP* |newRANGE |I32 flags|OP* left|OP* right -Ap |OP* |newSLICEOP |I32 flags|OP* subscript|OP* listop -Ap |OP* |newSTATEOP |I32 flags|char* label|OP* o +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* |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 |char* name|XSUBADDR_t f|char* filename -Apd |AV* |newAV -Ap |OP* |newAVREF |OP* o -Ap |OP* |newBINOP |I32 type|I32 flags|OP* first|OP* last -Ap |OP* |newCVREF |I32 flags|OP* o -Ap |OP* |newGVOP |I32 type|I32 flags|GV* gv -Ap |GV* |newGVgen |char* pack -Ap |OP* |newGVREF |I32 type|OP* o -Ap |OP* |newHVREF |OP* o -Apd |HV* |newHV -Ap |HV* |newHVhv |HV* hv -Ap |IO* |newIO -Ap |OP* |newLISTOP |I32 type|I32 flags|OP* first|OP* last -Ap |OP* |newPADOP |I32 type|I32 flags|SV* sv -Ap |OP* |newPMOP |I32 type|I32 flags -Ap |OP* |newPVOP |I32 type|I32 flags|char* pv -Ap |SV* |newRV |SV* pref -Apd |SV* |newRV_noinc |SV *sv -Apd |SV* |newSV |STRLEN len -Ap |OP* |newSVREF |OP* o -Ap |OP* |newSVOP |I32 type|I32 flags|SV* sv -Apd |SV* |newSViv |IV i -Apd |SV* |newSVuv |UV u -Apd |SV* |newSVnv |NV n -Apd |SV* |newSVpv |const char* s|STRLEN len -Apd |SV* |newSVpvn |const char* s|STRLEN len -Apd |SV* |newSVpvn_share |const char* s|I32 len|U32 hash -Afpd |SV* |newSVpvf |const char* pat|... +Apd |CV* |newXS |NN const char* name|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 +ApaR |OP* |newHVREF |NN OP* o +ApdaR |HV* |newHV +ApaR |HV* |newHVhv |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* |newPMOP |I32 type|I32 flags +Apa |OP* |newPVOP |I32 type|I32 flags|char* pv +Apa |SV* |newRV |NN SV* pref +Apda |SV* |newRV_noinc |NN SV *sv +Apda |SV* |newSV |STRLEN len +Apa |OP* |newSVREF |NN OP* o +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 -Apd |SV* |newSVrv |SV* rv|const char* classname -Apd |SV* |newSVsv |SV* old -Ap |OP* |newUNOP |I32 type|I32 flags|OP* first -Ap |OP* |newWHILEOP |I32 flags|I32 debuggable|LOOP* loop \ - |I32 whileline|OP* expr|OP* block|OP* cont - -Ap |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems -Ap |char* |scan_vstring |char *vstr|SV *sv -Apd |char* |scan_version |char *vstr|SV *sv|bool qv +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 \ + |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 |int |vcmp |SV *lvs|SV *rvs +Apd |int |vcmp |NN SV *lvs|NN SV *rvs p |PerlIO*|nextargv |GV* gv -Ap |char* |ninstr |const char* big|const char* bigend \ +ApP |char* |ninstr |const char* big|const char* bigend \ |const char* little|const char* lend -p |OP* |oopsCV |OP* o +pr |OP* |oopsCV |OP* o Ap |void |op_free |OP* arg p |void |package |OP* o pd |PADOFFSET|pad_alloc |I32 optype|U32 tmptype -p |PADOFFSET|allocmy |char* name -pd |PADOFFSET|pad_findmy |char* name +p |PADOFFSET|allocmy |NN char* name +pd |PADOFFSET|pad_findmy |NN const char* name Ap |PADOFFSET|find_rundefsvoffset | -p |OP* |oopsAV |OP* o -p |OP* |oopsHV |OP* o +pR |OP* |oopsAV |NN OP* o +pR |OP* |oopsHV |NN OP* o pd |void |pad_leavemy Apd |SV* |pad_sv |PADOFFSET po pd |void |pad_free |PADOFFSET po @@ -572,72 +584,73 @@ Ap |void |reentrant_free Anp |void* |reentrant_retry|const char*|... #endif Ap |void |call_atexit |ATEXIT_t fn|void *ptr -Apd |I32 |call_argv |const char* sub_name|I32 flags|char** argv -Apd |I32 |call_method |const char* methname|I32 flags -Apd |I32 |call_pv |const char* sub_name|I32 flags +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 Ap |void |despatch_signals -Apd |SV* |eval_pv |const char* p|I32 croak_on_error -Apd |I32 |eval_sv |SV* sv|I32 flags -Apd |SV* |get_sv |const char* name|I32 create -Apd |AV* |get_av |const char* name|I32 create +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 Ap |int |init_i18nl10n |int printwarn Ap |int |init_i18nl14n |int printwarn -Ap |void |new_collate |char* newcoll -Ap |void |new_ctype |char* newctype -Ap |void |new_numeric |char* newcoll +Ap |void |new_collate |NN char* newcoll +Ap |void |new_ctype |NN char* newctype +Ap |void |new_numeric |NN char* newcoll Ap |void |set_numeric_local Ap |void |set_numeric_radix Ap |void |set_numeric_standard -Apd |void |require_pv |const char* pv -Apd |void |pack_cat |SV *cat|char *pat|char *patend|SV **beglist|SV **endlist|SV ***next_in_list|U32 flags -Apd |void |packlist |SV *cat|char *pat|char *patend|SV **beglist|SV **endlist +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 p |void |pidgone |Pid_t pid|int status -Ap |void |pmflag |U32* pmfl|int ch -p |OP* |pmruntime |OP* pm|OP* expr|bool isreg -p |OP* |pmtrans |OP* o|OP* expr|OP* repl +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 Ap |void |pop_scope p |OP* |prepend_elem |I32 optype|OP* head|OP* tail Ap |void |push_scope p |OP* |ref |OP* o|I32 type p |OP* |refkids |OP* o|I32 type -Ap |void |regdump |regexp* r -Ap |SV* |regclass_swash |struct regnode *n|bool doinit|SV **listsvp|SV **altsvp -Ap |I32 |pregexec |regexp* prog|char* stringarg \ - |char* strend|char* strbeg|I32 minend \ - |SV* screamer|U32 nosave +Ap |void |regdump |NN regexp* r +Ap |SV* |regclass_swash |const struct regnode *n|bool doinit|SV **listsvp|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 |regexp*|pregcomp |char* exp|char* xend|PMOP* pm +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 |I32 |regexec_flags |regexp* prog|char* stringarg \ - |char* strend|char* strbeg|I32 minend \ +Ap |I32 |regexec_flags |NN regexp* prog|NN char* stringarg \ + |NN char* strend|NN char* strbeg|I32 minend \ |SV* screamer|void* data|U32 flags -Ap |regnode*|regnext |regnode* p -Ep |void |regprop |SV* sv|regnode* o -Ap |void |repeatcpy |char* to|const char* from|I32 len|I32 count -Ap |char* |rninstr |const char* big|const char* bigend \ - |const char* little|const char* lend +ApR |regnode*|regnext |NN regnode* p +Ep |void |regprop |SV* sv|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 Ap |Sighandler_t|rsignal_state|int i -p |void |rxres_free |void** rsp -p |void |rxres_restore |void** rsp|REGEXP* prx -p |void |rxres_save |void** rsp|REGEXP* prx +p |void |rxres_free |NN void** rsp +p |void |rxres_restore |NN void** rsp|NN REGEXP* prx +p |void |rxres_save |NN void** rsp|NN REGEXP* prx #if !defined(HAS_RENAME) -p |I32 |same_dirent |char* a|char* b +p |I32 |same_dirent |NN const char* a|NN const char* b #endif -Apd |char* |savepv |const char* pv -Apd |char* |savesharedpv |const char* pv -Apd |char* |savepvn |const char* pv|I32 len +Apda |char* |savepv |NN const char* pv +Apda |char* |savepvn |NN const char* pv|I32 len +Apda |char* |savesharedpv |const char* pv +Apda |char* |savesvpv |NN SV* sv Ap |void |savestack_grow Ap |void |savestack_grow_cnt |I32 need -Ap |void |save_aelem |AV* av|I32 idx|SV **sptr +Ap |void |save_aelem |const AV* av|I32 idx|SV **sptr Ap |I32 |save_alloc |I32 size|I32 pad Ap |void |save_aptr |AV** aptr Ap |AV* |save_ary |GV* gv @@ -655,7 +668,7 @@ 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_hints +Apr |void |save_hints Ap |void |save_hptr |HV** hptr Ap |void |save_I16 |I16* intp Ap |void |save_I32 |I32* intp @@ -675,201 +688,201 @@ Ap |void |save_re_context Ap |void |save_padsv |PADOFFSET off Ap |void |save_sptr |SV** sptr Ap |SV* |save_svref |SV** sptr -Ap |SV** |save_threadsv |PADOFFSET i +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 |char* start|STRLEN len|STRLEN* retlen -Apd |NV |scan_hex |char* start|STRLEN len|STRLEN* retlen -Ap |char* |scan_num |char* s|YYSTYPE *lvalp -Apd |NV |scan_oct |char* start|STRLEN len|STRLEN* retlen +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 #if !defined(VMS) -p |I32 |setenv_getix |char* nam +p |I32 |setenv_getix |const char* nam #endif p |void |setdefout |GV* gv p |HEK* |share_hek |const char* sv|I32 len|U32 hash np |Signal_t |sighandler |int sig Anp |Signal_t |csighandler |int sig -Ap |SV** |stack_grow |SV** sp|SV**p|int n -Ap |I32 |start_subparse |I32 is_format|U32 flags +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 -Apd |bool |sv_2bool |SV* sv -Apd |CV* |sv_2cv |SV* sv|HV** st|GV** gvp|I32 lref -Apd |IO* |sv_2io |SV* sv -Amb |IV |sv_2iv |SV* sv -Apd |IV |sv_2iv_flags |SV* sv|I32 flags -Apd |SV* |sv_2mortal |SV* sv -Apd |NV |sv_2nv |SV* sv -Amb |char* |sv_2pv |SV* sv|STRLEN* lp -Apd |char* |sv_2pvutf8 |SV* sv|STRLEN* lp -Apd |char* |sv_2pvbyte |SV* sv|STRLEN* lp -Ap |char* |sv_pvn_nomg |SV* sv|STRLEN* lp -Amb |UV |sv_2uv |SV* sv -Apd |UV |sv_2uv_flags |SV* sv|I32 flags -Apd |IV |sv_iv |SV* sv -Apd |UV |sv_uv |SV* sv -Apd |NV |sv_nv |SV* sv -Apd |char* |sv_pvn |SV *sv|STRLEN *len -Apd |char* |sv_pvutf8n |SV *sv|STRLEN *len -Apd |char* |sv_pvbyten |SV *sv|STRLEN *len -Apd |I32 |sv_true |SV *sv -pd |void |sv_add_arena |char* ptr|U32 size|U32 flags -Apd |int |sv_backoff |SV* sv -Apd |SV* |sv_bless |SV* sv|HV* stash -Afpd |void |sv_catpvf |SV* sv|const char* pat|... -Apd |void |sv_vcatpvf |SV* sv|const char* pat|va_list* args -Apd |void |sv_catpv |SV* sv|const char* ptr -Amdb |void |sv_catpvn |SV* sv|const char* ptr|STRLEN len -Amdb |void |sv_catsv |SV* dsv|SV* ssv -Apd |void |sv_chop |SV* sv|char* ptr +Apd |bool |sv_2bool |NN SV* sv +Apd |CV* |sv_2cv |NN SV* sv|HV** st|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 |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 |UV |sv_2uv |NN SV* sv +Apd |UV |sv_2uv_flags |NN SV* sv|I32 flags +Apd |IV |sv_iv |NN SV* sv +Apd |UV |sv_uv |NN SV* sv +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 +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 pd |I32 |sv_clean_all pd |void |sv_clean_objs -Apd |void |sv_clear |SV* sv -Apd |I32 |sv_cmp |SV* sv1|SV* sv2 -Apd |I32 |sv_cmp_locale |SV* sv1|SV* sv2 +Apd |void |sv_clear |NN SV* sv +Apd |I32 |sv_cmp |NN SV* sv1|NN SV* sv2 +Apd |I32 |sv_cmp_locale |NN SV* sv1|NN SV* sv2 #if defined(USE_LOCALE_COLLATE) -Apd |char* |sv_collxfrm |SV* sv|STRLEN* nxp -#endif -Ap |OP* |sv_compile_2op |SV* sv|OP** startp|char* code|PAD** padp -Apd |int |getcwd_sv |SV* sv -Apd |void |sv_dec |SV* sv -Ap |void |sv_dump |SV* sv -Apd |bool |sv_derived_from|SV* sv|const char* name -Apd |I32 |sv_eq |SV* sv1|SV* sv2 +Apd |char* |sv_collxfrm |NN SV* sv|NN STRLEN* nxp +#endif +Ap |OP* |sv_compile_2op |NN SV* sv|NN OP** startp|NN const char* code|NN PAD** padp +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 -poMX |void |sv_free2 |SV* sv +poMX |void |sv_free2 |NN SV* sv pd |void |sv_free_arenas -Apd |char* |sv_gets |SV* sv|PerlIO* fp|I32 append -Apd |char* |sv_grow |SV* sv|STRLEN newlen -Apd |void |sv_inc |SV* sv -Apd |void |sv_insert |SV* bigsv|STRLEN offset|STRLEN len \ - |char* little|STRLEN littlelen -Apd |int |sv_isa |SV* sv|const char* name -Apd |int |sv_isobject |SV* sv -Apd |STRLEN |sv_len |SV* sv -Apd |STRLEN |sv_len_utf8 |SV* sv -Apd |void |sv_magic |SV* sv|SV* obj|int how|const char* name \ +Apd |char* |sv_gets |NN SV* sv|NN PerlIO* fp|I32 append +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 \ |I32 namlen -Apd |MAGIC *|sv_magicext |SV* sv|SV* obj|int how|MGVTBL *vtbl \ +Apd |MAGIC *|sv_magicext |NN SV* sv|SV* obj|int how|const MGVTBL *vtbl \ |const char* name|I32 namlen -Apd |SV* |sv_mortalcopy |SV* oldsv -Apd |SV* |sv_newmortal -Apd |SV* |sv_newref |SV* sv +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|I32* offsetp|I32* lenp -Apd |void |sv_pos_b2u |SV* sv|I32* offsetp +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 -Apd |char* |sv_reftype |SV* sv|int ob -Apd |void |sv_replace |SV* sv|SV* nsv +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 |char* s|HV* stash +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 -Apdb |void |sv_setpviv |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|void* pv -Apd |SV* |sv_setref_pvn |SV* rv|const char* classname|char* pv \ - |STRLEN n +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 |SV* sv|const char* ptr|STRLEN len +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 -Apd |bool |sv_tainted |SV* sv -Apd |int |sv_unmagic |SV* sv|int type -Apd |void |sv_unref |SV* sv -Apd |void |sv_unref_flags |SV* sv|U32 flags -Apd |void |sv_untaint |SV* sv -Apd |bool |sv_upgrade |SV* sv|U32 mt -Apd |void |sv_usepvn |SV* sv|char* ptr|STRLEN len -Apd |void |sv_vcatpvfn |SV* sv|const char* pat|STRLEN patlen \ +ApdR |bool |sv_tainted |SV* sv +Apd |int |sv_unmagic |NN SV* sv|int type +Apd |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_vcatpvfn |NN SV* sv|NN const char* pat|STRLEN patlen \ |va_list* args|SV** svargs|I32 svmax \ |bool *maybe_tainted -Apd |void |sv_vsetpvfn |SV* sv|const char* pat|STRLEN patlen \ +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 |char* pkg|char* name|SV* listsv \ - |I32 minbits|I32 none -Ap |UV |swash_fetch |SV *sv|U8 *ptr|bool do_utf8 +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 Ap |void |taint_env Ap |void |taint_proper |const char* f|const char* s -Apd |UV |to_utf8_case |U8 *p|U8* ustrp|STRLEN *lenp \ - |SV **swash|char *normal|char *special -Apd |UV |to_utf8_lower |U8 *p|U8* ustrp|STRLEN *lenp -Apd |UV |to_utf8_upper |U8 *p|U8* ustrp|STRLEN *lenp -Apd |UV |to_utf8_title |U8 *p|U8* ustrp|STRLEN *lenp -Apd |UV |to_utf8_fold |U8 *p|U8* ustrp|STRLEN *lenp +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 #if defined(UNLINK_ALL_VERSIONS) Ap |I32 |unlnk |char* f #endif -Apd |I32 |unpack_str |char *pat|char *patend|char *s|char *strbeg|char *strend|char **new_s|I32 ocnt|U32 flags -Apd |I32 |unpackstring |char *pat|char *patend|char *s|char *strend|U32 flags +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 -Adp |STRLEN |utf8_length |U8* s|U8 *e -Apd |IV |utf8_distance |U8 *a|U8 *b -Apd |U8* |utf8_hop |U8 *s|I32 off -ApMd |U8* |utf8_to_bytes |U8 *s|STRLEN *len -ApMd |U8* |bytes_from_utf8|U8 *s|STRLEN *len|bool *is_utf8 -ApMd |U8* |bytes_to_utf8 |U8 *s|STRLEN *len -Apd |UV |utf8_to_uvchr |U8 *s|STRLEN* retlen -Apd |UV |utf8_to_uvuni |U8 *s|STRLEN* retlen -Adp |UV |utf8n_to_uvchr |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags -Adp |UV |utf8n_to_uvuni |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags -Apd |U8* |uvchr_to_utf8 |U8 *d|UV uv -Ap |U8* |uvuni_to_utf8 |U8 *d|UV uv -Ap |U8* |uvchr_to_utf8_flags |U8 *d|UV uv|UV flags -Apd |U8* |uvuni_to_utf8_flags |U8 *d|UV uv|UV flags -Apd |char* |pv_uni_display |SV *dsv|U8 *spv|STRLEN len \ +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 +Apd |U8* |uvchr_to_utf8 |NN U8 *d|UV uv +Ap |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 -Apd |char* |sv_uni_display |SV *dsv|SV *ssv|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|char **popt +p |U32 |parse_unicode_opts|const char **popt p |U32 |seed p |UV |get_hash_seed -p |void |report_evil_fh |GV *gv|IO *io|I32 op +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 |char* sig +Ap |I32 |whichsig |const char* sig p |void |write_to_stderr|const char* message|int msglen -p |int |yyerror |char* s +p |int |yyerror |const char* s p |int |yylex p |int |yyparse -p |int |yywarn |char* s +p |int |yywarn |const char* s #if defined(MYMALLOC) Ap |void |dump_mstats |char* s Ap |int |get_mstats |perl_mstats_t *buf|int buflen|int level #endif -Anp |Malloc_t|safesysmalloc |MEM_SIZE nbytes -Anp |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size -Anp |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes +Anpa |Malloc_t|safesysmalloc |MEM_SIZE nbytes +Anpa |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size +Anpa |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes 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* #endif Ap |int |runops_standard Ap |int |runops_debug @@ -881,7 +894,7 @@ 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 -Apdb |void |sv_setpviv_mg |SV *sv|IV iv +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 @@ -889,21 +902,21 @@ 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|char *pv|STRLEN cur|STRLEN len \ +Ap |char* |pv_display |SV *dsv|const char *pv|STRLEN cur|STRLEN len \ |STRLEN pvlim -Afp |void |dump_indent |I32 level|PerlIO *file|const char* pat|... -Ap |void |dump_vindent |I32 level|PerlIO *file|const char* pat \ +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|PerlIO *file|char *name|GV *sv -Ap |void |do_gvgv_dump |I32 level|PerlIO *file|char *name|GV *sv -Ap |void |do_hv_dump |I32 level|PerlIO *file|char *name|HV *sv -Ap |void |do_magic_dump |I32 level|PerlIO *file|MAGIC *mg|I32 nest \ +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 \ |I32 maxnest|bool dumpops|STRLEN pvlim -Ap |void |do_op_dump |I32 level|PerlIO *file|OP *o -Ap |void |do_pmop_dump |I32 level|PerlIO *file|PMOP *pm -Ap |void |do_sv_dump |I32 level|PerlIO *file|SV *sv|I32 nest \ +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_sv_dump |I32 level|NN PerlIO *file|NULLOK SV *sv|I32 nest \ |I32 maxnest|bool dumpops|STRLEN pvlim -Ap |void |magic_dump |MAGIC *mg +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 @@ -922,39 +935,40 @@ 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 -Ap |void |newMYSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block -p |OP * |my_attrs |OP *o|OP *attrs +Apr |void |newMYSUB |I32 floor|OP *o|OP *proto|OP *attrs|OP *block +p |OP * |my_attrs |NN OP *o|OP *attrs p |void |boot_core_xsutils #if defined(USE_ITHREADS) -Ap |PERL_CONTEXT*|cx_dup |PERL_CONTEXT* cx|I32 ix|I32 max|CLONE_PARAMS* param -Ap |PERL_SI*|si_dup |PERL_SI* si|CLONE_PARAMS* param -Ap |ANY* |ss_dup |PerlInterpreter* proto_perl|CLONE_PARAMS* param -Ap |void* |any_dup |void* v|PerlInterpreter* proto_perl -Ap |HE* |he_dup |HE* e|bool shared|CLONE_PARAMS* param -Ap |REGEXP*|re_dup |REGEXP* r|CLONE_PARAMS* param -Ap |PerlIO*|fp_dup |PerlIO* fp|char type|CLONE_PARAMS* param -Ap |DIR* |dirp_dup |DIR* dp -Ap |GP* |gp_dup |GP* gp|CLONE_PARAMS* param -Ap |MAGIC* |mg_dup |MAGIC* mg|CLONE_PARAMS* param -Ap |SV* |sv_dup |SV* sstr|CLONE_PARAMS* param -#if defined(HAVE_INTERP_INTERN) -Ap |void |sys_intern_dup |struct interp_intern* src \ - |struct interp_intern* dst -#endif -Ap |PTR_TBL_t*|ptr_table_new -Ap |void* |ptr_table_fetch|PTR_TBL_t *tbl|void *sv -Ap |void |ptr_table_store|PTR_TBL_t *tbl|void *oldsv|void *newsv -Ap |void |ptr_table_split|PTR_TBL_t *tbl +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 +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 +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 +# if defined(HAVE_INTERP_INTERN) +Ap |void |sys_intern_dup |NN struct interp_intern* src|NN struct interp_intern* dst +# endif #endif #if defined(HAVE_INTERP_INTERN) Ap |void |sys_intern_clear Ap |void |sys_intern_init #endif -Ap |char * |custom_op_name |OP* op -Ap |char * |custom_op_desc |OP* op +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 @@ -968,69 +982,112 @@ Adp |int |nothreadhook END_EXTERN_C #if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT) -s |I32 |do_trans_simple |SV *sv -s |I32 |do_trans_count |SV *sv -s |I32 |do_trans_complex |SV *sv -s |I32 |do_trans_simple_utf8 |SV *sv -s |I32 |do_trans_count_utf8 |SV *sv -s |I32 |do_trans_complex_utf8 |SV *sv +sR |I32 |do_trans_simple |NN SV *sv +sR |I32 |do_trans_count |NN SV *sv +sR |I32 |do_trans_complex |NN SV *sv +sR |I32 |do_trans_simple_utf8 |NN SV *sv +sR |I32 |do_trans_count_utf8 |NN SV *sv +sR |I32 |do_trans_complex_utf8 |NN SV *sv #endif #if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT) -s |void |gv_init_sv |GV *gv|I32 sv_type -s |void |require_errno |GV *gv +s |void |gv_init_sv |NN GV *gv|I32 sv_type +s |void |require_errno |NN GV *gv #endif #if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT) -s |void |hsplit |HV *hv +s |void |hsplit |NN HV *hv s |void |hfreeentries |HV *hv -s |void |more_he -s |HE* |new_he -s |void |del_he |HE *p -s |HEK* |save_hek_flags |const char *str|I32 len|U32 hash|int flags -s |void |hv_magic_check |HV *hv|bool *needs_copy|bool *needs_store -s |void |unshare_hek_or_pvn|HEK* hek|const char* sv|I32 len|U32 hash -s |HEK* |share_hek_flags|const char* sv|I32 len|U32 hash|int flags -s |void |hv_notallowed |int flags|const char *key|I32 klen|const char *msg +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 #endif #if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT) -s |void |save_magic |I32 mgs_ix|SV *sv -s |int |magic_methpack |SV *sv|MAGIC *mg|char *meth -s |int |magic_methcall |SV *sv|MAGIC *mg|char *meth|I32 f \ +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 #endif #if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT) -s |I32 |list_assignment|OP *o -s |void |bad_type |I32 n|char *t|char *name|OP *kid -s |void |cop_free |COP *cop +pR |OP* |ck_anoncode |NN OP *o +pR |OP* |ck_bitop |NN OP *o +pR |OP* |ck_concat |NN OP *o +pR |OP* |ck_defined |NN OP *o +pR |OP* |ck_delete |NN OP *o +pR |OP* |ck_die |NN OP *o +pR |OP* |ck_eof |NN OP *o +pR |OP* |ck_eval |NN OP *o +pR |OP* |ck_exec |NN OP *o +pR |OP* |ck_exists |NN OP *o +pR |OP* |ck_exit |NN OP *o +pR |OP* |ck_ftst |NN OP *o +pR |OP* |ck_fun |NN OP *o +pR |OP* |ck_glob |NN OP *o +pR |OP* |ck_grep |NN OP *o +pR |OP* |ck_index |NN OP *o +pR |OP* |ck_join |NN OP *o +pR |OP* |ck_lengthconst |NN OP *o +pR |OP* |ck_lfun |NN OP *o +pR |OP* |ck_listiob |NN OP *o +pR |OP* |ck_match |NN OP *o +pR |OP* |ck_method |NN OP *o +pR |OP* |ck_null |NN OP *o +pR |OP* |ck_open |NN OP *o +pR |OP* |ck_repeat |NN OP *o +pR |OP* |ck_require |NN OP *o +pR |OP* |ck_retarget |NN OP *o +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_select |NN OP *o +pR |OP* |ck_shift |NN OP *o +pR |OP* |ck_sort |NN OP *o +pR |OP* |ck_spair |NN OP *o +pR |OP* |ck_split |NN OP *o +pR |OP* |ck_subr |NN OP *o +pR |OP* |ck_substr |NN OP *o +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 +s |void |cop_free |NN COP *cop s |OP* |modkids |OP *o|I32 type -s |void |no_bareword_allowed|OP *o -s |OP* |no_fh_allowed |OP *o -s |OP* |scalarboolean |OP *o -s |OP* |too_few_arguments|OP *o|char* name -s |OP* |too_many_arguments|OP *o|char* name -s |OP* |newDEFSVOP -s |OP* |new_logop |I32 type|I32 flags|OP **firstp|OP **otherp -s |void |simplify_sort |OP *o -s |bool |is_handle_constructor |OP *o|I32 argnum -s |char* |gv_ename |GV *gv -s |bool |scalar_mod_type|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 |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 #endif #if defined(PL_OP_SLAB_ALLOC) -Ap |void* |Slab_Alloc |int m|size_t sz +ApR |void* |Slab_Alloc |int m|size_t sz Ap |void |Slab_Free |void *op #endif #if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT) s |void |find_beginning -s |void |forbid_setid |char * -s |void |incpush |char *|int|int|int|int +s |void |forbid_setid |const char * s +s |void |incpush |const char *dir|bool addsubdirs|bool addoldvers|bool usesep|bool canrelocate s |void |init_interp s |void |init_ids s |void |init_lexer @@ -1040,126 +1097,129 @@ s |void |init_postdump_symbols|int|char **|char ** s |void |init_predump_symbols rs |void |my_exit_jump s |void |nuke_stacks -s |void |open_script |char *|bool|SV * -s |void |usage |char * -s |void |validate_suid |char *|char* +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 # if defined(IAMSUID) s |int |fd_on_nosuid_fs|int fd # endif s |void* |parse_body |char **env|XSINIT_t xsinit -s |void* |run_body |I32 oldscope -s |void |call_body |OP *myop|int is_eval +rs |void |run_body |I32 oldscope +s |void |call_body |const OP *myop|bool is_eval s |void* |call_list_body |CV *cv #endif #if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT) -s |SV* |refto |SV* sv +sR |SV* |refto |SV* sv #endif #if defined(PERL_IN_PP_PACK_C) || defined(PERL_DECL_PROT) -s |I32 |unpack_rec |tempsym_t* symptr|char *s|char *strbeg|char *strend|char **new_s -s |SV ** |pack_rec |SV *cat|tempsym_t* symptr|SV **beglist|SV **endlist -s |SV* |mul128 |SV *sv|U8 m -s |I32 |measure_struct |tempsym_t* symptr -s |char * |group_end |char *pat|char *patend|char ender -s |char * |get_num |char *ppat|I32 * -s |bool |next_symbol |tempsym_t* symptr -s |void |doencodes |SV* sv|char* s|I32 len -s |SV* |is_an_int |char *s|STRLEN l -s |int |div128 |SV *pnum|bool *done +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 |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 #endif #if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT) -s |OP* |docatch |OP *o -s |void* |docatch_body -s |OP* |dofindlabel |OP *o|char *label|OP **opstack|OP **oplimit -s |OP* |doparseform |SV *sv -sn |bool |num_overflow |NV value|I32 fldsize|I32 frcsize -s |I32 |dopoptoeval |I32 startingblock -s |I32 |dopoptolabel |char *label -s |I32 |dopoptoloop |I32 startingblock -s |I32 |dopoptosub |I32 startingblock -s |I32 |dopoptosub_at |PERL_CONTEXT* cxstk|I32 startingblock +sR |OP* |docatch |OP *o +s |void |docatch_body +sR |OP* |dofindlabel |OP *o|const char *label|OP **opstack|OP **oplimit +sR |OP* |doparseform |SV *sv +snR |bool |num_overflow |NV value|I32 fldsize|I32 frcsize +sR |I32 |dopoptoeval |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 -s |OP* |doeval |int gimme|OP** startop|CV* outside|U32 seq -s |PerlIO *|doopen_pm |const char *name|const char *mode -s |bool |path_is_absolute|char *name +sR |OP* |doeval |int gimme|OP** startop|CV* outside|U32 seq +sR |PerlIO *|doopen_pm |const char *name|const char *mode +sR |bool |path_is_absolute|NN const char *name #endif #if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT) -s |void |do_oddball |HV *hash|SV **relem|SV **firstrelem -s |CV* |get_db_sub |SV **svp|CV *cv -s |SV* |method_common |SV* meth|U32* hashp +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 #endif #if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT) -s |OP* |doform |CV *cv|GV *gv|OP *retop -s |int |emulate_eaccess|const char* path|Mode_t mode +s |OP* |doform |NN CV *cv|NN GV *gv|NN OP *retop +s |int |emulate_eaccess|NN const char* path|Mode_t mode # if !defined(HAS_MKDIR) || !defined(HAS_RMDIR) -s |int |dooneliner |char *cmd|char *filename +sR |int |dooneliner |NN const char *cmd|NN const char *filename # endif #endif #if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT) -Es |regnode*|reg |struct RExC_state_t*|I32|I32 * -Es |regnode*|reganode |struct RExC_state_t*|U8|U32 -Es |regnode*|regatom |struct RExC_state_t*|I32 * -Es |regnode*|regbranch |struct RExC_state_t*|I32 *|I32 -Es |void |reguni |struct RExC_state_t*|UV|char *|STRLEN* -Es |regnode*|regclass |struct RExC_state_t* -Es |I32 |regcurly |char * -Es |regnode*|reg_node |struct RExC_state_t*|U8 -Es |regnode*|regpiece |struct RExC_state_t*|I32 * -Es |void |reginsert |struct RExC_state_t*|U8|regnode * -Es |void |regoptail |struct RExC_state_t*|regnode *|regnode * -Es |void |regtail |struct RExC_state_t*|regnode *|regnode * -Es |char*|regwhite |char *|char * -Es |char*|nextchar |struct RExC_state_t* +Es |regnode*|reg |NN struct RExC_state_t *state|I32 paren|NN I32 *flagp +Es |regnode*|reganode |NN struct RExC_state_t *state|U8 op|U32 arg +Es |regnode*|regatom |NN struct RExC_state_t *state|NN I32 *flagp +Es |regnode*|regbranch |NN struct RExC_state_t *state|NN I32 *flagp|I32 first +Es |void |reguni |NN const struct RExC_state_t *state|UV uv|NN char *s|NN STRLEN *lenp +Es |regnode*|regclass |NN struct RExC_state_t *state +ERs |I32 |regcurly |NN const char * +Es |regnode*|reg_node |NN struct RExC_state_t *state|U8 op +Es |regnode*|regpiece |NN struct RExC_state_t *state|NN I32 *flagp +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* # ifdef DEBUGGING Es |regnode*|dumpuntil |regnode *start|regnode *node \ |regnode *last|SV* sv|I32 l -Es |void |put_byte |SV* sv|int c +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 |struct RExC_state_t*|struct regnode_charclass_class *cl -Es |int |cl_is_anything |struct regnode_charclass_class *cl -Es |void |cl_init |struct RExC_state_t*|struct regnode_charclass_class *cl -Es |void |cl_init_zero |struct RExC_state_t*|struct regnode_charclass_class *cl -Es |void |cl_and |struct regnode_charclass_class *cl \ - |struct regnode_charclass_class *and_with -Es |void |cl_or |struct RExC_state_t*|struct regnode_charclass_class *cl \ - |struct regnode_charclass_class *or_with +Es |void |cl_anything |NN struct RExC_state_t*|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_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 *or_with Es |I32 |study_chunk |struct RExC_state_t*|regnode **scanp|I32 *deltap \ |regnode *last|struct scan_data_t *data \ - |U32 flags -Es |I32 |add_data |struct RExC_state_t*|I32 n|char *s -rs |void|re_croak2 |const char* pat1|const char* pat2|... + |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 |make_trie |struct RExC_state_t*|regnode *startbranch \ + |regnode *first|regnode *last|regnode *tail \ + |U32 flags #endif #if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT) -Es |I32 |regmatch |regnode *prog -Es |I32 |regrepeat |regnode *p|I32 max -Es |I32 |regrepeat_hard |regnode *p|I32 max|I32 *lp -Es |I32 |regtry |regexp *prog|char *startpos -Es |bool |reginclass |regnode *n|U8 *p|STRLEN *lenp|bool do_utf8sv_is_utf8 +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 Es |CHECKPOINT|regcppush |I32 parenfloor Es |char*|regcppop Es |char*|regcp_set_to |I32 ss Es |void |cache_re |regexp *prog -Es |U8* |reghop |U8 *pos|I32 off -Es |U8* |reghop3 |U8 *pos|I32 off|U8 *lim -Es |U8* |reghopmaybe |U8 *pos|I32 off -Es |U8* |reghopmaybe3 |U8 *pos|I32 off|U8 *lim -Es |char* |find_byclass |regexp * prog|regnode *c|char *s|char *strend|char *startpos|I32 norun -Es |void |to_utf8_substr |regexp * prog -Es |void |to_byte_substr |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 +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 +Es |void |to_byte_substr |NN regexp * prog #endif #if defined(PERL_IN_DUMP_C) || defined(PERL_DECL_PROT) s |CV* |deb_curcv |I32 ix -s |void |debprof |OP *o +s |void |debprof |const OP *o #endif #if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT) @@ -1167,66 +1227,35 @@ s |SV* |save_scalar_at |SV **sptr #endif #if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT) -s |IV |asIV |SV* sv -s |UV |asUV |SV* sv -s |SV* |more_sv -s |void |more_xiv -s |void |more_xnv -s |void |more_xpv -s |void |more_xpviv -s |void |more_xpvnv -s |void |more_xpvcv -s |void |more_xpvav -s |void |more_xpvhv -s |void |more_xpvmg -s |void |more_xpvlv -s |void |more_xpvbm -s |void |more_xrv -s |XPVIV* |new_xiv -s |XPVNV* |new_xnv -s |XPV* |new_xpv -s |XPVIV* |new_xpviv -s |XPVNV* |new_xpvnv -s |XPVCV* |new_xpvcv -s |XPVAV* |new_xpvav -s |XPVHV* |new_xpvhv -s |XPVMG* |new_xpvmg -s |XPVLV* |new_xpvlv -s |XPVBM* |new_xpvbm -s |XRV* |new_xrv -s |void |del_xiv |XPVIV* p -s |void |del_xnv |XPVNV* p -s |void |del_xpv |XPV* p -s |void |del_xpviv |XPVIV* p -s |void |del_xpvnv |XPVNV* p -s |void |del_xpvcv |XPVCV* p -s |void |del_xpvav |XPVAV* p -s |void |del_xpvhv |XPVHV* p -s |void |del_xpvmg |XPVMG* p -s |void |del_xpvlv |XPVLV* p -s |void |del_xpvbm |XPVBM* p -s |void |del_xrv |XRV* p -s |void |sv_unglob |SV* sv -s |void |not_a_number |SV *sv -s |I32 |visit |SVFUNC_t f|U32 flags|U32 mask -s |void |sv_add_backref |SV *tsv|SV *sv -s |void |sv_del_backref |SV *sv +sR |IV |asIV |NN SV* sv +sR |UV |asUV |NN SV* sv +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 \ + |NULLOK SV *keyname|I32 aindex|int subscript_type # ifdef DEBUGGING s |void |del_sv |SV *p # endif # if !defined(NV_PRESERVES_UV) s |int |sv_2iuv_non_preserve |SV *sv|I32 numtype # endif -s |I32 |expect_number |char** pattern +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 |SV *sv|MAGIC **mgp|STRLEN **cachep|I32 i|I32 *offsetp|I32 uoff|U8 **sp|U8 *start|U8 *send -s |bool |utf8_mg_pos_init |SV *sv|MAGIC **mgp|STRLEN **cachep|I32 i|I32 *offsetp|U8 *s|U8 *start +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 \ + |NN const U8 *send +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 #if defined(PERL_OLD_COPY_ON_WRITE) -sM |void |sv_release_COW |SV *sv|char *pvx|STRLEN cur|STRLEN len \ - |U32 hash|SV *after +sM |void |sv_release_COW |SV *sv|const char *pvx|STRLEN len|SV *after #endif #endif @@ -1238,10 +1267,10 @@ s |char* |force_word |char *start|int token|int check_keyword \ |int allow_pack|int allow_tick s |SV* |tokeq |SV *sv s |int |pending_ident -s |char* |scan_const |char *start -s |char* |scan_formline |char *s -s |char* |scan_heredoc |char *s -s |char* |scan_ident |char *s|char *send|char *dest \ +s |char* |scan_const |NN char *start +s |char* |scan_formline |NN char *s +s |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 @@ -1252,28 +1281,28 @@ 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 -s |void |checkcomma |char *s|char *name|char *what -s |void |force_ident |char *s|int kind +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 -s |void |missingterm |char *s -s |void |no_op |char *what|char *s +rs |void |missingterm |char *s +s |void |no_op |const char *what|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|char *pkgname|I32 len -s |SV* |new_constant |char *s|STRLEN len|const char *key|SV *sv \ +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 |char *s|I32 rv +s |int |tokereport |const char *s|I32 rv # endif s |int |ao |int toketype s |void |depcom -s |char* |incl_perldb +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 @@ -1288,8 +1317,10 @@ s |SV*|isa_lookup |HV *stash|const char *name|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 #endif +#endif #if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT) s |COP* |closest_cop |COP *cop|OP *o @@ -1300,42 +1331,45 @@ s |SV* |mess_alloc sn |NV|mulexp10 |NV value|I32 exponent #endif +#if defined(PERL_IN_UTF8_C) || defined(PERL_DECL_PROT) +s |STRLEN |is_utf8_char_slow|NN const U8 *s|const STRLEN len +#endif + START_EXTERN_C -Apd |void |sv_setsv_flags |SV* dsv|SV* ssv|I32 flags -Apd |void |sv_catpvn_flags|SV* sv|const char* ptr|STRLEN len|I32 flags -Apd |void |sv_catsv_flags |SV* dsv|SV* ssv|I32 flags -Apd |STRLEN |sv_utf8_upgrade_flags|SV *sv|I32 flags +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 |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_2pv_flags |SV* sv|STRLEN* lp|I32 flags -Apd |void |sv_copypv |SV* dsv|SV* ssv -Ap |char* |my_atof2 |const char *s|NV* value +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 #endif #if defined(USE_PERLIO) && !defined(USE_SFIO) -Ap |int |PerlIO_close |PerlIO * -Ap |int |PerlIO_fill |PerlIO * -Ap |int |PerlIO_fileno |PerlIO * -Ap |int |PerlIO_eof |PerlIO * -Ap |int |PerlIO_error |PerlIO * -Ap |int |PerlIO_flush |PerlIO * -Ap |void |PerlIO_clearerr |PerlIO * -Ap |void |PerlIO_set_cnt |PerlIO *|int -Ap |void |PerlIO_set_ptrcnt |PerlIO *|STDCHAR *|int -Ap |void |PerlIO_setlinebuf |PerlIO * -Ap |SSize_t|PerlIO_read |PerlIO *|void *|Size_t -Ap |SSize_t|PerlIO_write |PerlIO *|const void *|Size_t -Ap |SSize_t|PerlIO_unread |PerlIO *|const void *|Size_t -Ap |Off_t |PerlIO_tell |PerlIO * -Ap |int |PerlIO_seek |PerlIO *|Off_t|int +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 * -Ap |STDCHAR *|PerlIO_get_ptr |PerlIO * -Ap |int |PerlIO_get_bufsiz |PerlIO * -Ap |int |PerlIO_get_cnt |PerlIO * +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 @@ -1348,49 +1382,52 @@ s |void |deb_stack_n |SV** stack_base|I32 stack_min \ |I32 stack_max|I32 mark_min|I32 mark_max #endif -pd |PADLIST*|pad_new |int flags +pda |PADLIST*|pad_new |int flags pd |void |pad_undef |CV* cv -pd |PADOFFSET|pad_add_name |char *name\ +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 -pd |void |pad_check_dup |char* name|bool is_our|HV* ourstash +pd |void |pad_check_dup |NN const char* name|bool is_our|NN const HV* ourstash #ifdef DEBUGGING -pd |void |pad_setsv |PADOFFSET po|SV* sv +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|PerlIO *file \ - |PADLIST *padlist|int full -pd |void |pad_fixup_inner_anons|PADLIST *padlist|CV *old_cv|CV *new_cv +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 |pad_push |PADLIST *padlist|int depth|int has_args +pd |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 |char *name|CV* cv|U32 seq|int warn \ +sd |PADOFFSET|pad_findlex |const char *name|const CV* cv|U32 seq|int warn \ |SV** out_capture|SV** out_name_sv \ |int *out_flags # if defined(DEBUGGING) -sd |void |cv_dump |CV *cv|char *title +sd |void |cv_dump |NN const CV *cv|NN const char *title # endif #endif -pd |CV* |find_runcv |U32 *db_seqp +pdR |CV* |find_runcv |U32 *db_seqp p |void |free_tied_hv_pool #if defined(DEBUGGING) -p |int |get_debug_opts |char **s|bool givehelp +p |int |get_debug_opts |const char **s|bool givehelp #endif Ap |void |save_set_svflags|SV* sv|U32 mask|U32 val -Apod |void |hv_assert |HV* tb - -#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT) -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 -#endif +Apod |void |hv_assert |NN HV* tb -Apd |void |hv_clear_placeholders|HV* hb +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 +Apd |void |hv_clear_placeholders |NN HV* hb +ApoR |I32* |hv_placeholders_p |NN HV* hv +ApoR |I32 |hv_placeholders_get |NN HV* hv +Apo |void |hv_placeholders_set |NN HV* hv|I32 ph -Apd |SV* |hv_scalar |HV* hv| -p |SV* |magic_scalarpack|HV* hv|MAGIC* mg +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 #endif @@ -1473,8 +1510,11 @@ np |void |my_swabn |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 -dp |bool |is_gv_magical_sv|SV *name|U32 flags +dpR |bool |is_gv_magical_sv|SV *name|U32 flags -Apd |char* |savesvpv |SV* sv +ApR |bool |stashpv_hvname_match|NN const COP *cop|NN const HV *hv 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 5b26bafb8f..3592d6c77a 100644 --- a/ext/Devel/PPPort/parts/inc/MY_CXT +++ b/ext/Devel/PPPort/parts/inc/MY_CXT @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 10 $ +## $Revision: 11 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:52 +0100 $ +## $Date: 2005/03/10 18:08:41 +0100 $ ## ################################################################################ ## @@ -139,13 +139,13 @@ _aMY_CXT =xsmisc #define MY_CXT_KEY "Devel::PPPort::_guts" XS_VERSION - + typedef struct { /* Put Global Data in here */ - int dummy; + int dummy; } my_cxt_t; - -START_MY_CXT + +START_MY_CXT =xsboot diff --git a/ext/Devel/PPPort/parts/inc/SvPV b/ext/Devel/PPPort/parts/inc/SvPV index 56474d276e..bb4c0f5436 100644 --- a/ext/Devel/PPPort/parts/inc/SvPV +++ b/ext/Devel/PPPort/parts/inc/SvPV @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 10 $ +## $Revision: 11 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:54 +0100 $ +## $Date: 2005/03/10 18:08:41 +0100 $ ## ################################################################################ ## @@ -32,7 +32,7 @@ sv_pvn_force char * sv_2pv_nolen(pTHX_ register SV *sv) -{ +{ STRLEN n_a; return sv_2pv(sv, &n_a); } @@ -63,7 +63,7 @@ sv_2pv_nolen(pTHX_ register SV *sv) char * sv_2pvbyte(pTHX_ register SV *sv, STRLEN *lp) -{ +{ sv_utf8_downgrade(sv,0); return SvPV(sv,*lp); } diff --git a/ext/Devel/PPPort/parts/inc/format b/ext/Devel/PPPort/parts/inc/format index 78d46f92de..da2048b91d 100644 --- a/ext/Devel/PPPort/parts/inc/format +++ b/ext/Devel/PPPort/parts/inc/format @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 3 $ +## $Revision: 4 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:51 +0100 $ +## $Date: 2005/03/10 18:08:37 +0100 $ ## ################################################################################ ## @@ -41,7 +41,7 @@ #ifndef NVef # if defined(USE_LONG_DOUBLE) && defined(HAS_LONG_DOUBLE) && \ - defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ + defined(PERL_PRIfldbl) /* Not very likely, but let's try anyway. */ # define NVef PERL_PRIeldbl # define NVff PERL_PRIfldbl # define NVgf PERL_PRIgldbl diff --git a/ext/Devel/PPPort/parts/inc/grok b/ext/Devel/PPPort/parts/inc/grok index be7679fa95..782e0ddbac 100644 --- a/ext/Devel/PPPort/parts/inc/grok +++ b/ext/Devel/PPPort/parts/inc/grok @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 7 $ +## $Revision: 8 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:51 +0100 $ +## $Date: 2005/03/10 18:08:40 +0100 $ ## ################################################################################ ## @@ -53,12 +53,12 @@ grok_numeric_radix(pTHX_ const char **sp, const char *send) { #ifdef USE_LOCALE_NUMERIC #ifdef PL_numeric_radix_sv - if (PL_numeric_radix_sv && IN_LOCALE) { + if (PL_numeric_radix_sv && IN_LOCALE) { STRLEN len; char* radix = SvPV(PL_numeric_radix_sv, len); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; - return TRUE; + return TRUE; } } #else @@ -69,11 +69,11 @@ grok_numeric_radix(pTHX_ const char **sp, const char *send) dTHR; /* needed for older threaded perls */ struct lconv *lc = localeconv(); char *radix = lc->decimal_point; - if (radix && IN_LOCALE) { + if (radix && IN_LOCALE) { STRLEN len = strlen(radix); if (*sp + len <= send && memEQ(*sp, radix, len)) { *sp += len; - return TRUE; + return TRUE; } } #endif /* PERL_VERSION */ @@ -360,7 +360,7 @@ grok_bin(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) warn("Illegal binary digit '%c' ignored", *s); break; } - + if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) @@ -449,7 +449,7 @@ grok_hex(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) warn("Illegal hexadecimal digit '%c' ignored", *s); break; } - + if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) @@ -529,7 +529,7 @@ grok_oct(pTHX_ char *start, STRLEN *len_p, I32 *flags, NV *result) } break; } - + if ( ( overflowed && value_nv > 4294967295.0) #if UVSIZE > 4 || (!overflowed && value > 0xffffffff ) diff --git a/ext/Devel/PPPort/parts/inc/misc b/ext/Devel/PPPort/parts/inc/misc index 84c0511aff..3fd37fadf7 100644 --- a/ext/Devel/PPPort/parts/inc/misc +++ b/ext/Devel/PPPort/parts/inc/misc @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 20 $ +## $Revision: 22 $ ## $Author: mhx $ -## $Date: 2005/02/02 19:17:33 +0100 $ +## $Date: 2005/06/11 09:37:31 +0200 $ ## ################################################################################ ## @@ -119,7 +119,7 @@ typedef NVTYPE NV; # if PTRSIZE == LONGSIZE # define PTR2ul(p) (unsigned long)(p) # else -# define PTR2ul(p) INT2PTR(unsigned long,p) +# define PTR2ul(p) INT2PTR(unsigned long,p) # endif #endif /* !INT2PTR */ diff --git a/ext/Devel/PPPort/parts/inc/newCONSTSUB b/ext/Devel/PPPort/parts/inc/newCONSTSUB index fbf752a569..9bf81d17f4 100644 --- a/ext/Devel/PPPort/parts/inc/newCONSTSUB +++ b/ext/Devel/PPPort/parts/inc/newCONSTSUB @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 8 $ +## $Revision: 9 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:52 +0100 $ +## $Date: 2005/03/10 18:08:41 +0100 $ ## ################################################################################ ## @@ -96,12 +96,12 @@ call_newCONSTSUB_3() =tests plan => 3 -&Devel::PPPort::call_newCONSTSUB_1(); +&Devel::PPPort::call_newCONSTSUB_1(); ok(&Devel::PPPort::test_value_1(), 1); -&Devel::PPPort::call_newCONSTSUB_2(); +&Devel::PPPort::call_newCONSTSUB_2(); ok(&Devel::PPPort::test_value_2(), 2); -&Devel::PPPort::call_newCONSTSUB_3(); +&Devel::PPPort::call_newCONSTSUB_3(); ok(&Devel::PPPort::test_value_3(), 3); diff --git a/ext/Devel/PPPort/parts/inc/ppphbin b/ext/Devel/PPPort/parts/inc/ppphbin index 6df23e4f6d..e3d32ddd32 100644 --- a/ext/Devel/PPPort/parts/inc/ppphbin +++ b/ext/Devel/PPPort/parts/inc/ppphbin @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 26 $ +## $Revision: 28 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:53 +0100 $ +## $Date: 2005/03/10 18:08:41 +0100 $ ## ################################################################################ ## @@ -29,6 +29,7 @@ my %opt = ( hints => 1, changes => 1, cplusplus => 0, + filter => 1, ); my($ppport) = $0 =~ /([\w.]+)$/; @@ -38,7 +39,7 @@ my $HS = "[ \t]"; # horizontal whitespace eval { require Getopt::Long; Getopt::Long::GetOptions(\%opt, qw( - help quiet diag! hints! changes! cplusplus + help quiet diag! filter! hints! changes! cplusplus patch=s copy=s diff=s compat-version=s list-provided list-unsupported api-info=s )) or usage(); @@ -57,7 +58,7 @@ if (exists $opt{'compat-version'}) { die "Invalid version number format: '$opt{'compat-version'}'\n"; } die "Only Perl 5 is supported\n" if $r != 5; - die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $v >= 1000; + die "Invalid version number: $opt{'compat-version'}\n" if $v >= 1000 || $s >= 1000; $opt{'compat-version'} = sprintf "%d.%03d%03d", $r, $v, $s; } else { @@ -70,32 +71,8 @@ my $cce = '*'.'/'; my $rccs = quotemeta $ccs; my $rcce = quotemeta $cce; -my @files; - -if (@ARGV) { - @files = map { glob $_ } @ARGV; -} -else { - eval { - require File::Find; - File::Find::find(sub { - $File::Find::name =~ /\.(xs|c|h|cc)$/i - and push @files, $File::Find::name; - }, '.'); - }; - if ($@) { - @files = map { glob $_ } qw(*.xs *.c *.h *.cc); - } - my %filter = map { /(.*)\.xs$/ ? ("$1.c" => 1) : () } @files; - @files = grep { !/\b\Q$ppport\E$/i && !exists $filter{$_} } @files; -} - -unless (@files) { - die "No input files given!\n"; -} - my %API = map { /^(\w+)\|([^|]*)\|([^|]*)\|(\w*)$/ - ? ( $1 => { + ? ( $1 => { ($2 ? ( base => $2 ) : ()), ($3 ? ( todo => $3 ) : ()), (index($4, 'v') >= 0 ? ( varargs => 1 ) : ()), @@ -194,6 +171,44 @@ if (exists $opt{'list-provided'}) { exit 0; } +my @files; +my @srcext = qw( xs c h cc cpp ); +my $srcext = join '|', @srcext; + +if (@ARGV) { + my %seen; + @files = grep { -f && !exists $seen{$_} } map { glob $_ } @ARGV; +} +else { + eval { + require File::Find; + File::Find::find(sub { + $File::Find::name =~ /\.($srcext)$/i + and push @files, $File::Find::name; + }, '.'); + }; + if ($@) { + @files = map { glob "*.$_" } @srcext; + } +} + +if (!@ARGV || $opt{filter}) { + my(@in, @out); + my %xsc = map { /(.*)\.xs$/ ? ("$1.c" => 1, "$1.cc" => 1) : () } @files; + for (@files) { + my $out = exists $xsc{$_} || /\b\Q$ppport\E$/i || !/\.($srcext)$/i; + push @{ $out ? \@out : \@in }, $_; + } + if (@ARGV && @out) { + warning("Skipping the following files (use --nofilter to avoid this):\n| ", join "\n| ", @out); + } + @files = @in; +} + +unless (@files) { + die "No input files given!\n"; +} + my(%files, %global, %revreplace); %revreplace = reverse %replace; my $filename; diff --git a/ext/Devel/PPPort/parts/inc/ppphdoc b/ext/Devel/PPPort/parts/inc/ppphdoc index 37097b7164..36c072fd6b 100644 --- a/ext/Devel/PPPort/parts/inc/ppphdoc +++ b/ext/Devel/PPPort/parts/inc/ppphdoc @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 20 $ +## $Revision: 21 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:53 +0100 $ +## $Date: 2005/02/27 21:13:25 +0100 $ ## ################################################################################ ## @@ -33,7 +33,9 @@ ppport.h - Perl/Pollution/Portability version __VERSION__ =head1 SYNOPSIS - perl ppport.h [options] [files] + perl ppport.h [options] [source files] + + Searches current directory for files if no [source files] are given --help show short help @@ -48,6 +50,7 @@ ppport.h - Perl/Pollution/Portability version __VERSION__ --nodiag don't show diagnostics --nohints don't show hints --nochanges don't suggest changes + --nofilter don't filter input files --list-provided list provided API --list-unsupported list unsupported API @@ -120,6 +123,11 @@ notes. Don't suggest any changes. Only give diagnostic output and hints unless these are also deactivated. +=head2 --nofilter + +Don't filter the list of input files. By default, files not looking +like source code (i.e. not *.xs, *.c, *.cc, *.cpp or *.h) are skipped. + =head2 --list-provided Lists the API elements for which compatibility is provided by diff --git a/ext/Devel/PPPort/parts/inc/ppphtest b/ext/Devel/PPPort/parts/inc/ppphtest index 43fbe9fcbf..fda336264e 100644 --- a/ext/Devel/PPPort/parts/inc/ppphtest +++ b/ext/Devel/PPPort/parts/inc/ppphtest @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 23 $ +## $Revision: 26 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:53 +0100 $ +## $Date: 2005/06/24 19:03:21 +0200 $ ## ################################################################################ ## @@ -15,7 +15,7 @@ ## ################################################################################ -=tests plan => 134 +=tests plan => 197 use File::Path qw/rmtree mkpath/; use Config; @@ -23,6 +23,8 @@ use Config; my $tmp = 'ppptmp'; my $inc = ''; my $perl = find_perl(); +my $isVMS = $^O eq 'VMS'; +my $isMAC = $^O eq 'MacOS'; rmtree($tmp) if -d $tmp; mkpath($tmp) or die "mkpath $tmp: $!\n"; @@ -30,7 +32,15 @@ chdir($tmp) or die "chdir $tmp: $!\n"; if ($ENV{'PERL_CORE'}) { if (-d '../../lib') { - $inc = $^O eq 'VMS' ? '-"I../../lib"' : '-I../../lib'; + if ($isVMS) { + $inc = '"-I../../lib"'; + } + elsif ($isMAC) { + $inc = '-I:::lib'; + } + else { + $inc = '-I../../lib'; + } unshift @INC, '../../lib'; } } @@ -45,15 +55,30 @@ END { ok(&Devel::PPPort::WriteFile("ppport.h")); +sub comment +{ + my $c = shift; + $c =~ s/^/# | /mg; + $c .= "\n" unless $c =~ /[\r\n]$/; + print $c; +} + sub ppport { - my @args = @_; - print "# *** running $perl $inc ppport.h @args ***\n"; - my $out = join '', `$perl $inc ppport.h @args`; - my $copy = $out; - $copy =~ s/^/# | /mg; - print "$copy\n"; - return $out; + my @args = ('ppport.h', @_); + unshift @args, $inc if $inc; + my $run = $perl =~ m/\s/ ? qq("$perl") : $perl; + $run .= ' -MMac::err=unix' if $isMAC; + for (@args) { + $_ = qq("$_") if $isVMS && /^[^"]/; + $run .= " $_"; + } + print "# *** running $run ***\n"; + $run .= ' 2>&1' unless $isMAC; + my @out = `$run`; + my $out = join '', @out; + comment($out); + return wantarray ? @out : $out; } sub matches @@ -82,9 +107,7 @@ sub eq_files } $_ = do { local $/; <F> }; close F; - my $copy = $_; - $copy =~ s/^/# | /mg; - print "$copy\n"; + comment($_); } return $f1 eq $f2; } @@ -133,11 +156,11 @@ for $t (@tests) { sub find_perl { my $perl = $^X; - - return $perl if $^O eq 'VMS'; - + + return $perl if $isVMS; + my $exe = $Config{'_exe'} || ''; - + if ($perl =~ /^perl\Q$exe\E$/i) { $perl = "perl$exe"; eval "require File::Spec"; @@ -147,13 +170,13 @@ sub find_perl $perl = File::Spec->catfile(File::Spec->curdir(), $perl); } } - + if ($perl !~ /\Q$exe\E$/i) { $perl .= $exe; } - + warn "find_perl: cannot find $perl from $^X" unless -f $perl; - + return $perl; } @@ -164,10 +187,10 @@ ok($o =~ /^Usage:.*ppport\.h/m); ok($o =~ /--help/m); $o = ppport(qw(--nochanges)); -ok($o =~ /^scanning.*test\.xs/mi); -ok($o =~ /analyzing.*test\.xs/mi); -ok(matches($o, '^scanning', 'mi'), 1); -ok(matches($o, 'analyzing', 'mi'), 1); +ok($o =~ /^Scanning.*test\.xs/mi); +ok($o =~ /Analyzing.*test\.xs/mi); +ok(matches($o, '^Scanning', 'm'), 1); +ok(matches($o, 'Analyzing', 'm'), 1); ok($o =~ /Uses Perl_newSViv instead of newSViv/); $o = ppport(qw(--quiet --nochanges)); @@ -182,9 +205,9 @@ Perl_newSViv(); # check if C and C++ comments are filtered correctly my $o = ppport(qw(--copy=a)); -ok($o =~ /^scanning.*MyExt\.xs/mi); -ok($o =~ /analyzing.*MyExt\.xs/mi); -ok(matches($o, '^scanning', 'mi'), 1); +ok($o =~ /^Scanning.*MyExt\.xs/mi); +ok($o =~ /Analyzing.*MyExt\.xs/mi); +ok(matches($o, '^Scanning', 'm'), 1); ok($o =~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Uses grok_bin/m); ok($o !~ /^Uses newSVpv/m); @@ -194,9 +217,9 @@ ok(eq_files('MyExt.xsa', 'MyExt.ra')); # check if C++ are left untouched with --cplusplus $o = ppport(qw(--copy=b --cplusplus)); -ok($o =~ /^scanning.*MyExt\.xs/mi); -ok($o =~ /analyzing.*MyExt\.xs/mi); -ok(matches($o, '^scanning', 'mi'), 1); +ok($o =~ /^Scanning.*MyExt\.xs/mi); +ok($o =~ /Analyzing.*MyExt\.xs/mi); +ok(matches($o, '^Scanning', 'm'), 1); ok($o =~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Uses grok_bin/m); ok($o !~ /^Uses newSVpv/m); @@ -206,14 +229,14 @@ ok(eq_files('MyExt.xsb', 'MyExt.rb')); unlink qw(MyExt.xsa MyExt.xsb); ---------------------------- MyExt.xs ----------------------------------------- - + newSVuv(); // newSVpv(); XPUSHs(foo); /* grok_bin(); */ ---------------------------- MyExt.ra ----------------------------------------- - + #include "ppport.h" newSVuv(); /* newSVpv(); */ @@ -221,7 +244,7 @@ newSVuv(); /* grok_bin(); */ ---------------------------- MyExt.rb ----------------------------------------- - + #include "ppport.h" newSVuv(); // newSVpv(); @@ -231,9 +254,9 @@ newSVuv(); =============================================================================== my $o = ppport(qw(--nochanges file1.xs)); -ok($o =~ /^scanning.*file1\.xs/mi); -ok($o =~ /analyzing.*file1\.xs/mi); -ok($o !~ /^scanning.*file2\.xs/mi); +ok($o =~ /^Scanning.*file1\.xs/mi); +ok($o =~ /Analyzing.*file1\.xs/mi); +ok($o !~ /^Scanning.*file2\.xs/mi); ok($o =~ /^Uses newCONSTSUB/m); ok($o =~ /^Uses SvPV_nolen.*depends.*sv_2pv_nolen/m); ok($o =~ /hint for newCONSTSUB/m); @@ -241,9 +264,9 @@ ok($o !~ /hint for sv_2pv_nolen/m); ok($o =~ /^Looks good/m); $o = ppport(qw(--nochanges --nohints file1.xs)); -ok($o =~ /^scanning.*file1\.xs/mi); -ok($o =~ /analyzing.*file1\.xs/mi); -ok($o !~ /^scanning.*file2\.xs/mi); +ok($o =~ /^Scanning.*file1\.xs/mi); +ok($o =~ /Analyzing.*file1\.xs/mi); +ok($o !~ /^Scanning.*file2\.xs/mi); ok($o =~ /^Uses newCONSTSUB/m); ok($o =~ /^Uses SvPV_nolen.*depends.*sv_2pv_nolen/m); ok($o !~ /hint for newCONSTSUB/m); @@ -251,9 +274,9 @@ ok($o !~ /hint for sv_2pv_nolen/m); ok($o =~ /^Looks good/m); $o = ppport(qw(--nochanges --nohints --nodiag file1.xs)); -ok($o =~ /^scanning.*file1\.xs/mi); -ok($o =~ /analyzing.*file1\.xs/mi); -ok($o !~ /^scanning.*file2\.xs/mi); +ok($o =~ /^Scanning.*file1\.xs/mi); +ok($o =~ /Analyzing.*file1\.xs/mi); +ok($o !~ /^Scanning.*file2\.xs/mi); ok($o !~ /^Uses newCONSTSUB/m); ok($o !~ /^Uses SvPV_nolen/m); ok($o !~ /hint for newCONSTSUB/m); @@ -264,27 +287,27 @@ $o = ppport(qw(--nochanges --quiet file1.xs)); ok($o =~ /^\s*$/); $o = ppport(qw(--nochanges file2.xs)); -ok($o =~ /^scanning.*file2\.xs/mi); -ok($o =~ /analyzing.*file2\.xs/mi); -ok($o !~ /^scanning.*file1\.xs/mi); +ok($o =~ /^Scanning.*file2\.xs/mi); +ok($o =~ /Analyzing.*file2\.xs/mi); +ok($o !~ /^Scanning.*file1\.xs/mi); ok($o =~ /^Uses mXPUSHp/m); ok($o =~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Looks good/m); ok($o =~ /^1 potentially required change detected/m); $o = ppport(qw(--nochanges --nohints file2.xs)); -ok($o =~ /^scanning.*file2\.xs/mi); -ok($o =~ /analyzing.*file2\.xs/mi); -ok($o !~ /^scanning.*file1\.xs/mi); +ok($o =~ /^Scanning.*file2\.xs/mi); +ok($o =~ /Analyzing.*file2\.xs/mi); +ok($o !~ /^Scanning.*file1\.xs/mi); ok($o =~ /^Uses mXPUSHp/m); ok($o =~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Looks good/m); ok($o =~ /^1 potentially required change detected/m); $o = ppport(qw(--nochanges --nohints --nodiag file2.xs)); -ok($o =~ /^scanning.*file2\.xs/mi); -ok($o =~ /analyzing.*file2\.xs/mi); -ok($o !~ /^scanning.*file1\.xs/mi); +ok($o =~ /^Scanning.*file2\.xs/mi); +ok($o =~ /Analyzing.*file2\.xs/mi); +ok($o !~ /^Scanning.*file1\.xs/mi); ok($o !~ /^Uses mXPUSHp/m); ok($o !~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Looks good/m); @@ -309,9 +332,9 @@ mXPUSHp(foo); =============================================================================== my $o = ppport(qw(--nochanges)); -ok($o =~ /^scanning.*FooBar\.xs/mi); -ok($o =~ /analyzing.*FooBar\.xs/mi); -ok(matches($o, '^scanning', 'mi'), 1); +ok($o =~ /^Scanning.*FooBar\.xs/mi); +ok($o =~ /Analyzing.*FooBar\.xs/mi); +ok(matches($o, '^Scanning', 'm'), 1); ok($o !~ /^Looks good/m); ok($o =~ /^Uses grok_bin/m); @@ -324,14 +347,14 @@ grok_bin(); =============================================================================== my $o = ppport(qw(--nochanges)); -ok($o =~ /^scanning.*First\.xs/mi); -ok($o =~ /analyzing.*First\.xs/mi); -ok($o =~ /^scanning.*second\.h/mi); -ok($o =~ /analyzing.*second\.h/mi); -ok($o =~ /^scanning.*sub.*third\.c/mi); -ok($o =~ /analyzing.*sub.*third\.c/mi); -ok($o !~ /^scanning.*foobar/mi); -ok(matches($o, '^scanning', 'mi'), 3); +ok($o =~ /^Scanning.*First\.xs/mi); +ok($o =~ /Analyzing.*First\.xs/mi); +ok($o =~ /^Scanning.*second\.h/mi); +ok($o =~ /Analyzing.*second\.h/mi); +ok($o =~ /^Scanning.*sub.*third\.c/mi); +ok($o =~ /Analyzing.*sub.*third\.c/mi); +ok($o !~ /^Scanning.*foobar/mi); +ok(matches($o, '^Scanning', 'm'), 3); ---------------------------- First.xs ----------------------------------------- @@ -364,12 +387,12 @@ ok($o =~ /Possibly wrong #define NEED_foobar in.*test.xs/i); my $o = ppport(qw(--copy=f)); for (qw(main.xs mod1.c mod2.c mod3.c mod4.c mod5.c)) { - ok($o =~ /^scanning.*\Q$_\E/mi); - ok($o =~ /analyzing.*\Q$_\E/i); + ok($o =~ /^Scanning.*\Q$_\E/mi); + ok($o =~ /Analyzing.*\Q$_\E/i); } -ok(matches($o, '^scanning', 'mi'), 6); +ok(matches($o, '^Scanning', 'm'), 6); -ok(matches($o, '^Writing copy of', 'mi'), 5); +ok(matches($o, '^Writing copy of', 'm'), 5); ok(!-e "mod5.cf"); for (qw(main.xs mod1.c mod2.c mod3.c mod4.c)) { @@ -546,9 +569,30 @@ grok_hex(); my $o = ppport(qw(--nochanges)); ok($o =~ /Uses SvPVutf8_force, which may not be portable/m); +$o = ppport(qw(--nochanges --compat-version=5.5.3)); +ok($o =~ /Uses SvPVutf8_force, which may not be portable/m); + +$o = ppport(qw(--nochanges --compat-version=5.005_03)); +ok($o =~ /Uses SvPVutf8_force, which may not be portable/m); + $o = ppport(qw(--nochanges --compat-version=5.6.0)); ok($o !~ /Uses SvPVutf8_force/m); +$o = ppport(qw(--nochanges --compat-version=5.006)); +ok($o !~ /Uses SvPVutf8_force/m); + +$o = ppport(qw(--nochanges --compat-version=5.999.999)); +ok($o !~ /Uses SvPVutf8_force/m); + +$o = ppport(qw(--nochanges --compat-version=6.0.0)); +ok($o =~ /Only Perl 5 is supported/m); + +$o = ppport(qw(--nochanges --compat-version=5.1000.999)); +ok($o =~ /Invalid version number: 5.1000.999/m); + +$o = ppport(qw(--nochanges --compat-version=5.999.1000)); +ok($o =~ /Invalid version number: 5.999.1000/m); + ---------------------------- FooBar.xs ---------------------------------------- SvPVutf8_force(); @@ -557,7 +601,7 @@ SvPVutf8_force(); my $o = ppport(qw(--nochanges)); ok($o !~ /potentially required change/); -ok(matches($o, '^Looks good', 'mi'), 2); +ok(matches($o, '^Looks good', 'm'), 2); ---------------------------- FooBar.xs ---------------------------------------- @@ -574,3 +618,122 @@ grok_number(); call_pv(); +=============================================================================== + +# check --api-info option + +my $o = ppport(qw(--api-info=INT2PTR)); +my %found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg; +ok(scalar keys %found, 1); +ok(exists $found{INT2PTR}); +ok(matches($o, '^Supported at least starting from perl-5\.6\.0\.', 'm'), 1); +ok(matches($o, '^Support by .*ppport.* provided back to perl-5\.003\.', 'm'), 1); + +$o = ppport(qw(--api-info=Zero)); +%found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg; +ok(scalar keys %found, 1); +ok(exists $found{Zero}); +ok(matches($o, '^No portability information available\.', 'm'), 1); + +$o = ppport(qw(--api-info=/Zero/)); +%found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg; +ok(scalar keys %found, 2); +ok(exists $found{Zero}); +ok(exists $found{ZeroD}); + +=============================================================================== + +# check --list-provided option + +my @o = ppport(qw(--list-provided)); +my %p; +my $fail = 0; +for (@o) { + my($name, $flags) = /^(\w+)(?:\s+\[(\w+(?:,\s+\w+)*)\])?$/ or $fail++; + exists $p{$name} and $fail++; + $p{$name} = defined $flags ? { map { ($_ => 1) } $flags =~ /(\w+)/g } : ''; +} +ok(@o > 100); +ok($fail, 0); + +ok(exists $p{call_sv}); +ok(not ref $p{call_sv}); + +ok(exists $p{grok_bin}); +ok(ref $p{grok_bin}, 'HASH'); +ok(scalar keys %{$p{grok_bin}}, 1); +ok($p{grok_bin}{explicit}); + +ok(exists $p{gv_stashpvn}); +ok(ref $p{gv_stashpvn}, 'HASH'); +ok(scalar keys %{$p{gv_stashpvn}}, 1); +ok($p{gv_stashpvn}{hint}); + +ok(exists $p{sv_catpvf_mg}); +ok(ref $p{sv_catpvf_mg}, 'HASH'); +ok(scalar keys %{$p{sv_catpvf_mg}}, 2); +ok($p{sv_catpvf_mg}{explicit}); +ok($p{sv_catpvf_mg}{depend}); + +=============================================================================== + +# check --list-unsupported option + +my @o = ppport(qw(--list-unsupported)); +my %p; +my $fail = 0; +for (@o) { + my($name, $ver) = /^(\w+)\s*\.+\s*([\d._]+)$/ or $fail++; + exists $p{$name} and $fail++; + $p{$name} = $ver; +} +ok(@o > 100); +ok($fail, 0); + +ok(exists $p{utf8_distance}); +ok($p{utf8_distance}, '5.6.0'); + +ok(exists $p{save_generic_svref}); +ok($p{save_generic_svref}, '5.005_03'); + +=============================================================================== + +# check --nofilter option + +my $o = ppport(qw(--nochanges)); +ok($o =~ /^Scanning.*foo\.cpp/mi); +ok($o =~ /Analyzing.*foo\.cpp/mi); +ok(matches($o, '^Scanning', 'm'), 1); +ok(matches($o, 'Analyzing', 'm'), 1); + +$o = ppport(qw(--nochanges foo.cpp foo.o Makefile.PL)); +ok($o =~ /Skipping the following files \(use --nofilter to avoid this\):/m); +ok(matches($o, '^\|\s+foo\.o', 'mi'), 1); +ok(matches($o, '^\|\s+Makefile\.PL', 'mi'), 1); +ok($o =~ /^Scanning.*foo\.cpp/mi); +ok($o =~ /Analyzing.*foo\.cpp/mi); +ok(matches($o, '^Scanning', 'm'), 1); +ok(matches($o, 'Analyzing', 'm'), 1); + +$o = ppport(qw(--nochanges --nofilter foo.cpp foo.o Makefile.PL)); +ok($o =~ /^Scanning.*foo\.cpp/mi); +ok($o =~ /Analyzing.*foo\.cpp/mi); +ok($o =~ /^Scanning.*foo\.o/mi); +ok($o =~ /Analyzing.*foo\.o/mi); +ok($o =~ /^Scanning.*Makefile/mi); +ok($o =~ /Analyzing.*Makefile/mi); +ok(matches($o, '^Scanning', 'm'), 3); +ok(matches($o, 'Analyzing', 'm'), 3); + +---------------------------- foo.cpp ------------------------------------------ + +newSViv(); + +---------------------------- foo.o -------------------------------------------- + +newSViv(); + +---------------------------- Makefile.PL -------------------------------------- + +newSViv(); + diff --git a/ext/Devel/PPPort/parts/inc/version b/ext/Devel/PPPort/parts/inc/version index 1bf07baf1d..c5ef47a79a 100644 --- a/ext/Devel/PPPort/parts/inc/version +++ b/ext/Devel/PPPort/parts/inc/version @@ -1,8 +1,8 @@ ################################################################################ ## -## $Revision: 4 $ +## $Revision: 5 $ ## $Author: mhx $ -## $Date: 2005/01/31 08:10:54 +0100 $ +## $Date: 2005/03/10 18:08:42 +0100 $ ## ################################################################################ ## @@ -48,7 +48,7 @@ PERL_PATCHLEVEL_H_IMPLICIT #define PERL_BCDVERSION ((PERL_REVISION * 0x1000000L) + (PERL_VERSION * 0x1000L) + PERL_SUBVERSION) -/* It is very unlikely that anyone will try to use this with Perl 6 +/* It is very unlikely that anyone will try to use this with Perl 6 (or greater), but who knows. */ #if PERL_REVISION != 5 diff --git a/ext/Devel/PPPort/parts/ppptools.pl b/ext/Devel/PPPort/parts/ppptools.pl index 9e27e6250f..e78f89a44c 100644 --- a/ext/Devel/PPPort/parts/ppptools.pl +++ b/ext/Devel/PPPort/parts/ppptools.pl @@ -4,9 +4,9 @@ # ################################################################################ # -# $Revision: 13 $ +# $Revision: 15 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:54 +0100 $ +# $Date: 2005/06/24 19:01:33 +0200 $ # ################################################################################ # @@ -211,15 +211,17 @@ sub ppcond sub trim_arg { my $in = shift; + my $remove = join '|', qw( NN NULLOK ); $in eq '...' and return ($in); local $_ = $in; my $id; - + s/[*()]/ /g; s/\[[^\]]*\]/ /g; s/\b(?:auto|const|extern|inline|register|static|volatile|restrict)\b//g; + s/\b(?:$remove)\b//; s/^\s*//; s/\s*$//; if( /^\b(?:struct|union|enum)\s+\w+(?:\s+(\w+))?$/ ) { @@ -240,6 +242,7 @@ sub trim_arg # these don't matter at all s/\b(?:auto|extern|inline|register|static|volatile|restrict)\b//g; + s/\b(?:$remove)\b//; s/(?=<\*)\s+(?=\*)//g; s/\s*(\*+)\s*/ $1 /g; diff --git a/ext/Devel/PPPort/parts/todo/5004040 b/ext/Devel/PPPort/parts/todo/5004040 index 9920f573c4..69ccd5d62c 100644 --- a/ext/Devel/PPPort/parts/todo/5004040 +++ b/ext/Devel/PPPort/parts/todo/5004040 @@ -1,2 +1 @@ 5.004040 -newWHILEOP # E (Perl_newWHILEOP) diff --git a/ext/Devel/PPPort/parts/todo/5005000 b/ext/Devel/PPPort/parts/todo/5005000 index e0eecec520..443a693698 100644 --- a/ext/Devel/PPPort/parts/todo/5005000 +++ b/ext/Devel/PPPort/parts/todo/5005000 @@ -1,7 +1,7 @@ 5.005000 PL_modglobal # E cx_dump # U -debop # U +debop # E debprofdump # U fbm_compile # E (Perl_fbm_compile) fbm_instr # E (Perl_fbm_instr) diff --git a/ext/Devel/PPPort/parts/todo/5006000 b/ext/Devel/PPPort/parts/todo/5006000 index b1e9b26ad0..2bd073bfe5 100644 --- a/ext/Devel/PPPort/parts/todo/5006000 +++ b/ext/Devel/PPPort/parts/todo/5006000 @@ -31,10 +31,10 @@ do_pmop_dump # U do_sv_dump # U dump_all # U dump_eval # U -dump_form # U +dump_form # E dump_indent # U -dump_packsubs # U -dump_sub # U +dump_packsubs # E +dump_sub # E dump_vindent # U get_context # E get_ppaddr # E diff --git a/ext/Devel/PPPort/ppport_h.PL b/ext/Devel/PPPort/ppport_h.PL index f8ed365f22..c19336cc27 100644 --- a/ext/Devel/PPPort/ppport_h.PL +++ b/ext/Devel/PPPort/ppport_h.PL @@ -4,9 +4,9 @@ # ################################################################################ # -# $Revision: 4 $ +# $Revision: 5 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:54 +0100 $ +# $Date: 2005/03/10 18:45:41 +0100 $ # ################################################################################ # @@ -19,8 +19,8 @@ # ################################################################################ -package Devel::PPPort; -sub bootstrap {}; +package Devel::PPPort; +sub bootstrap {}; require "PPPort.pm"; rename 'ppport.h', 'ppport.old' if -f 'ppport.h'; unlink "ppport.old" if WriteFile("ppport.h") && -f 'ppport.h'; diff --git a/ext/Devel/PPPort/soak b/ext/Devel/PPPort/soak index 65a8fbcce8..c0b11abf01 100644 --- a/ext/Devel/PPPort/soak +++ b/ext/Devel/PPPort/soak @@ -1,15 +1,15 @@ #!/usr/bin/perl -w ################################################################################ # -# soak -- Test Devel::PPPort with multiple versions of Perl. +# soak -- Test Perl modules with multiple Perl releases. # # Original Author: Paul Marquess # ################################################################################ # -# $Revision: 7 $ +# $Revision: 8 $ # $Author: mhx $ -# $Date: 2005/01/31 08:10:55 +0100 $ +# $Date: 2005/02/27 21:16:42 +0100 $ # ################################################################################ # @@ -28,151 +28,123 @@ use strict; use warnings; use ExtUtils::MakeMaker; use Getopt::Long; +use Pod::Usage; +use List::Util qw(max); +use Config; -my $VERSION = "1.000"; +my $VERSION = do { my @r = '$Snapshot: /Devel-PPPort/3.06_01 $' =~ /(\d+\.\d+(?:_\d+)?)/; @r ? $r[0] : '9.99' }; -$| = 1 ; -my $verbose = 0 ; +$| = 1; +my $verbose = 0; +my $MAKE = $Config{make} || 'make'; +my %OPT = ( + verbose => 0, + make => $Config{make} || 'make', +); -# TODO -- determine what "make" program to run. -my $MAKE = 'make'; +GetOptions(\%OPT, qw(verbose make=s mmargs=s@)) or pod2usage(2); -my $result = GetOptions( - "verbose" => \$verbose, - "make=s" => \$MAKE, - ) or Usage(); +$OPT{mmargs} = [''] unless exists $OPT{mmargs}; -my @GoodPerls = (); - -if (@ARGV) - { @GoodPerls = @ARGV } -else - { @GoodPerls = FindPerls() } - -my $maxlen = 0; -foreach (@GoodPerls) { - $maxlen = length $_ - if length $_ > $maxlen ; -} -$maxlen += 3 ; +my @GoodPerls = @ARGV ? @ARGV : FindPerls(); +my $maxlen = max(map length, @GoodPerls) + 3; +my $mmalen = max(map length, @{$OPT{mmargs}}); +$maxlen += $mmalen+3 if $mmalen > 0; # run each through the test harness - -my $bad = 0 ; -my $good = 0 ; -my $total = 0 ; +my(@good, @bad, $total); # prime the pump, so the first "make realclean" will work. -runit("perl Makefile.PL") || die "Cannot run perl Makefile.PL\n" ; +runit("$^X Makefile.PL") && runit("$MAKE realclean") + or die "Cannot run $^X Makefile.PL && $MAKE realclean\n"; -foreach my $perl (@GoodPerls) -{ - my $prefix = $verbose ? "$perl -- " : ''; - print "Testing $perl " . ('.' x ($maxlen - length $perl)) ; +for my $perl (@GoodPerls) { + for my $mm (@{$OPT{mmargs}}) { + my $config = $mm =~ /\S+/ ? " ($mm)" : ''; + my $prefix = $verbose ? "$perl$config -- " : ''; + print "Testing $perl$config " . ('.' x ($maxlen - length($perl.$config))); - my $ok = runit("$MAKE realclean") && - runit("$perl Makefile.PL") && - # runit("$perl Makefile.PL --with-apicheck") && - runit("$MAKE test"); + my $ok = runit("$perl Makefile.PL $mm") && + # runit("$perl Makefile.PL --with-apicheck") && + runit("$MAKE test"); - ++ $total; + $total++; if ($ok) { - ++ $good ; - print "${prefix}ok\n"; + push @good, [$perl, $mm]; + print "${prefix}ok\n"; } else { - ++ $bad ; - print "${prefix}not ok\n" ; + push @bad, [$perl, $mm]; + print "${prefix}not ok\n"; } + runit("$MAKE realclean"); + } } -print "\n\nPassed with $good of $total versions of Perl.\n\n"; -exit $bad ; - +if ($verbose && @bad) { + print "\nFailed with:\n", map " $_\n", @bad; +} +print "\nPassed with ", scalar @good, " of $total versions/configurations.\n\n"; +exit scalar @bad; sub runit { - # TODO -- portability alert!! - - my $cmd = shift ; - print "\n Running [$cmd]\n" if $verbose ; - my $output = `$cmd 2>&1` ; - $output = "\n" unless defined $output; - $output =~ s/^/ /gm; - print "\n Output\n$output\n" if $verbose || $? ; - if ($?) - { - warn " Running '$cmd' failed: $?\n" ; - return 0 ; - } - return 1 ; -} - -sub Usage -{ - die <<EOM; - -usage: soak [OPT] [perl...] - - OPT - -m make - the name of the make program. Default "make" - -v - verbose - -EOM - + # TODO -- portability alert!! + + my $cmd = shift; + print "\n Running [$cmd]\n" if $verbose; + my $output = `$cmd 2>&1`; + $output = "\n" unless defined $output; + $output =~ s/^/ /gm; + print "\n Output\n$output\n" if $verbose || $?; + if ($?) { + warn " Running '$cmd' failed: $?\n"; + return 0; + } + return 1; } sub FindPerls { - # TODO -- need to decide how far back we go. - # TODO -- get list of user releases prior to 5.004 - - # find all version of Perl that are available - my @PerlBinaries = qw( - 5.000 - 5.001 - 5.002 - 5.003 - 5.004 - 5.00401 - 5.00402 - 5.00403 - 5.00404 - 5.00405 - 5.005 - 5.00501 - 5.00502 - 5.00503 - 5.6.0 - 5.6.1 - 5.7.0 - 5.7.1 - 5.7.2 - ); - - print "Searching for Perl binaries...\n" ; - my @GoodPerls = (); - my $maxlen = 0; - my $mm = MM->new( { NAME => 'dummy' }); - my @path = $mm->path(); - - # find_perl will send a warning to STDOUT if it can't find - # the requested perl, so need to temporarily silence STDOUT. - tie(*STDOUT, 'NoSTDOUT'); - - foreach my $perl (@PerlBinaries) { - if (my $abs = $mm->find_perl($perl, ["perl$perl"], [@path], 0)) { - push @GoodPerls, $abs ; - } + # TODO -- need to decide how far back we go. + # TODO -- get list of user releases prior to 5.004 + # TODO -- does not work on Windows (at least) + + # find versions of Perl that are available + my @PerlBinaries = qw( + 5.000 + 5.001 + 5.002 + 5.003 + 5.004 5.00401 5.00402 5.00403 5.00404 5.00405 + 5.005 5.00501 5.00502 5.00503 5.00504 + 5.6.0 5.6.1 5.6.2 + 5.7.0 5.7.1 5.7.2 5.7.3 + 5.8.0 5.8.1 5.8.2 5.8.3 5.8.4 5.8.5 5.8.6 + 5.9.0 5.9.1 + ); + + print "Searching for Perl binaries...\n"; + my $mm = MM->new( { NAME => 'dummy' }); + my @path = $mm->path; + my @GoodPerls; + + # find_perl will send a warning to STDOUT if it can't find + # the requested perl, so need to temporarily silence STDOUT. + tie *STDOUT, 'NoSTDOUT'; + + for my $perl (@PerlBinaries) { + if (my $abs = $mm->find_perl($perl, ["perl$perl"], \@path, 0)) { + push @GoodPerls, $abs; } - untie *STDOUT; - - print "\n\nFound\n"; - foreach (@GoodPerls) { print " $_\n" } - print "\n\n"; + } + + untie *STDOUT; - return @GoodPerls; + print "\nFound:\n", (map " $_\n", @GoodPerls), "\n"; + + return @GoodPerls; } package NoSTDOUT; @@ -180,21 +152,38 @@ package NoSTDOUT; use Tie::Handle; our @ISA = qw(Tie::Handle); -sub TIEHANDLE -{ - my ($class) = @_; - my $buf = ""; - bless \$buf, $class; -} - -sub PRINT -{ - my $self = shift; -} - -sub WRITE -{ - my $self = shift; -} +sub TIEHANDLE { bless \(my $s = ''), shift } +sub PRINT {} +sub WRITE {} + +__END__ + +=head1 NAME + +soak - Test Perl modules with multiple Perl releases + +=head1 SYNOPSIS + + soak [options] [perl ...] + + --make=program override name of make program ($Config{make}) + --mmargs=options pass options to Makefile.PL (multiple --mmargs possible) + --verbose be verbose + +=head1 COPYRIGHT + +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. + +=head1 SEE ALSO + +See L<Devel::PPPort>. +=cut diff --git a/ext/Devel/PPPort/t/newCONSTSUB.t b/ext/Devel/PPPort/t/newCONSTSUB.t index c40fc49631..3d8762349c 100644 --- a/ext/Devel/PPPort/t/newCONSTSUB.t +++ b/ext/Devel/PPPort/t/newCONSTSUB.t @@ -35,12 +35,12 @@ use Devel::PPPort; use strict; $^W = 1; -&Devel::PPPort::call_newCONSTSUB_1(); +&Devel::PPPort::call_newCONSTSUB_1(); ok(&Devel::PPPort::test_value_1(), 1); -&Devel::PPPort::call_newCONSTSUB_2(); +&Devel::PPPort::call_newCONSTSUB_2(); ok(&Devel::PPPort::test_value_2(), 2); -&Devel::PPPort::call_newCONSTSUB_3(); +&Devel::PPPort::call_newCONSTSUB_3(); ok(&Devel::PPPort::test_value_3(), 3); diff --git a/ext/Devel/PPPort/t/ppphtest.t b/ext/Devel/PPPort/t/ppphtest.t index e1cf0eddc3..9040c92360 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..134\n"; + print "1..197\n"; } else { - plan(tests => 134); + plan(tests => 197); } } @@ -41,6 +41,8 @@ use Config; my $tmp = 'ppptmp'; my $inc = ''; my $perl = find_perl(); +my $isVMS = $^O eq 'VMS'; +my $isMAC = $^O eq 'MacOS'; rmtree($tmp) if -d $tmp; mkpath($tmp) or die "mkpath $tmp: $!\n"; @@ -48,7 +50,15 @@ chdir($tmp) or die "chdir $tmp: $!\n"; if ($ENV{'PERL_CORE'}) { if (-d '../../lib') { - $inc = $^O eq 'VMS' ? '-"I../../lib"' : '-I../../lib'; + if ($isVMS) { + $inc = '"-I../../lib"'; + } + elsif ($isMAC) { + $inc = '-I:::lib'; + } + else { + $inc = '-I../../lib'; + } unshift @INC, '../../lib'; } } @@ -63,15 +73,30 @@ END { ok(&Devel::PPPort::WriteFile("ppport.h")); +sub comment +{ + my $c = shift; + $c =~ s/^/# | /mg; + $c .= "\n" unless $c =~ /[\r\n]$/; + print $c; +} + sub ppport { - my @args = @_; - print "# *** running $perl $inc ppport.h @args ***\n"; - my $out = join '', `$perl $inc ppport.h @args`; - my $copy = $out; - $copy =~ s/^/# | /mg; - print "$copy\n"; - return $out; + my @args = ('ppport.h', @_); + unshift @args, $inc if $inc; + my $run = $perl =~ m/\s/ ? qq("$perl") : $perl; + $run .= ' -MMac::err=unix' if $isMAC; + for (@args) { + $_ = qq("$_") if $isVMS && /^[^"]/; + $run .= " $_"; + } + print "# *** running $run ***\n"; + $run .= ' 2>&1' unless $isMAC; + my @out = `$run`; + my $out = join '', @out; + comment($out); + return wantarray ? @out : $out; } sub matches @@ -100,9 +125,7 @@ sub eq_files } $_ = do { local $/; <F> }; close F; - my $copy = $_; - $copy =~ s/^/# | /mg; - print "$copy\n"; + comment($_); } return $f1 eq $f2; } @@ -151,11 +174,11 @@ for $t (@tests) { sub find_perl { my $perl = $^X; - - return $perl if $^O eq 'VMS'; - + + return $perl if $isVMS; + my $exe = $Config{'_exe'} || ''; - + if ($perl =~ /^perl\Q$exe\E$/i) { $perl = "perl$exe"; eval "require File::Spec"; @@ -165,13 +188,13 @@ sub find_perl $perl = File::Spec->catfile(File::Spec->curdir(), $perl); } } - + if ($perl !~ /\Q$exe\E$/i) { $perl .= $exe; } - + warn "find_perl: cannot find $perl from $^X" unless -f $perl; - + return $perl; } @@ -182,10 +205,10 @@ ok($o =~ /^Usage:.*ppport\.h/m); ok($o =~ /--help/m); $o = ppport(qw(--nochanges)); -ok($o =~ /^scanning.*test\.xs/mi); -ok($o =~ /analyzing.*test\.xs/mi); -ok(matches($o, '^scanning', 'mi'), 1); -ok(matches($o, 'analyzing', 'mi'), 1); +ok($o =~ /^Scanning.*test\.xs/mi); +ok($o =~ /Analyzing.*test\.xs/mi); +ok(matches($o, '^Scanning', 'm'), 1); +ok(matches($o, 'Analyzing', 'm'), 1); ok($o =~ /Uses Perl_newSViv instead of newSViv/); $o = ppport(qw(--quiet --nochanges)); @@ -200,9 +223,9 @@ Perl_newSViv(); # check if C and C++ comments are filtered correctly my $o = ppport(qw(--copy=a)); -ok($o =~ /^scanning.*MyExt\.xs/mi); -ok($o =~ /analyzing.*MyExt\.xs/mi); -ok(matches($o, '^scanning', 'mi'), 1); +ok($o =~ /^Scanning.*MyExt\.xs/mi); +ok($o =~ /Analyzing.*MyExt\.xs/mi); +ok(matches($o, '^Scanning', 'm'), 1); ok($o =~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Uses grok_bin/m); ok($o !~ /^Uses newSVpv/m); @@ -212,9 +235,9 @@ ok(eq_files('MyExt.xsa', 'MyExt.ra')); # check if C++ are left untouched with --cplusplus $o = ppport(qw(--copy=b --cplusplus)); -ok($o =~ /^scanning.*MyExt\.xs/mi); -ok($o =~ /analyzing.*MyExt\.xs/mi); -ok(matches($o, '^scanning', 'mi'), 1); +ok($o =~ /^Scanning.*MyExt\.xs/mi); +ok($o =~ /Analyzing.*MyExt\.xs/mi); +ok(matches($o, '^Scanning', 'm'), 1); ok($o =~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Uses grok_bin/m); ok($o !~ /^Uses newSVpv/m); @@ -224,14 +247,14 @@ ok(eq_files('MyExt.xsb', 'MyExt.rb')); unlink qw(MyExt.xsa MyExt.xsb); ---------------------------- MyExt.xs ----------------------------------------- - + newSVuv(); // newSVpv(); XPUSHs(foo); /* grok_bin(); */ ---------------------------- MyExt.ra ----------------------------------------- - + #include "ppport.h" newSVuv(); /* newSVpv(); */ @@ -239,7 +262,7 @@ newSVuv(); /* grok_bin(); */ ---------------------------- MyExt.rb ----------------------------------------- - + #include "ppport.h" newSVuv(); // newSVpv(); @@ -249,9 +272,9 @@ newSVuv(); =============================================================================== my $o = ppport(qw(--nochanges file1.xs)); -ok($o =~ /^scanning.*file1\.xs/mi); -ok($o =~ /analyzing.*file1\.xs/mi); -ok($o !~ /^scanning.*file2\.xs/mi); +ok($o =~ /^Scanning.*file1\.xs/mi); +ok($o =~ /Analyzing.*file1\.xs/mi); +ok($o !~ /^Scanning.*file2\.xs/mi); ok($o =~ /^Uses newCONSTSUB/m); ok($o =~ /^Uses SvPV_nolen.*depends.*sv_2pv_nolen/m); ok($o =~ /hint for newCONSTSUB/m); @@ -259,9 +282,9 @@ ok($o !~ /hint for sv_2pv_nolen/m); ok($o =~ /^Looks good/m); $o = ppport(qw(--nochanges --nohints file1.xs)); -ok($o =~ /^scanning.*file1\.xs/mi); -ok($o =~ /analyzing.*file1\.xs/mi); -ok($o !~ /^scanning.*file2\.xs/mi); +ok($o =~ /^Scanning.*file1\.xs/mi); +ok($o =~ /Analyzing.*file1\.xs/mi); +ok($o !~ /^Scanning.*file2\.xs/mi); ok($o =~ /^Uses newCONSTSUB/m); ok($o =~ /^Uses SvPV_nolen.*depends.*sv_2pv_nolen/m); ok($o !~ /hint for newCONSTSUB/m); @@ -269,9 +292,9 @@ ok($o !~ /hint for sv_2pv_nolen/m); ok($o =~ /^Looks good/m); $o = ppport(qw(--nochanges --nohints --nodiag file1.xs)); -ok($o =~ /^scanning.*file1\.xs/mi); -ok($o =~ /analyzing.*file1\.xs/mi); -ok($o !~ /^scanning.*file2\.xs/mi); +ok($o =~ /^Scanning.*file1\.xs/mi); +ok($o =~ /Analyzing.*file1\.xs/mi); +ok($o !~ /^Scanning.*file2\.xs/mi); ok($o !~ /^Uses newCONSTSUB/m); ok($o !~ /^Uses SvPV_nolen/m); ok($o !~ /hint for newCONSTSUB/m); @@ -282,27 +305,27 @@ $o = ppport(qw(--nochanges --quiet file1.xs)); ok($o =~ /^\s*$/); $o = ppport(qw(--nochanges file2.xs)); -ok($o =~ /^scanning.*file2\.xs/mi); -ok($o =~ /analyzing.*file2\.xs/mi); -ok($o !~ /^scanning.*file1\.xs/mi); +ok($o =~ /^Scanning.*file2\.xs/mi); +ok($o =~ /Analyzing.*file2\.xs/mi); +ok($o !~ /^Scanning.*file1\.xs/mi); ok($o =~ /^Uses mXPUSHp/m); ok($o =~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Looks good/m); ok($o =~ /^1 potentially required change detected/m); $o = ppport(qw(--nochanges --nohints file2.xs)); -ok($o =~ /^scanning.*file2\.xs/mi); -ok($o =~ /analyzing.*file2\.xs/mi); -ok($o !~ /^scanning.*file1\.xs/mi); +ok($o =~ /^Scanning.*file2\.xs/mi); +ok($o =~ /Analyzing.*file2\.xs/mi); +ok($o !~ /^Scanning.*file1\.xs/mi); ok($o =~ /^Uses mXPUSHp/m); ok($o =~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Looks good/m); ok($o =~ /^1 potentially required change detected/m); $o = ppport(qw(--nochanges --nohints --nodiag file2.xs)); -ok($o =~ /^scanning.*file2\.xs/mi); -ok($o =~ /analyzing.*file2\.xs/mi); -ok($o !~ /^scanning.*file1\.xs/mi); +ok($o =~ /^Scanning.*file2\.xs/mi); +ok($o =~ /Analyzing.*file2\.xs/mi); +ok($o !~ /^Scanning.*file1\.xs/mi); ok($o !~ /^Uses mXPUSHp/m); ok($o !~ /^Needs to include.*ppport\.h/m); ok($o !~ /^Looks good/m); @@ -327,9 +350,9 @@ mXPUSHp(foo); =============================================================================== my $o = ppport(qw(--nochanges)); -ok($o =~ /^scanning.*FooBar\.xs/mi); -ok($o =~ /analyzing.*FooBar\.xs/mi); -ok(matches($o, '^scanning', 'mi'), 1); +ok($o =~ /^Scanning.*FooBar\.xs/mi); +ok($o =~ /Analyzing.*FooBar\.xs/mi); +ok(matches($o, '^Scanning', 'm'), 1); ok($o !~ /^Looks good/m); ok($o =~ /^Uses grok_bin/m); @@ -342,14 +365,14 @@ grok_bin(); =============================================================================== my $o = ppport(qw(--nochanges)); -ok($o =~ /^scanning.*First\.xs/mi); -ok($o =~ /analyzing.*First\.xs/mi); -ok($o =~ /^scanning.*second\.h/mi); -ok($o =~ /analyzing.*second\.h/mi); -ok($o =~ /^scanning.*sub.*third\.c/mi); -ok($o =~ /analyzing.*sub.*third\.c/mi); -ok($o !~ /^scanning.*foobar/mi); -ok(matches($o, '^scanning', 'mi'), 3); +ok($o =~ /^Scanning.*First\.xs/mi); +ok($o =~ /Analyzing.*First\.xs/mi); +ok($o =~ /^Scanning.*second\.h/mi); +ok($o =~ /Analyzing.*second\.h/mi); +ok($o =~ /^Scanning.*sub.*third\.c/mi); +ok($o =~ /Analyzing.*sub.*third\.c/mi); +ok($o !~ /^Scanning.*foobar/mi); +ok(matches($o, '^Scanning', 'm'), 3); ---------------------------- First.xs ----------------------------------------- @@ -382,12 +405,12 @@ ok($o =~ /Possibly wrong #define NEED_foobar in.*test.xs/i); my $o = ppport(qw(--copy=f)); for (qw(main.xs mod1.c mod2.c mod3.c mod4.c mod5.c)) { - ok($o =~ /^scanning.*\Q$_\E/mi); - ok($o =~ /analyzing.*\Q$_\E/i); + ok($o =~ /^Scanning.*\Q$_\E/mi); + ok($o =~ /Analyzing.*\Q$_\E/i); } -ok(matches($o, '^scanning', 'mi'), 6); +ok(matches($o, '^Scanning', 'm'), 6); -ok(matches($o, '^Writing copy of', 'mi'), 5); +ok(matches($o, '^Writing copy of', 'm'), 5); ok(!-e "mod5.cf"); for (qw(main.xs mod1.c mod2.c mod3.c mod4.c)) { @@ -564,9 +587,30 @@ grok_hex(); my $o = ppport(qw(--nochanges)); ok($o =~ /Uses SvPVutf8_force, which may not be portable/m); +$o = ppport(qw(--nochanges --compat-version=5.5.3)); +ok($o =~ /Uses SvPVutf8_force, which may not be portable/m); + +$o = ppport(qw(--nochanges --compat-version=5.005_03)); +ok($o =~ /Uses SvPVutf8_force, which may not be portable/m); + $o = ppport(qw(--nochanges --compat-version=5.6.0)); ok($o !~ /Uses SvPVutf8_force/m); +$o = ppport(qw(--nochanges --compat-version=5.006)); +ok($o !~ /Uses SvPVutf8_force/m); + +$o = ppport(qw(--nochanges --compat-version=5.999.999)); +ok($o !~ /Uses SvPVutf8_force/m); + +$o = ppport(qw(--nochanges --compat-version=6.0.0)); +ok($o =~ /Only Perl 5 is supported/m); + +$o = ppport(qw(--nochanges --compat-version=5.1000.999)); +ok($o =~ /Invalid version number: 5.1000.999/m); + +$o = ppport(qw(--nochanges --compat-version=5.999.1000)); +ok($o =~ /Invalid version number: 5.999.1000/m); + ---------------------------- FooBar.xs ---------------------------------------- SvPVutf8_force(); @@ -575,7 +619,7 @@ SvPVutf8_force(); my $o = ppport(qw(--nochanges)); ok($o !~ /potentially required change/); -ok(matches($o, '^Looks good', 'mi'), 2); +ok(matches($o, '^Looks good', 'm'), 2); ---------------------------- FooBar.xs ---------------------------------------- @@ -592,3 +636,122 @@ grok_number(); call_pv(); +=============================================================================== + +# check --api-info option + +my $o = ppport(qw(--api-info=INT2PTR)); +my %found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg; +ok(scalar keys %found, 1); +ok(exists $found{INT2PTR}); +ok(matches($o, '^Supported at least starting from perl-5\.6\.0\.', 'm'), 1); +ok(matches($o, '^Support by .*ppport.* provided back to perl-5\.003\.', 'm'), 1); + +$o = ppport(qw(--api-info=Zero)); +%found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg; +ok(scalar keys %found, 1); +ok(exists $found{Zero}); +ok(matches($o, '^No portability information available\.', 'm'), 1); + +$o = ppport(qw(--api-info=/Zero/)); +%found = map {($_ => 1)} $o =~ /^===\s+(\w+)\s+===/mg; +ok(scalar keys %found, 2); +ok(exists $found{Zero}); +ok(exists $found{ZeroD}); + +=============================================================================== + +# check --list-provided option + +my @o = ppport(qw(--list-provided)); +my %p; +my $fail = 0; +for (@o) { + my($name, $flags) = /^(\w+)(?:\s+\[(\w+(?:,\s+\w+)*)\])?$/ or $fail++; + exists $p{$name} and $fail++; + $p{$name} = defined $flags ? { map { ($_ => 1) } $flags =~ /(\w+)/g } : ''; +} +ok(@o > 100); +ok($fail, 0); + +ok(exists $p{call_sv}); +ok(not ref $p{call_sv}); + +ok(exists $p{grok_bin}); +ok(ref $p{grok_bin}, 'HASH'); +ok(scalar keys %{$p{grok_bin}}, 1); +ok($p{grok_bin}{explicit}); + +ok(exists $p{gv_stashpvn}); +ok(ref $p{gv_stashpvn}, 'HASH'); +ok(scalar keys %{$p{gv_stashpvn}}, 1); +ok($p{gv_stashpvn}{hint}); + +ok(exists $p{sv_catpvf_mg}); +ok(ref $p{sv_catpvf_mg}, 'HASH'); +ok(scalar keys %{$p{sv_catpvf_mg}}, 2); +ok($p{sv_catpvf_mg}{explicit}); +ok($p{sv_catpvf_mg}{depend}); + +=============================================================================== + +# check --list-unsupported option + +my @o = ppport(qw(--list-unsupported)); +my %p; +my $fail = 0; +for (@o) { + my($name, $ver) = /^(\w+)\s*\.+\s*([\d._]+)$/ or $fail++; + exists $p{$name} and $fail++; + $p{$name} = $ver; +} +ok(@o > 100); +ok($fail, 0); + +ok(exists $p{utf8_distance}); +ok($p{utf8_distance}, '5.6.0'); + +ok(exists $p{save_generic_svref}); +ok($p{save_generic_svref}, '5.005_03'); + +=============================================================================== + +# check --nofilter option + +my $o = ppport(qw(--nochanges)); +ok($o =~ /^Scanning.*foo\.cpp/mi); +ok($o =~ /Analyzing.*foo\.cpp/mi); +ok(matches($o, '^Scanning', 'm'), 1); +ok(matches($o, 'Analyzing', 'm'), 1); + +$o = ppport(qw(--nochanges foo.cpp foo.o Makefile.PL)); +ok($o =~ /Skipping the following files \(use --nofilter to avoid this\):/m); +ok(matches($o, '^\|\s+foo\.o', 'mi'), 1); +ok(matches($o, '^\|\s+Makefile\.PL', 'mi'), 1); +ok($o =~ /^Scanning.*foo\.cpp/mi); +ok($o =~ /Analyzing.*foo\.cpp/mi); +ok(matches($o, '^Scanning', 'm'), 1); +ok(matches($o, 'Analyzing', 'm'), 1); + +$o = ppport(qw(--nochanges --nofilter foo.cpp foo.o Makefile.PL)); +ok($o =~ /^Scanning.*foo\.cpp/mi); +ok($o =~ /Analyzing.*foo\.cpp/mi); +ok($o =~ /^Scanning.*foo\.o/mi); +ok($o =~ /Analyzing.*foo\.o/mi); +ok($o =~ /^Scanning.*Makefile/mi); +ok($o =~ /Analyzing.*Makefile/mi); +ok(matches($o, '^Scanning', 'm'), 3); +ok(matches($o, 'Analyzing', 'm'), 3); + +---------------------------- foo.cpp ------------------------------------------ + +newSViv(); + +---------------------------- foo.o -------------------------------------------- + +newSViv(); + +---------------------------- Makefile.PL -------------------------------------- + +newSViv(); + |