In perl.git, the branch blead has been updated <https://perl5.git.perl.org/perl.git/commitdiff/21af3a52053bc3558259ca470f5501197e0e75c6?hp=da5a0da22ef5f5dd64e1fcdcac2c5ed1c0398085>
- Log ----------------------------------------------------------------- commit 21af3a52053bc3558259ca470f5501197e0e75c6 Merge: da5a0da22e 790ba7215e Author: Karl Williamson <[email protected]> Date: Thu May 30 18:14:00 2019 -0600 Merge branch 'autodoc' into blead This branch cleans up a bunch of the autodoc handling. It had its genesis in an obscure warning from Devel::PPPort: mysterious name It turns out that the pod entry for the macros the warnings are for are improper. My guess is that it was a kludge by someone looking for a quick way to get their usage point across, when the underlying infrastructure was deficient in allowing it. But it looked to be fairly easy to enhance that infrastructure. But then I noticed that some of the flags in the embed.fnc entries have different meanings than the equivalent =for apidoc entries in the source. Here are most of the conflicts: Flag embed.fnc =for apidoc n no pTHX don't output empty parens for no arguments s S_ static fcn output a semi-colon at the end of the usage entry x Don't export experimental I imagine that they started out the same, and diverged over the years, as there was no unified place where they were documented. Devel::PPPort was unaware of this divergence, and so got some things wrong, and had some code expecting one flag, and other code expecting the other. This branch changes the flags in embed.fnc to correspond with what autdoc wants, and brings everything else that uses them into conformance. embed.fnc is a more contained place to change, and I couldn't find anything in CPAN that would be bothered by this. And also, if D:P were to be regenerated on an older perl, it still would use the new embed.fnc shipped with it, but would be using the flags from the older perl source code, so it had to be embed.fnc that changed. The O flag in embed.fnc can then be used instead of having another flag in the =for apidoc entries for the situation of having deprecated 'perl_' prefixes, removing the need for autodoc to have to try to figure it out, and there were places where it had been getting it wrong. Once that was done, the flags in embed.fnc could override the ones in the =for api entries, as every flag has the same meaning in both places. Doing so showed a bunch of errors, mostly missing 'const's in the parameters, but, besides the 'perl_' prefix errors, some functions were not listed as needing to be called with the 'Perl_' prefix. The flags in embed.fnc have to be pretty accurate, or perl won't compile. I then removed about 150 redundant =for apidoc entries. It is a waste having them in the code twice, and they do get out of sync. Note that there does need to be an entry like =for apidoc FOO for the autodoc facility to know where the actual pod for a given function is. And the entry needs to have the flags, return value, and argument list detailed if and only if FOO isn't in embed.fnc. I myself didn't know that if omitted, the values in embed.fnc were used, so I wasted time in the past duplicating these. Now, if there's duplication autodoc will warn. autodoc did check for a couple of discrepancies if there were two entries, but that code is now unnecessary and has been ripped out. I added a flag so that something that isn't a straight name can be documented, and will rip out the code in D:P that special-cased the few existing entries that were like this. Now there is a warning from autodoc, unless the flag is present, when this happens, so that 'mysterious name' won't show up again. I added another flag to make it easier to deal with functions that have become wrappers for others, and there is a macro that bypasses the original one, but for back compat, we still have the original. autodoc did not realize that you could have things like Perl_sprintf_nocontext() without a pTHX. That flag already is in embed.fnc, and now autodoc uses it. Finally, I added extensive comments to embed.fnc to document all the flags, and removed other outdated comments elsewhere in favor of a pointer to the comments in embed.fnc commit 790ba7215e8e4fa4c6a0c0684565f40c31afd885 Author: Karl Williamson <[email protected]> Date: Wed May 29 19:11:04 2019 -0600 perlguts: Remove documentation about embed.fnc flags embed.fnc now has sufficient comments within it. Anyone changing that file will see those comments first. Having them redundantly explained here adds little value, and is out-of-date. So just remove them, with a ptr to embed.fnc commit 8fb6968f2aef772119e5d65efd7f1ac68dbb6b7f Author: Karl Williamson <[email protected]> Date: Wed May 29 19:10:19 2019 -0600 embed.fnc: Add more extensive comments This revises the comments significantly to better inform the reader. commit 44170c9a70d967e18e7d442d25d642a2e9359099 Author: Karl Williamson <[email protected]> Date: Wed May 29 18:33:25 2019 -0600 Remove redundant info on =for apidoc lines This information is already in embed.fnc, and we know it compiles. Some of this information is now out-of-date. Get rid of it. There was one bit of information that was (apparently) wrong in embed.fnc. The apidoc line asked that there be no usage example generated for newXS. I added that flag to the embed.fnc entry. commit 8902d5545f28d09d06be64c2fec58139f1492af0 Author: Karl Williamson <[email protected]> Date: Wed May 29 16:06:51 2019 -0600 autodoc.pl: Use embed.fnc entry when available Having two different pod definitions for the same function leads to things being out of sync. This commit ignores the one in the '=for apidoc' line if there is one in embed.fnc. Doing so led to a bunch of changes in perlapi, showing that the apidoc lines were inaccurate. The ones in embed.fnc must be accurate enough to get perl to compile. I added a warning for when there's a redundant entry, and in the next commit I will remove the many such. commit 0a60f600e691409aab41f710bbbd8801a3162143 Author: Karl Williamson <[email protected]> Date: Wed May 29 16:01:34 2019 -0600 autodoc.pl: Add N flag This adds a check that the macro or function name for the pod entry is a legitimate name, as almost all are. If this had been in effect, the bug fixed by the previous commit would not have been necessary. But there are a very few things that are documented that aren't strict names. This adds a flag so that autodoc can be notified to not warn on them. This will allow Devel::PPPort to not have to special case situations like this, which it now does. commit 1fcde0e9beb6235547b567747353bc1b85262783 Author: Karl Williamson <[email protected]> Date: Wed May 29 15:58:20 2019 -0600 autodoc.pl: Check for misuse of the 'n' flag This flag indicates that the macro has no arguments. It makes no sense to use in some situations, which are now checked for. This commit also documents the long existing 'n' flag. commit 8b5ff1772f001e0c74deba87357786064655fa3a Author: Karl Williamson <[email protected]> Date: Wed May 29 15:50:45 2019 -0600 autodoc.pl: Make 's' flag independent of 'n' The 's' flag is used by autodoc.pl to add a semi-colon to the end of a usage example. This commit allows that to happen even if the macro has parameters. This allows two macros in scope.c to be properly documented. Previously they weren't, and caused warnings in Devel::PPPort as a result. This commit adds documentation to embed.fnc for the 's' flag, which has long existed, undocumented. commit d7cc320995afaaf4d9c90b37e578f1fe79068198 Author: Karl Williamson <[email protected]> Date: Wed May 29 15:41:23 2019 -0600 autodoc.pl: Notice the no-thread context flag I realized reading the code that it would be possible for a function definition to be wrongly output if it isn't called with a thread context variable. The information for that is already in embed.fnc, and so we just have to use it to avoid printing the variable if not present commit 54c193aee0eb1f20806952d8fcd2ddadd5e57600 Author: Karl Williamson <[email protected]> Date: Wed May 29 15:28:44 2019 -0600 embed.fnc: Add flag for bypass macro existence Sometimes a function is reduced to be a wrapper, and we want for code to directly call the underlying one, but we retain the old 'Perl_foo' function to avoid breaking code that used that form. I've tried various kludges around that, but this seems more promising. commit fb7c7bc0f8972a6c4797147b8c5b5e0519a2741c Author: Karl Williamson <[email protected]> Date: Wed May 29 15:05:05 2019 -0600 autodoc.pl: Use O flag from embed.fnc for warning This is for ancient 'perl_' forms of function calls, which is deprecated. It turns out that there were a couple of entries that were getting this warning when that form doesn't even exist. commit fb49ac4495a8cff9430c5c4313ae8f9d6665650e Author: Karl Williamson <[email protected]> Date: Wed May 29 14:49:57 2019 -0600 Let embed.fnc define the my_str_foo() fcns We don't always define a Perl_ form for these, expecting all calls to be made through the macro, which will use the native form on the systems that have one. Removing these extra #defines helps future commits commit e4aeb12f0611f53a3b2e82d7d97bc9ab2a094b55 Author: Karl Williamson <[email protected]> Date: Wed May 29 10:14:55 2019 -0600 embed.fnc: Change M flag to x The M flag in embed.fnc and the x flag in the '=for apidoc' lines both mean the same, thing, the entity may change, it is experimental. Devel::PPPort in places uses the M flag, and in other places, the x. That will be fixed in a separate commit. This commit changes the 'M' in embed.fnc to be 'x'. Changing embed.fnc and makedef.pl keeps the changes more contained, and lessens the chance that some module will be adversely affected (I didn't see anything likely in grepping cpan). commit 5af72e99e0ba32c4a77db5cfb6aeb236d7a8c384 Author: Karl Williamson <[email protected]> Date: Tue May 28 22:02:57 2019 -0600 embed.fnc: Change x flag to e autodoc.pl has the x flag in the '=for apidoc' lines mean something completely different, but Devel::PPPort combines both these lines and the contents of embed.fnc into one file, expecting the flags to be consistent. This commit changes the 'x' in embed.fnc to be 'e', which means to not export this function. Changing embed.fnc and makedef.pl keeps the changes more contained, and lessens the chance that some module will be adversely affected (I didn't see anything likely in grepping cpan). commit 9f589e47256c6bacb4cf6d59d0f1116e6a425b3e Author: Karl Williamson <[email protected]> Date: Tue May 28 20:28:07 2019 -0600 embed.fnc: Change s flag to S autodoc.pl has the s flag in the '=for apidoc' lines mean something completely different, but Devel::PPPort combines both these lines and the contents of embed.fnc into one file, expecting the flags to be consistent. This commit changes the 's' in embed.fnc to be 'S', which means the function is static and has an 'S_' prefix. Changing embed.fnc keeps the changes more contained, and lessens the chance that some module will be adversely affected (I didn't see anything likely in grepping cpan). commit 6c714a09cc08600278e72aea1fcdf83576d061b4 Author: Karl Williamson <[email protected]> Date: Tue May 28 20:52:07 2019 -0600 croak_memory_wrap is an inline function. Update embed.fnc to correspond commit 45b29440d38be155c5177c8d6f9a5d4e7c2c098c Author: Karl Williamson <[email protected]> Date: Tue May 28 20:03:58 2019 -0600 embed.fnc: Change n flag to T autodoc.pl has the n flag in the '=for apidoc' lines mean something completely different, but Devel::PPPort combines both these lines and the contents of embed.fnc into one file, expecting the flags to be consistent. This commit changes the 'n' in embed.fnc to be 'T', which means no thread context passed. Changing embed.fnc keeps the changes more contained, and lessens the chance that some module will be adversely affected (I didn't see anything likely in grepping cpan). commit 4e5171e9e72a8e719a45a205fb6d9514c2e8dccd Author: Karl Williamson <[email protected]> Date: Tue May 28 12:55:19 2019 -0600 Add 'n' flag to various =for apidoc lines This indicates to not output the macro with parentheses for parameters. Currently that doesn't happen anyway, but a future commit will change things so this is required (so that a bug can be fixed) commit 73060c4e2338e283341aabb27f4136e51f4f7b64 Author: Karl Williamson <[email protected]> Date: Tue May 28 11:02:42 2019 -0600 autodoc.pl: Strip, lead/trail space from =for apidoc The components of a =for apidoc entry can have spaces between the '|' separators. Ignore them. commit 1ded1f422025e6a4685d62b64c537d3fc77c5c4d Author: Karl Williamson <[email protected]> Date: Tue May 28 10:42:21 2019 -0600 autodoc.pl: White-space only This indents to correspond with the new block formed by the previous commit. commit 05ca4832856bc66fae43a8124e42d1dbb7ba4408 Author: Karl Williamson <[email protected]> Date: Tue May 28 10:35:57 2019 -0600 autodoc.pl: Refactor slightly This breaks a chain of 'elsif' lines so that they are all now part of an 'else' from the first 'if'. This is in preparation for a later commit. commit d40e888a44ac45f4685c8ebcc49d751e42612ffe Author: Karl Williamson <[email protected]> Date: Tue May 28 10:21:56 2019 -0600 autodoc.pl: Change name of variable This makes it clear that the source for the lines being processed is embed.fnc ----------------------------------------------------------------------- Summary of changes: XSUB.h | 28 +- autodoc.pl | 172 +++--- av.h | 2 +- cop.h | 8 +- embed.fnc | 1742 ++++++++++++++++++++++++++++-------------------------- embed.h | 12 +- hv.c | 20 +- inline.h | 6 +- makedef.pl | 2 +- mathoms.c | 2 +- mg.c | 4 +- op.c | 110 ++-- pad.c | 54 +- perl.c | 30 +- perl.h | 6 - pod/perlguts.pod | 88 +-- pp.h | 10 +- proto.h | 24 +- regen/embed.pl | 23 +- scope.h | 12 +- t/porting/diag.t | 4 +- toke.c | 56 +- util.c | 28 +- util.h | 2 + 24 files changed, 1206 insertions(+), 1239 deletions(-) diff --git a/XSUB.h b/XSUB.h index 796a13aae3..7c0aebd2b6 100644 --- a/XSUB.h +++ b/XSUB.h @@ -59,28 +59,28 @@ symbols unnecessarily. =for apidoc AmU||XS_EXTERNAL Macro to declare an XSUB and its C parameter list explicitly exporting the symbols. -=for apidoc Ams||dAX +=for apidoc Amns||dAX Sets up the C<ax> variable. This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>. -=for apidoc Ams||dAXMARK +=for apidoc Amns||dAXMARK Sets up the C<ax> variable and stack marker variable C<mark>. This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>. -=for apidoc Ams||dITEMS +=for apidoc Amns||dITEMS Sets up the C<items> variable. This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>. -=for apidoc Ams||dXSARGS +=for apidoc Amns||dXSARGS Sets up stack and mark pointers for an XSUB, calling C<dSP> and C<dMARK>. Sets up the C<ax> and C<items> variables by calling C<dAX> and C<dITEMS>. This is usually handled automatically by C<xsubpp>. -=for apidoc Ams||dXSI32 +=for apidoc Amns||dXSI32 Sets up the C<ix> variable for an XSUB which has aliases. This is usually handled automatically by C<xsubpp>. -=for apidoc Ams||dUNDERBAR +=for apidoc Amns||dUNDERBAR Sets up any variable needed by the C<UNDERBAR> macro. It used to define C<padoff_du>, but it is currently a noop. However, it is strongly advised to still use it for ensuring past and future compatibility. @@ -245,16 +245,16 @@ Return a double from an XSUB immediately. Uses C<XST_mNV>. =for apidoc Am|void|XSRETURN_PV|char* str Return a copy of a string from an XSUB immediately. Uses C<XST_mPV>. -=for apidoc Ams||XSRETURN_NO +=for apidoc Amns||XSRETURN_NO Return C<&PL_sv_no> from an XSUB immediately. Uses C<XST_mNO>. -=for apidoc Ams||XSRETURN_YES +=for apidoc Amns||XSRETURN_YES Return C<&PL_sv_yes> from an XSUB immediately. Uses C<XST_mYES>. -=for apidoc Ams||XSRETURN_UNDEF +=for apidoc Amns||XSRETURN_UNDEF Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>. -=for apidoc Ams||XSRETURN_EMPTY +=for apidoc Amns||XSRETURN_EMPTY Return an empty list from an XSUB immediately. =head1 Variables created by C<xsubpp> and C<xsubpp> internal functions @@ -268,18 +268,18 @@ The version identifier for an XS module. This is usually handled automatically by C<ExtUtils::MakeMaker>. See C<L</XS_VERSION_BOOTCHECK>>. -=for apidoc Ams||XS_VERSION_BOOTCHECK +=for apidoc Amns||XS_VERSION_BOOTCHECK Macro to verify that a PM module's C<$VERSION> variable matches the XS module's C<XS_VERSION> variable. This is usually handled automatically by C<xsubpp>. See L<perlxs/"The VERSIONCHECK: Keyword">. -=for apidoc Ams||XS_APIVERSION_BOOTCHECK +=for apidoc Amns||XS_APIVERSION_BOOTCHECK Macro to verify that the perl api version an XS module has been compiled against matches the api version of the perl interpreter it's being loaded into. =head1 Exception Handling (simple) Macros -=for apidoc Ams||dXCPT +=for apidoc Amns||dXCPT Set up necessary local variables for exception handling. See L<perlguts/"Exception Handling">. @@ -292,7 +292,7 @@ Ends a try block. See L<perlguts/"Exception Handling">. =for apidoc AmU||XCPT_CATCH Introduces a catch block. See L<perlguts/"Exception Handling">. -=for apidoc Ams||XCPT_RETHROW +=for apidoc Amns||XCPT_RETHROW Rethrows a previously caught exception. See L<perlguts/"Exception Handling">. =cut diff --git a/autodoc.pl b/autodoc.pl index 788dc359fd..421d8de900 100644 --- a/autodoc.pl +++ b/autodoc.pl @@ -22,6 +22,9 @@ # indented. The next input line that is a pod directive terminates this # heading-level documentation. +# The meanings of the flags fields in embed.fnc and the source code is +# documented at the top of embed.fnc. + use strict; if (@ARGV) { @@ -104,9 +107,12 @@ HDR_DOC: next FUNC; } if ($in =~ /^=for\s+apidoc\s+(.*?)\s*\n/) { - my $proto = $1; + my $proto_in_file = $1; + my $proto = $proto_in_file; $proto = "||$proto" unless $proto =~ /\|/; - my($flags, $ret, $name, @args) = split /\|/, $proto; + my($flags, $ret, $name, @args) = split /\s*\|\s*/, $proto; + warn ("'$name' not \\w+ in '$proto_in_file' in $file") + if $flags !~ /N/ && $name !~ / ^ [_[:alpha:]] \w* $ /x; my $docs = ""; DOC: while (defined($doc = $get_next_line->())) { @@ -122,45 +128,20 @@ DOC: } $docs = "\n$docs" if $docs and $docs !~ /^\n/; - # Check the consistency of the flags - my ($embed_where, $inline_where); - my ($embed_may_change, $inline_may_change); - - my $docref = delete $funcflags{$name}; - if ($docref and %$docref) { - $embed_where = $docref->{flags} =~ /A/ ? 'api' : 'guts'; - $embed_may_change = $docref->{flags} =~ /M/; - $flags .= 'D' if $docref->{flags} =~ /D/; + # If the entry is also in embed.fnc, it should be defined + # completely there, but not here + my $embed_docref = delete $funcflags{$name}; + if ($embed_docref and %$embed_docref) { + warn "embed.fnc entry overrides redundant information in" + . " '$proto_in_file' in $file" if $flags || $ret || @args; + $flags = $embed_docref->{'flags'}; + $ret = $embed_docref->{'retval'}; + @args = @{$embed_docref->{args}}; } else { $missing{$name} = $file; } - if ($flags =~ /m/) { - $inline_where = $flags =~ /A/ ? 'api' : 'guts'; - $inline_may_change = $flags =~ /x/; - if (defined $embed_where && $inline_where ne $embed_where) { - warn "Function '$name' inconsistency: embed.fnc says $embed_where, Pod says $inline_where"; - } - - if (defined $embed_may_change - && $inline_may_change ne $embed_may_change) { - my $message = "Function '$name' inconsistency: "; - if ($embed_may_change) { - $message .= "embed.fnc says 'may change', Pod does not"; - } else { - $message .= "Pod says 'may change', embed.fnc does not"; - } - warn $message; - } - } elsif (!defined $embed_where) { - warn "Unable to place $name!\n"; - next; - } else { - $inline_where = $embed_where; - $flags .= 'x' if $embed_may_change; - @args = @{$docref->{args}}; - $ret = $docref->{retval}; - } + my $inline_where = $flags =~ /A/ ? 'api' : 'guts'; if (exists $docs{$inline_where}{$curheader}{$name}) { warn "$0: duplicate API entry for '$name' in $inline_where/$curheader\n"; @@ -202,63 +183,74 @@ existing code.\n\n$docs"; $docs = "\n\nNOTE: this function is experimental and may change or be removed without notice.\n\n$docs" if $flags =~ /x/; } + + # Is Perl_, but no #define foo # Perl_foo + my $p = $flags =~ /p/ && $flags =~ /o/ && $flags !~ /M/; + $docs .= "NOTE: the perl_ form of this function is deprecated.\n\n" - if $flags =~ /p/; - $docs .= "NOTE: this function must be explicitly called as Perl_$name with an aTHX_ parameter.\n\n" - if $flags =~ /o/; + if $flags =~ /O/; + if ($p) { + $docs .= "NOTE: this function must be explicitly called as Perl_$name"; + $docs .= " with an aTHX_ parameter" if $flags !~ /T/; + $docs .= ".\n\n" + } print $fh "=item $name\nX<$name>\n$docs"; if ($flags =~ /U/) { # no usage + warn("U and s flags are incompatible") if $flags =~ /s/; # nothing - } elsif ($flags =~ /s/) { # semicolon ("dTHR;") - print $fh "\t\t$name;\n\n"; - } elsif ($flags =~ /n/) { # no args - print $fh "\t$ret\t$name\n\n"; - } else { # full usage - my $p = $flags =~ /o/; # no #define foo Perl_foo - my $n = "Perl_"x$p . $name; - my $large_ret = length $ret > 7; - my $indent_size = 7+8 # nroff: 7 under =head + 8 under =item - +8+($large_ret ? 1 + length $ret : 8) - +length($n) + 1; - my $indent; - print $fh "\t$ret" . ($large_ret ? ' ' : "\t") . "$n("; - my $long_args; - for (@args) { - if ($indent_size + 2 + length > 79) { - $long_args=1; - $indent_size -= length($n) - 3; - last; - } - } - my $args = ''; - if ($p) { - $args = @args ? "pTHX_ " : "pTHX"; - if ($long_args) { print $fh $args; $args = '' } - } - $long_args and print $fh "\n"; - my $first = !$long_args; - while () { - if (!@args or - length $args - && $indent_size + 3 + length($args[0]) + length $args > 79 - ) { - print $fh - $first ? '' : ( - $indent //= - "\t".($large_ret ? " " x (1+length $ret) : "\t") - ." "x($long_args ? 4 : 1 + length $n) - ), - $args, (","x($args ne 'pTHX_ ') . "\n")x!!@args; - $args = $first = ''; - } - @args or last; - $args .= ", "x!!(length $args && $args ne 'pTHX_ ') - . shift @args; - } - if ($long_args) { print $fh "\n", substr $indent, 0, -4 } - print $fh ")\n\n"; + } else { + if ($flags =~ /n/) { # no args + warn("n flag without m") unless $flags =~ /m/; + warn("n flag but apparently has args") if @args; + print $fh "\t$ret\t$name"; + } else { # full usage + my $n = "Perl_"x$p . $name; + my $large_ret = length $ret > 7; + my $indent_size = 7+8 # nroff: 7 under =head + 8 under =item + +8+($large_ret ? 1 + length $ret : 8) + +length($n) + 1; + my $indent; + print $fh "\t$ret" . ($large_ret ? ' ' : "\t") . "$n("; + my $long_args; + for (@args) { + if ($indent_size + 2 + length > 79) { + $long_args=1; + $indent_size -= length($n) - 3; + last; + } + } + my $args = ''; + if ($p && $flags !~ /T/) { + $args = @args ? "pTHX_ " : "pTHX"; + if ($long_args) { print $fh $args; $args = '' } + } + $long_args and print $fh "\n"; + my $first = !$long_args; + while () { + if (!@args or + length $args + && $indent_size + 3 + length($args[0]) + length $args > 79 + ) { + print $fh + $first ? '' : ( + $indent //= + "\t".($large_ret ? " " x (1+length $ret) : "\t") + ." "x($long_args ? 4 : 1 + length $n) + ), + $args, (","x($args ne 'pTHX_ ') . "\n")x!!@args; + $args = $first = ''; + } + @args or last; + $args .= ", "x!!(length $args && $args ne 'pTHX_ ') + . shift @args; + } + if ($long_args) { print $fh "\n", substr $indent, 0, -4 } + print $fh ")"; + } + print $fh ";" if $flags =~ /s/; # semicolon "dTHR;" + print $fh "\n\n"; } print $fh "=for hackers\nFound in file $file\n\n"; } @@ -382,7 +374,7 @@ foreach (sort keys %missing) { # List of funcs in the public API that aren't also marked as experimental nor # deprecated. -my @missing_api = grep $funcflags{$_}{flags} =~ /A/ && $funcflags{$_}{flags} !~ /[MD]/ && !$docs{api}{$_}, keys %funcflags; +my @missing_api = grep $funcflags{$_}{flags} =~ /A/ && $funcflags{$_}{flags} !~ /[xD]/ && !$docs{api}{$_}, keys %funcflags; output('perlapi', <<'_EOB_', $docs{api}, \@missing_api, <<'_EOE_'); |=encoding UTF-8 | @@ -465,7 +457,7 @@ _EOE_ # List of non-static internal functions my @missing_guts = - grep $funcflags{$_}{flags} !~ /[As]/ && !$docs{guts}{$_}, keys %funcflags; + grep $funcflags{$_}{flags} !~ /[AS]/ && !$docs{guts}{$_}, keys %funcflags; output('perlintern', <<'END', $docs{guts}, \@missing_guts, <<'END'); |=head1 NAME diff --git a/av.h b/av.h index 6b2b14ce8f..7cb63b484c 100644 --- a/av.h +++ b/av.h @@ -49,7 +49,7 @@ Null AV pointer. =for apidoc Am|int|AvFILL|AV* av Same as C<av_top_index()> or C<av_tindex()>. -=for apidoc Am|int|av_tindex|AV* av +=for apidoc av_tindex Same as C<av_top_index()>. =cut diff --git a/cop.h b/cop.h index 5c66752859..fca2aa755c 100644 --- a/cop.h +++ b/cop.h @@ -1098,17 +1098,17 @@ typedef struct stackinfo PERL_SI; /* =head1 Multicall Functions -=for apidoc Ams||dMULTICALL +=for apidoc Amns||dMULTICALL Declare local variables for a multicall. See L<perlcall/LIGHTWEIGHT CALLBACKS>. -=for apidoc Ams||PUSH_MULTICALL +=for apidoc Amns||PUSH_MULTICALL Opening bracket for a lightweight callback. See L<perlcall/LIGHTWEIGHT CALLBACKS>. -=for apidoc Ams||MULTICALL +=for apidoc Amns||MULTICALL Make a lightweight callback. See L<perlcall/LIGHTWEIGHT CALLBACKS>. -=for apidoc Ams||POP_MULTICALL +=for apidoc Amns||POP_MULTICALL Closing bracket for a lightweight callback. See L<perlcall/LIGHTWEIGHT CALLBACKS>. diff --git a/embed.fnc b/embed.fnc index aa672d0139..b8d429a2fc 100644 --- a/embed.fnc +++ b/embed.fnc @@ -1,16 +1,26 @@ : BEGIN{die "You meant to run regen/embed.pl"} # Stop early if fed to perl. : -: This file is processed by regen/embed.pl and autodoc.pl -: It is used to declare the interfaces to the functions defined by perl. All -: non-static functions must have entries here. Static functions need not, but -: there is benefit to declaring them here, as it generally handles the thread -: context parameter invisibly, as well as making sure a PERL_ARGS_ASSERT_foo -: macro is defined, which can save you debugging time. -: -: Lines are of the form: +: WARNING: The meanings of some flags have been changed as of v5.31.0 + +: This file is known to be processed by regen/embed.pl, autodoc.pl, +: makedef.pl, Devel::PPPort, and porting/diag.t. +: +: All non-static functions defined by perl need to be listed in this file. +: embed.pl uses the entries here to construct proto.h to declare to the +: compiler the function interfaces, and embed.h to create macros that present a +: uniform interface to C code for the functions, regardless of, say, whether +: the perl is threaded or not. + +: Static functions need not appear here, but there is benefit to declaring them +: here, as it generally handles the thread context parameter invisibly, as well +: as making sure a PERL_ARGS_ASSERT_foo macro is defined, which can save you +: debugging time. +: +: Lines in this file are of the form: : flags|return_type|function_name|arg1|arg2|...|argN : -: A line may be continued on another by ending it with a backslash. +: A function taking no parameters will have no 'arg' elements. +: A line may be continued onto the next by ending it with a backslash. : Leading and trailing whitespace will be ignored in each component. : : The default without flags is to declare a function for internal perl-core use @@ -18,23 +28,52 @@ : modify this. Most non-static functions should have the 'p' flag to avoid : namespace clashes with programs that embed perl. : -: flags are single letters with following meanings: +: Scattered around the perl source are lines of the form: +: +: =for apidoc name +: +: and +: +: =for apidoc flags|return_type|name|arg1|arg2|...|argN +: +: and with the same meanings as the lines in this file. autodoc uses these +: lines in conjunction with this file to construct perlapi.pod. For entries of +: the first form, there must be a corresponding entry in this file, and the +: purpose of the line is to associate the pod accompanying it with the +: interface defined in this file. The second form is used to define the +: interface for the documentation when there is no entry in this file, hence it +: will be for something that isn't a non-static function: a macro of some kind, +: a constant, or some other entity that it wishes to have documented. (If +: there is also an entry in this file it overrides the apidoc line, and +: autodoc.pl will warn.) 'return_type' in these lines can be empty, unlike in +: this file. The entries in this file that have corresponding '=for apidoc' +: entries should have the flag 'd' set in this file. +: +: Devel::PPPort also looks at both this file and the '=for apidoc' lines. In +: part it is to construct lists of functions that are or are not backported. +: +: makedef.pl uses this file for constructing the export list +: +: porting/diag.t checks some things for consistency based on this file. +: +: 'flags' is a string of single letters. Most of the flags are meaningful only +: to embed.pl; some only to autodoc.pl, and others only to makedef.pl. The +: comments here don't include how Devel::PPPort or diag.t use them: : : A Available fully everywhere (usually part of the public API): : -: add entry to the list of exported symbols (unless x or m); -: any doc entry goes in perlapi.pod rather than perlintern.pod. If no -: documentation is furnished for this function, and M is also -: specified, the function is not listed as part of the public API. -: If M isn't specified, and no documentation is furnished, the -: function is listed in perlapi as existing and being undocumented +: add entry to the list of exported symbols (unless e or m); +: any doc entry goes in perlapi.pod rather than perlintern.pod. If +: none specified, autodoc.pl does not list this function/macro as +: part of the public API. If x isn't specified, and no +: documentation is furnished, autodoc.pl lists this in perlapi as +: existing and being undocumented. : makes '#define foo Perl_foo' scope not just for PERL_CORE/PERL_EXT : -: If the function is only exported for use in a public -: macro, see X. +: If the function is only exported for use in a public macro, see X. : : a Allocates memory a la malloc/calloc. Also implies "R". -: This should only be on functions which returns 'empty' memory +: This flag should only be on functions which return 'empty' memory : which has no other pointers to it, and which does not contain : any pointers to other things. So for example realloc() can't be : 'a'. @@ -60,7 +99,7 @@ : : For functions, like wrappers, whose macro shortcut doesn't call the : function, but which, for whatever reason, aren't considered legacy-only, -: use the 'o' flag +: use the 'o' flag, and maybe the 'M' : : This flag effectively causes nothing to happen if the perl interpreter : is compiled with -DNO_MATHOMS; otherwise these happen: @@ -71,20 +110,26 @@ : D Function is deprecated: : : proto.h: add __attribute__deprecated__ +: autodoc.pl adds a note to this effect in the doc entry : : d Function has documentation (somewhere) in the source: : -: enables 'no docs for foo" warning in autodoc.pl +: enables 'no docs for foo" warning in autodoc.pl in the documentation +: isn't found : : E Visible to extensions included in the Perl core: : : in embed.h, change "#ifdef PERL_CORE" : into "#if defined(PERL_CORE) || defined(PERL_EXT)" : -: To be usable from dynamically loaded extensions, either: -: 1) must be static to its containing file ("i" or "s" flag); or +: To be usable from dynamically loaded extensions, either: +: 1) it must be static to its containing file ("i" or "s" flag); or : 2) be combined with the "X" flag. : +: e Not exported + +: suppress entry in the list of exported symbols +: : f Function takes a format string. If the function name =~ qr/strftime/ : then its assumed to take a strftime-style format string as 1st arg; : otherwise it's assumed to be a printf style format string, varargs @@ -96,13 +141,16 @@ : : proto.h: function is declared as S_foo rather than foo unless the 'p' : flag is also given in which case 'Perl_foo' is used, -: PERL_STATIC_INLINE is added to declaration; +: PERL_STATIC_INLINE is added to the declaration : embed.h: "#define foo S_foo" or Perl_foo entries added : -: M May change: +: M There is an extra macro that bypasses this function : -: any doc entry is marked that function may change. Also used to -: suppress making a doc entry if it would just be a placeholder. +: (requires 'p', and implies 'o') The function exists so that callers who +: used the 'Perl_' form can continue to do so, but there is a macro +: available without the 'Perl_' prefix that bypasses the function call, +: such as when the function has been reduced to a wrapper around another +: one. : : m Implemented as a macro: : @@ -111,16 +159,24 @@ : suppress entry in the list of exported symbols : suppress embed.h entry : -: n Has no implicit interpreter/thread context argument: +: N The name in the entry isn't strictly a name : -: suppress the pTHX part of "foo(pTHX...)" in proto.h; -: In the PERL_IMPLICIT_SYS branch of embed.h, generates -: "#define foo Perl_foo", rather than -: "#define foo(a,b,c) Perl_foo(aTHX_ a,b,c) +: Normally, the name of the function or macro must contain all \w +: characters, and a warning is raised otherwise. This flag suppresses +: that warning, so that weird things can be documented +: +: n Has no arguments (used only in =for apidoc entries) +: +: The macro (it can't be a function) is used without any parameters nor +: empty parentheses. : : O Has a perl_ compatibility macro. : -: The really OLD name for API funcs +: The really OLD name for API funcs. + +: autodoc.pl adds a note that the perl_ form of this function is +: deprecated. +: : : o Has no Perl_foo or S_foo compatibility macro: : @@ -128,10 +184,13 @@ : doesn't call the function specified by this entry. This is typically : done for a function that effectively just wraps another one, and where : the macro form calls the underlying function directly. For these, also -: specify the 'm' flag. Legacy-only functions should instead use 'b'. +: specify the 'M' flag. Legacy-only functions should instead use 'b'. : : embed.h: suppress "#define foo Perl_foo" : +: autodoc.pl adds a note that this function must be explicitly called as +: Perl_$name with an aTHX_ parameter, unless the 'M' flag is specified. +: : P Pure function: : : A pure function has no effects except the return value, and the return @@ -164,15 +223,23 @@ : : proto.h: add __attribute__noreturn__ : -: s Static function: function in source code has a S_ prefix: +: S Static function: function in source code has a S_ prefix: : : proto.h: function is declared as S_foo rather than foo, : STATIC is added to declaration; : embed.h: "#define foo S_foo" entries added : -: U Suppress usage example in autogenerated documentation +: s autodoc.pl adds a terminating semi-colon to the usage example in the +: documentation. : -: (currently no effect) +: T Has no implicit interpreter/thread context argument: +: +: suppress the pTHX part of "foo(pTHX...)" in proto.h; +: In the PERL_IMPLICIT_SYS branch of embed.h, generates +: "#define foo Perl_foo", rather than +: "#define foo(a,b,c) Perl_foo(aTHX_ a,b,c) +: +: U autodoc.pl will not output a usage example : : W Add a _pDEPTH argument to function prototypes, and an _aDEPTH : argument to the function calls. This means that under DEBUGGING @@ -183,29 +250,29 @@ : : X Explicitly exported: : -: add entry to the list of exported symbols, unless x or m +: add entry to the list of exported symbols, unless e or m : : This is often used for private functions that are used by public : macros. In those cases the macros must use the long form of the : name (Perl_blah(aTHX_ ...)). : -: x Not exported -: -: suppress entry in the list of exported symbols +: x Experimental, may change: : -: (see also L<perlguts/Internal Functions> for those flags.) +: any doc entry is marked that it may change. Also used to suppress +: making a doc entry if it would just be a placeholder. : -: Pointer parameters that must not be passed NULLs should be prefixed with NN. +: In this file, pointer parameters that must not be passed NULLs should be +: prefixed with NN. : -: Pointer parameters that may be NULL should be prefixed with NULLOK. This has -: no effect on output yet. It's a notation for the maintainers to know "I have -: defined whether NULL is OK or not" rather than having neither NULL or NULLOK, -: which is ambiguous. +: And, pointer parameters that may be NULL should be prefixed with NULLOK. +: This has no effect on output yet. It's a notation for the maintainers to +: know "I have defined whether NULL is OK or not" rather than having neither +: NULL or NULLOK, which is ambiguous. : -: Individual flags may be separated by whitespace. +: Individual flags may be separated by non-tab whitespace. #if defined(PERL_IMPLICIT_SYS) -Ano |PerlInterpreter*|perl_alloc_using \ +ATo |PerlInterpreter*|perl_alloc_using \ |NN struct IPerlMem *ipM \ |NN struct IPerlMem *ipMS \ |NN struct IPerlMem *ipMP \ @@ -216,18 +283,18 @@ Ano |PerlInterpreter*|perl_alloc_using \ |NN struct IPerlSock *ipS \ |NN struct IPerlProc *ipP #endif -Anod |PerlInterpreter* |perl_alloc -Anod |void |perl_construct |NN PerlInterpreter *my_perl -Anod |int |perl_destruct |NN PerlInterpreter *my_perl -Anod |void |perl_free |NN PerlInterpreter *my_perl -Anod |int |perl_run |NN PerlInterpreter *my_perl -Anod |int |perl_parse |NN PerlInterpreter *my_perl|XSINIT_t xsinit \ +ATod |PerlInterpreter* |perl_alloc +ATod |void |perl_construct |NN PerlInterpreter *my_perl +ATod |int |perl_destruct |NN PerlInterpreter *my_perl +ATod |void |perl_free |NN PerlInterpreter *my_perl +ATod |int |perl_run |NN PerlInterpreter *my_perl +ATod |int |perl_parse |NN PerlInterpreter *my_perl|XSINIT_t xsinit \ |int argc|NULLOK char** argv|NULLOK char** env -AnpR |bool |doing_taint |int argc|NULLOK char** argv|NULLOK char** env +ATpR |bool |doing_taint |int argc|NULLOK char** argv|NULLOK char** env #if defined(USE_ITHREADS) -Anod |PerlInterpreter*|perl_clone|NN PerlInterpreter *proto_perl|UV flags +ATod |PerlInterpreter*|perl_clone|NN PerlInterpreter *proto_perl|UV flags # if defined(PERL_IMPLICIT_SYS) -Ano |PerlInterpreter*|perl_clone_using \ +ATo |PerlInterpreter*|perl_clone_using \ |NN PerlInterpreter *proto_perl \ |UV flags \ |NN struct IPerlMem* ipM \ @@ -242,20 +309,20 @@ Ano |PerlInterpreter*|perl_clone_using \ # endif #endif -Aanop |Malloc_t|malloc |MEM_SIZE nbytes -Aanop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size -ARnop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes -Anop |Free_t |mfree |Malloc_t where +AaTop |Malloc_t|malloc |MEM_SIZE nbytes +AaTop |Malloc_t|calloc |MEM_SIZE elements|MEM_SIZE size +ARTop |Malloc_t|realloc |Malloc_t where|MEM_SIZE nbytes +ATop |Free_t |mfree |Malloc_t where #if defined(MYMALLOC) -npR |MEM_SIZE|malloced_size |NN void *p -npR |MEM_SIZE|malloc_good_size |size_t nbytes +TpR |MEM_SIZE|malloced_size |NN void *p +TpR |MEM_SIZE|malloc_good_size |size_t nbytes #endif #if defined(PERL_IN_MALLOC_C) -sn |int |adjust_size_and_find_bucket |NN size_t *nbytes_p +ST |int |adjust_size_and_find_bucket |NN size_t *nbytes_p #endif -AnpR |void* |get_context -Anp |void |set_context |NN void *t +ATpR |void* |get_context +ATp |void |set_context |NN void *t XEop |bool |try_amagic_bin |int method|int flags XEop |bool |try_amagic_un |int method|int flags @@ -270,7 +337,7 @@ Apd |OP* |op_linklist |NN OP *o Apd |OP* |op_prepend_elem|I32 optype|NULLOK OP* first|NULLOK OP* last : FIXME - this is only called by pp_chown. They should be merged. 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 +Apx |void |apply_attrs_string|NN const char *stashpv|NN CV *cv|NN const char *attrstr|STRLEN len Apd |void |av_clear |NN AV *av Apd |SV* |av_delete |NN AV *av|SSize_t key|I32 flags ApdR |bool |av_exists |NN AV *av|SSize_t key @@ -284,7 +351,7 @@ ApdR |SSize_t|av_len |NN AV *av ApdR |AV* |av_make |SSize_t size|NN SV **strp p |SV* |av_nonelem |NN AV *av|SSize_t ix Apd |SV* |av_pop |NN AV *av -ApdoxM |void |av_create_and_push|NN AV **const avp|NN SV *const val +Apdoex |void |av_create_and_push|NN AV **const avp|NN SV *const val Apd |void |av_push |NN AV *av|NN SV *val : Used in scope.c, and by Data::Alias EXp |void |av_reify |NN AV *av @@ -293,12 +360,12 @@ Apd |SV** |av_store |NN AV *av|SSize_t key|NULLOK SV *val AidR |SSize_t|av_top_index |NN AV *av AmpdR |SSize_t|av_tindex |NN AV *av Apd |void |av_undef |NN AV *av -ApdoxM |SV** |av_create_and_unshift_one|NN AV **const avp|NN SV *const val +Apdoex |SV** |av_create_and_unshift_one|NN AV **const avp|NN SV *const val Apd |void |av_unshift |NN AV *av|SSize_t num Apo |SV** |av_arylen_p |NN AV *av Apo |IV* |av_iter_p |NN AV *av #if defined(PERL_IN_AV_C) -s |MAGIC* |get_aux_mg |NN AV *av +S |MAGIC* |get_aux_mg |NN AV *av #endif : Used in perly.y pR |OP* |bind_match |I32 type|NN OP *left|NN OP *right @@ -307,7 +374,7 @@ ApdR |OP* |block_end |I32 floor|NULLOK OP* seq ApR |U8 |block_gimme : Used in perly.y ApdR |int |block_start |int full -Aodp |void |blockhook_register |NN BHK *hk +Aodxp |void |blockhook_register |NN BHK *hk : Used in perl.c p |void |boot_core_UNIVERSAL : Used in perl.c @@ -317,10 +384,10 @@ Apd |const PERL_CONTEXT * |caller_cx|I32 level \ |NULLOK const PERL_CONTEXT **dbcxp : Used in several source files pR |bool |cando |Mode_t mode|bool effective|NN const Stat_t* statbufp -ApRn |U32 |cast_ulong |NV f -ApRn |I32 |cast_i32 |NV f -ApRn |IV |cast_iv |NV f -ApRn |UV |cast_uv |NV f +ApRT |U32 |cast_ulong |NV f +ApRT |I32 |cast_i32 |NV f +ApRT |IV |cast_iv |NV f +ApRT |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 @@ -329,37 +396,37 @@ p |const COP*|closest_cop |NN const COP *cop|NULLOK const OP *o \ : Used in perly.y ApdR |OP* |op_convert_list |I32 optype|I32 flags|NULLOK OP* o : Used in op.c and perl.c -pM |void |create_eval_scope|NULLOK OP *retop|U32 flags +px |void |create_eval_scope|NULLOK OP *retop|U32 flags Aprd |void |croak_sv |NN SV *baseex : croak()'s first parm can be NULL. Otherwise, mod_perl breaks. Afprd |void |croak |NULLOK const char* pat|... Aprd |void |vcroak |NULLOK const char* pat|NULLOK va_list* args -Anprd |void |croak_no_modify -Anprd |void |croak_xs_usage |NN const CV *const cv \ +ATprd |void |croak_no_modify +ATprd |void |croak_xs_usage |NN const CV *const cv \ |NN const char *const params -npr |void |croak_no_mem -nprX |void |croak_popstack -fnrp |void |croak_caller|NULLOK const char* pat|... -fnprx |void |noperl_die|NN const char* pat|... +Tpr |void |croak_no_mem +TprX |void |croak_popstack +fTrp |void |croak_caller|NULLOK const char* pat|... +fTpre |void |noperl_die|NN const char* pat|... #if defined(WIN32) -norx |void |win32_croak_not_implemented|NN const char * fname +Tore |void |win32_croak_not_implemented|NN const char * fname #endif #if defined(PERL_IMPLICIT_CONTEXT) -Afnrp |void |croak_nocontext|NULLOK const char* pat|... -Afnrp |OP* |die_nocontext |NULLOK 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|NULLOK 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 *const pat|... -Afnp |void |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|... -Afnp |void |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|... -Afnp |void |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|... -Afnp |void |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|... -Abfnp |int |fprintf_nocontext|NN PerlIO *stream|NN const char *format|... -Abfnp |int |printf_nocontext|NN const char *format|... +AfTrp |void |croak_nocontext|NULLOK const char* pat|... +AfTrp |OP* |die_nocontext |NULLOK const char* pat|... +AfTp |void |deb_nocontext |NN const char* pat|... +AfTp |char* |form_nocontext |NN const char* pat|... +ATp |void |load_module_nocontext|U32 flags|NN SV* name|NULLOK SV* ver|... +AfTp |SV* |mess_nocontext |NN const char* pat|... +AfTp |void |warn_nocontext |NN const char* pat|... +AfTp |void |warner_nocontext|U32 err|NN const char* pat|... +AfTp |SV* |newSVpvf_nocontext|NN const char *const pat|... +AfTp |void |sv_catpvf_nocontext|NN SV *const sv|NN const char *const pat|... +AfTp |void |sv_setpvf_nocontext|NN SV *const sv|NN const char *const pat|... +AfTp |void |sv_catpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|... +AfTp |void |sv_setpvf_mg_nocontext|NN SV *const sv|NN const char *const pat|... +AbfTp |int |fprintf_nocontext|NN PerlIO *stream|NN const char *format|... +AbfTp |int |printf_nocontext|NN const char *format|... #endif : Used in pp.c p |SV * |core_prototype |NULLOK SV *sv|NN const char *name \ @@ -368,13 +435,13 @@ p |SV * |core_prototype |NULLOK SV *sv|NN const char *name \ p |OP * |coresub_op |NN SV *const coreargssv|const int code \ |const int opnum : Used in sv.c -EMXp |void |cv_ckproto_len_flags |NN const CV* cv|NULLOK const GV* gv\ +ExXp |void |cv_ckproto_len_flags |NN const CV* cv|NULLOK const GV* gv\ |NULLOK const char* p|const STRLEN len \ |const U32 flags : Used in pp.c and pp_sys.c ApdR |SV* |gv_const_sv |NN GV* gv -ApdRn |SV* |cv_const_sv |NULLOK const CV *const cv -pRn |SV* |cv_const_sv_or_av|NULLOK const CV *const cv +ApdRT |SV* |cv_const_sv |NULLOK const CV *const cv +pRT |SV* |cv_const_sv_or_av|NULLOK const CV *const cv Apd |SV * |cv_name |NN CV *cv|NULLOK SV *sv|U32 flags Apd |void |cv_undef |NN CV* cv p |void |cv_undef_flags |NN CV* cv|U32 flags @@ -401,14 +468,14 @@ Ap |I32 |debop |NN const OP* o Ap |I32 |debstack Ap |I32 |debstackptrs pR |SV * |defelem_target |NN SV *sv|NULLOK MAGIC *mg -Anp |char* |delimcpy |NN char* to|NN const char* toend|NN const char* from \ +ATp |char* |delimcpy |NN char* to|NN const char* toend|NN const char* from \ |NN const char* fromend|int delim|NN I32* retlen -np |char* |delimcpy_no_escape|NN char* to|NN const char* toend \ +Tp |char* |delimcpy_no_escape|NN char* to|NN const char* toend \ |NN const char* from \ |NN const char* fromend|int delim \ |NN I32* retlen : Used in op.c, perl.c -pM |void |delete_eval_scope +px |void |delete_eval_scope Aprd |OP* |die_sv |NN SV *baseex Afrpd |OP* |die |NULLOK const char* pat|... : Used in util.c @@ -439,8 +506,8 @@ Ap |int |do_spawn_nowait|NN char* cmd p |bool|do_exec3 |NN const char *incmd|int fd|int do_report #endif #if defined(PERL_IN_DOIO_C) -s |void |exec_failed |NN const char *cmd|int fd|int do_report -s |bool |argvout_final |NN MAGIC *mg|NN IO *io|bool not_implicit +S |void |exec_failed |NN const char *cmd|int fd|int do_report +S |bool |argvout_final |NN MAGIC *mg|NN IO *io|bool not_implicit #endif #if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM) : Defined in doio.c, used only in pp_sys.c @@ -466,8 +533,8 @@ Apmb |bool |do_open |NN GV* gv|NN const char* name|I32 len|int as_raw \ Abp |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 -pn |void |setfd_cloexec|int fd -pn |void |setfd_inhexec|int fd +pT |void |setfd_cloexec|int fd +pT |void |setfd_inhexec|int fd p |void |setfd_cloexec_for_nonsysfd|int fd p |void |setfd_inhexec_for_sysfd|int fd p |void |setfd_cloexec_or_inhexec_by_sysfdness|int fd @@ -475,7 +542,7 @@ pR |int |PerlLIO_dup_cloexec|int oldfd p |int |PerlLIO_dup2_cloexec|int oldfd|int newfd pR |int |PerlLIO_open_cloexec|NN const char *file|int flag pR |int |PerlLIO_open3_cloexec|NN const char *file|int flag|int perm -pnoR |int |my_mkstemp_cloexec|NN char *templte +pToR |int |my_mkstemp_cloexec|NN char *templte #ifdef HAS_PIPE pR |int |PerlProc_pipe_cloexec|NN int *pipefd #endif @@ -492,10 +559,10 @@ pR |int |PerlSock_socketpair_cloexec|int domain|int type|int protocol \ |NN int *pairfd #endif #if defined(PERL_IN_DOIO_C) -s |IO * |openn_setup |NN GV *gv|NN char *mode|NN PerlIO **saveifp \ +S |IO * |openn_setup |NN GV *gv|NN char *mode|NN PerlIO **saveifp \ |NN PerlIO **saveofp|NN int *savefd \ |NN char *savetype -s |bool |openn_cleanup |NN GV *gv|NN IO *io|NULLOK PerlIO *fp \ +S |bool |openn_cleanup |NN GV *gv|NN IO *io|NULLOK PerlIO *fp \ |NN char *mode|NN const char *oname \ |NULLOK PerlIO *saveifp|NULLOK PerlIO *saveofp \ |int savefd|char savetype|int writing \ @@ -506,9 +573,9 @@ Ap |bool |do_openn |NN GV *gv|NN const char *oname|I32 len \ |int as_raw|int rawmode|int rawperm \ |NULLOK PerlIO *supplied_fp|NULLOK SV **svp \ |I32 num -Mp |bool |do_open_raw |NN GV *gv|NN const char *oname|STRLEN len \ +xp |bool |do_open_raw |NN GV *gv|NN const char *oname|STRLEN len \ |int rawmode|int rawperm|NULLOK Stat_t *statbufp -Mp |bool |do_open6 |NN GV *gv|NN const char *oname|STRLEN len \ +xp |bool |do_open6 |NN GV *gv|NN const char *oname|STRLEN len \ |NULLOK PerlIO *supplied_fp|NULLOK SV **svp \ |U32 num : Used in pp_hot.c and pp_sys.c @@ -553,7 +620,7 @@ p |CV * |find_lexical_cv|PADOFFSET off p |char* |find_script |NN const char *scriptname|bool dosearch \ |NULLOK const char *const *const search_ext|I32 flags #if defined(PERL_IN_OP_C) -s |OP* |force_list |NULLOK OP* arg|bool nullit +S |OP* |force_list |NULLOK OP* arg|bool nullit i |OP* |op_integerize |NN OP *o i |OP* |op_std_init |NN OP *o #if defined(USE_ITHREADS) @@ -562,21 +629,21 @@ i |void |op_relocate_sv |NN SV** svp|NN PADOFFSET* targp i |OP* |newMETHOP_internal |I32 type|I32 flags|NULLOK OP* dynamic_meth \ |NULLOK SV* const_meth : FIXME -s |OP* |fold_constants |NN OP * const o -s |OP* |traverse_op_tree|NN OP* top|NN OP* o +S |OP* |fold_constants |NN OP * const o +S |OP* |traverse_op_tree|NN OP* top|NN OP* o #endif Afpd |char* |form |NN const char* pat|... Ap |char* |vform |NN const char* pat|NULLOK va_list* args Ap |void |free_tmps #if defined(PERL_IN_OP_C) -s |OP* |gen_constant_list|NULLOK OP* o +S |OP* |gen_constant_list|NULLOK OP* o #endif #if !defined(HAS_GETENV_LEN) : Used in hv.c p |char* |getenv_len |NN const char *env_elem|NN unsigned long *len #endif : Used in pp_ctl.c and pp_hot.c -pox |void |get_db_sub |NULLOK SV **svp|NN CV *cv +poe |void |get_db_sub |NULLOK SV **svp|NN CV *cv Ap |void |gp_free |NULLOK GV* gv Ap |GP* |gp_ref |NULLOK GP* gp Ap |GV* |gv_add_by_type |NULLOK GV *gv|svtype type @@ -615,17 +682,17 @@ Apd |GV* |gv_fetchmeth_pvn_autoload |NULLOK HV* stash|NN const char* name \ Apdmb |GV* |gv_fetchmethod |NN HV* stash|NN const char* name Apd |GV* |gv_fetchmethod_autoload|NN HV* stash|NN const char* name \ |I32 autoload -ApM |GV* |gv_fetchmethod_sv_flags|NN HV* stash|NN SV* namesv|U32 flags -ApM |GV* |gv_fetchmethod_pv_flags|NN HV* stash|NN const char* name \ +Apx |GV* |gv_fetchmethod_sv_flags|NN HV* stash|NN SV* namesv|U32 flags +Apx |GV* |gv_fetchmethod_pv_flags|NN HV* stash|NN const char* name \ |U32 flags -ApM |GV* |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \ +Apx |GV* |gv_fetchmethod_pvn_flags|NN HV* stash|NN const char* name \ |const STRLEN len|U32 flags Ap |GV* |gv_fetchpv |NN const char *nambeg|I32 add|const svtype sv_type Abp |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 : Used in scope.c -pMox |GP * |newGP |NN GV *const gv +pxoe |GP * |newGP |NN GV *const gv pX |void |cvgv_set |NN CV* cv|NULLOK GV* gv poX |GV * |cvgv_from_hek |NN CV* cv pX |void |cvstash_set |NN CV* cv|NULLOK HV* stash @@ -637,9 +704,9 @@ Ap |void |gv_init_pv |NN GV* gv|NULLOK HV* stash|NN const char* name \ Ap |void |gv_init_pvn |NN GV* gv|NULLOK HV* stash|NN const char* name \ |STRLEN len|U32 flags Ap |void |gv_name_set |NN GV* gv|NN const char *name|U32 len|U32 flags -px |GV * |gv_override |NN const char * const name \ +pe |GV * |gv_override |NN const char * const name \ |const STRLEN len -XMpd |void |gv_try_downgrade|NN GV* gv +Xxpd |void |gv_try_downgrade|NN GV* gv p |void |gv_setref |NN SV *const dstr|NN SV *const sstr Apd |HV* |gv_stashpv |NN const char* name|I32 flags Apd |HV* |gv_stashpvn |NN const char* name|U32 namelen|I32 flags @@ -668,19 +735,19 @@ Ap |void* |hv_common |NULLOK HV *hv|NULLOK SV *keysv \ Ap |void* |hv_common_key_len|NULLOK HV *hv|NN const char *key \ |I32 klen_i32|const int action|NULLOK SV *val \ |const U32 hash -Apod |STRLEN |hv_fill |NN HV *const hv +AMpod |STRLEN |hv_fill |NN HV *const hv Ap |void |hv_free_ent |NN HV *hv|NULLOK HE *entry Apd |I32 |hv_iterinit |NN HV *hv ApdR |char* |hv_iterkey |NN HE* entry|NN I32* retlen ApdR |SV* |hv_iterkeysv |NN HE* entry ApdRbm |HE* |hv_iternext |NN HV *hv ApdR |SV* |hv_iternextsv |NN HV *hv|NN char **key|NN I32 *retlen -ApMdR |HE* |hv_iternext_flags|NN HV *hv|I32 flags +ApxdR |HE* |hv_iternext_flags|NN HV *hv|I32 flags ApdR |SV* |hv_iterval |NN HV *hv|NN HE *entry Ap |void |hv_ksplit |NN HV *hv|IV newmax Apdbm |void |hv_magic |NN HV *hv|NULLOK GV *gv|int how #if defined(PERL_IN_HV_C) -s |SV * |refcounted_he_value |NN const struct refcounted_he *he +S |SV * |refcounted_he_value |NN const struct refcounted_he *he #endif Xpd |HV * |refcounted_he_chain_2hv|NULLOK const struct refcounted_he *c|U32 flags Xpd |SV * |refcounted_he_fetch_pvn|NULLOK const struct refcounted_he *chain \ @@ -707,26 +774,26 @@ Apbmd |SV** |hv_store |NULLOK HV *hv|NULLOK const char *key \ |I32 klen|NULLOK SV *val|U32 hash Apbmd |HE* |hv_store_ent |NULLOK HV *hv|NULLOK SV *key|NULLOK SV *val\ |U32 hash -ApbmM |SV** |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \ +Apbmx |SV** |hv_store_flags |NULLOK HV *hv|NULLOK const char *key \ |I32 klen|NULLOK SV *val|U32 hash|int flags Amd |void |hv_undef |NULLOK HV *hv poX |void |hv_undef_flags |NULLOK HV *hv|U32 flags AmP |I32 |ibcmp |NN const char* a|NN const char* b|I32 len -Ainp |I32 |foldEQ |NN const char* a|NN const char* b|I32 len +AiTp |I32 |foldEQ |NN const char* a|NN const char* b|I32 len AmP |I32 |ibcmp_locale |NN const char* a|NN const char* b|I32 len -Ainp |I32 |foldEQ_locale |NN const char* a|NN const char* b|I32 len +AiTp |I32 |foldEQ_locale |NN const char* a|NN const char* b|I32 len Am |I32 |ibcmp_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \ |bool u1|NN const char *s2|NULLOK char **pe2 \ |UV l2|bool u2 Amd |I32 |foldEQ_utf8 |NN const char *s1|NULLOK char **pe1|UV l1 \ |bool u1|NN const char *s2|NULLOK char **pe2 \ |UV l2|bool u2 -AMp |I32 |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \ +Axp |I32 |foldEQ_utf8_flags |NN const char *s1|NULLOK char **pe1|UV l1 \ |bool u1|NN const char *s2|NULLOK char **pe2 \ |UV l2|bool u2|U32 flags -Ainp |I32 |foldEQ_latin1 |NN const char* a|NN const char* b|I32 len +AiTp |I32 |foldEQ_latin1 |NN const char* a|NN const char* b|I32 len #if defined(PERL_IN_DOIO_C) -sR |bool |ingroup |Gid_t testgid|bool effective +SR |bool |ingroup |Gid_t testgid|bool effective #endif : Used in toke.c p |void |init_argv_symbols|int argc|NN char **argv @@ -737,7 +804,7 @@ p |void |init_debugger Ap |void |init_stacks Ap |void |init_tm |NN struct tm *ptm : Used in perly.y -AbmnpPR |char* |instr |NN const char* big|NN const char* little +AbmTpPR |char* |instr |NN const char* big|NN const char* little : Used in sv.c p |bool |io_close |NN IO* io|NULLOK GV *gv \ |bool not_implicit|bool warn_on_fail @@ -746,168 +813,168 @@ pR |OP* |invert |NULLOK OP* cmd ApR |I32 |is_lvalue_sub : Used in cop.h XopR |I32 |was_lvalue_sub -ApMRnP |STRLEN |_is_utf8_char_helper|NN const U8 * const s|NN const U8 * e|const U32 flags -AbDMpR |U32 |to_uni_upper_lc|U32 c -AbDMpR |U32 |to_uni_title_lc|U32 c -AbDMpR |U32 |to_uni_lower_lc|U32 c -AbDMpR |bool |is_uni_alnum |UV c -AbDMpR |bool |is_uni_alnumc |UV c -AbDMpR |bool |is_uni_idfirst |UV c -AbDMpR |bool |is_uni_alpha |UV c -AbDMpPR |bool |is_uni_ascii |UV c -AbDMpPR |bool |is_uni_blank |UV c -AbDMpPR |bool |is_uni_space |UV c -AbDMpPR |bool |is_uni_cntrl |UV c -AbDMpR |bool |is_uni_graph |UV c -AbDMpR |bool |is_uni_digit |UV c -AbDMpR |bool |is_uni_upper |UV c -AbDMpR |bool |is_uni_lower |UV c -AbDMpR |bool |is_uni_print |UV c -AbDMpR |bool |is_uni_punct |UV c -AbDMpPR |bool |is_uni_xdigit |UV c -AMp |UV |to_uni_upper |UV c|NN U8 *p|NN STRLEN *lenp -AMp |UV |to_uni_title |UV c|NN U8 *p|NN STRLEN *lenp -AbDMpR |bool |isIDFIRST_lazy |NN const char* p -AbDMpR |bool |isALNUM_lazy |NN const char* p +ApxRTP |STRLEN |_is_utf8_char_helper|NN const U8 * const s|NN const U8 * e|const U32 flags +AbDxpR |U32 |to_uni_upper_lc|U32 c +AbDxpR |U32 |to_uni_title_lc|U32 c +AbDxpR |U32 |to_uni_lower_lc|U32 c +AbDxpR |bool |is_uni_alnum |UV c +AbDxpR |bool |is_uni_alnumc |UV c +AbDxpR |bool |is_uni_idfirst |UV c +AbDxpR |bool |is_uni_alpha |UV c +AbDxpPR |bool |is_uni_ascii |UV c +AbDxpPR |bool |is_uni_blank |UV c +AbDxpPR |bool |is_uni_space |UV c +AbDxpPR |bool |is_uni_cntrl |UV c +AbDxpR |bool |is_uni_graph |UV c +AbDxpR |bool |is_uni_digit |UV c +AbDxpR |bool |is_uni_upper |UV c +AbDxpR |bool |is_uni_lower |UV c +AbDxpR |bool |is_uni_print |UV c +AbDxpR |bool |is_uni_punct |UV c +AbDxpPR |bool |is_uni_xdigit |UV c +Axp |UV |to_uni_upper |UV c|NN U8 *p|NN STRLEN *lenp +Axp |UV |to_uni_title |UV c|NN U8 *p|NN STRLEN *lenp +AbDxpR |bool |isIDFIRST_lazy |NN const char* p +AbDxpR |bool |isALNUM_lazy |NN const char* p p |void |init_uniprops #ifdef PERL_IN_UTF8_C -snR |U8 |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp \ +STR |U8 |to_lower_latin1|const U8 c|NULLOK U8 *p|NULLOK STRLEN *lenp \ |const char dummy # ifndef UV_IS_QUAD -snR |int |is_utf8_cp_above_31_bits|NN const U8 * const s \ +STR |int |is_utf8_cp_above_31_bits|NN const U8 * const s \ |NN const U8 * const e \ |const bool consider_overlongs # endif #endif #if defined(PERL_IN_UTF8_C) || defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_REGEXEC_C) -EXnp |UV |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags +EXTp |UV |_to_fold_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const unsigned int flags #endif #if defined(PERL_IN_UTF8_C) || defined(PERL_IN_PP_C) p |UV |_to_upper_title_latin1|const U8 c|NN U8 *p|NN STRLEN *lenp|const char S_or_s #endif -AMp |UV |to_uni_lower |UV c|NN U8 *p|NN STRLEN *lenp -AMmp |UV |to_uni_fold |UV c|NN U8 *p|NN STRLEN *lenp -AMp |UV |_to_uni_fold_flags|UV c|NN U8 *p|NN STRLEN *lenp|U8 flags -AbDMpR |bool |is_uni_alnum_lc|UV c -AbDMpR |bool |is_uni_alnumc_lc|UV c -AbDMpR |bool |is_uni_idfirst_lc|UV c -AMpR |bool |_is_uni_perl_idcont|UV c -AMpR |bool |_is_uni_perl_idstart|UV c -AbDMpR |bool |is_uni_alpha_lc|UV c -AbDMpPR |bool |is_uni_ascii_lc|UV c -AbDMpPR |bool |is_uni_space_lc|UV c -AbDMpPR |bool |is_uni_blank_lc|UV c -AbDMpPR |bool |is_uni_cntrl_lc|UV c -AbDMpR |bool |is_uni_graph_lc|UV c -AbDMpR |bool |is_uni_digit_lc|UV c -AbDMpR |bool |is_uni_upper_lc|UV c -AbDMpR |bool |is_uni_lower_lc|UV c -AbDMpR |bool |is_uni_print_lc|UV c -AbDMpR |bool |is_uni_punct_lc|UV c -AbDMpPR |bool |is_uni_xdigit_lc|UV c -AndmoR |bool |is_utf8_invariant_string|NN const U8* const s \ +Axp |UV |to_uni_lower |UV c|NN U8 *p|NN STRLEN *lenp +Axmp |UV |to_uni_fold |UV c|NN U8 *p|NN STRLEN *lenp +Axp |UV |_to_uni_fold_flags|UV c|NN U8 *p|NN STRLEN *lenp|U8 flags +AbDxpR |bool |is_uni_alnum_lc|UV c +AbDxpR |bool |is_uni_alnumc_lc|UV c +AbDxpR |bool |is_uni_idfirst_lc|UV c +AxpR |bool |_is_uni_perl_idcont|UV c +AxpR |bool |_is_uni_perl_idstart|UV c +AbDxpR |bool |is_uni_alpha_lc|UV c +AbDxpPR |bool |is_uni_ascii_lc|UV c +AbDxpPR |bool |is_uni_space_lc|UV c +AbDxpPR |bool |is_uni_blank_lc|UV c +AbDxpPR |bool |is_uni_cntrl_lc|UV c +AbDxpR |bool |is_uni_graph_lc|UV c +AbDxpR |bool |is_uni_digit_lc|UV c +AbDxpR |bool |is_uni_upper_lc|UV c +AbDxpR |bool |is_uni_lower_lc|UV c +AbDxpR |bool |is_uni_print_lc|UV c +AbDxpR |bool |is_uni_punct_lc|UV c +AbDxpPR |bool |is_uni_xdigit_lc|UV c +ATdmoR |bool |is_utf8_invariant_string|NN const U8* const s \ |STRLEN len -AnidR |bool |is_utf8_invariant_string_loc|NN const U8* const s \ +ATidR |bool |is_utf8_invariant_string_loc|NN const U8* const s \ |STRLEN len \ |NULLOK const U8 ** ep #ifndef EBCDIC -AniR |unsigned int|_variant_byte_number|PERL_UINTMAX_T word +ATiR |unsigned int|_variant_byte_number|PERL_UINTMAX_T word #endif #if defined(PERL_CORE) || defined(PERL_EXT) -EinR |Size_t |variant_under_utf8_count|NN const U8* const s \ +EiTR |Size_t |variant_under_utf8_count|NN const U8* const s \ |NN const U8* const e #endif -AmnpdRP |bool |is_ascii_string|NN const U8* const s|STRLEN len -AmnpdRP |bool |is_invariant_string|NN const U8* const s|STRLEN len +AmTpdRP |bool |is_ascii_string|NN const U8* const s|STRLEN len +AmTpdRP |bool |is_invariant_string|NN const U8* const s|STRLEN len #if defined(PERL_CORE) || defined (PERL_EXT) -EXnidR |bool |is_utf8_non_invariant_string|NN const U8* const s \ +EXTidR |bool |is_utf8_non_invariant_string|NN const U8* const s \ |STRLEN len #endif -AbnpdD |STRLEN |is_utf8_char |NN const U8 *s -Abmnpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end -AnidR |Size_t |isUTF8_CHAR|NN const U8 * const s0 \ +AbTpdD |STRLEN |is_utf8_char |NN const U8 *s +AbmTpd |STRLEN |is_utf8_char_buf|NN const U8 *buf|NN const U8 *buf_end +ATidR |Size_t |isUTF8_CHAR|NN const U8 * const s0 \ |NN const U8 * const e -AnidR |Size_t |isSTRICT_UTF8_CHAR |NN const U8 * const s0 \ +ATidR |Size_t |isSTRICT_UTF8_CHAR |NN const U8 * const s0 \ |NN const U8 * const e -AnidR |Size_t |isC9_STRICT_UTF8_CHAR |NN const U8 * const s0 \ +ATidR |Size_t |isC9_STRICT_UTF8_CHAR |NN const U8 * const s0 \ |NN const U8 * const e -AnmdpR |bool |is_utf8_string |NN const U8 *s|STRLEN len -AnidR |bool |is_utf8_string_flags \ +ATmdpR |bool |is_utf8_string |NN const U8 *s|STRLEN len +ATidR |bool |is_utf8_string_flags \ |NN const U8 *s|STRLEN len|const U32 flags -AnmdpR |bool |is_strict_utf8_string|NN const U8 *s|STRLEN len -AnmdpR |bool |is_c9strict_utf8_string|NN const U8 *s|STRLEN len -Anpdmb |bool |is_utf8_string_loc \ +ATmdpR |bool |is_strict_utf8_string|NN const U8 *s|STRLEN len +ATmdpR |bool |is_c9strict_utf8_string|NN const U8 *s|STRLEN len +ATpdmb |bool |is_utf8_string_loc \ |NN const U8 *s|const STRLEN len|NN const U8 **ep -Andm |bool |is_utf8_string_loc_flags \ +ATdm |bool |is_utf8_string_loc_flags \ |NN const U8 *s|STRLEN len|NN const U8 **ep \ |const U32 flags -Andm |bool |is_strict_utf8_string_loc \ +ATdm |bool |is_strict_utf8_string_loc \ |NN const U8 *s|STRLEN len|NN const U8 **ep -Andm |bool |is_c9strict_utf8_string_loc \ +ATdm |bool |is_c9strict_utf8_string_loc \ |NN const U8 *s|STRLEN len|NN const U8 **ep -Anipd |bool |is_utf8_string_loclen \ +ATipd |bool |is_utf8_string_loclen \ |NN const U8 *s|STRLEN len|NULLOK const U8 **ep \ |NULLOK STRLEN *el -Anid |bool |is_utf8_string_loclen_flags \ +ATid |bool |is_utf8_string_loclen_flags \ |NN const U8 *s|STRLEN len|NULLOK const U8 **ep \ |NULLOK STRLEN *el|const U32 flags -Anid |bool |is_strict_utf8_string_loclen \ +ATid |bool |is_strict_utf8_string_loclen \ |NN const U8 *s|STRLEN len|NULLOK const U8 **ep \ |NULLOK STRLEN *el -Anid |bool |is_c9strict_utf8_string_loclen \ +ATid |bool |is_c9strict_utf8_string_loclen \ |NN const U8 *s|STRLEN len|NULLOK const U8 **ep \ |NULLOK STRLEN *el -Amnd |bool |is_utf8_fixed_width_buf_flags \ +AmTd |bool |is_utf8_fixed_width_buf_flags \ |NN const U8 * const s|STRLEN len|const U32 flags -Amnd |bool |is_utf8_fixed_width_buf_loc_flags \ +AmTd |bool |is_utf8_fixed_width_buf_loc_flags \ |NN const U8 * const s|STRLEN len \ |NULLOK const U8 **ep|const U32 flags -Anid |bool |is_utf8_fixed_width_buf_loclen_flags \ +ATid |bool |is_utf8_fixed_width_buf_loclen_flags \ |NN const U8 * const s|STRLEN len \ |NULLOK const U8 **ep|NULLOK STRLEN *el|const U32 flags -AmndP |bool |is_utf8_valid_partial_char \ +AmTdP |bool |is_utf8_valid_partial_char \ |NN const U8 * const s|NN const U8 * const e -AnidR |bool |is_utf8_valid_partial_char_flags \ +ATidR |bool |is_utf8_valid_partial_char_flags \ |NN const U8 * const s|NN const U8 * const e|const U32 flags -AMpR |bool |_is_uni_FOO|const U8 classnum|const UV c -AMpR |bool |_is_utf8_FOO|U8 classnum|NN const U8 * const p \ +AxpR |bool |_is_uni_FOO|const U8 classnum|const UV c +AxpR |bool |_is_utf8_FOO|U8 classnum|NN const U8 * const p \ |NN const char * const name \ |NN const char * const alternative \ |const bool use_utf8|const bool use_locale \ |NN const char * const file|const unsigned line -AMpR |bool |_is_utf8_FOO_with_len|const U8 classnum|NN const U8 *p \ +AxpR |bool |_is_utf8_FOO_with_len|const U8 classnum|NN const U8 *p \ |NN const U8 * const e -AbDMpR |bool |is_utf8_alnum |NN const U8 *p -AbDMpR |bool |is_utf8_alnumc |NN const U8 *p -AbDMpR |bool |is_utf8_idfirst|NN const U8 *p -AbDMpR |bool |is_utf8_xidfirst|NN const U8 *p -AMpR |bool |_is_utf8_idcont|NN const U8 *p -AMpR |bool |_is_utf8_idstart|NN const U8 *p -AMpR |bool |_is_utf8_xidcont|NN const U8 *p -AMpR |bool |_is_utf8_xidstart|NN const U8 *p -AMpR |bool |_is_utf8_perl_idcont_with_len|NN const U8 *p \ +AbDxpR |bool |is_utf8_alnum |NN const U8 *p +AbDxpR |bool |is_utf8_alnumc |NN const U8 *p +AbDxpR |bool |is_utf8_idfirst|NN const U8 *p +AbDxpR |bool |is_utf8_xidfirst|NN const U8 *p +AxpR |bool |_is_utf8_idcont|NN const U8 *p +AxpR |bool |_is_utf8_idstart|NN const U8 *p +AxpR |bool |_is_utf8_xidcont|NN const U8 *p +AxpR |bool |_is_utf8_xidstart|NN const U8 *p +AxpR |bool |_is_utf8_perl_idcont_with_len|NN const U8 *p \ |NN const U8 * const e -AMpR |bool |_is_utf8_perl_idstart_with_len|NN const U8 *p \ +AxpR |bool |_is_utf8_perl_idstart_with_len|NN const U8 *p \ |NN const U8 * const e -AbDMpR |bool |is_utf8_idcont |NN const U8 *p -AbDMpR |bool |is_utf8_xidcont |NN const U8 *p -AbDMpR |bool |is_utf8_alpha |NN const U8 *p -AbDMpR |bool |is_utf8_ascii |NN const U8 *p -AbDMpR |bool |is_utf8_blank |NN const U8 *p -AbDMpR |bool |is_utf8_space |NN const U8 *p -AbDMpR |bool |is_utf8_perl_space |NN const U8 *p -AbDMpR |bool |is_utf8_perl_word |NN const U8 *p -AbDMpR |bool |is_utf8_cntrl |NN const U8 *p -AbDMpR |bool |is_utf8_digit |NN const U8 *p -AbDMpR |bool |is_utf8_posix_digit |NN const U8 *p -AbDMpR |bool |is_utf8_graph |NN const U8 *p -AbDMpR |bool |is_utf8_upper |NN const U8 *p -AbDMpR |bool |is_utf8_lower |NN const U8 *p -AbDMpR |bool |is_utf8_print |NN const U8 *p -AbDMpR |bool |is_utf8_punct |NN const U8 *p -AbDMpR |bool |is_utf8_xdigit |NN const U8 *p -AMpR |bool |_is_utf8_mark |NN const U8 *p -AbDMpR |bool |is_utf8_mark |NN const U8 *p +AbDxpR |bool |is_utf8_idcont |NN const U8 *p +AbDxpR |bool |is_utf8_xidcont |NN const U8 *p +AbDxpR |bool |is_utf8_alpha |NN const U8 *p +AbDxpR |bool |is_utf8_ascii |NN const U8 *p +AbDxpR |bool |is_utf8_blank |NN const U8 *p +AbDxpR |bool |is_utf8_space |NN const U8 *p +AbDxpR |bool |is_utf8_perl_space |NN const U8 *p +AbDxpR |bool |is_utf8_perl_word |NN const U8 *p +AbDxpR |bool |is_utf8_cntrl |NN const U8 *p +AbDxpR |bool |is_utf8_digit |NN const U8 *p +AbDxpR |bool |is_utf8_posix_digit |NN const U8 *p +AbDxpR |bool |is_utf8_graph |NN const U8 *p +AbDxpR |bool |is_utf8_upper |NN const U8 *p +AbDxpR |bool |is_utf8_lower |NN const U8 *p +AbDxpR |bool |is_utf8_print |NN const U8 *p +AbDxpR |bool |is_utf8_punct |NN const U8 *p +AbDxpR |bool |is_utf8_xdigit |NN const U8 *p +AxpR |bool |_is_utf8_mark |NN const U8 *p +AbDxpR |bool |is_utf8_mark |NN const U8 *p #if defined(PERL_CORE) || defined(PERL_EXT) EXdpR |bool |isSCRIPT_RUN |NN const U8 *s|NN const U8 *send \ |const bool utf8_target @@ -917,45 +984,45 @@ p |OP* |jmaybe |NN OP *o : Used in pp.c pP |I32 |keyword |NN const char *name|I32 len|bool all_keywords #if defined(PERL_IN_OP_C) -s |void |inplace_aassign |NN OP* o +S |void |inplace_aassign |NN OP* o #endif Ap |void |leave_scope |I32 base p |void |notify_parser_that_changed_to_utf8 : Public lexer API -AMpd |void |lex_start |NULLOK SV* line|NULLOK PerlIO *rsfp|U32 flags -AMpd |bool |lex_bufutf8 -AMpd |char* |lex_grow_linestr|STRLEN len -AMpd |void |lex_stuff_pvn |NN const char* pv|STRLEN len|U32 flags -AMpd |void |lex_stuff_pv |NN const char* pv|U32 flags -AMpd |void |lex_stuff_sv |NN SV* sv|U32 flags -AMpd |void |lex_unstuff |NN char* ptr -AMpd |void |lex_read_to |NN char* ptr -AMpd |void |lex_discard_to |NN char* ptr -AMpd |bool |lex_next_chunk |U32 flags -AMpd |I32 |lex_peek_unichar|U32 flags -AMpd |I32 |lex_read_unichar|U32 flags -AMpd |void |lex_read_space |U32 flags +Axpd |void |lex_start |NULLOK SV* line|NULLOK PerlIO *rsfp|U32 flags +Axpd |bool |lex_bufutf8 +Axpd |char* |lex_grow_linestr|STRLEN len +Axpd |void |lex_stuff_pvn |NN const char* pv|STRLEN len|U32 flags +Axpd |void |lex_stuff_pv |NN const char* pv|U32 flags +Axpd |void |lex_stuff_sv |NN SV* sv|U32 flags +Axpd |void |lex_unstuff |NN char* ptr +Axpd |void |lex_read_to |NN char* ptr +Axpd |void |lex_discard_to |NN char* ptr +Axpd |bool |lex_next_chunk |U32 flags +Axpd |I32 |lex_peek_unichar|U32 flags +Axpd |I32 |lex_read_unichar|U32 flags +Axpd |void |lex_read_space |U32 flags : Public parser API -AMpd |OP* |parse_arithexpr|U32 flags -AMpd |OP* |parse_termexpr |U32 flags -AMpd |OP* |parse_listexpr |U32 flags -AMpd |OP* |parse_fullexpr |U32 flags -AMpd |OP* |parse_block |U32 flags -AMpd |OP* |parse_barestmt |U32 flags -AMpd |SV* |parse_label |U32 flags -AMpd |OP* |parse_fullstmt |U32 flags -AMpd |OP* |parse_stmtseq |U32 flags +Axpd |OP* |parse_arithexpr|U32 flags +Axpd |OP* |parse_termexpr |U32 flags +Axpd |OP* |parse_listexpr |U32 flags +Axpd |OP* |parse_fullexpr |U32 flags +Axpd |OP* |parse_block |U32 flags +Axpd |OP* |parse_barestmt |U32 flags +Axpd |SV* |parse_label |U32 flags +Axpd |OP* |parse_fullstmt |U32 flags +Axpd |OP* |parse_stmtseq |U32 flags : Used in various files Apd |void |op_null |NN OP* o : FIXME. Used by Data::Alias EXp |void |op_clear |NN OP* o Ap |void |op_refcnt_lock Ap |void |op_refcnt_unlock -Apdn |OP* |op_sibling_splice|NULLOK OP *parent|NULLOK OP *start \ +ApdT |OP* |op_sibling_splice|NULLOK OP *parent|NULLOK OP *start \ |int del_count|NULLOK OP* insert -Apdn |OP* |op_parent|NN OP *o +ApdT |OP* |op_parent|NN OP *o #if defined(PERL_IN_OP_C) -s |OP* |listkids |NULLOK OP* o +S |OP* |listkids |NULLOK OP* o #endif p |OP* |list |NULLOK OP* o Apd |void |load_module|U32 flags|NN SV* name|NULLOK SV* ver|... @@ -965,7 +1032,7 @@ p |OP* |localize |NN OP *o|I32 lex ApdR |I32 |looks_like_number|NN SV *const sv Apd |UV |grok_bin |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result #if defined(PERL_IN_REGCOMP_C) || defined(PERL_IN_TOKE_C) || defined(PERL_IN_DQUOTE_C) -EMpRX |bool |grok_bslash_x |NN char** s \ +ExpRX |bool |grok_bslash_x |NN char** s \ |NN const char* const send \ |NN UV* uv \ |NN const char** error_msg \ @@ -973,8 +1040,8 @@ EMpRX |bool |grok_bslash_x |NN char** s \ |const bool strict \ |const bool silence_non_portable \ |const bool utf8 -EMpRX |char |grok_bslash_c |const char source|const bool output_warning -EMpRX |bool |grok_bslash_o |NN char** s \ +ExpRX |char |grok_bslash_c |const char source|const bool output_warning +ExpRX |bool |grok_bslash_o |NN char** s \ |NN const char* const send \ |NN UV* uv \ |NN const char** error_msg \ @@ -982,9 +1049,9 @@ EMpRX |bool |grok_bslash_o |NN char** s \ |const bool strict \ |const bool silence_non_portable \ |const bool utf8 -EMiR |char*|form_short_octal_warning|NN const char * const s \ +ExiR |char*|form_short_octal_warning|NN const char * const s \ |const STRLEN len -EiRn |I32 |regcurly |NN const char *s +EiRT |I32 |regcurly |NN const char *s #endif Apd |UV |grok_hex |NN const char* start|NN STRLEN* len_p|NN I32* flags|NULLOK NV *result Apd |int |grok_infnan |NN const char** sp|NN const char *send @@ -992,7 +1059,7 @@ Apd |int |grok_number |NN const char *pv|STRLEN len|NULLOK UV *valuep Apd |int |grok_number_flags|NN const char *pv|STRLEN len|NULLOK UV *valuep|U32 flags 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 -EXpn |bool |grok_atoUV |NN const char* pv|NN UV* valptr|NULLOK const char** endptr +EXpT |bool |grok_atoUV |NN const char* pv|NN UV* valptr|NULLOK const char** endptr : These are all indirectly referenced by globals.c. This is somewhat annoying. p |int |magic_clearenv |NN SV* sv|NN MAGIC* mg p |int |magic_clear_all_env|NN SV* sv|NN MAGIC* mg @@ -1063,7 +1130,7 @@ p |int |magic_setcollxfrm|NN SV* sv|NN MAGIC* mg pb |char* |mem_collxfrm |NN const char* input_string|STRLEN len|NN STRLEN* xlen : Defined in locale.c, used only in sv.c # if defined(PERL_IN_LOCALE_C) || defined(PERL_IN_SV_C) || defined(PERL_IN_MATHOMS_C) -pM |char* |_mem_collxfrm |NN const char* input_string \ +px |char* |_mem_collxfrm |NN const char* input_string \ |STRLEN len \ |NN STRLEN* xlen \ |bool utf8 @@ -1083,8 +1150,8 @@ Apd |int |mg_copy |NN SV *sv|NN SV *nsv|NULLOK const char *key \ : Defined in mg.c, used only in scope.c pd |void |mg_localize |NN SV* sv|NN SV* nsv|bool setmagic Apd |SV* |sv_string_from_errnum|int errnum|NULLOK SV* tgtsv -ApdRn |MAGIC* |mg_find |NULLOK const SV* sv|int type -ApdRn |MAGIC* |mg_findext |NULLOK const SV* sv|int type|NULLOK const MGVTBL *vtbl +ApdRT |MAGIC* |mg_find |NULLOK const SV* sv|int type +ApdRT |MAGIC* |mg_findext |NULLOK const SV* sv|int type|NULLOK const MGVTBL *vtbl : exported for re.pm EXpR |MAGIC* |mg_find_mglob |NN SV* sv Apd |int |mg_free |NN SV* sv @@ -1092,35 +1159,35 @@ Apd |void |mg_free_type |NN SV* sv|int how Apd |void |mg_freeext |NN SV* sv|int how|NULLOK const MGVTBL *vtbl Apd |int |mg_get |NN SV* sv ApdD |U32 |mg_length |NN SV* sv -Apdn |void |mg_magical |NN SV* sv +ApdT |void |mg_magical |NN SV* sv Apd |int |mg_set |NN SV* sv Ap |I32 |mg_size |NN SV* sv -Apn |void |mini_mktime |NN struct tm *ptm -AMmd |OP* |op_lvalue |NULLOK OP* o|I32 type +ApT |void |mini_mktime |NN struct tm *ptm +Axmd |OP* |op_lvalue |NULLOK OP* o|I32 type poX |OP* |op_lvalue_flags|NULLOK OP* o|I32 type|U32 flags p |void |finalize_optree |NN OP* o p |void |optimize_optree|NN OP* o #if defined(PERL_IN_OP_C) -s |void |optimize_op |NN OP* o -s |void |finalize_op |NN OP* o -s |void |move_proto_attr|NN OP **proto|NN OP **attrs \ +S |void |optimize_op |NN OP* o +S |void |finalize_op |NN OP* o +S |void |move_proto_attr|NN OP **proto|NN OP **attrs \ |NN const GV *name|bool curstash #endif : Used in op.c and pp_sys.c p |int |mode_from_discipline|NULLOK const char* s|STRLEN len Ap |const char* |moreswitches |NN const char* s Ap |NV |my_atof |NN const char *s -AnpR |NV |my_strtod |NN const char * const s|NULLOK char ** e +ATpR |NV |my_strtod |NN const char * const s|NULLOK char ** e Apr |void |my_exit |U32 status Apr |void |my_failure_exit Ap |I32 |my_fflush_all -Anp |Pid_t |my_fork -Anp |void |atfork_lock -Anp |void |atfork_unlock +ATp |Pid_t |my_fork +ATp |void |atfork_lock +ATp |void |atfork_unlock Apmb |I32 |my_lstat pX |I32 |my_lstat_flags |NULLOK const U32 flags #if ! defined(HAS_MEMRCHR) && (defined(PERL_CORE) || defined(PERL_EXT)) -Exin |void * |my_memrchr |NN const char * s|const char c|const STRLEN len +EeiT |void * |my_memrchr |NN const char * s|const char c|const STRLEN len #endif #if !defined(PERL_IMPLICIT_SYS) Ap |I32 |my_pclose |NULLOK PerlIO* ptr @@ -1133,8 +1200,8 @@ pX |I32 |my_stat_flags |NULLOK const U32 flags Afp |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 : Used in pp_ctl.c p |void |my_unexec -AbDMnPR |UV |NATIVE_TO_NEED |const UV enc|const UV ch -AbDMnPR |UV |ASCII_TO_NEED |const UV enc|const UV ch +AbDxTPR |UV |NATIVE_TO_NEED |const UV enc|const UV ch +AbDxTPR |UV |ASCII_TO_NEED |const UV enc|const UV ch ApR |OP* |newANONLIST |NULLOK OP* o ApR |OP* |newANONHASH |NULLOK OP* o Ap |OP* |newANONSUB |I32 floor|NULLOK OP* proto|NULLOK OP* block @@ -1148,7 +1215,7 @@ Ap |void |newFORM |I32 floor|NULLOK OP* o|NULLOK OP* block ApdR |OP* |newFOROP |I32 flags|NULLOK OP* sv|NN OP* expr|NULLOK OP* block|NULLOK OP* cont ApdR |OP* |newGIVENOP |NN OP* cond|NN OP* block|PADOFFSET defsv_off ApdR |OP* |newLOGOP |I32 optype|I32 flags|NN OP *first|NN OP *other -pM |LOGOP* |alloc_LOGOP |I32 type|NULLOK OP *first|NULLOK OP *other +px |LOGOP* |alloc_LOGOP |I32 type|NULLOK OP *first|NULLOK OP *other ApdR |OP* |newLOOPEX |I32 type|NN OP* label ApdR |OP* |newLOOPOP |I32 flags|I32 debuggable|NULLOK OP* expr|NULLOK OP* block ApdR |OP* |newNULLLIST @@ -1165,10 +1232,10 @@ pd |CV * |newXS_len_flags|NULLOK const char *name|STRLEN len \ |NULLOK const char *const proto \ |NULLOK SV **const_svp|U32 flags pX |CV * |newXS_deffile |NN const char *name|NN XSUBADDR_t subaddr -ApM |CV * |newXS_flags |NULLOK const char *name|NN XSUBADDR_t subaddr\ +Apx |CV * |newXS_flags |NULLOK const char *name|NN XSUBADDR_t subaddr\ |NN const char *const filename \ |NULLOK const char *const proto|U32 flags -Apd |CV* |newXS |NULLOK const char *name|NN XSUBADDR_t subaddr\ +ApdU |CV* |newXS |NULLOK const char *name|NN XSUBADDR_t subaddr\ |NN const char *filename ApmdbR |AV* |newAV ApR |OP* |newAVREF |NN OP* o @@ -1183,9 +1250,9 @@ ApmdbR |HV* |newHV ApR |HV* |newHVhv |NULLOK HV *hv ApRbm |IO* |newIO ApdR |OP* |newLISTOP |I32 type|I32 flags|NULLOK OP* first|NULLOK OP* last -AMpdRn |PADNAME *|newPADNAMEouter|NN PADNAME *outer -AMpdRn |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len -AMpdRn |PADNAMELIST *|newPADNAMELIST|size_t max +AxpdRT |PADNAME *|newPADNAMEouter|NN PADNAME *outer +AxpdRT |PADNAME *|newPADNAMEpvn|NN const char *s|STRLEN len +AxpdRT |PADNAMELIST *|newPADNAMELIST|size_t max #ifdef USE_ITHREADS ApdR |OP* |newPADOP |I32 type|I32 flags|NN SV* sv #endif @@ -1236,7 +1303,7 @@ Apd |void |cv_set_call_checker_flags|NN CV *cv \ |NN Perl_call_checker ckfun \ |NN SV *ckobj|U32 ckflags Apd |void |wrap_op_checker|Optype opcode|NN Perl_check_t new_checker|NN Perl_check_t *old_checker_p -AMpd |void |wrap_keyword_plugin|NN Perl_keyword_plugin_t new_plugin|NN Perl_keyword_plugin_t *old_plugin_p +Axpd |void |wrap_keyword_plugin|NN Perl_keyword_plugin_t new_plugin|NN Perl_keyword_plugin_t *old_plugin_p ApR |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems Ap |char* |scan_vstring |NN const char *s|NN const char *const e \ |NN SV *sv @@ -1253,15 +1320,10 @@ Apd |SV* |vstringify |NN SV *vs Apd |int |vcmp |NN SV *lhv|NN SV *rhv : Used in pp_hot.c and pp_sys.c p |PerlIO*|nextargv |NN GV* gv|bool nomagicopen -#ifdef HAS_MEMMEM -AdnopP |char* |ninstr |NN const char* big|NN const char* bigend \ - |NN const char* little|NN const char* lend -#else -AdnpP |char* |ninstr |NN const char* big|NN const char* bigend \ +AdMTpP |char* |ninstr |NN const char* big|NN const char* bigend \ |NN const char* little|NN const char* lend -#endif Apd |void |op_free |NULLOK OP* arg -Mp |OP* |op_unscope |NULLOK OP* o +xp |OP* |op_unscope |NULLOK OP* o #ifdef PERL_CORE p |void |opslab_free |NN OPSLAB *slab p |void |opslab_free_nopad|NN OPSLAB *slab @@ -1275,7 +1337,7 @@ p |void |package_version|NN OP* v p |PADOFFSET|allocmy |NN const char *const name|const STRLEN len\ |const U32 flags #ifdef USE_ITHREADS -AMp |PADOFFSET|alloccopstash|NN HV *hv +Axp |PADOFFSET|alloccopstash|NN HV *hv #endif : Used in perly.y pR |OP* |oopsAV |NN OP* o @@ -1286,12 +1348,12 @@ pR |OP* |oopsHV |NN OP* o p |void |peep |NULLOK OP* o p |void |rpeep |NULLOK OP* o : Defined in doio.c, used only in pp_hot.c -dopM |PerlIO*|start_glob |NN SV *tmpglob|NN IO *io +dopx |PerlIO*|start_glob |NN SV *tmpglob|NN IO *io Ap |void |reentrant_size Ap |void |reentrant_init Ap |void |reentrant_free -Anp |void* |reentrant_retry|NN const char *f|... +ATp |void* |reentrant_retry|NN const char *f|... : "Very" special - can't use the O flag for this one: : (The rename from perl_atexit to Perl_call_atexit was in 864dbfa3ca8032ef) @@ -1309,46 +1371,46 @@ ApdO |AV* |get_av |NN const char *name|I32 flags ApdO |HV* |get_hv |NN const char *name|I32 flags ApdO |CV* |get_cv |NN const char* name|I32 flags Apd |CV* |get_cvn_flags |NN const char* name|STRLEN len|I32 flags -Ando |const char*|Perl_setlocale|const int category|NULLOK const char* locale +ATdo |const char*|Perl_setlocale|const int category|NULLOK const char* locale #if defined(HAS_NL_LANGINFO) && defined(PERL_LANGINFO_H) -Ando |const char*|Perl_langinfo|const nl_item item +ATdo |const char*|Perl_langinfo|const nl_item item #else -Ando |const char*|Perl_langinfo|const int item +ATdo |const char*|Perl_langinfo|const int item #endif -ApOM |int |init_i18nl10n |int printwarn -AbpOM |int |init_i18nl14n |int printwarn +ApOx |int |init_i18nl10n |int printwarn +AbpOx |int |init_i18nl14n |int printwarn p |char* |my_strerror |const int errnum -Xpn |void |_warn_problematic_locale +XpT |void |_warn_problematic_locale Xp |void |set_numeric_underlying Xp |void |set_numeric_standard Xp |bool |_is_in_locale_category|const bool compiling|const int category -Apdn |void |switch_to_global_locale -Apdn |bool |sync_locale -ApMn |void |thread_locale_init -ApMn |void |thread_locale_term +ApdT |void |switch_to_global_locale +ApdT |bool |sync_locale +ApxT |void |thread_locale_init +ApxT |void |thread_locale_term ApdO |void |require_pv |NN const char* pv Abpd |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 #if defined(PERL_USES_PL_PIDSTATUS) && defined(PERL_IN_UTIL_C) -s |void |pidgone |Pid_t pid|int status +S |void |pidgone |Pid_t pid|int status ... 3763 lines suppressed ... -- Perl5 Master Repository
