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