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

Reply via email to