Simon's new perlapi scheme, I hope I got all the pieces.
Jarkko Hietaniemi [Wed, 2 Jan 2002 23:40:08 +0000 (23:40 +0000)]
p4raw-id: //depot/perl@14029

MANIFEST
Makefile.SH
autodoc.pl [new file with mode: 0644]
embed.fnc [new file with mode: 0644]
embed.pl
pod/perlapi.pod

index a091af9..7420fc5 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,6 +1,7 @@
 apollo/netinet/in.h    Apollo DomainOS port: C header file frontend
 Artistic               The "Artistic License"
 AUTHORS                        Contact info for contributors
+autodoc.pl             Creates pod/perlintern.pod and pod/perlapi.pod
 av.c                   Array value code
 av.h                   Array value header
 beos/beos.c            BeOS port
@@ -44,6 +45,7 @@ dump.c                        Debugging output
 emacs/cperl-mode.el    An alternate perl-mode
 emacs/e2ctags.pl       etags to ctags converter
 emacs/ptags            Creates smart TAGS file
+embed.fnc              Database used by embed.pl
 embed.h                        Maps symbols to safer names
 embed.pl               Produces {embed,embedvar,proto}.h, global.sym
 embedvar.h             C namespace management
index 0ee560b..d617fc1 100644 (file)
@@ -819,6 +819,7 @@ regen_headers:      FORCE
        -perl bytecode.pl
        -perl regcomp.pl
        -perl warnings.pl
+       -perl autodoc.pl
 
 regen_pods:    FORCE
        -cd pod; $(LDLIBPTH) make regen_pods
diff --git a/autodoc.pl b/autodoc.pl
new file mode 100644 (file)
index 0000000..8b6f3b4
--- /dev/null
@@ -0,0 +1,274 @@
+#!/usr/bin/perl -w
+
+require 5.003; # keep this compatible, an old perl is all we may have before
+                # we build the new one
+
+#
+# See database of global and static function prototypes at the __END__.
+# This is used to generate prototype headers under various configurations,
+# export symbols lists for different platforms, and macros to provide an
+# implicit interpreter context argument.
+#
+
+open IN, "embed.fnc" or die $!;
+
+# walk table providing an array of components in each line to
+# subroutine, printing the result
+sub walk_table (&@) {
+    my $function = shift;
+    my $filename = shift || '-';
+    my $leader = shift;
+    my $trailer = shift;
+    my $F;
+    local *F;
+    if (ref $filename) {       # filehandle
+       $F = $filename;
+    }
+    else {
+       open F, ">$filename" or die "Can't open $filename: $!";
+       $F = \*F;
+    }
+    print $F $leader if $leader;
+    seek IN, 0, 0;             # so we may restart
+    while (<IN>) {
+       chomp;
+       next if /^:/;
+       while (s|\\$||) {
+           $_ .= <IN>;
+           chomp;
+       }
+       my @args;
+       if (/^\s*(#|$)/) {
+           @args = $_;
+       }
+       else {
+           @args = split /\s*\|\s*/, $_;
+       }
+       print $F $function->(@args);
+    }
+    print $F $trailer if $trailer;
+    close $F unless ref $filename;
+}
+
+my %apidocs;
+my %gutsdocs;
+my %docfuncs;
+
+my $curheader = "Unknown section";
+
+sub autodoc ($$) { # parse a file and extract documentation info
+    my($fh,$file) = @_;
+    my($in, $doc, $line);
+FUNC:
+    while (defined($in = <$fh>)) {
+        if ($in=~ /^=head1 (.*)/) {
+            $curheader = $1;
+            next FUNC;
+        }
+       $line++;
+       if ($in =~ /^=for\s+apidoc\s+(.*)\n/) {
+           my $proto = $1;
+           $proto = "||$proto" unless $proto =~ /\|/;
+           my($flags, $ret, $name, @args) = split /\|/, $proto;
+           my $docs = "";
+DOC:
+           while (defined($doc = <$fh>)) {
+                if ($doc =~ /^=head1 (.*)/) {
+                    $curheader = $1;
+                    next DOC;
+                }
+               $line++;
+               last DOC if $doc =~ /^=\w+/;
+               if ($doc =~ m:^\*/$:) {
+                   warn "=cut missing? $file:$line:$doc";;
+                   last DOC;
+               }
+               $docs .= $doc;
+           }
+           $docs = "\n$docs" if $docs and $docs !~ /^\n/;
+           if ($flags =~ /m/) {
+               if ($flags =~ /A/) {
+                   $apidocs{$curheader}{$name} = [$flags, $docs, $ret, $file, @args];
+               }
+               else {
+                   $gutsdocs{$curheader}{$name} = [$flags, $docs, $ret, $file, @args];
+               }
+           }
+           else {
+               $docfuncs{$name} = [$flags, $docs, $ret, $file, $curheader, @args];
+           }
+           if (defined $doc) {
+               if ($doc =~ /^=for/) {
+                   $in = $doc;
+                   redo FUNC;
+               }
+           } else {
+               warn "$file:$line:$in";
+           }
+       }
+    }
+}
+
+sub docout ($$$) { # output the docs for one function
+    my($fh, $name, $docref) = @_;
+    my($flags, $docs, $ret, $file, @args) = @$docref;
+
+    $docs .= "NOTE: this function is experimental and may change or be
+removed without notice.\n\n" if $flags =~ /x/;
+    $docs .= "NOTE: the perl_ form of this function is deprecated.\n\n"
+       if $flags =~ /p/;
+
+    print $fh "=item $name\n$docs";
+
+    if ($flags =~ /U/) { # no usage
+       # 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
+       print $fh "\t$ret\t$name";
+       print $fh "(" . join(", ", @args) . ")";
+       print $fh "\n\n";
+    }
+    print $fh "=for hackers\nFound in file $file\n\n";
+}
+
+my $file;
+for $file (glob('*.c'), glob('*.h')) {
+    open F, "< $file" or die "Cannot open $file for docs: $!\n";
+    $curheader = "Functions in file $file\n";
+    autodoc(\*F,$file);
+    close F or die "Error closing $file: $!\n";
+}
+
+unlink "pod/perlapi.pod";
+open (DOC, ">pod/perlapi.pod") or
+       die "Can't create pod/perlapi.pod: $!\n";
+
+walk_table {   # load documented functions into approriate hash
+    if (@_ > 1) {
+       my($flags, $retval, $func, @args) = @_;
+       return "" unless $flags =~ /d/;
+       $func =~ s/\t//g; $flags =~ s/p//; # clean up fields from embed.pl
+       $retval =~ s/\t//;
+       if ($flags =~ /A/) {
+           my $docref = delete $docfuncs{$func};
+           warn "no docs for $func\n" unless $docref and @$docref;
+            $docref->[0].="x" if $flags =~ /M/;
+           $apidocs{$docref->[4]}{$func} = 
+                [$docref->[0] . 'A', $docref->[1], $retval, $docref->[3], @args];
+       } else {
+           my $docref = delete $docfuncs{$func};
+           $gutsdocs{$docref->[4]}{$func} = 
+                [$docref->[0], $docref->[1], $retval, $docref->[3], @args];
+       }
+    }
+    return "";
+} \*DOC;
+
+for (sort keys %docfuncs) {
+    # Have you used a full for apidoc or just a func name?
+    # Have you used Ap instead of Am in the for apidoc?
+    warn "Unable to place $_!\n";
+}
+
+print DOC <<'_EOB_';
+=head1 NAME
+
+perlapi - autogenerated documentation for the perl public API
+
+=head1 DESCRIPTION
+
+This file contains the documentation of the perl public API generated by
+embed.pl, specifically a listing of functions, macros, flags, and variables
+that may be used by extension writers.  The interfaces of any functions that
+are not listed here are subject to change without notice.  For this reason,
+blindly using functions listed in proto.h is to be avoided when writing
+extensions.
+
+Note that all Perl API global variables must be referenced with the C<PL_>
+prefix.  Some macros are provided for compatibility with the older,
+unadorned names, but this support may be disabled in a future release.
+
+The listing is alphabetical, case insensitive.
+
+_EOB_
+
+my $key;
+for $key (sort { uc($a) cmp uc($b); } keys %apidocs) { # case insensitive sort
+    my $section = $apidocs{$key}; 
+    print DOC "\n=head1 $key\n\n=over 8\n\n";
+    for my $key (sort { uc($a) cmp uc($b); } keys %$section) {
+        docout(\*DOC, $key, $section->{$key});
+    }
+    print DOC "\n=back\n";
+}
+
+print DOC <<'_EOE_';
+
+=head1 AUTHORS
+
+Until May 1997, this document was maintained by Jeff Okamoto
+<okamoto@corp.hp.com>.  It is now maintained as part of Perl itself.
+
+With lots of help and suggestions from Dean Roehrich, Malcolm Beattie,
+Andreas Koenig, Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil
+Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer,
+Stephen McCamant, and Gurusamy Sarathy.
+
+API Listing originally by Dean Roehrich <roehrich@cray.com>.
+
+Updated to be autogenerated from comments in the source by Benjamin Stuhl.
+
+=head1 SEE ALSO
+
+perlguts(1), perlxs(1), perlxstut(1), perlintern(1)
+
+_EOE_
+
+
+close(DOC);
+
+open(GUTS, ">pod/perlintern.pod") or
+               die "Unable to create pod/perlintern.pod: $!\n";
+print GUTS <<'END';
+=head1 NAME
+
+perlintern - autogenerated documentation of purely B<internal>
+                Perl functions
+
+=head1 DESCRIPTION
+
+This file is the autogenerated documentation of functions in the
+Perl interpreter that are documented using Perl's internal documentation
+format but are not marked as part of the Perl API. In other words,
+B<they are not for use in extensions>!
+
+END
+
+for $key (sort { uc($a) cmp uc($b); } keys %gutsdocs) {
+    my $section = $gutsdocs{$key}; 
+    print GUTS "\n=head1 $key\n\n=over 8\n\n";
+    for my $key (sort { uc($a) cmp uc($b); } keys %$section) {
+        docout(\*GUTS, $key, $section->{$key});
+    }
+    print GUTS "\n=back\n";
+}
+
+print GUTS <<'END';
+
+=head1 AUTHORS
+
+The autodocumentation system was originally added to the Perl core by
+Benjamin Stuhl. Documentation is by whoever was kind enough to
+document their functions.
+
+=head1 SEE ALSO
+
+perlguts(1), perlapi(1)
+
+END
+
+close GUTS;
+
diff --git a/embed.fnc b/embed.fnc
new file mode 100644 (file)
index 0000000..9c89232
--- /dev/null
+++ b/embed.fnc
@@ -0,0 +1,1340 @@
+: Lines 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.
+: Leading and trailing whitespace will be ignored in each component.
+:
+: flags are single letters with following meanings:
+:      A               member of public API
+:      m               Implemented as a macro - no export, no proto, no #define
+:      d               function has documentation with its source
+:      s               static function, should have an S_ prefix in source
+:                              file
+:      n               has no implicit interpreter/thread context argument
+:      p               function has a Perl_ prefix
+:      f               function takes printf style format string, varargs
+:      r               function never returns
+:       o              has no compatibility macro (#define foo Perl_foo)
+:       x              not exported
+:       M              may change
+:
+: Individual flags may be separated by whitespace.
+:
+: New global functions should be added at the end for binary compatibility
+: in some configurations.
+
+START_EXTERN_C
+
+#if defined(PERL_IMPLICIT_SYS)
+Ano    |PerlInterpreter*       |perl_alloc_using \
+                               |struct IPerlMem* m|struct IPerlMem* ms \
+                               |struct IPerlMem* mp|struct IPerlEnv* e \
+                               |struct IPerlStdIO* io|struct IPerlLIO* lio \
+                               |struct IPerlDir* d|struct IPerlSock* s \
+                               |struct IPerlProc* p
+#endif
+Anod   |PerlInterpreter*       |perl_alloc
+Anod   |void   |perl_construct |PerlInterpreter* interp
+Anod   |int    |perl_destruct  |PerlInterpreter* interp
+Anod   |void   |perl_free      |PerlInterpreter* interp
+Anod   |int    |perl_run       |PerlInterpreter* interp
+Anod   |int    |perl_parse     |PerlInterpreter* interp|XSINIT_t xsinit \
+                               |int argc|char** argv|char** env
+#if defined(USE_ITHREADS)
+Anod   |PerlInterpreter*|perl_clone|PerlInterpreter* interp, UV flags
+#  if defined(PERL_IMPLICIT_SYS)
+Ano    |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \
+                               |struct IPerlMem* m|struct IPerlMem* ms \
+                               |struct IPerlMem* mp|struct IPerlEnv* e \
+                               |struct IPerlStdIO* io|struct IPerlLIO* lio \
+                               |struct IPerlDir* d|struct IPerlSock* s \
+                               |struct IPerlProc* p
+#  endif
+#endif
+
+Anop   |Malloc_t|malloc        |MEM_SIZE nbytes
+Anop   |Malloc_t|calloc        |MEM_SIZE elements|MEM_SIZE size
+Anop   |Malloc_t|realloc       |Malloc_t where|MEM_SIZE nbytes
+Anop   |Free_t |mfree          |Malloc_t where
+#if defined(MYMALLOC)
+np     |MEM_SIZE|malloced_size |void *p
+#endif
+
+Anp    |void*  |get_context
+Anp    |void   |set_context    |void *thx
+
+END_EXTERN_C
+
+/* functions with flag 'n' should come before here */
+START_EXTERN_C
+#  include "pp_proto.h"
+Ap     |SV*    |amagic_call    |SV* left|SV* right|int method|int dir
+Ap     |bool   |Gv_AMupdate    |HV* stash
+Ap     |CV*    |gv_handler     |HV* stash|I32 id
+p      |OP*    |append_elem    |I32 optype|OP* head|OP* tail
+p      |OP*    |append_list    |I32 optype|LISTOP* first|LISTOP* last
+p      |I32    |apply          |I32 type|SV** mark|SV** sp
+ApM    |void   |apply_attrs_string|char *stashpv|CV *cv|char *attrstr|STRLEN len
+Ap     |SV*    |avhv_delete_ent|AV *ar|SV* keysv|I32 flags|U32 hash
+Ap     |bool   |avhv_exists_ent|AV *ar|SV* keysv|U32 hash
+Ap     |SV**   |avhv_fetch_ent |AV *ar|SV* keysv|I32 lval|U32 hash
+Ap     |SV**   |avhv_store_ent |AV *ar|SV* keysv|SV* val|U32 hash
+Ap     |HE*    |avhv_iternext  |AV *ar
+Ap     |SV*    |avhv_iterval   |AV *ar|HE* entry
+Ap     |HV*    |avhv_keys      |AV *ar
+Apd    |void   |av_clear       |AV* ar
+Apd    |SV*    |av_delete      |AV* ar|I32 key|I32 flags
+Apd    |bool   |av_exists      |AV* ar|I32 key
+Apd    |void   |av_extend      |AV* ar|I32 key
+p      |AV*    |av_fake        |I32 size|SV** svp
+Apd    |SV**   |av_fetch       |AV* ar|I32 key|I32 lval
+Apd    |void   |av_fill        |AV* ar|I32 fill
+Apd    |I32    |av_len         |AV* ar
+Apd    |AV*    |av_make        |I32 size|SV** svp
+Apd    |SV*    |av_pop         |AV* ar
+Apd    |void   |av_push        |AV* ar|SV* val
+p      |void   |av_reify       |AV* ar
+Apd    |SV*    |av_shift       |AV* ar
+Apd    |SV**   |av_store       |AV* ar|I32 key|SV* val
+Apd    |void   |av_undef       |AV* ar
+Apd    |void   |av_unshift     |AV* ar|I32 num
+p      |OP*    |bind_match     |I32 type|OP* left|OP* pat
+p      |OP*    |block_end      |I32 floor|OP* seq
+Ap     |I32    |block_gimme
+p      |int    |block_start    |int full
+p      |void   |boot_core_UNIVERSAL
+p      |void   |boot_core_PerlIO
+Ap     |void   |call_list      |I32 oldscope|AV* av_list
+p      |bool   |cando          |Mode_t mode|Uid_t effective|Stat_t* statbufp
+Ap     |U32    |cast_ulong     |NV f
+Ap     |I32    |cast_i32       |NV f
+Ap     |IV     |cast_iv        |NV f
+Ap     |UV     |cast_uv        |NV f
+#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
+Ap     |I32    |my_chsize      |int fd|Off_t length
+#endif
+#if defined(USE_5005THREADS)
+Ap     |MAGIC* |condpair_magic |SV *sv
+#endif
+p      |OP*    |convert        |I32 optype|I32 flags|OP* o
+Afprd  |void   |croak          |const char* pat|...
+Apr    |void   |vcroak         |const char* pat|va_list* args
+#if defined(PERL_IMPLICIT_CONTEXT)
+Afnrp  |void   |croak_nocontext|const char* pat|...
+Afnp   |OP*    |die_nocontext  |const char* pat|...
+Afnp   |void   |deb_nocontext  |const char* pat|...
+Afnp   |char*  |form_nocontext |const char* pat|...
+Anp    |void   |load_module_nocontext|U32 flags|SV* name|SV* ver|...
+Afnp   |SV*    |mess_nocontext |const char* pat|...
+Afnp   |void   |warn_nocontext |const char* pat|...
+Afnp   |void   |warner_nocontext|U32 err|const char* pat|...
+Afnp   |SV*    |newSVpvf_nocontext|const char* pat|...
+Afnp   |void   |sv_catpvf_nocontext|SV* sv|const char* pat|...
+Afnp   |void   |sv_setpvf_nocontext|SV* sv|const char* pat|...
+Afnp   |void   |sv_catpvf_mg_nocontext|SV* sv|const char* pat|...
+Afnp   |void   |sv_setpvf_mg_nocontext|SV* sv|const char* pat|...
+Afnp   |int    |fprintf_nocontext|PerlIO* stream|const char* fmt|...
+Afnp   |int    |printf_nocontext|const char* fmt|...
+#endif
+p      |void   |cv_ckproto     |CV* cv|GV* gv|char* p
+p      |CV*    |cv_clone       |CV* proto
+Apd    |SV*    |cv_const_sv    |CV* cv
+p      |SV*    |op_const_sv    |OP* o|CV* cv
+Ap     |void   |cv_undef       |CV* cv
+Ap     |void   |cx_dump        |PERL_CONTEXT* cs
+Ap     |SV*    |filter_add     |filter_t funcp|SV* datasv
+Ap     |void   |filter_del     |filter_t funcp
+Ap     |I32    |filter_read    |int idx|SV* buffer|int maxlen
+Ap     |char** |get_op_descs
+Ap     |char** |get_op_names
+p      |char*  |get_no_modify
+p      |U32*   |get_opargs
+Ap     |PPADDR_t*|get_ppaddr
+p      |I32    |cxinc
+Afp    |void   |deb            |const char* pat|...
+Ap     |void   |vdeb           |const char* pat|va_list* args
+Ap     |void   |debprofdump
+Ap     |I32    |debop          |OP* o
+Ap     |I32    |debstack
+Ap     |I32    |debstackptrs
+Ap     |char*  |delimcpy       |char* to|char* toend|char* from \
+                               |char* fromend|int delim|I32* retlen
+p      |void   |deprecate      |char* s
+Afp    |OP*    |die            |const char* pat|...
+p      |OP*    |vdie           |const char* pat|va_list* args
+p      |OP*    |die_where      |char* message|STRLEN msglen
+Ap     |void   |dounwind       |I32 cxix
+p      |bool   |do_aexec       |SV* really|SV** mark|SV** sp
+p      |bool   |do_aexec5      |SV* really|SV** mark|SV** sp|int fd|int flag
+Ap     |int    |do_binmode     |PerlIO *fp|int iotype|int mode
+p      |void   |do_chop        |SV* asv|SV* sv
+Ap     |bool   |do_close       |GV* gv|bool not_implicit
+p      |bool   |do_eof         |GV* gv
+p      |bool   |do_exec        |char* cmd
+#if !defined(WIN32)
+p      |bool   |do_exec3       |char* cmd|int fd|int flag
+#endif
+p      |void   |do_execfree
+#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
+p      |I32    |do_ipcctl      |I32 optype|SV** mark|SV** sp
+p      |I32    |do_ipcget      |I32 optype|SV** mark|SV** sp
+p      |I32    |do_msgrcv      |SV** mark|SV** sp
+p      |I32    |do_msgsnd      |SV** mark|SV** sp
+p      |I32    |do_semop       |SV** mark|SV** sp
+p      |I32    |do_shmio       |I32 optype|SV** mark|SV** sp
+#endif
+Ap     |void   |do_join        |SV* sv|SV* del|SV** mark|SV** sp
+p      |OP*    |do_kv
+Ap     |bool   |do_open        |GV* gv|char* name|I32 len|int as_raw \
+                               |int rawmode|int rawperm|PerlIO* supplied_fp
+Ap     |bool   |do_open9       |GV *gv|char *name|I32 len|int as_raw \
+                               |int rawmode|int rawperm|PerlIO *supplied_fp \
+                               |SV *svs|I32 num
+Ap     |bool   |do_openn       |GV *gv|char *name|I32 len|int as_raw \
+                               |int rawmode|int rawperm|PerlIO *supplied_fp \
+                               |SV **svp|I32 num
+p      |void   |do_pipe        |SV* sv|GV* rgv|GV* wgv
+p      |bool   |do_print       |SV* sv|PerlIO* fp
+p      |OP*    |do_readline
+p      |I32    |do_chomp       |SV* sv
+p      |bool   |do_seek        |GV* gv|Off_t pos|int whence
+Ap     |void   |do_sprintf     |SV* sv|I32 len|SV** sarg
+p      |Off_t  |do_sysseek     |GV* gv|Off_t pos|int whence
+p      |Off_t  |do_tell        |GV* gv
+p      |I32    |do_trans       |SV* sv
+p      |UV     |do_vecget      |SV* sv|I32 offset|I32 size
+p      |void   |do_vecset      |SV* sv
+p      |void   |do_vop         |I32 optype|SV* sv|SV* left|SV* right
+p      |OP*    |dofile         |OP* term
+Ap     |I32    |dowantarray
+Ap     |void   |dump_all
+Ap     |void   |dump_eval
+#if defined(DUMP_FDS)
+Ap     |void   |dump_fds       |char* s
+#endif
+Ap     |void   |dump_form      |GV* gv
+Ap     |void   |gv_dump        |GV* gv
+Ap     |void   |op_dump        |OP* arg
+Ap     |void   |pmop_dump      |PMOP* pm
+Ap     |void   |dump_packsubs  |HV* stash
+Ap     |void   |dump_sub       |GV* gv
+Apd    |void   |fbm_compile    |SV* sv|U32 flags
+Apd    |char*  |fbm_instr      |unsigned char* big|unsigned char* bigend \
+                               |SV* littlesv|U32 flags
+p      |char*  |find_script    |char *scriptname|bool dosearch \
+                               |char **search_ext|I32 flags
+#if defined(USE_5005THREADS)
+p      |PADOFFSET|find_threadsv|const char *name
+#endif
+p      |OP*    |force_list     |OP* arg
+p      |OP*    |fold_constants |OP* arg
+Afpd   |char*  |form           |const char* pat|...
+Ap     |char*  |vform          |const char* pat|va_list* args
+Ap     |void   |free_tmps
+p      |OP*    |gen_constant_list|OP* o
+#if !defined(HAS_GETENV_LEN)
+p      |char*  |getenv_len     |const char* key|unsigned long *len
+#endif
+Ap     |void   |gp_free        |GV* gv
+Ap     |GP*    |gp_ref         |GP* gp
+Ap     |GV*    |gv_AVadd       |GV* gv
+Ap     |GV*    |gv_HVadd       |GV* gv
+Ap     |GV*    |gv_IOadd       |GV* gv
+Ap     |GV*    |gv_autoload4   |HV* stash|const char* name|STRLEN len \
+                               |I32 method
+Ap     |void   |gv_check       |HV* stash
+Ap     |void   |gv_efullname   |SV* sv|GV* gv
+Ap     |void   |gv_efullname3  |SV* sv|GV* gv|const char* prefix
+Ap     |void   |gv_efullname4  |SV* sv|GV* gv|const char* prefix|bool keepmain
+Ap     |GV*    |gv_fetchfile   |const char* name
+Apd    |GV*    |gv_fetchmeth   |HV* stash|const char* name|STRLEN len \
+                               |I32 level
+Apd    |GV*    |gv_fetchmethod |HV* stash|const char* name
+Apd    |GV*    |gv_fetchmethod_autoload|HV* stash|const char* name \
+                               |I32 autoload
+Ap     |GV*    |gv_fetchpv     |const char* name|I32 add|I32 sv_type
+Ap     |void   |gv_fullname    |SV* sv|GV* gv
+Ap     |void   |gv_fullname3   |SV* sv|GV* gv|const char* prefix
+Ap     |void   |gv_fullname4   |SV* sv|GV* gv|const char* prefix|bool keepmain
+Ap     |void   |gv_init        |GV* gv|HV* stash|const char* name \
+                               |STRLEN len|int multi
+Apd    |HV*    |gv_stashpv     |const char* name|I32 create
+Ap     |HV*    |gv_stashpvn    |const char* name|U32 namelen|I32 create
+Apd    |HV*    |gv_stashsv     |SV* sv|I32 create
+Apd    |void   |hv_clear       |HV* tb
+Ap     |void   |hv_delayfree_ent|HV* hv|HE* entry
+Apd    |SV*    |hv_delete      |HV* tb|const char* key|I32 klen|I32 flags
+Apd    |SV*    |hv_delete_ent  |HV* tb|SV* key|I32 flags|U32 hash
+Apd    |bool   |hv_exists      |HV* tb|const char* key|I32 klen
+Apd    |bool   |hv_exists_ent  |HV* tb|SV* key|U32 hash
+Apd    |SV**   |hv_fetch       |HV* tb|const char* key|I32 klen|I32 lval
+Apd    |HE*    |hv_fetch_ent   |HV* tb|SV* key|I32 lval|U32 hash
+Ap     |void   |hv_free_ent    |HV* hv|HE* entry
+Apd    |I32    |hv_iterinit    |HV* tb
+Apd    |char*  |hv_iterkey     |HE* entry|I32* retlen
+Apd    |SV*    |hv_iterkeysv   |HE* entry
+Apd    |HE*    |hv_iternext    |HV* tb
+Apd    |SV*    |hv_iternextsv  |HV* hv|char** key|I32* retlen
+Apd    |SV*    |hv_iterval     |HV* tb|HE* entry
+Ap     |void   |hv_ksplit      |HV* hv|IV newmax
+Apd    |void   |hv_magic       |HV* hv|GV* gv|int how
+Apd    |SV**   |hv_store       |HV* tb|const char* key|I32 klen|SV* val \
+                               |U32 hash
+Apd    |HE*    |hv_store_ent   |HV* tb|SV* key|SV* val|U32 hash
+Apd    |void   |hv_undef       |HV* tb
+Ap     |I32    |ibcmp          |const char* a|const char* b|I32 len
+Ap     |I32    |ibcmp_locale   |const char* a|const char* b|I32 len
+Apd    |I32    |ibcmp_utf8     |const char* a|char **pe1|UV l1|bool u1|const char* b|char **pe2|UV l2|bool u2
+p      |bool   |ingroup        |Gid_t testgid|Uid_t effective
+p      |void   |init_argv_symbols|int|char **
+p      |void   |init_debugger
+Ap     |void   |init_stacks
+Ap     |void   |init_tm        |struct tm *ptm
+p      |U32    |intro_my
+Ap     |char*  |instr          |const char* big|const char* little
+p      |bool   |io_close       |IO* io|bool not_implicit
+p      |OP*    |invert         |OP* cmd
+dp     |bool   |is_gv_magical  |char *name|STRLEN len|U32 flags
+Ap     |I32    |is_lvalue_sub
+Ap     |U32    |to_uni_upper_lc|U32 c
+Ap     |U32    |to_uni_title_lc|U32 c
+Ap     |U32    |to_uni_lower_lc|U32 c
+Ap     |bool   |is_uni_alnum   |UV c
+Ap     |bool   |is_uni_alnumc  |UV c
+Ap     |bool   |is_uni_idfirst |UV c
+Ap     |bool   |is_uni_alpha   |UV c
+Ap     |bool   |is_uni_ascii   |UV c
+Ap     |bool   |is_uni_space   |UV c
+Ap     |bool   |is_uni_cntrl   |UV c
+Ap     |bool   |is_uni_graph   |UV c
+Ap     |bool   |is_uni_digit   |UV c
+Ap     |bool   |is_uni_upper   |UV c
+Ap     |bool   |is_uni_lower   |UV c
+Ap     |bool   |is_uni_print   |UV c
+Ap     |bool   |is_uni_punct   |UV c
+Ap     |bool   |is_uni_xdigit  |UV c
+Ap     |UV     |to_uni_upper   |UV c|U8 *p|STRLEN *lenp
+Ap     |UV     |to_uni_title   |UV c|U8 *p|STRLEN *lenp
+Ap     |UV     |to_uni_lower   |UV c|U8 *p|STRLEN *lenp
+Ap     |UV     |to_uni_fold    |UV c|U8 *p|STRLEN *lenp
+Ap     |bool   |is_uni_alnum_lc|UV c
+Ap     |bool   |is_uni_alnumc_lc|UV c
+Ap     |bool   |is_uni_idfirst_lc|UV c
+Ap     |bool   |is_uni_alpha_lc|UV c
+Ap     |bool   |is_uni_ascii_lc|UV c
+Ap     |bool   |is_uni_space_lc|UV c
+Ap     |bool   |is_uni_cntrl_lc|UV c
+Ap     |bool   |is_uni_graph_lc|UV c
+Ap     |bool   |is_uni_digit_lc|UV c
+Ap     |bool   |is_uni_upper_lc|UV c
+Ap     |bool   |is_uni_lower_lc|UV c
+Ap     |bool   |is_uni_print_lc|UV c
+Ap     |bool   |is_uni_punct_lc|UV c
+Ap     |bool   |is_uni_xdigit_lc|UV c
+Apd    |STRLEN |is_utf8_char   |U8 *p
+Apd    |bool   |is_utf8_string |U8 *s|STRLEN len
+Ap     |bool   |is_utf8_alnum  |U8 *p
+Ap     |bool   |is_utf8_alnumc |U8 *p
+Ap     |bool   |is_utf8_idfirst|U8 *p
+Ap     |bool   |is_utf8_alpha  |U8 *p
+Ap     |bool   |is_utf8_ascii  |U8 *p
+Ap     |bool   |is_utf8_space  |U8 *p
+Ap     |bool   |is_utf8_cntrl  |U8 *p
+Ap     |bool   |is_utf8_digit  |U8 *p
+Ap     |bool   |is_utf8_graph  |U8 *p
+Ap     |bool   |is_utf8_upper  |U8 *p
+Ap     |bool   |is_utf8_lower  |U8 *p
+Ap     |bool   |is_utf8_print  |U8 *p
+Ap     |bool   |is_utf8_punct  |U8 *p
+Ap     |bool   |is_utf8_xdigit |U8 *p
+Ap     |bool   |is_utf8_mark   |U8 *p
+p      |OP*    |jmaybe         |OP* arg
+p      |I32    |keyword        |char* d|I32 len
+Ap     |void   |leave_scope    |I32 base
+p      |void   |lex_end
+p      |void   |lex_start      |SV* line
+Ap |void   |op_null    |OP* o
+p      |void   |op_clear       |OP* o
+p      |OP*    |linklist       |OP* o
+p      |OP*    |list           |OP* o
+p      |OP*    |listkids       |OP* o
+Apd    |void   |load_module|U32 flags|SV* name|SV* ver|...
+Ap     |void   |vload_module|U32 flags|SV* name|SV* ver|va_list* args
+p      |OP*    |localize       |OP* arg|I32 lexical
+Apd    |I32    |looks_like_number|SV* sv
+Apd    |UV     |grok_bin       |char* start|STRLEN* len|I32* flags|NV *result
+Apd    |UV     |grok_hex       |char* start|STRLEN* len|I32* flags|NV *result
+Apd    |int    |grok_number    |const char *pv|STRLEN len|UV *valuep
+Apd    |bool   |grok_numeric_radix|const char **sp|const char *send
+Apd    |UV     |grok_oct       |char* start|STRLEN* len|I32* flags|NV *result
+p      |int    |magic_clearenv |SV* sv|MAGIC* mg
+p      |int    |magic_clear_all_env|SV* sv|MAGIC* mg
+p      |int    |magic_clearpack|SV* sv|MAGIC* mg
+p      |int    |magic_clearsig |SV* sv|MAGIC* mg
+p      |int    |magic_existspack|SV* sv|MAGIC* mg
+p      |int    |magic_freeregexp|SV* sv|MAGIC* mg
+p      |int    |magic_freeovrld|SV* sv|MAGIC* mg
+p      |int    |magic_get      |SV* sv|MAGIC* mg
+p      |int    |magic_getarylen|SV* sv|MAGIC* mg
+p      |int    |magic_getdefelem|SV* sv|MAGIC* mg
+p      |int    |magic_getglob  |SV* sv|MAGIC* mg
+p      |int    |magic_getnkeys |SV* sv|MAGIC* mg
+p      |int    |magic_getpack  |SV* sv|MAGIC* mg
+p      |int    |magic_getpos   |SV* sv|MAGIC* mg
+p      |int    |magic_getsig   |SV* sv|MAGIC* mg
+p      |int    |magic_getsubstr|SV* sv|MAGIC* mg
+p      |int    |magic_gettaint |SV* sv|MAGIC* mg
+p      |int    |magic_getuvar  |SV* sv|MAGIC* mg
+p      |int    |magic_getvec   |SV* sv|MAGIC* mg
+p      |U32    |magic_len      |SV* sv|MAGIC* mg
+#if defined(USE_5005THREADS)
+p      |int    |magic_mutexfree|SV* sv|MAGIC* mg
+#endif
+p      |int    |magic_nextpack |SV* sv|MAGIC* mg|SV* key
+p      |U32    |magic_regdata_cnt|SV* sv|MAGIC* mg
+p      |int    |magic_regdatum_get|SV* sv|MAGIC* mg
+p      |int    |magic_regdatum_set|SV* sv|MAGIC* mg
+p      |int    |magic_set      |SV* sv|MAGIC* mg
+p      |int    |magic_setamagic|SV* sv|MAGIC* mg
+p      |int    |magic_setarylen|SV* sv|MAGIC* mg
+p      |int    |magic_setbm    |SV* sv|MAGIC* mg
+p      |int    |magic_setdbline|SV* sv|MAGIC* mg
+#if defined(USE_LOCALE_COLLATE)
+p      |int    |magic_setcollxfrm|SV* sv|MAGIC* mg
+#endif
+p      |int    |magic_setdefelem|SV* sv|MAGIC* mg
+p      |int    |magic_setenv   |SV* sv|MAGIC* mg
+p      |int    |magic_setfm    |SV* sv|MAGIC* mg
+p      |int    |magic_setisa   |SV* sv|MAGIC* mg
+p      |int    |magic_setglob  |SV* sv|MAGIC* mg
+p      |int    |magic_setmglob |SV* sv|MAGIC* mg
+p      |int    |magic_setnkeys |SV* sv|MAGIC* mg
+p      |int    |magic_setpack  |SV* sv|MAGIC* mg
+p      |int    |magic_setpos   |SV* sv|MAGIC* mg
+p      |int    |magic_setsig   |SV* sv|MAGIC* mg
+p      |int    |magic_setsubstr|SV* sv|MAGIC* mg
+p      |int    |magic_settaint |SV* sv|MAGIC* mg
+p      |int    |magic_setuvar  |SV* sv|MAGIC* mg
+p      |int    |magic_setvec   |SV* sv|MAGIC* mg
+p      |int    |magic_set_all_env|SV* sv|MAGIC* mg
+p      |U32    |magic_sizepack |SV* sv|MAGIC* mg
+p      |int    |magic_wipepack |SV* sv|MAGIC* mg
+p      |void   |magicname      |char* sym|char* name|I32 namlen
+Ap     |void   |markstack_grow
+#if defined(USE_LOCALE_COLLATE)
+p      |char*  |mem_collxfrm   |const char* s|STRLEN len|STRLEN* xlen
+#endif
+Afp    |SV*    |mess           |const char* pat|...
+Ap     |SV*    |vmess          |const char* pat|va_list* args
+p      |void   |qerror         |SV* err
+Apd     |void   |sortsv         |SV ** array|size_t num_elts|SVCOMPARE_t cmp
+Apd    |int    |mg_clear       |SV* sv
+Apd    |int    |mg_copy        |SV* sv|SV* nsv|const char* key|I32 klen
+Apd    |MAGIC* |mg_find        |SV* sv|int type
+Apd    |int    |mg_free        |SV* sv
+Apd    |int    |mg_get         |SV* sv
+Apd    |U32    |mg_length      |SV* sv
+Apd    |void   |mg_magical     |SV* sv
+Apd    |int    |mg_set         |SV* sv
+Ap     |I32    |mg_size        |SV* sv
+Ap     |void   |mini_mktime    |struct tm *pm
+p      |OP*    |mod            |OP* o|I32 type
+p      |int    |mode_from_discipline|SV* discp
+Ap     |char*  |moreswitches   |char* s
+p      |OP*    |my             |OP* o
+Ap     |NV     |my_atof        |const char *s
+#if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY))
+Anp    |char*  |my_bcopy       |const char* from|char* to|I32 len
+#endif
+#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
+Anp    |char*  |my_bzero       |char* loc|I32 len
+#endif
+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
+Ap     |I32    |my_lstat
+#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
+Anp    |I32    |my_memcmp      |const char* s1|const char* s2|I32 len
+#endif
+#if !defined(HAS_MEMSET)
+Anp    |void*  |my_memset      |char* loc|I32 ch|I32 len
+#endif
+Ap     |I32    |my_pclose      |PerlIO* ptr
+Ap     |PerlIO*|my_popen       |char* cmd|char* mode
+Ap     |PerlIO*|my_popen_list  |char* mode|int n|SV ** args
+Ap     |void   |my_setenv      |char* nam|char* val
+Ap     |I32    |my_stat
+Ap     |char * |my_strftime    |char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
+#if defined(MYSWAP)
+Ap     |short  |my_swap        |short s
+Ap     |long   |my_htonl       |long l
+Ap     |long   |my_ntohl       |long l
+#endif
+p      |void   |my_unexec
+Ap     |OP*    |newANONLIST    |OP* o
+Ap     |OP*    |newANONHASH    |OP* o
+Ap     |OP*    |newANONSUB     |I32 floor|OP* proto|OP* block
+Ap     |OP*    |newASSIGNOP    |I32 flags|OP* left|I32 optype|OP* right
+Ap     |OP*    |newCONDOP      |I32 flags|OP* expr|OP* trueop|OP* falseop
+Apd    |CV*    |newCONSTSUB    |HV* stash|char* name|SV* sv
+Ap     |void   |newFORM        |I32 floor|OP* o|OP* block
+Ap     |OP*    |newFOROP       |I32 flags|char* label|line_t forline \
+                               |OP* sclr|OP* expr|OP*block|OP*cont
+Ap     |OP*    |newLOGOP       |I32 optype|I32 flags|OP* left|OP* right
+Ap     |OP*    |newLOOPEX      |I32 type|OP* label
+Ap     |OP*    |newLOOPOP      |I32 flags|I32 debuggable|OP* expr|OP* block
+Ap     |OP*    |newNULLLIST
+Ap     |OP*    |newOP          |I32 optype|I32 flags
+Ap     |void   |newPROG        |OP* o
+Ap     |OP*    |newRANGE       |I32 flags|OP* left|OP* right
+Ap     |OP*    |newSLICEOP     |I32 flags|OP* subscript|OP* listop
+Ap     |OP*    |newSTATEOP     |I32 flags|char* label|OP* o
+Ap     |CV*    |newSUB         |I32 floor|OP* o|OP* proto|OP* block
+Apd    |CV*    |newXS          |char* name|XSUBADDR_t f|char* filename
+Apd    |AV*    |newAV
+Ap     |OP*    |newAVREF       |OP* o
+Ap     |OP*    |newBINOP       |I32 type|I32 flags|OP* first|OP* last
+Ap     |OP*    |newCVREF       |I32 flags|OP* o
+Ap     |OP*    |newGVOP        |I32 type|I32 flags|GV* gv
+Ap     |GV*    |newGVgen       |char* pack
+Ap     |OP*    |newGVREF       |I32 type|OP* o
+Ap     |OP*    |newHVREF       |OP* o
+Apd    |HV*    |newHV
+Ap     |HV*    |newHVhv        |HV* hv
+Ap     |IO*    |newIO
+Ap     |OP*    |newLISTOP      |I32 type|I32 flags|OP* first|OP* last
+Ap     |OP*    |newPADOP       |I32 type|I32 flags|SV* sv
+Ap     |OP*    |newPMOP        |I32 type|I32 flags
+Ap     |OP*    |newPVOP        |I32 type|I32 flags|char* pv
+Ap     |SV*    |newRV          |SV* pref
+Apd    |SV*    |newRV_noinc    |SV *sv
+Apd    |SV*    |newSV          |STRLEN len
+Ap     |OP*    |newSVREF       |OP* o
+Ap     |OP*    |newSVOP        |I32 type|I32 flags|SV* sv
+Apd    |SV*    |newSViv        |IV i
+Apd    |SV*    |newSVuv        |UV u
+Apd    |SV*    |newSVnv        |NV n
+Apd    |SV*    |newSVpv        |const char* s|STRLEN len
+Apd    |SV*    |newSVpvn       |const char* s|STRLEN len
+Apd    |SV*    |newSVpvn_share |const char* s|I32 len|U32 hash
+Afpd   |SV*    |newSVpvf       |const char* pat|...
+Ap     |SV*    |vnewSVpvf      |const char* pat|va_list* args
+Apd    |SV*    |newSVrv        |SV* rv|const char* classname
+Apd    |SV*    |newSVsv        |SV* old
+Ap     |OP*    |newUNOP        |I32 type|I32 flags|OP* first
+Ap     |OP*    |newWHILEOP     |I32 flags|I32 debuggable|LOOP* loop \
+                               |I32 whileline|OP* expr|OP* block|OP* cont
+
+Ap     |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
+Apd    |char*  |new_vstring    |char *vstr|SV *sv
+p      |PerlIO*|nextargv       |GV* gv
+Ap     |char*  |ninstr         |const char* big|const char* bigend \
+                               |const char* little|const char* lend
+p      |OP*    |oopsCV         |OP* o
+Ap     |void   |op_free        |OP* arg
+p      |void   |package        |OP* o
+p      |PADOFFSET|pad_alloc    |I32 optype|U32 tmptype
+p      |PADOFFSET|pad_allocmy  |char* name
+p      |PADOFFSET|pad_findmy   |char* name
+p      |OP*    |oopsAV         |OP* o
+p      |OP*    |oopsHV         |OP* o
+p      |void   |pad_leavemy    |I32 fill
+Ap     |SV*    |pad_sv         |PADOFFSET po
+p      |void   |pad_free       |PADOFFSET po
+p      |void   |pad_reset
+p      |void   |pad_swipe      |PADOFFSET po
+p      |void   |peep           |OP* o
+dopM   |PerlIO*|start_glob     |SV* pattern|IO *io
+#if defined(USE_5005THREADS)
+Ap     |struct perl_thread*    |new_struct_thread|struct perl_thread *t
+#endif
+Ap     |void   |call_atexit    |ATEXIT_t fn|void *ptr
+Apd    |I32    |call_argv      |const char* sub_name|I32 flags|char** argv
+Apd    |I32    |call_method    |const char* methname|I32 flags
+Apd    |I32    |call_pv        |const char* sub_name|I32 flags
+Apd    |I32    |call_sv        |SV* sv|I32 flags
+p      |void   |despatch_signals
+Apd    |SV*    |eval_pv        |const char* p|I32 croak_on_error
+Apd    |I32    |eval_sv        |SV* sv|I32 flags
+Apd    |SV*    |get_sv         |const char* name|I32 create
+Apd    |AV*    |get_av         |const char* name|I32 create
+Apd    |HV*    |get_hv         |const char* name|I32 create
+Apd    |CV*    |get_cv         |const char* name|I32 create
+Ap     |int    |init_i18nl10n  |int printwarn
+Ap     |int    |init_i18nl14n  |int printwarn
+Ap     |void   |new_collate    |char* newcoll
+Ap     |void   |new_ctype      |char* newctype
+Ap     |void   |new_numeric    |char* newcoll
+Ap     |void   |set_numeric_local
+Ap     |void   |set_numeric_radix
+Ap     |void   |set_numeric_standard
+Apd    |void   |require_pv     |const char* pv
+p      |void   |pidgone        |Pid_t pid|int status
+Ap     |void   |pmflag         |U16* pmfl|int ch
+p      |OP*    |pmruntime      |OP* pm|OP* expr|OP* repl
+p      |OP*    |pmtrans        |OP* o|OP* expr|OP* repl
+p      |OP*    |pop_return
+Ap     |void   |pop_scope
+p      |OP*    |prepend_elem   |I32 optype|OP* head|OP* tail
+p      |void   |push_return    |OP* o
+Ap     |void   |push_scope
+p      |OP*    |ref            |OP* o|I32 type
+p      |OP*    |refkids        |OP* o|I32 type
+Ap     |void   |regdump        |regexp* r
+Ap     |SV*    |regclass_swash |struct regnode *n|bool doinit|SV **initsvp
+Ap     |I32    |pregexec       |regexp* prog|char* stringarg \
+                               |char* strend|char* strbeg|I32 minend \
+                               |SV* screamer|U32 nosave
+Ap     |void   |pregfree       |struct regexp* r
+Ap     |regexp*|pregcomp       |char* exp|char* xend|PMOP* pm
+Ap     |char*  |re_intuit_start|regexp* prog|SV* sv|char* strpos \
+                               |char* strend|U32 flags \
+                               |struct re_scream_pos_data_s *data
+Ap     |SV*    |re_intuit_string|regexp* prog
+Ap     |I32    |regexec_flags  |regexp* prog|char* stringarg \
+                               |char* strend|char* strbeg|I32 minend \
+                               |SV* screamer|void* data|U32 flags
+Ap     |regnode*|regnext       |regnode* p
+p      |void   |regprop        |SV* sv|regnode* o
+Ap     |void   |repeatcpy      |char* to|const char* from|I32 len|I32 count
+Ap     |char*  |rninstr        |const char* big|const char* bigend \
+                               |const char* little|const char* lend
+Ap     |Sighandler_t|rsignal   |int i|Sighandler_t t
+p      |int    |rsignal_restore|int i|Sigsave_t* t
+p      |int    |rsignal_save   |int i|Sighandler_t t1|Sigsave_t* t2
+Ap     |Sighandler_t|rsignal_state|int i
+p      |void   |rxres_free     |void** rsp
+p      |void   |rxres_restore  |void** rsp|REGEXP* prx
+p      |void   |rxres_save     |void** rsp|REGEXP* prx
+#if !defined(HAS_RENAME)
+p      |I32    |same_dirent    |char* a|char* b
+#endif
+Apd    |char*  |savepv         |const char* sv
+Apd    |char*  |savepvn        |const char* sv|I32 len
+Ap     |void   |savestack_grow
+Ap     |void   |save_aelem     |AV* av|I32 idx|SV **sptr
+Ap     |I32    |save_alloc     |I32 size|I32 pad
+Ap     |void   |save_aptr      |AV** aptr
+Ap     |AV*    |save_ary       |GV* gv
+Ap     |void   |save_clearsv   |SV** svp
+Ap     |void   |save_delete    |HV* hv|char* key|I32 klen
+Ap     |void   |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|void* p
+Ap     |void   |save_destructor_x|DESTRUCTORFUNC_t f|void* p
+Ap     |void   |save_freesv    |SV* sv
+p      |void   |save_freeop    |OP* o
+Ap     |void   |save_freepv    |char* pv
+Ap     |void   |save_generic_svref|SV** sptr
+Ap     |void   |save_generic_pvref|char** str
+Ap     |void   |save_gp        |GV* gv|I32 empty
+Ap     |HV*    |save_hash      |GV* gv
+Ap     |void   |save_helem     |HV* hv|SV *key|SV **sptr
+Ap     |void   |save_hints
+Ap     |void   |save_hptr      |HV** hptr
+Ap     |void   |save_I16       |I16* intp
+Ap     |void   |save_I32       |I32* intp
+Ap     |void   |save_I8        |I8* bytep
+Ap     |void   |save_int       |int* intp
+Ap     |void   |save_item      |SV* item
+Ap     |void   |save_iv        |IV* iv
+Ap     |void   |save_list      |SV** sarg|I32 maxsarg
+Ap     |void   |save_long      |long* longp
+Ap     |void   |save_mortalizesv|SV* sv
+Ap     |void   |save_nogv      |GV* gv
+p      |void   |save_op
+Ap     |SV*    |save_scalar    |GV* gv
+Ap     |void   |save_pptr      |char** pptr
+Ap     |void   |save_vptr      |void* pptr
+Ap     |void   |save_re_context
+Ap     |void   |save_padsv     |PADOFFSET off
+Ap     |void   |save_sptr      |SV** sptr
+Ap     |SV*    |save_svref     |SV** sptr
+Ap     |SV**   |save_threadsv  |PADOFFSET i
+p      |OP*    |sawparens      |OP* o
+p      |OP*    |scalar         |OP* o
+p      |OP*    |scalarkids     |OP* o
+p      |OP*    |scalarseq      |OP* o
+p      |OP*    |scalarvoid     |OP* o
+Apd    |NV     |scan_bin       |char* start|STRLEN len|STRLEN* retlen
+Apd    |NV     |scan_hex       |char* start|STRLEN len|STRLEN* retlen
+Ap     |char*  |scan_num       |char* s|YYSTYPE *lvalp
+Apd    |NV     |scan_oct       |char* start|STRLEN len|STRLEN* retlen
+p      |OP*    |scope          |OP* o
+Ap     |char*  |screaminstr    |SV* bigsv|SV* littlesv|I32 start_shift \
+                               |I32 end_shift|I32 *state|I32 last
+#if !defined(VMS)
+p      |I32    |setenv_getix   |char* nam
+#endif
+p      |void   |setdefout      |GV* gv
+p      |HEK*   |share_hek      |const char* sv|I32 len|U32 hash
+np     |Signal_t |sighandler   |int sig
+Ap     |SV**   |stack_grow     |SV** sp|SV**p|int n
+Ap     |I32    |start_subparse |I32 is_format|U32 flags
+p      |void   |sub_crush_depth|CV* cv
+Apd    |bool   |sv_2bool       |SV* sv
+Apd    |CV*    |sv_2cv         |SV* sv|HV** st|GV** gvp|I32 lref
+Apd    |IO*    |sv_2io         |SV* sv
+Apd    |IV     |sv_2iv         |SV* sv
+Apd    |SV*    |sv_2mortal     |SV* sv
+Apd    |NV     |sv_2nv         |SV* sv
+Am     |char*  |sv_2pv         |SV* sv|STRLEN* lp
+Apd    |char*  |sv_2pvutf8     |SV* sv|STRLEN* lp
+Apd    |char*  |sv_2pvbyte     |SV* sv|STRLEN* lp
+Ap     |char*  |sv_pvn_nomg    |SV* sv|STRLEN* lp
+Apd    |UV     |sv_2uv         |SV* sv
+Apd    |IV     |sv_iv          |SV* sv
+Apd    |UV     |sv_uv          |SV* sv
+Apd    |NV     |sv_nv          |SV* sv
+Apd    |char*  |sv_pvn         |SV *sv|STRLEN *len
+Apd    |char*  |sv_pvutf8n     |SV *sv|STRLEN *len
+Apd    |char*  |sv_pvbyten     |SV *sv|STRLEN *len
+Apd    |I32    |sv_true        |SV *sv
+pd     |void   |sv_add_arena   |char* ptr|U32 size|U32 flags
+Apd    |int    |sv_backoff     |SV* sv
+Apd    |SV*    |sv_bless       |SV* sv|HV* stash
+Afpd   |void   |sv_catpvf      |SV* sv|const char* pat|...
+Ap     |void   |sv_vcatpvf     |SV* sv|const char* pat|va_list* args
+Apd    |void   |sv_catpv       |SV* sv|const char* ptr
+Amd    |void   |sv_catpvn      |SV* sv|const char* ptr|STRLEN len
+Amd    |void   |sv_catsv       |SV* dsv|SV* ssv
+Apd    |void   |sv_chop        |SV* sv|char* ptr
+pd     |I32    |sv_clean_all
+pd     |void   |sv_clean_objs
+Apd    |void   |sv_clear       |SV* sv
+Apd    |I32    |sv_cmp         |SV* sv1|SV* sv2
+Apd    |I32    |sv_cmp_locale  |SV* sv1|SV* sv2
+#if defined(USE_LOCALE_COLLATE)
+Apd    |char*  |sv_collxfrm    |SV* sv|STRLEN* nxp
+#endif
+Ap     |OP*    |sv_compile_2op |SV* sv|OP** startp|char* code|AV** avp
+Apd    |int    |getcwd_sv      |SV* sv
+Apd    |void   |sv_dec         |SV* sv
+Ap     |void   |sv_dump        |SV* sv
+Apd    |bool   |sv_derived_from|SV* sv|const char* name
+Apd    |I32    |sv_eq          |SV* sv1|SV* sv2
+Apd    |void   |sv_free        |SV* sv
+pd     |void   |sv_free_arenas
+Apd    |char*  |sv_gets        |SV* sv|PerlIO* fp|I32 append
+Apd    |char*  |sv_grow        |SV* sv|STRLEN newlen
+Apd    |void   |sv_inc         |SV* sv
+Apd    |void   |sv_insert      |SV* bigsv|STRLEN offset|STRLEN len \
+                               |char* little|STRLEN littlelen
+Apd    |int    |sv_isa         |SV* sv|const char* name
+Apd    |int    |sv_isobject    |SV* sv
+Apd    |STRLEN |sv_len         |SV* sv
+Apd    |STRLEN |sv_len_utf8    |SV* sv
+Apd    |void   |sv_magic       |SV* sv|SV* obj|int how|const char* name \
+                               |I32 namlen
+Apd    |SV*    |sv_mortalcopy  |SV* oldsv
+Apd    |SV*    |sv_newmortal
+Apd    |SV*    |sv_newref      |SV* sv
+Ap     |char*  |sv_peek        |SV* sv
+Apd    |void   |sv_pos_u2b     |SV* sv|I32* offsetp|I32* lenp
+Apd    |void   |sv_pos_b2u     |SV* sv|I32* offsetp
+Amd    |char*  |sv_pvn_force   |SV* sv|STRLEN* lp
+Apd    |char*  |sv_pvutf8n_force|SV* sv|STRLEN* lp
+Apd    |char*  |sv_pvbyten_force|SV* sv|STRLEN* lp
+Apd    |char*  |sv_recode_to_utf8      |SV* sv|SV *encoding
+Apd    |char*  |sv_reftype     |SV* sv|int ob
+Apd    |void   |sv_replace     |SV* sv|SV* nsv
+Apd    |void   |sv_report_used
+Apd    |void   |sv_reset       |char* s|HV* stash
+Afpd   |void   |sv_setpvf      |SV* sv|const char* pat|...
+Ap     |void   |sv_vsetpvf     |SV* sv|const char* pat|va_list* args
+Apd    |void   |sv_setiv       |SV* sv|IV num
+Apd    |void   |sv_setpviv     |SV* sv|IV num
+Apd    |void   |sv_setuv       |SV* sv|UV num
+Apd    |void   |sv_setnv       |SV* sv|NV num
+Apd    |SV*    |sv_setref_iv   |SV* rv|const char* classname|IV iv
+Apd    |SV*    |sv_setref_uv   |SV* rv|const char* classname|UV uv
+Apd    |SV*    |sv_setref_nv   |SV* rv|const char* classname|NV nv
+Apd    |SV*    |sv_setref_pv   |SV* rv|const char* classname|void* pv
+Apd    |SV*    |sv_setref_pvn  |SV* rv|const char* classname|char* pv \
+                               |STRLEN n
+Apd    |void   |sv_setpv       |SV* sv|const char* ptr
+Apd    |void   |sv_setpvn      |SV* sv|const char* ptr|STRLEN len
+Amd    |void   |sv_setsv       |SV* dsv|SV* ssv
+Apd    |void   |sv_taint       |SV* sv
+Apd    |bool   |sv_tainted     |SV* sv
+Apd    |int    |sv_unmagic     |SV* sv|int type
+Apd    |void   |sv_unref       |SV* sv
+Apd    |void   |sv_unref_flags |SV* sv|U32 flags
+Apd    |void   |sv_untaint     |SV* sv
+Apd    |bool   |sv_upgrade     |SV* sv|U32 mt
+Apd    |void   |sv_usepvn      |SV* sv|char* ptr|STRLEN len
+Apd    |void   |sv_vcatpvfn    |SV* sv|const char* pat|STRLEN patlen \
+                               |va_list* args|SV** svargs|I32 svmax \
+                               |bool *maybe_tainted
+Apd    |void   |sv_vsetpvfn    |SV* sv|const char* pat|STRLEN patlen \
+                               |va_list* args|SV** svargs|I32 svmax \
+                               |bool *maybe_tainted
+Ap     |NV     |str_to_version |SV *sv
+Ap     |SV*    |swash_init     |char* pkg|char* name|SV* listsv \
+                               |I32 minbits|I32 none
+Ap     |UV     |swash_fetch    |SV *sv|U8 *ptr|bool do_utf8
+Ap     |void   |taint_env
+Ap     |void   |taint_proper   |const char* f|const char* s
+Apd    |UV     |to_utf8_case   |U8 *p|U8* ustrp|STRLEN *lenp \
+                               |SV **swash|char *normal|char *special
+Apd    |UV     |to_utf8_lower  |U8 *p|U8* ustrp|STRLEN *lenp
+Apd    |UV     |to_utf8_upper  |U8 *p|U8* ustrp|STRLEN *lenp
+Apd    |UV     |to_utf8_title  |U8 *p|U8* ustrp|STRLEN *lenp
+Apd    |UV     |to_utf8_fold   |U8 *p|U8* ustrp|STRLEN *lenp
+#if defined(UNLINK_ALL_VERSIONS)
+Ap     |I32    |unlnk          |char* f
+#endif
+#if defined(USE_5005THREADS)
+Ap     |void   |unlock_condpair|void* svv
+#endif
+Ap     |void   |unsharepvn     |const char* sv|I32 len|U32 hash
+p      |void   |unshare_hek    |HEK* hek
+p      |void   |utilize        |int aver|I32 floor|OP* version|OP* id|OP* arg
+Ap     |U8*    |utf16_to_utf8  |U8* p|U8 *d|I32 bytelen|I32 *newlen
+Ap     |U8*    |utf16_to_utf8_reversed|U8* p|U8 *d|I32 bytelen|I32 *newlen
+Adp    |STRLEN |utf8_length    |U8* s|U8 *e
+Apd    |IV     |utf8_distance  |U8 *a|U8 *b
+Apd    |U8*    |utf8_hop       |U8 *s|I32 off
+ApMd   |U8*    |utf8_to_bytes  |U8 *s|STRLEN *len
+ApMd   |U8*    |bytes_from_utf8|U8 *s|STRLEN *len|bool *is_utf8
+ApMd   |U8*    |bytes_to_utf8  |U8 *s|STRLEN *len
+Apd    |UV     |utf8_to_uvchr  |U8 *s|STRLEN* retlen
+Apd    |UV     |utf8_to_uvuni  |U8 *s|STRLEN* retlen
+Adp    |UV     |utf8n_to_uvchr |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
+Adp    |UV     |utf8n_to_uvuni |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
+Apd    |U8*    |uvchr_to_utf8  |U8 *d|UV uv
+Ap     |U8*    |uvuni_to_utf8  |U8 *d|UV uv
+Ap     |U8*    |uvchr_to_utf8_flags    |U8 *d|UV uv|UV flags
+Apd    |U8*    |uvuni_to_utf8_flags    |U8 *d|UV uv|UV flags
+Apd    |char*  |pv_uni_display |SV *dsv|U8 *spv|STRLEN len \
+                               |STRLEN pvlim|UV flags
+Apd    |char*  |sv_uni_display |SV *dsv|SV *ssv|STRLEN pvlim|UV flags
+p      |void   |vivify_defelem |SV* sv
+p      |void   |vivify_ref     |SV* sv|U32 to_what
+p      |I32    |wait4pid       |Pid_t pid|int* statusp|int flags
+p      |void   |report_evil_fh |GV *gv|IO *io|I32 op
+pd     |void   |report_uninit
+Afpd   |void   |warn           |const char* pat|...
+Ap     |void   |vwarn          |const char* pat|va_list* args
+Afp    |void   |warner         |U32 err|const char* pat|...
+Ap     |void   |vwarner        |U32 err|const char* pat|va_list* args
+p      |void   |watch          |char** addr
+Ap     |I32    |whichsig       |char* sig
+p      |int    |yyerror        |char* s
+#ifdef USE_PURE_BISON
+p      |int    |yylex_r        |YYSTYPE *lvalp|int *lcharp
+#endif
+p      |int    |yylex
+p      |int    |yyparse
+p      |int    |yywarn         |char* s
+#if defined(MYMALLOC)
+Ap     |void   |dump_mstats    |char* s
+Ap     |int    |get_mstats     |perl_mstats_t *buf|int buflen|int level
+#endif
+Anp    |Malloc_t|safesysmalloc |MEM_SIZE nbytes
+Anp    |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
+Anp    |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
+Anp    |Free_t |safesysfree    |Malloc_t where
+#if defined(LEAKTEST)
+Anp    |Malloc_t|safexmalloc   |I32 x|MEM_SIZE size
+Anp    |Malloc_t|safexcalloc   |I32 x|MEM_SIZE elements|MEM_SIZE size
+Anp    |Malloc_t|safexrealloc  |Malloc_t where|MEM_SIZE size
+Anp    |void   |safexfree      |Malloc_t where
+#endif
+#if defined(PERL_GLOBAL_STRUCT)
+Ap     |struct perl_vars *|GetVars
+#endif
+Ap     |int    |runops_standard
+Ap     |int    |runops_debug
+#if defined(USE_5005THREADS)
+Ap     |SV*    |sv_lock        |SV *sv
+#endif
+Afpd   |void   |sv_catpvf_mg   |SV *sv|const char* pat|...
+Ap     |void   |sv_vcatpvf_mg  |SV* sv|const char* pat|va_list* args
+Apd    |void   |sv_catpv_mg    |SV *sv|const char *ptr
+Apd    |void   |sv_catpvn_mg   |SV *sv|const char *ptr|STRLEN len
+Apd    |void   |sv_catsv_mg    |SV *dstr|SV *sstr
+Afpd   |void   |sv_setpvf_mg   |SV *sv|const char* pat|...
+Ap     |void   |sv_vsetpvf_mg  |SV* sv|const char* pat|va_list* args
+Apd    |void   |sv_setiv_mg    |SV *sv|IV i
+Apd    |void   |sv_setpviv_mg  |SV *sv|IV iv
+Apd    |void   |sv_setuv_mg    |SV *sv|UV u
+Apd    |void   |sv_setnv_mg    |SV *sv|NV num
+Apd    |void   |sv_setpv_mg    |SV *sv|const char *ptr
+Apd    |void   |sv_setpvn_mg   |SV *sv|const char *ptr|STRLEN len
+Apd    |void   |sv_setsv_mg    |SV *dstr|SV *sstr
+Apd    |void   |sv_usepvn_mg   |SV *sv|char *ptr|STRLEN len
+Ap     |MGVTBL*|get_vtbl       |int vtbl_id
+p      |char*  |pv_display     |SV *dsv|char *pv|STRLEN cur|STRLEN len \
+                               |STRLEN pvlim
+Afp    |void   |dump_indent    |I32 level|PerlIO *file|const char* pat|...
+Ap     |void   |dump_vindent   |I32 level|PerlIO *file|const char* pat \
+                               |va_list *args
+Ap     |void   |do_gv_dump     |I32 level|PerlIO *file|char *name|GV *sv
+Ap     |void   |do_gvgv_dump   |I32 level|PerlIO *file|char *name|GV *sv
+Ap     |void   |do_hv_dump     |I32 level|PerlIO *file|char *name|HV *sv
+Ap     |void   |do_magic_dump  |I32 level|PerlIO *file|MAGIC *mg|I32 nest \
+                               |I32 maxnest|bool dumpops|STRLEN pvlim
+Ap     |void   |do_op_dump     |I32 level|PerlIO *file|OP *o
+Ap     |void   |do_pmop_dump   |I32 level|PerlIO *file|PMOP *pm
+Ap     |void   |do_sv_dump     |I32 level|PerlIO *file|SV *sv|I32 nest \
+                               |I32 maxnest|bool dumpops|STRLEN pvlim
+Ap     |void   |magic_dump     |MAGIC *mg
+#if defined(PERL_FLEXIBLE_EXCEPTIONS)
+Ap     |void*  |default_protect|volatile JMPENV *je|int *excpt \
+                               |protect_body_t body|...
+Ap     |void*  |vdefault_protect|volatile JMPENV *je|int *excpt \
+                               |protect_body_t body|va_list *args
+#endif
+Ap     |void   |reginitcolors
+Apd    |char*  |sv_2pv_nolen   |SV* sv
+Apd    |char*  |sv_2pvutf8_nolen|SV* sv
+Apd    |char*  |sv_2pvbyte_nolen|SV* sv
+Apd    |char*  |sv_pv          |SV *sv
+Apd    |char*  |sv_pvutf8      |SV *sv
+Apd    |char*  |sv_pvbyte      |SV *sv
+Amd    |STRLEN |sv_utf8_upgrade|SV *sv
+ApdM   |bool   |sv_utf8_downgrade|SV *sv|bool fail_ok
+Apd    |void   |sv_utf8_encode |SV *sv
+ApdM   |bool   |sv_utf8_decode |SV *sv
+Apd    |void   |sv_force_normal|SV *sv
+Apd    |void   |sv_force_normal_flags|SV *sv|U32 flags
+Ap     |void   |tmps_grow      |I32 n
+Apd    |SV*    |sv_rvweaken    |SV *sv
+p      |int    |magic_killbackrefs|SV *sv|MAGIC *mg
+Ap     |OP*    |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block
+Ap     |CV*    |newATTRSUB     |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
+Ap     |void   |newMYSUB       |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
+p      |OP *   |my_attrs       |OP *o|OP *attrs
+p      |void   |boot_core_xsutils
+#if defined(USE_ITHREADS)
+Ap     |PERL_CONTEXT*|cx_dup   |PERL_CONTEXT* cx|I32 ix|I32 max|CLONE_PARAMS* param
+Ap     |PERL_SI*|si_dup        |PERL_SI* si|CLONE_PARAMS* param
+Ap     |ANY*   |ss_dup         |PerlInterpreter* proto_perl|CLONE_PARAMS* param
+Ap     |void*  |any_dup        |void* v|PerlInterpreter* proto_perl
+Ap     |HE*    |he_dup         |HE* e|bool shared|CLONE_PARAMS* param
+Ap     |REGEXP*|re_dup         |REGEXP* r|CLONE_PARAMS* param
+Ap     |PerlIO*|fp_dup         |PerlIO* fp|char type|CLONE_PARAMS* param
+Ap     |DIR*   |dirp_dup       |DIR* dp
+Ap     |GP*    |gp_dup         |GP* gp|CLONE_PARAMS* param
+Ap     |MAGIC* |mg_dup         |MAGIC* mg|CLONE_PARAMS* param
+Ap     |SV*    |sv_dup         |SV* sstr|CLONE_PARAMS* param
+#if defined(HAVE_INTERP_INTERN)
+Ap     |void   |sys_intern_dup |struct interp_intern* src \
+                               |struct interp_intern* dst
+#endif
+Ap     |PTR_TBL_t*|ptr_table_new
+Ap     |void*  |ptr_table_fetch|PTR_TBL_t *tbl|void *sv
+Ap     |void   |ptr_table_store|PTR_TBL_t *tbl|void *oldsv|void *newsv
+Ap     |void   |ptr_table_split|PTR_TBL_t *tbl
+Ap     |void   |ptr_table_clear|PTR_TBL_t *tbl
+Ap     |void   |ptr_table_free|PTR_TBL_t *tbl
+#endif
+#if defined(HAVE_INTERP_INTERN)
+Ap     |void   |sys_intern_clear
+Ap     |void   |sys_intern_init
+#endif
+
+Ap |char * |custom_op_name|OP* op
+Ap |char * |custom_op_desc|OP* op
+
+
+END_EXTERN_C
+
+#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
+s      |I32    |avhv_index_sv  |SV* sv
+s      |I32    |avhv_index     |AV* av|SV* sv|U32 hash
+#endif
+
+#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
+s      |I32    |do_trans_simple        |SV *sv
+s      |I32    |do_trans_count         |SV *sv
+s      |I32    |do_trans_complex       |SV *sv
+s      |I32    |do_trans_simple_utf8   |SV *sv
+s      |I32    |do_trans_count_utf8    |SV *sv
+s      |I32    |do_trans_complex_utf8  |SV *sv
+#endif
+
+#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
+s      |void   |gv_init_sv     |GV *gv|I32 sv_type
+s      |void   |require_errno  |GV *gv
+#endif
+
+#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
+s      |void   |hsplit         |HV *hv
+s      |void   |hfreeentries   |HV *hv
+s      |void   |more_he
+s      |HE*    |new_he
+s      |void   |del_he         |HE *p
+s      |HEK*   |save_hek       |const char *str|I32 len|U32 hash
+s      |void   |hv_magic_check |HV *hv|bool *needs_copy|bool *needs_store
+#endif
+
+#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
+s      |void   |save_magic     |I32 mgs_ix|SV *sv
+s      |int    |magic_methpack |SV *sv|MAGIC *mg|char *meth
+s      |int    |magic_methcall |SV *sv|MAGIC *mg|char *meth|I32 f \
+                               |int n|SV *val
+#endif
+
+#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
+s      |I32    |list_assignment|OP *o
+s      |void   |bad_type       |I32 n|char *t|char *name|OP *kid
+s      |void   |cop_free       |COP *cop
+s      |OP*    |modkids        |OP *o|I32 type
+s      |void   |no_bareword_allowed|OP *o
+s      |OP*    |no_fh_allowed  |OP *o
+s      |OP*    |scalarboolean  |OP *o
+s      |OP*    |too_few_arguments|OP *o|char* name
+s      |OP*    |too_many_arguments|OP *o|char* name
+s      |PADOFFSET|pad_addlex   |SV* name
+s      |PADOFFSET|pad_findlex  |char* name|PADOFFSET newoff|U32 seq \
+                               |CV* startcv|I32 cx_ix|I32 saweval|U32 flags
+s      |OP*    |newDEFSVOP
+s      |OP*    |new_logop      |I32 type|I32 flags|OP **firstp|OP **otherp
+s      |void   |simplify_sort  |OP *o
+s      |bool   |is_handle_constructor  |OP *o|I32 argnum
+s      |char*  |gv_ename       |GV *gv
+#  if defined(DEBUG_CLOSURES)
+s      |void   |cv_dump        |CV *cv
+#  endif
+s      |CV*    |cv_clone2      |CV *proto|CV *outside
+s      |bool   |scalar_mod_type|OP *o|I32 type
+s      |OP *   |my_kid         |OP *o|OP *attrs|OP **imopsp
+s      |OP *   |dup_attrlist   |OP *o
+s      |void   |apply_attrs    |HV *stash|SV *target|OP *attrs|bool for_my
+s      |void   |apply_attrs_my |HV *stash|OP *target|OP *attrs|OP **imopsp
+#  if defined(PL_OP_SLAB_ALLOC)
+s      |void*  |Slab_Alloc     |int m|size_t sz
+#  endif
+#endif
+
+#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
+s      |void   |find_beginning
+s      |void   |forbid_setid   |char *
+s      |void   |incpush        |char *|int|int
+s      |void   |init_interp
+s      |void   |init_ids
+s      |void   |init_lexer
+s      |void   |init_main_stash
+s      |void   |init_perllib
+s      |void   |init_postdump_symbols|int|char **|char **
+s      |void   |init_predump_symbols
+rs     |void   |my_exit_jump
+s      |void   |nuke_stacks
+s      |void   |open_script    |char *|bool|SV *|int *fd
+s      |void   |usage          |char *
+s      |void   |validate_suid  |char *|char*|int
+#  if defined(IAMSUID)
+s      |int    |fd_on_nosuid_fs|int fd
+#  endif
+s      |void*  |parse_body     |char **env|XSINIT_t xsinit
+s      |void*  |run_body       |I32 oldscope
+s      |void   |call_body      |OP *myop|int is_eval
+s      |void*  |call_list_body |CV *cv
+#if defined(PERL_FLEXIBLE_EXCEPTIONS)
+s      |void*  |vparse_body    |va_list args
+s      |void*  |vrun_body      |va_list args
+s      |void*  |vcall_body     |va_list args
+s      |void*  |vcall_list_body|va_list args
+#endif
+#  if defined(USE_5005THREADS)
+s      |struct perl_thread *   |init_main_thread
+#  endif
+#endif
+
+#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
+s      |SV*    |refto          |SV* sv
+s      |U32    |seed
+#endif
+
+#if defined(PERL_IN_PP_PACK_C) || defined(PERL_DECL_PROT)
+s      |void   |doencodes      |SV* sv|char* s|I32 len
+s      |SV*    |mul128         |SV *sv|U8 m
+s      |SV*    |is_an_int      |char *s|STRLEN l
+s      |int    |div128         |SV *pnum|bool *done
+#endif
+
+#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
+s      |OP*    |docatch        |OP *o
+s      |void*  |docatch_body
+#if defined(PERL_FLEXIBLE_EXCEPTIONS)
+s      |void*  |vdocatch_body  |va_list args
+#endif
+s      |OP*    |dofindlabel    |OP *o|char *label|OP **opstack|OP **oplimit
+s      |void   |doparseform    |SV *sv
+s      |I32    |dopoptoeval    |I32 startingblock
+s      |I32    |dopoptolabel   |char *label
+s      |I32    |dopoptoloop    |I32 startingblock
+s      |I32    |dopoptosub     |I32 startingblock
+s      |I32    |dopoptosub_at  |PERL_CONTEXT* cxstk|I32 startingblock
+s      |void   |save_lines     |AV *array|SV *sv
+s      |OP*    |doeval         |int gimme|OP** startop
+s      |PerlIO *|doopen_pmc    |const char *name|const char *mode
+#endif
+
+#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
+s      |int    |do_maybe_phash |AV *ary|SV **lelem|SV **firstlelem \
+                               |SV **relem|SV **lastrelem
+s      |void   |do_oddball     |HV *hash|SV **relem|SV **firstrelem
+s      |CV*    |get_db_sub     |SV **svp|CV *cv
+s      |SV*    |method_common  |SV* meth|U32* hashp
+#endif
+
+#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
+s      |OP*    |doform         |CV *cv|GV *gv|OP *retop
+s      |int    |emulate_eaccess|const char* path|Mode_t mode
+#  if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
+s      |int    |dooneliner     |char *cmd|char *filename
+#  endif
+#endif
+
+#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
+s      |regnode*|reg           |struct RExC_state_t*|I32|I32 *
+s      |regnode*|reganode      |struct RExC_state_t*|U8|U32
+s      |regnode*|regatom       |struct RExC_state_t*|I32 *
+s      |regnode*|regbranch     |struct RExC_state_t*|I32 *|I32
+s      |void   |reguni         |struct RExC_state_t*|UV|char *|STRLEN*
+s      |regnode*|regclass      |struct RExC_state_t*
+s      |I32    |regcurly       |char *
+s      |regnode*|reg_node      |struct RExC_state_t*|U8
+s      |regnode*|regpiece      |struct RExC_state_t*|I32 *
+s      |void   |reginsert      |struct RExC_state_t*|U8|regnode *
+s      |void   |regoptail      |struct RExC_state_t*|regnode *|regnode *
+s      |void   |regtail        |struct RExC_state_t*|regnode *|regnode *
+s      |char*|regwhite |char *|char *
+s      |char*|nextchar |struct RExC_state_t*
+#  ifdef DEBUGGING
+s      |regnode*|dumpuntil     |regnode *start|regnode *node \
+                               |regnode *last|SV* sv|I32 l
+s      |void   |put_byte       |SV* sv|int c
+#  endif
+s      |void   |scan_commit    |struct RExC_state_t*|struct scan_data_t *data
+s      |void   |cl_anything    |struct RExC_state_t*|struct regnode_charclass_class *cl
+s      |int    |cl_is_anything |struct regnode_charclass_class *cl
+s      |void   |cl_init        |struct RExC_state_t*|struct regnode_charclass_class *cl
+s      |void   |cl_init_zero   |struct RExC_state_t*|struct regnode_charclass_class *cl
+s      |void   |cl_and         |struct regnode_charclass_class *cl \
+                               |struct regnode_charclass_class *and_with
+s      |void   |cl_or          |struct RExC_state_t*|struct regnode_charclass_class *cl \
+                               |struct regnode_charclass_class *or_with
+s      |I32    |study_chunk    |struct RExC_state_t*|regnode **scanp|I32 *deltap \
+                               |regnode *last|struct scan_data_t *data \
+                               |U32 flags
+s      |I32    |add_data       |struct RExC_state_t*|I32 n|char *s
+rs     |void|re_croak2 |const char* pat1|const char* pat2|...
+s      |I32    |regpposixcc    |struct RExC_state_t*|I32 value
+s      |void   |checkposixcc   |struct RExC_state_t*
+#endif
+
+#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
+s      |I32    |regmatch       |regnode *prog
+s      |I32    |regrepeat      |regnode *p|I32 max
+s      |I32    |regrepeat_hard |regnode *p|I32 max|I32 *lp
+s      |I32    |regtry         |regexp *prog|char *startpos
+s      |bool   |reginclass     |regnode *n|U8 *p|bool do_utf8sv_is_utf8
+s      |CHECKPOINT|regcppush   |I32 parenfloor
+s      |char*|regcppop
+s      |char*|regcp_set_to     |I32 ss
+s      |void   |cache_re       |regexp *prog
+s      |U8*    |reghop         |U8 *pos|I32 off
+s      |U8*    |reghop3        |U8 *pos|I32 off|U8 *lim
+s      |U8*    |reghopmaybe    |U8 *pos|I32 off
+s      |U8*    |reghopmaybe3   |U8 *pos|I32 off|U8 *lim
+s      |char*  |find_byclass   |regexp * prog|regnode *c|char *s|char *strend|char *startpos|I32 norun
+#endif
+
+#if defined(PERL_IN_DUMP_C) || defined(PERL_DECL_PROT)
+s      |CV*    |deb_curcv      |I32 ix
+s      |void   |debprof        |OP *o
+#endif
+
+#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
+s      |SV*    |save_scalar_at |SV **sptr
+#endif
+
+#if defined(USE_ITHREADS)
+Adp    |void        |sharedsv_init
+Adp    |shared_sv*  |sharedsv_new
+Adp    |shared_sv*  |sharedsv_find          |SV* sv
+Adp    |void        |sharedsv_lock          |shared_sv* ssv
+Adp    |void        |sharedsv_unlock        |shared_sv* ssv
+p      |void        |sharedsv_unlock_scope  |shared_sv* ssv
+Adp    |void        |sharedsv_thrcnt_inc    |shared_sv* ssv
+Adp    |void        |sharedsv_thrcnt_dec    |shared_sv* ssv
+#endif
+
+#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
+s      |IV     |asIV           |SV* sv
+s      |UV     |asUV           |SV* sv
+s      |SV*    |more_sv
+s      |void   |more_xiv
+s      |void   |more_xnv
+s      |void   |more_xpv
+s      |void   |more_xpviv
+s      |void   |more_xpvnv
+s      |void   |more_xpvcv
+s      |void   |more_xpvav
+s      |void   |more_xpvhv
+s      |void   |more_xpvmg
+s      |void   |more_xpvlv
+s      |void   |more_xpvbm
+s      |void   |more_xrv
+s      |XPVIV* |new_xiv
+s      |XPVNV* |new_xnv
+s      |XPV*   |new_xpv
+s      |XPVIV* |new_xpviv
+s      |XPVNV* |new_xpvnv
+s      |XPVCV* |new_xpvcv
+s      |XPVAV* |new_xpvav
+s      |XPVHV* |new_xpvhv
+s      |XPVMG* |new_xpvmg
+s      |XPVLV* |new_xpvlv
+s      |XPVBM* |new_xpvbm
+s      |XRV*   |new_xrv
+s      |void   |del_xiv        |XPVIV* p
+s      |void   |del_xnv        |XPVNV* p
+s      |void   |del_xpv        |XPV* p
+s      |void   |del_xpviv      |XPVIV* p
+s      |void   |del_xpvnv      |XPVNV* p
+s      |void   |del_xpvcv      |XPVCV* p
+s      |void   |del_xpvav      |XPVAV* p
+s      |void   |del_xpvhv      |XPVHV* p
+s      |void   |del_xpvmg      |XPVMG* p
+s      |void   |del_xpvlv      |XPVLV* p
+s      |void   |del_xpvbm      |XPVBM* p
+s      |void   |del_xrv        |XRV* p
+s      |void   |sv_unglob      |SV* sv
+s      |void   |not_a_number   |SV *sv
+s      |I32    |visit          |SVFUNC_t f
+s      |void   |sv_add_backref |SV *tsv|SV *sv
+s      |void   |sv_del_backref |SV *sv
+#  ifdef DEBUGGING
+s      |void   |del_sv |SV *p
+#  endif
+#  if !defined(NV_PRESERVES_UV)
+s      |int    |sv_2iuv_non_preserve   |SV *sv|I32 numtype
+#  endif
+s      |I32    |expect_number  |char** pattern
+#
+#  if defined(USE_ITHREADS)
+s      |SV*    |gv_share       |SV *sv
+#  endif
+#endif
+
+#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
+s      |void   |check_uni
+s      |void   |force_next     |I32 type
+s      |char*  |force_version  |char *start|int guessing
+s      |char*  |force_word     |char *start|int token|int check_keyword \
+                               |int allow_pack|int allow_tick
+s      |SV*    |tokeq          |SV *sv
+s      |int    |pending_ident
+s      |char*  |scan_const     |char *start
+s      |char*  |scan_formline  |char *s
+s      |char*  |scan_heredoc   |char *s
+s      |char*  |scan_ident     |char *s|char *send|char *dest \
+                               |STRLEN destlen|I32 ck_uni
+s      |char*  |scan_inputsymbol|char *start
+s      |char*  |scan_pat       |char *start|I32 type
+s      |char*  |scan_str       |char *start|int keep_quoted|int keep_delims
+s      |char*  |scan_subst     |char *start
+s      |char*  |scan_trans     |char *start
+s      |char*  |scan_word      |char *s|char *dest|STRLEN destlen \
+                               |int allow_package|STRLEN *slp
+s      |char*  |skipspace      |char *s
+s      |char*  |swallow_bom    |U8 *s
+s      |void   |checkcomma     |char *s|char *name|char *what
+s      |void   |force_ident    |char *s|int kind
+s      |void   |incline        |char *s
+s      |int    |intuit_method  |char *s|GV *gv
+s      |int    |intuit_more    |char *s
+s      |I32    |lop            |I32 f|int x|char *s
+s      |void   |missingterm    |char *s
+s      |void   |no_op          |char *what|char *s
+s      |void   |set_csh
+s      |I32    |sublex_done
+s      |I32    |sublex_push
+s      |I32    |sublex_start
+s      |char * |filter_gets    |SV *sv|PerlIO *fp|STRLEN append
+s      |HV *   |find_in_my_stash|char *pkgname|I32 len
+s      |SV*    |new_constant   |char *s|STRLEN len|const char *key|SV *sv \
+                               |SV *pv|const char *type
+#  if defined(DEBUGGING)
+s      |void   |tokereport     |char *thing|char *s|I32 rv
+#  endif
+s      |int    |ao             |int toketype
+s      |void   |depcom
+s      |char*  |incl_perldb
+#if 0
+s      |I32    |utf16_textfilter|int idx|SV *sv|int maxlen
+s      |I32    |utf16rev_textfilter|int idx|SV *sv|int maxlen
+#endif
+#  if defined(CRIPPLED_CC)
+s      |int    |uni            |I32 f|char *s
+#  endif
+#  if defined(PERL_CR_FILTER)
+s      |I32    |cr_textfilter  |int idx|SV *sv|int maxlen
+#  endif
+#endif
+
+#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
+s      |SV*|isa_lookup |HV *stash|const char *name|int len|int level
+#endif
+
+#if defined(PERL_IN_LOCALE_C) || defined(PERL_DECL_PROT)
+s      |char*  |stdize_locale  |char* locs
+#endif
+
+#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
+s      |COP*   |closest_cop    |COP *cop|OP *o
+s      |SV*    |mess_alloc
+#  if defined(LEAKTEST)
+s      |void   |xstat          |int
+#  endif
+#endif
+
+START_EXTERN_C
+
+Apd    |void   |sv_setsv_flags |SV* dsv|SV* ssv|I32 flags
+Apd    |void   |sv_catpvn_flags|SV* sv|const char* ptr|STRLEN len|I32 flags
+Apd    |void   |sv_catsv_flags |SV* dsv|SV* ssv|I32 flags
+Apd    |STRLEN |sv_utf8_upgrade_flags|SV *sv|I32 flags
+Apd    |char*  |sv_pvn_force_flags|SV* sv|STRLEN* lp|I32 flags
+Apd    |char*  |sv_2pv_flags   |SV* sv|STRLEN* lp|I32 flags
+Ap     |char*  |my_atof2       |const char *s|NV* value
+#if !defined(HAS_SOCKETPAIR) && defined(HAS_SOCKET)
+Apn    |int    |my_socketpair  |int family|int type|int protocol|int fd[2]
+#endif
+
+
+#if defined(USE_PERLIO) && !defined(USE_SFIO)
+Ap     |int    |PerlIO_close           |PerlIO *
+Ap     |int    |PerlIO_fill            |PerlIO *
+Ap     |int    |PerlIO_fileno          |PerlIO *
+Ap     |int    |PerlIO_eof             |PerlIO *
+Ap     |int    |PerlIO_error           |PerlIO *
+Ap     |int    |PerlIO_flush           |PerlIO *
+Ap     |void   |PerlIO_clearerr        |PerlIO *
+Ap     |void   |PerlIO_set_cnt         |PerlIO *|int
+Ap     |void   |PerlIO_set_ptrcnt      |PerlIO *|STDCHAR *|int
+Ap     |void   |PerlIO_setlinebuf      |PerlIO *
+Ap     |SSize_t|PerlIO_read            |PerlIO *|void *|Size_t
+Ap     |SSize_t|PerlIO_write           |PerlIO *|const void *|Size_t
+Ap     |SSize_t|PerlIO_unread          |PerlIO *|const void *|Size_t
+Ap     |Off_t  |PerlIO_tell            |PerlIO *
+Ap     |int    |PerlIO_seek            |PerlIO *|Off_t|int
+
+Ap     |STDCHAR *|PerlIO_get_base      |PerlIO *
+Ap     |STDCHAR *|PerlIO_get_ptr       |PerlIO *
+Ap     |int      |PerlIO_get_bufsiz    |PerlIO *
+Ap     |int      |PerlIO_get_cnt       |PerlIO *
+
+Ap     |PerlIO *|PerlIO_stdin
+Ap     |PerlIO *|PerlIO_stdout
+Ap     |PerlIO *|PerlIO_stderr
+#endif /* PERLIO_LAYERS */
+
+END_EXTERN_C
+
index 3a72d20..6536c83 100755 (executable)
--- a/embed.pl
+++ b/embed.pl
@@ -10,7 +10,7 @@ require 5.003;        # keep this compatible, an old perl is all we may have before
 # implicit interpreter context argument.
 #
 
-my $END = tell DATA;
+open IN, "embed.fnc" or die $!;
 
 # walk table providing an array of components in each line to
 # subroutine, printing the result
@@ -30,12 +30,12 @@ sub walk_table (&@) {
        $F = \*F;
     }
     print $F $leader if $leader;
-    seek DATA, $END, 0;                # so we may restart
-    while (<DATA>) {
+    seek IN, 0, 0;             # so we may restart
+    while (<IN>) {
        chomp;
        next if /^:/;
        while (s|\\$||) {
-           $_ .= <DATA>;
+           $_ .= <IN>;
            chomp;
        }
        my @args;
@@ -832,1558 +832,3 @@ my %vfuncs = qw(
     Perl_dump_indent           Perl_dump_vindent
     Perl_default_protect       Perl_vdefault_protect
 );
-
-# autogenerate documentation from comments in source files
-
-my %apidocs;
-my %gutsdocs;
-my %docfuncs;
-
-sub autodoc ($$) { # parse a file and extract documentation info
-    my($fh,$file) = @_;
-    my($in, $doc, $line);
-FUNC:
-    while (defined($in = <$fh>)) {
-       $line++;
-       if ($in =~ /^=for\s+apidoc\s+(.*)\n/) {
-           my $proto = $1;
-           $proto = "||$proto" unless $proto =~ /\|/;
-           my($flags, $ret, $name, @args) = split /\|/, $proto;
-           my $docs = "";
-DOC:
-           while (defined($doc = <$fh>)) {
-               $line++;
-               last DOC if $doc =~ /^=\w+/;
-               if ($doc =~ m:^\*/$:) {
-                   warn "=cut missing? $file:$line:$doc";;
-                   last DOC;
-               }
-               $docs .= $doc;
-           }
-           $docs = "\n$docs" if $docs and $docs !~ /^\n/;
-           if ($flags =~ /m/) {
-               if ($flags =~ /A/) {
-                   $apidocs{$name} = [$flags, $docs, $ret, $file, @args];
-               }
-               else {
-                   $gutsdocs{$name} = [$flags, $docs, $ret, $file, @args];
-               }
-           }
-           else {
-               $docfuncs{$name} = [$flags, $docs, $ret, $file, @args];
-           }
-           if (defined $doc) {
-               if ($doc =~ /^=for/) {
-                   $in = $doc;
-                   redo FUNC;
-               }
-           } else {
-               warn "$file:$line:$in (=cut missing?)";
-           }
-       }
-    }
-}
-
-sub docout ($$$) { # output the docs for one function
-    my($fh, $name, $docref) = @_;
-    my($flags, $docs, $ret, $file, @args) = @$docref;
-
-    $docs .= "NOTE: this function is experimental and may change or be
-removed without notice.\n\n" if $flags =~ /x/;
-    $docs .= "NOTE: the perl_ form of this function is deprecated.\n\n"
-       if $flags =~ /p/;
-
-    print $fh "=item $name\n$docs";
-
-    if ($flags =~ /U/) { # no usage
-       # 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
-       print $fh "\t$ret\t$name";
-       print $fh "(" . join(", ", @args) . ")";
-       print $fh "\n\n";
-    }
-    print $fh "=for hackers\nFound in file $file\n\n";
-}
-
-my $file;
-for $file (glob('*.c'), glob('*.h')) {
-    open F, "< $file" or die "Cannot open $file for docs: $!\n";
-    autodoc(\*F,$file);
-    close F or die "Error closing $file: $!\n";
-}
-
-unlink "pod/perlapi.pod";
-open (DOC, ">pod/perlapi.pod") or
-       die "Can't create pod/perlapi.pod: $!\n";
-
-walk_table {   # load documented functions into approriate hash
-    if (@_ > 1) {
-       my($flags, $retval, $func, @args) = @_;
-       return "" unless $flags =~ /d/;
-       $func =~ s/\t//g; $flags =~ s/p//; # clean up fields from embed.pl
-       $retval =~ s/\t//;
-       if ($flags =~ /A/) {
-           my $docref = delete $docfuncs{$func};
-           warn "no docs for $func\n" unless $docref and @$docref;
-        $docref->[0].="x" if $flags =~ /M/;
-           $apidocs{$func} = [$docref->[0] . 'A', $docref->[1], $retval,
-                              $docref->[3], @args];
-       } else {
-           my $docref = delete $docfuncs{$func};
-           $gutsdocs{$func} = [$docref->[0], $docref->[1], $retval,
-                               $docref->[3], @args];
-       }
-    }
-    return "";
-} \*DOC;
-
-for (sort keys %docfuncs) {
-    # Have you used a full for apidoc or just a func name?
-    # Have you used Ap instead of Am in the for apidoc?
-    warn "Unable to place $_!\n";
-}
-
-print DOC <<'_EOB_';
-=head1 NAME
-
-perlapi - autogenerated documentation for the perl public API
-
-=head1 DESCRIPTION
-
-This file contains the documentation of the perl public API generated by
-embed.pl, specifically a listing of functions, macros, flags, and variables
-that may be used by extension writers.  The interfaces of any functions that
-are not listed here are subject to change without notice.  For this reason,
-blindly using functions listed in proto.h is to be avoided when writing
-extensions.
-
-Note that all Perl API global variables must be referenced with the C<PL_>
-prefix.  Some macros are provided for compatibility with the older,
-unadorned names, but this support may be disabled in a future release.
-
-The listing is alphabetical, case insensitive.
-
-=over 8
-
-_EOB_
-
-my $key;
-for $key (sort { uc($a) cmp uc($b); } keys %apidocs) { # case insensitive sort
-    docout(\*DOC, $key, $apidocs{$key});
-}
-
-print DOC <<'_EOE_';
-=back
-
-=head1 AUTHORS
-
-Until May 1997, this document was maintained by Jeff Okamoto
-<okamoto@corp.hp.com>.  It is now maintained as part of Perl itself.
-
-With lots of help and suggestions from Dean Roehrich, Malcolm Beattie,
-Andreas Koenig, Paul Hudson, Ilya Zakharevich, Paul Marquess, Neil
-Bowers, Matthew Green, Tim Bunce, Spider Boardman, Ulrich Pfeifer,
-Stephen McCamant, and Gurusamy Sarathy.
-
-API Listing originally by Dean Roehrich <roehrich@cray.com>.
-
-Updated to be autogenerated from comments in the source by Benjamin Stuhl.
-
-=head1 SEE ALSO
-
-perlguts(1), perlxs(1), perlxstut(1), perlintern(1)
-
-_EOE_
-
-
-close(DOC);
-
-unlink "pod/perlintern.pod";
-
-open(GUTS, ">pod/perlintern.pod") or
-               die "Unable to create pod/perlintern.pod: $!\n";
-print GUTS <<'END';
-=head1 NAME
-
-perlintern - autogenerated documentation of purely B<internal>
-                Perl functions
-
-=head1 DESCRIPTION
-
-This file is the autogenerated documentation of functions in the
-Perl interpreter that are documented using Perl's internal documentation
-format but are not marked as part of the Perl API. In other words,
-B<they are not for use in extensions>!
-
-=over 8
-
-END
-
-for $key (sort { uc($a) cmp uc($b); } keys %gutsdocs) {
-    docout(\*GUTS, $key, $gutsdocs{$key});
-}
-
-print GUTS <<'END';
-=back
-
-=head1 AUTHORS
-
-The autodocumentation system was originally added to the Perl core by
-Benjamin Stuhl. Documentation is by whoever was kind enough to
-document their functions.
-
-=head1 SEE ALSO
-
-perlguts(1), perlapi(1)
-
-END
-
-close GUTS;
-
-
-__END__
-
-: Lines 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.
-: Leading and trailing whitespace will be ignored in each component.
-:
-: flags are single letters with following meanings:
-:      A               member of public API
-:      m               Implemented as a macro - no export, no proto, no #define
-:      d               function has documentation with its source
-:      s               static function, should have an S_ prefix in source
-:                              file
-:      n               has no implicit interpreter/thread context argument
-:      p               function has a Perl_ prefix
-:      f               function takes printf style format string, varargs
-:      r               function never returns
-:       o              has no compatibility macro (#define foo Perl_foo)
-:       x              not exported
-:       M              may change
-:
-: Individual flags may be separated by whitespace.
-:
-: New global functions should be added at the end for binary compatibility
-: in some configurations.
-
-START_EXTERN_C
-
-#if defined(PERL_IMPLICIT_SYS)
-Ano    |PerlInterpreter*       |perl_alloc_using \
-                               |struct IPerlMem* m|struct IPerlMem* ms \
-                               |struct IPerlMem* mp|struct IPerlEnv* e \
-                               |struct IPerlStdIO* io|struct IPerlLIO* lio \
-                               |struct IPerlDir* d|struct IPerlSock* s \
-                               |struct IPerlProc* p
-#endif
-Anod   |PerlInterpreter*       |perl_alloc
-Anod   |void   |perl_construct |PerlInterpreter* interp
-Anod   |int    |perl_destruct  |PerlInterpreter* interp
-Anod   |void   |perl_free      |PerlInterpreter* interp
-Anod   |int    |perl_run       |PerlInterpreter* interp
-Anod   |int    |perl_parse     |PerlInterpreter* interp|XSINIT_t xsinit \
-                               |int argc|char** argv|char** env
-#if defined(USE_ITHREADS)
-Anod   |PerlInterpreter*|perl_clone|PerlInterpreter* interp, UV flags
-#  if defined(PERL_IMPLICIT_SYS)
-Ano    |PerlInterpreter*|perl_clone_using|PerlInterpreter *interp|UV flags \
-                               |struct IPerlMem* m|struct IPerlMem* ms \
-                               |struct IPerlMem* mp|struct IPerlEnv* e \
-                               |struct IPerlStdIO* io|struct IPerlLIO* lio \
-                               |struct IPerlDir* d|struct IPerlSock* s \
-                               |struct IPerlProc* p
-#  endif
-#endif
-
-Anop   |Malloc_t|malloc        |MEM_SIZE nbytes
-Anop   |Malloc_t|calloc        |MEM_SIZE elements|MEM_SIZE size
-Anop   |Malloc_t|realloc       |Malloc_t where|MEM_SIZE nbytes
-Anop   |Free_t |mfree          |Malloc_t where
-#if defined(MYMALLOC)
-np     |MEM_SIZE|malloced_size |void *p
-#endif
-
-Anp    |void*  |get_context
-Anp    |void   |set_context    |void *thx
-
-END_EXTERN_C
-
-/* functions with flag 'n' should come before here */
-START_EXTERN_C
-#  include "pp_proto.h"
-Ap     |SV*    |amagic_call    |SV* left|SV* right|int method|int dir
-Ap     |bool   |Gv_AMupdate    |HV* stash
-Ap     |CV*    |gv_handler     |HV* stash|I32 id
-p      |OP*    |append_elem    |I32 optype|OP* head|OP* tail
-p      |OP*    |append_list    |I32 optype|LISTOP* first|LISTOP* last
-p      |I32    |apply          |I32 type|SV** mark|SV** sp
-ApM    |void   |apply_attrs_string|char *stashpv|CV *cv|char *attrstr|STRLEN len
-Ap     |SV*    |avhv_delete_ent|AV *ar|SV* keysv|I32 flags|U32 hash
-Ap     |bool   |avhv_exists_ent|AV *ar|SV* keysv|U32 hash
-Ap     |SV**   |avhv_fetch_ent |AV *ar|SV* keysv|I32 lval|U32 hash
-Ap     |SV**   |avhv_store_ent |AV *ar|SV* keysv|SV* val|U32 hash
-Ap     |HE*    |avhv_iternext  |AV *ar
-Ap     |SV*    |avhv_iterval   |AV *ar|HE* entry
-Ap     |HV*    |avhv_keys      |AV *ar
-Apd    |void   |av_clear       |AV* ar
-Apd    |SV*    |av_delete      |AV* ar|I32 key|I32 flags
-Apd    |bool   |av_exists      |AV* ar|I32 key
-Apd    |void   |av_extend      |AV* ar|I32 key
-p      |AV*    |av_fake        |I32 size|SV** svp
-Apd    |SV**   |av_fetch       |AV* ar|I32 key|I32 lval
-Apd    |void   |av_fill        |AV* ar|I32 fill
-Apd    |I32    |av_len         |AV* ar
-Apd    |AV*    |av_make        |I32 size|SV** svp
-Apd    |SV*    |av_pop         |AV* ar
-Apd    |void   |av_push        |AV* ar|SV* val
-p      |void   |av_reify       |AV* ar
-Apd    |SV*    |av_shift       |AV* ar
-Apd    |SV**   |av_store       |AV* ar|I32 key|SV* val
-Apd    |void   |av_undef       |AV* ar
-Apd    |void   |av_unshift     |AV* ar|I32 num
-p      |OP*    |bind_match     |I32 type|OP* left|OP* pat
-p      |OP*    |block_end      |I32 floor|OP* seq
-Ap     |I32    |block_gimme
-p      |int    |block_start    |int full
-p      |void   |boot_core_UNIVERSAL
-p      |void   |boot_core_PerlIO
-Ap     |void   |call_list      |I32 oldscope|AV* av_list
-p      |bool   |cando          |Mode_t mode|Uid_t effective|Stat_t* statbufp
-Ap     |U32    |cast_ulong     |NV f
-Ap     |I32    |cast_i32       |NV f
-Ap     |IV     |cast_iv        |NV f
-Ap     |UV     |cast_uv        |NV f
-#if !defined(HAS_TRUNCATE) && !defined(HAS_CHSIZE) && defined(F_FREESP)
-Ap     |I32    |my_chsize      |int fd|Off_t length
-#endif
-#if defined(USE_5005THREADS)
-Ap     |MAGIC* |condpair_magic |SV *sv
-#endif
-p      |OP*    |convert        |I32 optype|I32 flags|OP* o
-Afprd  |void   |croak          |const char* pat|...
-Apr    |void   |vcroak         |const char* pat|va_list* args
-#if defined(PERL_IMPLICIT_CONTEXT)
-Afnrp  |void   |croak_nocontext|const char* pat|...
-Afnp   |OP*    |die_nocontext  |const char* pat|...
-Afnp   |void   |deb_nocontext  |const char* pat|...
-Afnp   |char*  |form_nocontext |const char* pat|...
-Anp    |void   |load_module_nocontext|U32 flags|SV* name|SV* ver|...
-Afnp   |SV*    |mess_nocontext |const char* pat|...
-Afnp   |void   |warn_nocontext |const char* pat|...
-Afnp   |void   |warner_nocontext|U32 err|const char* pat|...
-Afnp   |SV*    |newSVpvf_nocontext|const char* pat|...
-Afnp   |void   |sv_catpvf_nocontext|SV* sv|const char* pat|...
-Afnp   |void   |sv_setpvf_nocontext|SV* sv|const char* pat|...
-Afnp   |void   |sv_catpvf_mg_nocontext|SV* sv|const char* pat|...
-Afnp   |void   |sv_setpvf_mg_nocontext|SV* sv|const char* pat|...
-Afnp   |int    |fprintf_nocontext|PerlIO* stream|const char* fmt|...
-Afnp   |int    |printf_nocontext|const char* fmt|...
-#endif
-p      |void   |cv_ckproto     |CV* cv|GV* gv|char* p
-p      |CV*    |cv_clone       |CV* proto
-Apd    |SV*    |cv_const_sv    |CV* cv
-p      |SV*    |op_const_sv    |OP* o|CV* cv
-Ap     |void   |cv_undef       |CV* cv
-Ap     |void   |cx_dump        |PERL_CONTEXT* cs
-Ap     |SV*    |filter_add     |filter_t funcp|SV* datasv
-Ap     |void   |filter_del     |filter_t funcp
-Ap     |I32    |filter_read    |int idx|SV* buffer|int maxlen
-Ap     |char** |get_op_descs
-Ap     |char** |get_op_names
-p      |char*  |get_no_modify
-p      |U32*   |get_opargs
-Ap     |PPADDR_t*|get_ppaddr
-p      |I32    |cxinc
-Afp    |void   |deb            |const char* pat|...
-Ap     |void   |vdeb           |const char* pat|va_list* args
-Ap     |void   |debprofdump
-Ap     |I32    |debop          |OP* o
-Ap     |I32    |debstack
-Ap     |I32    |debstackptrs
-Ap     |char*  |delimcpy       |char* to|char* toend|char* from \
-                               |char* fromend|int delim|I32* retlen
-p      |void   |deprecate      |char* s
-Afp    |OP*    |die            |const char* pat|...
-p      |OP*    |vdie           |const char* pat|va_list* args
-p      |OP*    |die_where      |char* message|STRLEN msglen
-Ap     |void   |dounwind       |I32 cxix
-p      |bool   |do_aexec       |SV* really|SV** mark|SV** sp
-p      |bool   |do_aexec5      |SV* really|SV** mark|SV** sp|int fd|int flag
-Ap     |int    |do_binmode     |PerlIO *fp|int iotype|int mode
-p      |void   |do_chop        |SV* asv|SV* sv
-Ap     |bool   |do_close       |GV* gv|bool not_implicit
-p      |bool   |do_eof         |GV* gv
-p      |bool   |do_exec        |char* cmd
-#if !defined(WIN32)
-p      |bool   |do_exec3       |char* cmd|int fd|int flag
-#endif
-p      |void   |do_execfree
-#if defined(HAS_MSG) || defined(HAS_SEM) || defined(HAS_SHM)
-p      |I32    |do_ipcctl      |I32 optype|SV** mark|SV** sp
-p      |I32    |do_ipcget      |I32 optype|SV** mark|SV** sp
-p      |I32    |do_msgrcv      |SV** mark|SV** sp
-p      |I32    |do_msgsnd      |SV** mark|SV** sp
-p      |I32    |do_semop       |SV** mark|SV** sp
-p      |I32    |do_shmio       |I32 optype|SV** mark|SV** sp
-#endif
-Ap     |void   |do_join        |SV* sv|SV* del|SV** mark|SV** sp
-p      |OP*    |do_kv
-Ap     |bool   |do_open        |GV* gv|char* name|I32 len|int as_raw \
-                               |int rawmode|int rawperm|PerlIO* supplied_fp
-Ap     |bool   |do_open9       |GV *gv|char *name|I32 len|int as_raw \
-                               |int rawmode|int rawperm|PerlIO *supplied_fp \
-                               |SV *svs|I32 num
-Ap     |bool   |do_openn       |GV *gv|char *name|I32 len|int as_raw \
-                               |int rawmode|int rawperm|PerlIO *supplied_fp \
-                               |SV **svp|I32 num
-p      |void   |do_pipe        |SV* sv|GV* rgv|GV* wgv
-p      |bool   |do_print       |SV* sv|PerlIO* fp
-p      |OP*    |do_readline
-p      |I32    |do_chomp       |SV* sv
-p      |bool   |do_seek        |GV* gv|Off_t pos|int whence
-Ap     |void   |do_sprintf     |SV* sv|I32 len|SV** sarg
-p      |Off_t  |do_sysseek     |GV* gv|Off_t pos|int whence
-p      |Off_t  |do_tell        |GV* gv
-p      |I32    |do_trans       |SV* sv
-p      |UV     |do_vecget      |SV* sv|I32 offset|I32 size
-p      |void   |do_vecset      |SV* sv
-p      |void   |do_vop         |I32 optype|SV* sv|SV* left|SV* right
-p      |OP*    |dofile         |OP* term
-Ap     |I32    |dowantarray
-Ap     |void   |dump_all
-Ap     |void   |dump_eval
-#if defined(DUMP_FDS)
-Ap     |void   |dump_fds       |char* s
-#endif
-Ap     |void   |dump_form      |GV* gv
-Ap     |void   |gv_dump        |GV* gv
-Ap     |void   |op_dump        |OP* arg
-Ap     |void   |pmop_dump      |PMOP* pm
-Ap     |void   |dump_packsubs  |HV* stash
-Ap     |void   |dump_sub       |GV* gv
-Apd    |void   |fbm_compile    |SV* sv|U32 flags
-Apd    |char*  |fbm_instr      |unsigned char* big|unsigned char* bigend \
-                               |SV* littlesv|U32 flags
-p      |char*  |find_script    |char *scriptname|bool dosearch \
-                               |char **search_ext|I32 flags
-#if defined(USE_5005THREADS)
-p      |PADOFFSET|find_threadsv|const char *name
-#endif
-p      |OP*    |force_list     |OP* arg
-p      |OP*    |fold_constants |OP* arg
-Afpd   |char*  |form           |const char* pat|...
-Ap     |char*  |vform          |const char* pat|va_list* args
-Ap     |void   |free_tmps
-p      |OP*    |gen_constant_list|OP* o
-#if !defined(HAS_GETENV_LEN)
-p      |char*  |getenv_len     |const char* key|unsigned long *len
-#endif
-Ap     |void   |gp_free        |GV* gv
-Ap     |GP*    |gp_ref         |GP* gp
-Ap     |GV*    |gv_AVadd       |GV* gv
-Ap     |GV*    |gv_HVadd       |GV* gv
-Ap     |GV*    |gv_IOadd       |GV* gv
-Ap     |GV*    |gv_autoload4   |HV* stash|const char* name|STRLEN len \
-                               |I32 method
-Ap     |void   |gv_check       |HV* stash
-Ap     |void   |gv_efullname   |SV* sv|GV* gv
-Ap     |void   |gv_efullname3  |SV* sv|GV* gv|const char* prefix
-Ap     |void   |gv_efullname4  |SV* sv|GV* gv|const char* prefix|bool keepmain
-Ap     |GV*    |gv_fetchfile   |const char* name
-Apd    |GV*    |gv_fetchmeth   |HV* stash|const char* name|STRLEN len \
-                               |I32 level
-Apd    |GV*    |gv_fetchmethod |HV* stash|const char* name
-Apd    |GV*    |gv_fetchmethod_autoload|HV* stash|const char* name \
-                               |I32 autoload
-Ap     |GV*    |gv_fetchpv     |const char* name|I32 add|I32 sv_type
-Ap     |void   |gv_fullname    |SV* sv|GV* gv
-Ap     |void   |gv_fullname3   |SV* sv|GV* gv|const char* prefix
-Ap     |void   |gv_fullname4   |SV* sv|GV* gv|const char* prefix|bool keepmain
-Ap     |void   |gv_init        |GV* gv|HV* stash|const char* name \
-                               |STRLEN len|int multi
-Apd    |HV*    |gv_stashpv     |const char* name|I32 create
-Ap     |HV*    |gv_stashpvn    |const char* name|U32 namelen|I32 create
-Apd    |HV*    |gv_stashsv     |SV* sv|I32 create
-Apd    |void   |hv_clear       |HV* tb
-Ap     |void   |hv_delayfree_ent|HV* hv|HE* entry
-Apd    |SV*    |hv_delete      |HV* tb|const char* key|I32 klen|I32 flags
-Apd    |SV*    |hv_delete_ent  |HV* tb|SV* key|I32 flags|U32 hash
-Apd    |bool   |hv_exists      |HV* tb|const char* key|I32 klen
-Apd    |bool   |hv_exists_ent  |HV* tb|SV* key|U32 hash
-Apd    |SV**   |hv_fetch       |HV* tb|const char* key|I32 klen|I32 lval
-Apd    |HE*    |hv_fetch_ent   |HV* tb|SV* key|I32 lval|U32 hash
-Ap     |void   |hv_free_ent    |HV* hv|HE* entry
-Apd    |I32    |hv_iterinit    |HV* tb
-Apd    |char*  |hv_iterkey     |HE* entry|I32* retlen
-Apd    |SV*    |hv_iterkeysv   |HE* entry
-Apd    |HE*    |hv_iternext    |HV* tb
-Apd    |SV*    |hv_iternextsv  |HV* hv|char** key|I32* retlen
-Apd    |SV*    |hv_iterval     |HV* tb|HE* entry
-Ap     |void   |hv_ksplit      |HV* hv|IV newmax
-Apd    |void   |hv_magic       |HV* hv|GV* gv|int how
-Apd    |SV**   |hv_store       |HV* tb|const char* key|I32 klen|SV* val \
-                               |U32 hash
-Apd    |HE*    |hv_store_ent   |HV* tb|SV* key|SV* val|U32 hash
-Apd    |void   |hv_undef       |HV* tb
-Ap     |I32    |ibcmp          |const char* a|const char* b|I32 len
-Ap     |I32    |ibcmp_locale   |const char* a|const char* b|I32 len
-Apd    |I32    |ibcmp_utf8     |const char* a|char **pe1|UV l1|bool u1|const char* b|char **pe2|UV l2|bool u2
-p      |bool   |ingroup        |Gid_t testgid|Uid_t effective
-p      |void   |init_argv_symbols|int|char **
-p      |void   |init_debugger
-Ap     |void   |init_stacks
-Ap     |void   |init_tm        |struct tm *ptm
-p      |U32    |intro_my
-Ap     |char*  |instr          |const char* big|const char* little
-p      |bool   |io_close       |IO* io|bool not_implicit
-p      |OP*    |invert         |OP* cmd
-dp     |bool   |is_gv_magical  |char *name|STRLEN len|U32 flags
-Ap     |I32    |is_lvalue_sub
-Ap     |U32    |to_uni_upper_lc|U32 c
-Ap     |U32    |to_uni_title_lc|U32 c
-Ap     |U32    |to_uni_lower_lc|U32 c
-Ap     |bool   |is_uni_alnum   |UV c
-Ap     |bool   |is_uni_alnumc  |UV c
-Ap     |bool   |is_uni_idfirst |UV c
-Ap     |bool   |is_uni_alpha   |UV c
-Ap     |bool   |is_uni_ascii   |UV c
-Ap     |bool   |is_uni_space   |UV c
-Ap     |bool   |is_uni_cntrl   |UV c
-Ap     |bool   |is_uni_graph   |UV c
-Ap     |bool   |is_uni_digit   |UV c
-Ap     |bool   |is_uni_upper   |UV c
-Ap     |bool   |is_uni_lower   |UV c
-Ap     |bool   |is_uni_print   |UV c
-Ap     |bool   |is_uni_punct   |UV c
-Ap     |bool   |is_uni_xdigit  |UV c
-Ap     |UV     |to_uni_upper   |UV c|U8 *p|STRLEN *lenp
-Ap     |UV     |to_uni_title   |UV c|U8 *p|STRLEN *lenp
-Ap     |UV     |to_uni_lower   |UV c|U8 *p|STRLEN *lenp
-Ap     |UV     |to_uni_fold    |UV c|U8 *p|STRLEN *lenp
-Ap     |bool   |is_uni_alnum_lc|UV c
-Ap     |bool   |is_uni_alnumc_lc|UV c
-Ap     |bool   |is_uni_idfirst_lc|UV c
-Ap     |bool   |is_uni_alpha_lc|UV c
-Ap     |bool   |is_uni_ascii_lc|UV c
-Ap     |bool   |is_uni_space_lc|UV c
-Ap     |bool   |is_uni_cntrl_lc|UV c
-Ap     |bool   |is_uni_graph_lc|UV c
-Ap     |bool   |is_uni_digit_lc|UV c
-Ap     |bool   |is_uni_upper_lc|UV c
-Ap     |bool   |is_uni_lower_lc|UV c
-Ap     |bool   |is_uni_print_lc|UV c
-Ap     |bool   |is_uni_punct_lc|UV c
-Ap     |bool   |is_uni_xdigit_lc|UV c
-Apd    |STRLEN |is_utf8_char   |U8 *p
-Apd    |bool   |is_utf8_string |U8 *s|STRLEN len
-Ap     |bool   |is_utf8_alnum  |U8 *p
-Ap     |bool   |is_utf8_alnumc |U8 *p
-Ap     |bool   |is_utf8_idfirst|U8 *p
-Ap     |bool   |is_utf8_alpha  |U8 *p
-Ap     |bool   |is_utf8_ascii  |U8 *p
-Ap     |bool   |is_utf8_space  |U8 *p
-Ap     |bool   |is_utf8_cntrl  |U8 *p
-Ap     |bool   |is_utf8_digit  |U8 *p
-Ap     |bool   |is_utf8_graph  |U8 *p
-Ap     |bool   |is_utf8_upper  |U8 *p
-Ap     |bool   |is_utf8_lower  |U8 *p
-Ap     |bool   |is_utf8_print  |U8 *p
-Ap     |bool   |is_utf8_punct  |U8 *p
-Ap     |bool   |is_utf8_xdigit |U8 *p
-Ap     |bool   |is_utf8_mark   |U8 *p
-p      |OP*    |jmaybe         |OP* arg
-p      |I32    |keyword        |char* d|I32 len
-Ap     |void   |leave_scope    |I32 base
-p      |void   |lex_end
-p      |void   |lex_start      |SV* line
-Ap |void   |op_null    |OP* o
-p      |void   |op_clear       |OP* o
-p      |OP*    |linklist       |OP* o
-p      |OP*    |list           |OP* o
-p      |OP*    |listkids       |OP* o
-Apd    |void   |load_module|U32 flags|SV* name|SV* ver|...
-Ap     |void   |vload_module|U32 flags|SV* name|SV* ver|va_list* args
-p      |OP*    |localize       |OP* arg|I32 lexical
-Apd    |I32    |looks_like_number|SV* sv
-Apd    |UV     |grok_bin       |char* start|STRLEN* len|I32* flags|NV *result
-Apd    |UV     |grok_hex       |char* start|STRLEN* len|I32* flags|NV *result
-Apd    |int    |grok_number    |const char *pv|STRLEN len|UV *valuep
-Apd    |bool   |grok_numeric_radix|const char **sp|const char *send
-Apd    |UV     |grok_oct       |char* start|STRLEN* len|I32* flags|NV *result
-p      |int    |magic_clearenv |SV* sv|MAGIC* mg
-p      |int    |magic_clear_all_env|SV* sv|MAGIC* mg
-p      |int    |magic_clearpack|SV* sv|MAGIC* mg
-p      |int    |magic_clearsig |SV* sv|MAGIC* mg
-p      |int    |magic_existspack|SV* sv|MAGIC* mg
-p      |int    |magic_freeregexp|SV* sv|MAGIC* mg
-p      |int    |magic_freeovrld|SV* sv|MAGIC* mg
-p      |int    |magic_get      |SV* sv|MAGIC* mg
-p      |int    |magic_getarylen|SV* sv|MAGIC* mg
-p      |int    |magic_getdefelem|SV* sv|MAGIC* mg
-p      |int    |magic_getglob  |SV* sv|MAGIC* mg
-p      |int    |magic_getnkeys |SV* sv|MAGIC* mg
-p      |int    |magic_getpack  |SV* sv|MAGIC* mg
-p      |int    |magic_getpos   |SV* sv|MAGIC* mg
-p      |int    |magic_getsig   |SV* sv|MAGIC* mg
-p      |int    |magic_getsubstr|SV* sv|MAGIC* mg
-p      |int    |magic_gettaint |SV* sv|MAGIC* mg
-p      |int    |magic_getuvar  |SV* sv|MAGIC* mg
-p      |int    |magic_getvec   |SV* sv|MAGIC* mg
-p      |U32    |magic_len      |SV* sv|MAGIC* mg
-#if defined(USE_5005THREADS)
-p      |int    |magic_mutexfree|SV* sv|MAGIC* mg
-#endif
-p      |int    |magic_nextpack |SV* sv|MAGIC* mg|SV* key
-p      |U32    |magic_regdata_cnt|SV* sv|MAGIC* mg
-p      |int    |magic_regdatum_get|SV* sv|MAGIC* mg
-p      |int    |magic_regdatum_set|SV* sv|MAGIC* mg
-p      |int    |magic_set      |SV* sv|MAGIC* mg
-p      |int    |magic_setamagic|SV* sv|MAGIC* mg
-p      |int    |magic_setarylen|SV* sv|MAGIC* mg
-p      |int    |magic_setbm    |SV* sv|MAGIC* mg
-p      |int    |magic_setdbline|SV* sv|MAGIC* mg
-#if defined(USE_LOCALE_COLLATE)
-p      |int    |magic_setcollxfrm|SV* sv|MAGIC* mg
-#endif
-p      |int    |magic_setdefelem|SV* sv|MAGIC* mg
-p      |int    |magic_setenv   |SV* sv|MAGIC* mg
-p      |int    |magic_setfm    |SV* sv|MAGIC* mg
-p      |int    |magic_setisa   |SV* sv|MAGIC* mg
-p      |int    |magic_setglob  |SV* sv|MAGIC* mg
-p      |int    |magic_setmglob |SV* sv|MAGIC* mg
-p      |int    |magic_setnkeys |SV* sv|MAGIC* mg
-p      |int    |magic_setpack  |SV* sv|MAGIC* mg
-p      |int    |magic_setpos   |SV* sv|MAGIC* mg
-p      |int    |magic_setsig   |SV* sv|MAGIC* mg
-p      |int    |magic_setsubstr|SV* sv|MAGIC* mg
-p      |int    |magic_settaint |SV* sv|MAGIC* mg
-p      |int    |magic_setuvar  |SV* sv|MAGIC* mg
-p      |int    |magic_setvec   |SV* sv|MAGIC* mg
-p      |int    |magic_set_all_env|SV* sv|MAGIC* mg
-p      |U32    |magic_sizepack |SV* sv|MAGIC* mg
-p      |int    |magic_wipepack |SV* sv|MAGIC* mg
-p      |void   |magicname      |char* sym|char* name|I32 namlen
-Ap     |void   |markstack_grow
-#if defined(USE_LOCALE_COLLATE)
-p      |char*  |mem_collxfrm   |const char* s|STRLEN len|STRLEN* xlen
-#endif
-Afp    |SV*    |mess           |const char* pat|...
-Ap     |SV*    |vmess          |const char* pat|va_list* args
-p      |void   |qerror         |SV* err
-Apd     |void   |sortsv         |SV ** array|size_t num_elts|SVCOMPARE_t cmp
-Apd    |int    |mg_clear       |SV* sv
-Apd    |int    |mg_copy        |SV* sv|SV* nsv|const char* key|I32 klen
-Apd    |MAGIC* |mg_find        |SV* sv|int type
-Apd    |int    |mg_free        |SV* sv
-Apd    |int    |mg_get         |SV* sv
-Apd    |U32    |mg_length      |SV* sv
-Apd    |void   |mg_magical     |SV* sv
-Apd    |int    |mg_set         |SV* sv
-Ap     |I32    |mg_size        |SV* sv
-Ap     |void   |mini_mktime    |struct tm *pm
-p      |OP*    |mod            |OP* o|I32 type
-p      |int    |mode_from_discipline|SV* discp
-Ap     |char*  |moreswitches   |char* s
-p      |OP*    |my             |OP* o
-Ap     |NV     |my_atof        |const char *s
-#if (!defined(HAS_MEMCPY) && !defined(HAS_BCOPY)) || (!defined(HAS_MEMMOVE) && !defined(HAS_SAFE_MEMCPY) && !defined(HAS_SAFE_BCOPY))
-Anp    |char*  |my_bcopy       |const char* from|char* to|I32 len
-#endif
-#if !defined(HAS_BZERO) && !defined(HAS_MEMSET)
-Anp    |char*  |my_bzero       |char* loc|I32 len
-#endif
-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
-Ap     |I32    |my_lstat
-#if !defined(HAS_MEMCMP) || !defined(HAS_SANE_MEMCMP)
-Anp    |I32    |my_memcmp      |const char* s1|const char* s2|I32 len
-#endif
-#if !defined(HAS_MEMSET)
-Anp    |void*  |my_memset      |char* loc|I32 ch|I32 len
-#endif
-Ap     |I32    |my_pclose      |PerlIO* ptr
-Ap     |PerlIO*|my_popen       |char* cmd|char* mode
-Ap     |PerlIO*|my_popen_list  |char* mode|int n|SV ** args
-Ap     |void   |my_setenv      |char* nam|char* val
-Ap     |I32    |my_stat
-Ap     |char * |my_strftime    |char *fmt|int sec|int min|int hour|int mday|int mon|int year|int wday|int yday|int isdst
-#if defined(MYSWAP)
-Ap     |short  |my_swap        |short s
-Ap     |long   |my_htonl       |long l
-Ap     |long   |my_ntohl       |long l
-#endif
-p      |void   |my_unexec
-Ap     |OP*    |newANONLIST    |OP* o
-Ap     |OP*    |newANONHASH    |OP* o
-Ap     |OP*    |newANONSUB     |I32 floor|OP* proto|OP* block
-Ap     |OP*    |newASSIGNOP    |I32 flags|OP* left|I32 optype|OP* right
-Ap     |OP*    |newCONDOP      |I32 flags|OP* expr|OP* trueop|OP* falseop
-Apd    |CV*    |newCONSTSUB    |HV* stash|char* name|SV* sv
-Ap     |void   |newFORM        |I32 floor|OP* o|OP* block
-Ap     |OP*    |newFOROP       |I32 flags|char* label|line_t forline \
-                               |OP* sclr|OP* expr|OP*block|OP*cont
-Ap     |OP*    |newLOGOP       |I32 optype|I32 flags|OP* left|OP* right
-Ap     |OP*    |newLOOPEX      |I32 type|OP* label
-Ap     |OP*    |newLOOPOP      |I32 flags|I32 debuggable|OP* expr|OP* block
-Ap     |OP*    |newNULLLIST
-Ap     |OP*    |newOP          |I32 optype|I32 flags
-Ap     |void   |newPROG        |OP* o
-Ap     |OP*    |newRANGE       |I32 flags|OP* left|OP* right
-Ap     |OP*    |newSLICEOP     |I32 flags|OP* subscript|OP* listop
-Ap     |OP*    |newSTATEOP     |I32 flags|char* label|OP* o
-Ap     |CV*    |newSUB         |I32 floor|OP* o|OP* proto|OP* block
-Apd    |CV*    |newXS          |char* name|XSUBADDR_t f|char* filename
-Apd    |AV*    |newAV
-Ap     |OP*    |newAVREF       |OP* o
-Ap     |OP*    |newBINOP       |I32 type|I32 flags|OP* first|OP* last
-Ap     |OP*    |newCVREF       |I32 flags|OP* o
-Ap     |OP*    |newGVOP        |I32 type|I32 flags|GV* gv
-Ap     |GV*    |newGVgen       |char* pack
-Ap     |OP*    |newGVREF       |I32 type|OP* o
-Ap     |OP*    |newHVREF       |OP* o
-Apd    |HV*    |newHV
-Ap     |HV*    |newHVhv        |HV* hv
-Ap     |IO*    |newIO
-Ap     |OP*    |newLISTOP      |I32 type|I32 flags|OP* first|OP* last
-Ap     |OP*    |newPADOP       |I32 type|I32 flags|SV* sv
-Ap     |OP*    |newPMOP        |I32 type|I32 flags
-Ap     |OP*    |newPVOP        |I32 type|I32 flags|char* pv
-Ap     |SV*    |newRV          |SV* pref
-Apd    |SV*    |newRV_noinc    |SV *sv
-Apd    |SV*    |newSV          |STRLEN len
-Ap     |OP*    |newSVREF       |OP* o
-Ap     |OP*    |newSVOP        |I32 type|I32 flags|SV* sv
-Apd    |SV*    |newSViv        |IV i
-Apd    |SV*    |newSVuv        |UV u
-Apd    |SV*    |newSVnv        |NV n
-Apd    |SV*    |newSVpv        |const char* s|STRLEN len
-Apd    |SV*    |newSVpvn       |const char* s|STRLEN len
-Apd    |SV*    |newSVpvn_share |const char* s|I32 len|U32 hash
-Afpd   |SV*    |newSVpvf       |const char* pat|...
-Ap     |SV*    |vnewSVpvf      |const char* pat|va_list* args
-Apd    |SV*    |newSVrv        |SV* rv|const char* classname
-Apd    |SV*    |newSVsv        |SV* old
-Ap     |OP*    |newUNOP        |I32 type|I32 flags|OP* first
-Ap     |OP*    |newWHILEOP     |I32 flags|I32 debuggable|LOOP* loop \
-                               |I32 whileline|OP* expr|OP* block|OP* cont
-
-Ap     |PERL_SI*|new_stackinfo|I32 stitems|I32 cxitems
-Apd    |char*  |new_vstring    |char *vstr|SV *sv
-p      |PerlIO*|nextargv       |GV* gv
-Ap     |char*  |ninstr         |const char* big|const char* bigend \
-                               |const char* little|const char* lend
-p      |OP*    |oopsCV         |OP* o
-Ap     |void   |op_free        |OP* arg
-p      |void   |package        |OP* o
-p      |PADOFFSET|pad_alloc    |I32 optype|U32 tmptype
-p      |PADOFFSET|pad_allocmy  |char* name
-p      |PADOFFSET|pad_findmy   |char* name
-p      |OP*    |oopsAV         |OP* o
-p      |OP*    |oopsHV         |OP* o
-p      |void   |pad_leavemy    |I32 fill
-Ap     |SV*    |pad_sv         |PADOFFSET po
-p      |void   |pad_free       |PADOFFSET po
-p      |void   |pad_reset
-p      |void   |pad_swipe      |PADOFFSET po
-p      |void   |peep           |OP* o
-dopM   |PerlIO*|start_glob     |SV* pattern|IO *io
-#if defined(USE_5005THREADS)
-Ap     |struct perl_thread*    |new_struct_thread|struct perl_thread *t
-#endif
-Ap     |void   |call_atexit    |ATEXIT_t fn|void *ptr
-Apd    |I32    |call_argv      |const char* sub_name|I32 flags|char** argv
-Apd    |I32    |call_method    |const char* methname|I32 flags
-Apd    |I32    |call_pv        |const char* sub_name|I32 flags
-Apd    |I32    |call_sv        |SV* sv|I32 flags
-p      |void   |despatch_signals
-Apd    |SV*    |eval_pv        |const char* p|I32 croak_on_error
-Apd    |I32    |eval_sv        |SV* sv|I32 flags
-Apd    |SV*    |get_sv         |const char* name|I32 create
-Apd    |AV*    |get_av         |const char* name|I32 create
-Apd    |HV*    |get_hv         |const char* name|I32 create
-Apd    |CV*    |get_cv         |const char* name|I32 create
-Ap     |int    |init_i18nl10n  |int printwarn
-Ap     |int    |init_i18nl14n  |int printwarn
-Ap     |void   |new_collate    |char* newcoll
-Ap     |void   |new_ctype      |char* newctype
-Ap     |void   |new_numeric    |char* newcoll
-Ap     |void   |set_numeric_local
-Ap     |void   |set_numeric_radix
-Ap     |void   |set_numeric_standard
-Apd    |void   |require_pv     |const char* pv
-p      |void   |pidgone        |Pid_t pid|int status
-Ap     |void   |pmflag         |U16* pmfl|int ch
-p      |OP*    |pmruntime      |OP* pm|OP* expr|OP* repl
-p      |OP*    |pmtrans        |OP* o|OP* expr|OP* repl
-p      |OP*    |pop_return
-Ap     |void   |pop_scope
-p      |OP*    |prepend_elem   |I32 optype|OP* head|OP* tail
-p      |void   |push_return    |OP* o
-Ap     |void   |push_scope
-p      |OP*    |ref            |OP* o|I32 type
-p      |OP*    |refkids        |OP* o|I32 type
-Ap     |void   |regdump        |regexp* r
-Ap     |SV*    |regclass_swash |struct regnode *n|bool doinit|SV **initsvp
-Ap     |I32    |pregexec       |regexp* prog|char* stringarg \
-                               |char* strend|char* strbeg|I32 minend \
-                               |SV* screamer|U32 nosave
-Ap     |void   |pregfree       |struct regexp* r
-Ap     |regexp*|pregcomp       |char* exp|char* xend|PMOP* pm
-Ap     |char*  |re_intuit_start|regexp* prog|SV* sv|char* strpos \
-                               |char* strend|U32 flags \
-                               |struct re_scream_pos_data_s *data
-Ap     |SV*    |re_intuit_string|regexp* prog
-Ap     |I32    |regexec_flags  |regexp* prog|char* stringarg \
-                               |char* strend|char* strbeg|I32 minend \
-                               |SV* screamer|void* data|U32 flags
-Ap     |regnode*|regnext       |regnode* p
-p      |void   |regprop        |SV* sv|regnode* o
-Ap     |void   |repeatcpy      |char* to|const char* from|I32 len|I32 count
-Ap     |char*  |rninstr        |const char* big|const char* bigend \
-                               |const char* little|const char* lend
-Ap     |Sighandler_t|rsignal   |int i|Sighandler_t t
-p      |int    |rsignal_restore|int i|Sigsave_t* t
-p      |int    |rsignal_save   |int i|Sighandler_t t1|Sigsave_t* t2
-Ap     |Sighandler_t|rsignal_state|int i
-p      |void   |rxres_free     |void** rsp
-p      |void   |rxres_restore  |void** rsp|REGEXP* prx
-p      |void   |rxres_save     |void** rsp|REGEXP* prx
-#if !defined(HAS_RENAME)
-p      |I32    |same_dirent    |char* a|char* b
-#endif
-Apd    |char*  |savepv         |const char* sv
-Apd    |char*  |savepvn        |const char* sv|I32 len
-Ap     |void   |savestack_grow
-Ap     |void   |save_aelem     |AV* av|I32 idx|SV **sptr
-Ap     |I32    |save_alloc     |I32 size|I32 pad
-Ap     |void   |save_aptr      |AV** aptr
-Ap     |AV*    |save_ary       |GV* gv
-Ap     |void   |save_clearsv   |SV** svp
-Ap     |void   |save_delete    |HV* hv|char* key|I32 klen
-Ap     |void   |save_destructor|DESTRUCTORFUNC_NOCONTEXT_t f|void* p
-Ap     |void   |save_destructor_x|DESTRUCTORFUNC_t f|void* p
-Ap     |void   |save_freesv    |SV* sv
-p      |void   |save_freeop    |OP* o
-Ap     |void   |save_freepv    |char* pv
-Ap     |void   |save_generic_svref|SV** sptr
-Ap     |void   |save_generic_pvref|char** str
-Ap     |void   |save_gp        |GV* gv|I32 empty
-Ap     |HV*    |save_hash      |GV* gv
-Ap     |void   |save_helem     |HV* hv|SV *key|SV **sptr
-Ap     |void   |save_hints
-Ap     |void   |save_hptr      |HV** hptr
-Ap     |void   |save_I16       |I16* intp
-Ap     |void   |save_I32       |I32* intp
-Ap     |void   |save_I8        |I8* bytep
-Ap     |void   |save_int       |int* intp
-Ap     |void   |save_item      |SV* item
-Ap     |void   |save_iv        |IV* iv
-Ap     |void   |save_list      |SV** sarg|I32 maxsarg
-Ap     |void   |save_long      |long* longp
-Ap     |void   |save_mortalizesv|SV* sv
-Ap     |void   |save_nogv      |GV* gv
-p      |void   |save_op
-Ap     |SV*    |save_scalar    |GV* gv
-Ap     |void   |save_pptr      |char** pptr
-Ap     |void   |save_vptr      |void* pptr
-Ap     |void   |save_re_context
-Ap     |void   |save_padsv     |PADOFFSET off
-Ap     |void   |save_sptr      |SV** sptr
-Ap     |SV*    |save_svref     |SV** sptr
-Ap     |SV**   |save_threadsv  |PADOFFSET i
-p      |OP*    |sawparens      |OP* o
-p      |OP*    |scalar         |OP* o
-p      |OP*    |scalarkids     |OP* o
-p      |OP*    |scalarseq      |OP* o
-p      |OP*    |scalarvoid     |OP* o
-Apd    |NV     |scan_bin       |char* start|STRLEN len|STRLEN* retlen
-Apd    |NV     |scan_hex       |char* start|STRLEN len|STRLEN* retlen
-Ap     |char*  |scan_num       |char* s|YYSTYPE *lvalp
-Apd    |NV     |scan_oct       |char* start|STRLEN len|STRLEN* retlen
-p      |OP*    |scope          |OP* o
-Ap     |char*  |screaminstr    |SV* bigsv|SV* littlesv|I32 start_shift \
-                               |I32 end_shift|I32 *state|I32 last
-#if !defined(VMS)
-p      |I32    |setenv_getix   |char* nam
-#endif
-p      |void   |setdefout      |GV* gv
-p      |HEK*   |share_hek      |const char* sv|I32 len|U32 hash
-np     |Signal_t |sighandler   |int sig
-Ap     |SV**   |stack_grow     |SV** sp|SV**p|int n
-Ap     |I32    |start_subparse |I32 is_format|U32 flags
-p      |void   |sub_crush_depth|CV* cv
-Apd    |bool   |sv_2bool       |SV* sv
-Apd    |CV*    |sv_2cv         |SV* sv|HV** st|GV** gvp|I32 lref
-Apd    |IO*    |sv_2io         |SV* sv
-Apd    |IV     |sv_2iv         |SV* sv
-Apd    |SV*    |sv_2mortal     |SV* sv
-Apd    |NV     |sv_2nv         |SV* sv
-Am     |char*  |sv_2pv         |SV* sv|STRLEN* lp
-Apd    |char*  |sv_2pvutf8     |SV* sv|STRLEN* lp
-Apd    |char*  |sv_2pvbyte     |SV* sv|STRLEN* lp
-Ap     |char*  |sv_pvn_nomg    |SV* sv|STRLEN* lp
-Apd    |UV     |sv_2uv         |SV* sv
-Apd    |IV     |sv_iv          |SV* sv
-Apd    |UV     |sv_uv          |SV* sv
-Apd    |NV     |sv_nv          |SV* sv
-Apd    |char*  |sv_pvn         |SV *sv|STRLEN *len
-Apd    |char*  |sv_pvutf8n     |SV *sv|STRLEN *len
-Apd    |char*  |sv_pvbyten     |SV *sv|STRLEN *len
-Apd    |I32    |sv_true        |SV *sv
-pd     |void   |sv_add_arena   |char* ptr|U32 size|U32 flags
-Apd    |int    |sv_backoff     |SV* sv
-Apd    |SV*    |sv_bless       |SV* sv|HV* stash
-Afpd   |void   |sv_catpvf      |SV* sv|const char* pat|...
-Ap     |void   |sv_vcatpvf     |SV* sv|const char* pat|va_list* args
-Apd    |void   |sv_catpv       |SV* sv|const char* ptr
-Amd    |void   |sv_catpvn      |SV* sv|const char* ptr|STRLEN len
-Amd    |void   |sv_catsv       |SV* dsv|SV* ssv
-Apd    |void   |sv_chop        |SV* sv|char* ptr
-pd     |I32    |sv_clean_all
-pd     |void   |sv_clean_objs
-Apd    |void   |sv_clear       |SV* sv
-Apd    |I32    |sv_cmp         |SV* sv1|SV* sv2
-Apd    |I32    |sv_cmp_locale  |SV* sv1|SV* sv2
-#if defined(USE_LOCALE_COLLATE)
-Apd    |char*  |sv_collxfrm    |SV* sv|STRLEN* nxp
-#endif
-Ap     |OP*    |sv_compile_2op |SV* sv|OP** startp|char* code|AV** avp
-Apd    |int    |getcwd_sv      |SV* sv
-Apd    |void   |sv_dec         |SV* sv
-Ap     |void   |sv_dump        |SV* sv
-Apd    |bool   |sv_derived_from|SV* sv|const char* name
-Apd    |I32    |sv_eq          |SV* sv1|SV* sv2
-Apd    |void   |sv_free        |SV* sv
-pd     |void   |sv_free_arenas
-Apd    |char*  |sv_gets        |SV* sv|PerlIO* fp|I32 append
-Apd    |char*  |sv_grow        |SV* sv|STRLEN newlen
-Apd    |void   |sv_inc         |SV* sv
-Apd    |void   |sv_insert      |SV* bigsv|STRLEN offset|STRLEN len \
-                               |char* little|STRLEN littlelen
-Apd    |int    |sv_isa         |SV* sv|const char* name
-Apd    |int    |sv_isobject    |SV* sv
-Apd    |STRLEN |sv_len         |SV* sv
-Apd    |STRLEN |sv_len_utf8    |SV* sv
-Apd    |void   |sv_magic       |SV* sv|SV* obj|int how|const char* name \
-                               |I32 namlen
-Apd    |SV*    |sv_mortalcopy  |SV* oldsv
-Apd    |SV*    |sv_newmortal
-Apd    |SV*    |sv_newref      |SV* sv
-Ap     |char*  |sv_peek        |SV* sv
-Apd    |void   |sv_pos_u2b     |SV* sv|I32* offsetp|I32* lenp
-Apd    |void   |sv_pos_b2u     |SV* sv|I32* offsetp
-Amd    |char*  |sv_pvn_force   |SV* sv|STRLEN* lp
-Apd    |char*  |sv_pvutf8n_force|SV* sv|STRLEN* lp
-Apd    |char*  |sv_pvbyten_force|SV* sv|STRLEN* lp
-Apd    |char*  |sv_recode_to_utf8      |SV* sv|SV *encoding
-Apd    |char*  |sv_reftype     |SV* sv|int ob
-Apd    |void   |sv_replace     |SV* sv|SV* nsv
-Apd    |void   |sv_report_used
-Apd    |void   |sv_reset       |char* s|HV* stash
-Afpd   |void   |sv_setpvf      |SV* sv|const char* pat|...
-Ap     |void   |sv_vsetpvf     |SV* sv|const char* pat|va_list* args
-Apd    |void   |sv_setiv       |SV* sv|IV num
-Apd    |void   |sv_setpviv     |SV* sv|IV num
-Apd    |void   |sv_setuv       |SV* sv|UV num
-Apd    |void   |sv_setnv       |SV* sv|NV num
-Apd    |SV*    |sv_setref_iv   |SV* rv|const char* classname|IV iv
-Apd    |SV*    |sv_setref_uv   |SV* rv|const char* classname|UV uv
-Apd    |SV*    |sv_setref_nv   |SV* rv|const char* classname|NV nv
-Apd    |SV*    |sv_setref_pv   |SV* rv|const char* classname|void* pv
-Apd    |SV*    |sv_setref_pvn  |SV* rv|const char* classname|char* pv \
-                               |STRLEN n
-Apd    |void   |sv_setpv       |SV* sv|const char* ptr
-Apd    |void   |sv_setpvn      |SV* sv|const char* ptr|STRLEN len
-Amd    |void   |sv_setsv       |SV* dsv|SV* ssv
-Apd    |void   |sv_taint       |SV* sv
-Apd    |bool   |sv_tainted     |SV* sv
-Apd    |int    |sv_unmagic     |SV* sv|int type
-Apd    |void   |sv_unref       |SV* sv
-Apd    |void   |sv_unref_flags |SV* sv|U32 flags
-Apd    |void   |sv_untaint     |SV* sv
-Apd    |bool   |sv_upgrade     |SV* sv|U32 mt
-Apd    |void   |sv_usepvn      |SV* sv|char* ptr|STRLEN len
-Apd    |void   |sv_vcatpvfn    |SV* sv|const char* pat|STRLEN patlen \
-                               |va_list* args|SV** svargs|I32 svmax \
-                               |bool *maybe_tainted
-Apd    |void   |sv_vsetpvfn    |SV* sv|const char* pat|STRLEN patlen \
-                               |va_list* args|SV** svargs|I32 svmax \
-                               |bool *maybe_tainted
-Ap     |NV     |str_to_version |SV *sv
-Ap     |SV*    |swash_init     |char* pkg|char* name|SV* listsv \
-                               |I32 minbits|I32 none
-Ap     |UV     |swash_fetch    |SV *sv|U8 *ptr|bool do_utf8
-Ap     |void   |taint_env
-Ap     |void   |taint_proper   |const char* f|const char* s
-Apd    |UV     |to_utf8_case   |U8 *p|U8* ustrp|STRLEN *lenp \
-                               |SV **swash|char *normal|char *special
-Apd    |UV     |to_utf8_lower  |U8 *p|U8* ustrp|STRLEN *lenp
-Apd    |UV     |to_utf8_upper  |U8 *p|U8* ustrp|STRLEN *lenp
-Apd    |UV     |to_utf8_title  |U8 *p|U8* ustrp|STRLEN *lenp
-Apd    |UV     |to_utf8_fold   |U8 *p|U8* ustrp|STRLEN *lenp
-#if defined(UNLINK_ALL_VERSIONS)
-Ap     |I32    |unlnk          |char* f
-#endif
-#if defined(USE_5005THREADS)
-Ap     |void   |unlock_condpair|void* svv
-#endif
-Ap     |void   |unsharepvn     |const char* sv|I32 len|U32 hash
-p      |void   |unshare_hek    |HEK* hek
-p      |void   |utilize        |int aver|I32 floor|OP* version|OP* id|OP* arg
-Ap     |U8*    |utf16_to_utf8  |U8* p|U8 *d|I32 bytelen|I32 *newlen
-Ap     |U8*    |utf16_to_utf8_reversed|U8* p|U8 *d|I32 bytelen|I32 *newlen
-Adp    |STRLEN |utf8_length    |U8* s|U8 *e
-Apd    |IV     |utf8_distance  |U8 *a|U8 *b
-Apd    |U8*    |utf8_hop       |U8 *s|I32 off
-ApMd   |U8*    |utf8_to_bytes  |U8 *s|STRLEN *len
-ApMd   |U8*    |bytes_from_utf8|U8 *s|STRLEN *len|bool *is_utf8
-ApMd   |U8*    |bytes_to_utf8  |U8 *s|STRLEN *len
-Apd    |UV     |utf8_to_uvchr  |U8 *s|STRLEN* retlen
-Apd    |UV     |utf8_to_uvuni  |U8 *s|STRLEN* retlen
-Adp    |UV     |utf8n_to_uvchr |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
-Adp    |UV     |utf8n_to_uvuni |U8 *s|STRLEN curlen|STRLEN* retlen|U32 flags
-Apd    |U8*    |uvchr_to_utf8  |U8 *d|UV uv
-Ap     |U8*    |uvuni_to_utf8  |U8 *d|UV uv
-Ap     |U8*    |uvchr_to_utf8_flags    |U8 *d|UV uv|UV flags
-Apd    |U8*    |uvuni_to_utf8_flags    |U8 *d|UV uv|UV flags
-Apd    |char*  |pv_uni_display |SV *dsv|U8 *spv|STRLEN len \
-                               |STRLEN pvlim|UV flags
-Apd    |char*  |sv_uni_display |SV *dsv|SV *ssv|STRLEN pvlim|UV flags
-p      |void   |vivify_defelem |SV* sv
-p      |void   |vivify_ref     |SV* sv|U32 to_what
-p      |I32    |wait4pid       |Pid_t pid|int* statusp|int flags
-p      |void   |report_evil_fh |GV *gv|IO *io|I32 op
-pd     |void   |report_uninit
-Afpd   |void   |warn           |const char* pat|...
-Ap     |void   |vwarn          |const char* pat|va_list* args
-Afp    |void   |warner         |U32 err|const char* pat|...
-Ap     |void   |vwarner        |U32 err|const char* pat|va_list* args
-p      |void   |watch          |char** addr
-Ap     |I32    |whichsig       |char* sig
-p      |int    |yyerror        |char* s
-#ifdef USE_PURE_BISON
-p      |int    |yylex_r        |YYSTYPE *lvalp|int *lcharp
-#endif
-p      |int    |yylex
-p      |int    |yyparse
-p      |int    |yywarn         |char* s
-#if defined(MYMALLOC)
-Ap     |void   |dump_mstats    |char* s
-Ap     |int    |get_mstats     |perl_mstats_t *buf|int buflen|int level
-#endif
-Anp    |Malloc_t|safesysmalloc |MEM_SIZE nbytes
-Anp    |Malloc_t|safesyscalloc |MEM_SIZE elements|MEM_SIZE size
-Anp    |Malloc_t|safesysrealloc|Malloc_t where|MEM_SIZE nbytes
-Anp    |Free_t |safesysfree    |Malloc_t where
-#if defined(LEAKTEST)
-Anp    |Malloc_t|safexmalloc   |I32 x|MEM_SIZE size
-Anp    |Malloc_t|safexcalloc   |I32 x|MEM_SIZE elements|MEM_SIZE size
-Anp    |Malloc_t|safexrealloc  |Malloc_t where|MEM_SIZE size
-Anp    |void   |safexfree      |Malloc_t where
-#endif
-#if defined(PERL_GLOBAL_STRUCT)
-Ap     |struct perl_vars *|GetVars
-#endif
-Ap     |int    |runops_standard
-Ap     |int    |runops_debug
-#if defined(USE_5005THREADS)
-Ap     |SV*    |sv_lock        |SV *sv
-#endif
-Afpd   |void   |sv_catpvf_mg   |SV *sv|const char* pat|...
-Ap     |void   |sv_vcatpvf_mg  |SV* sv|const char* pat|va_list* args
-Apd    |void   |sv_catpv_mg    |SV *sv|const char *ptr
-Apd    |void   |sv_catpvn_mg   |SV *sv|const char *ptr|STRLEN len
-Apd    |void   |sv_catsv_mg    |SV *dstr|SV *sstr
-Afpd   |void   |sv_setpvf_mg   |SV *sv|const char* pat|...
-Ap     |void   |sv_vsetpvf_mg  |SV* sv|const char* pat|va_list* args
-Apd    |void   |sv_setiv_mg    |SV *sv|IV i
-Apd    |void   |sv_setpviv_mg  |SV *sv|IV iv
-Apd    |void   |sv_setuv_mg    |SV *sv|UV u
-Apd    |void   |sv_setnv_mg    |SV *sv|NV num
-Apd    |void   |sv_setpv_mg    |SV *sv|const char *ptr
-Apd    |void   |sv_setpvn_mg   |SV *sv|const char *ptr|STRLEN len
-Apd    |void   |sv_setsv_mg    |SV *dstr|SV *sstr
-Apd    |void   |sv_usepvn_mg   |SV *sv|char *ptr|STRLEN len
-Ap     |MGVTBL*|get_vtbl       |int vtbl_id
-p      |char*  |pv_display     |SV *dsv|char *pv|STRLEN cur|STRLEN len \
-                               |STRLEN pvlim
-Afp    |void   |dump_indent    |I32 level|PerlIO *file|const char* pat|...
-Ap     |void   |dump_vindent   |I32 level|PerlIO *file|const char* pat \
-                               |va_list *args
-Ap     |void   |do_gv_dump     |I32 level|PerlIO *file|char *name|GV *sv
-Ap     |void   |do_gvgv_dump   |I32 level|PerlIO *file|char *name|GV *sv
-Ap     |void   |do_hv_dump     |I32 level|PerlIO *file|char *name|HV *sv
-Ap     |void   |do_magic_dump  |I32 level|PerlIO *file|MAGIC *mg|I32 nest \
-                               |I32 maxnest|bool dumpops|STRLEN pvlim
-Ap     |void   |do_op_dump     |I32 level|PerlIO *file|OP *o
-Ap     |void   |do_pmop_dump   |I32 level|PerlIO *file|PMOP *pm
-Ap     |void   |do_sv_dump     |I32 level|PerlIO *file|SV *sv|I32 nest \
-                               |I32 maxnest|bool dumpops|STRLEN pvlim
-Ap     |void   |magic_dump     |MAGIC *mg
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-Ap     |void*  |default_protect|volatile JMPENV *je|int *excpt \
-                               |protect_body_t body|...
-Ap     |void*  |vdefault_protect|volatile JMPENV *je|int *excpt \
-                               |protect_body_t body|va_list *args
-#endif
-Ap     |void   |reginitcolors
-Apd    |char*  |sv_2pv_nolen   |SV* sv
-Apd    |char*  |sv_2pvutf8_nolen|SV* sv
-Apd    |char*  |sv_2pvbyte_nolen|SV* sv
-Apd    |char*  |sv_pv          |SV *sv
-Apd    |char*  |sv_pvutf8      |SV *sv
-Apd    |char*  |sv_pvbyte      |SV *sv
-Amd    |STRLEN |sv_utf8_upgrade|SV *sv
-ApdM   |bool   |sv_utf8_downgrade|SV *sv|bool fail_ok
-Apd    |void   |sv_utf8_encode |SV *sv
-ApdM   |bool   |sv_utf8_decode |SV *sv
-Apd    |void   |sv_force_normal|SV *sv
-Apd    |void   |sv_force_normal_flags|SV *sv|U32 flags
-Ap     |void   |tmps_grow      |I32 n
-Apd    |SV*    |sv_rvweaken    |SV *sv
-p      |int    |magic_killbackrefs|SV *sv|MAGIC *mg
-Ap     |OP*    |newANONATTRSUB |I32 floor|OP *proto|OP *attrs|OP *block
-Ap     |CV*    |newATTRSUB     |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
-Ap     |void   |newMYSUB       |I32 floor|OP *o|OP *proto|OP *attrs|OP *block
-p      |OP *   |my_attrs       |OP *o|OP *attrs
-p      |void   |boot_core_xsutils
-#if defined(USE_ITHREADS)
-Ap     |PERL_CONTEXT*|cx_dup   |PERL_CONTEXT* cx|I32 ix|I32 max|CLONE_PARAMS* param
-Ap     |PERL_SI*|si_dup        |PERL_SI* si|CLONE_PARAMS* param
-Ap     |ANY*   |ss_dup         |PerlInterpreter* proto_perl|CLONE_PARAMS* param
-Ap     |void*  |any_dup        |void* v|PerlInterpreter* proto_perl
-Ap     |HE*    |he_dup         |HE* e|bool shared|CLONE_PARAMS* param
-Ap     |REGEXP*|re_dup         |REGEXP* r|CLONE_PARAMS* param
-Ap     |PerlIO*|fp_dup         |PerlIO* fp|char type|CLONE_PARAMS* param
-Ap     |DIR*   |dirp_dup       |DIR* dp
-Ap     |GP*    |gp_dup         |GP* gp|CLONE_PARAMS* param
-Ap     |MAGIC* |mg_dup         |MAGIC* mg|CLONE_PARAMS* param
-Ap     |SV*    |sv_dup         |SV* sstr|CLONE_PARAMS* param
-#if defined(HAVE_INTERP_INTERN)
-Ap     |void   |sys_intern_dup |struct interp_intern* src \
-                               |struct interp_intern* dst
-#endif
-Ap     |PTR_TBL_t*|ptr_table_new
-Ap     |void*  |ptr_table_fetch|PTR_TBL_t *tbl|void *sv
-Ap     |void   |ptr_table_store|PTR_TBL_t *tbl|void *oldsv|void *newsv
-Ap     |void   |ptr_table_split|PTR_TBL_t *tbl
-Ap     |void   |ptr_table_clear|PTR_TBL_t *tbl
-Ap     |void   |ptr_table_free|PTR_TBL_t *tbl
-#endif
-#if defined(HAVE_INTERP_INTERN)
-Ap     |void   |sys_intern_clear
-Ap     |void   |sys_intern_init
-#endif
-
-Ap |char * |custom_op_name|OP* op
-Ap |char * |custom_op_desc|OP* op
-
-
-END_EXTERN_C
-
-#if defined(PERL_IN_AV_C) || defined(PERL_DECL_PROT)
-s      |I32    |avhv_index_sv  |SV* sv
-s      |I32    |avhv_index     |AV* av|SV* sv|U32 hash
-#endif
-
-#if defined(PERL_IN_DOOP_C) || defined(PERL_DECL_PROT)
-s      |I32    |do_trans_simple        |SV *sv
-s      |I32    |do_trans_count         |SV *sv
-s      |I32    |do_trans_complex       |SV *sv
-s      |I32    |do_trans_simple_utf8   |SV *sv
-s      |I32    |do_trans_count_utf8    |SV *sv
-s      |I32    |do_trans_complex_utf8  |SV *sv
-#endif
-
-#if defined(PERL_IN_GV_C) || defined(PERL_DECL_PROT)
-s      |void   |gv_init_sv     |GV *gv|I32 sv_type
-s      |void   |require_errno  |GV *gv
-#endif
-
-#if defined(PERL_IN_HV_C) || defined(PERL_DECL_PROT)
-s      |void   |hsplit         |HV *hv
-s      |void   |hfreeentries   |HV *hv
-s      |void   |more_he
-s      |HE*    |new_he
-s      |void   |del_he         |HE *p
-s      |HEK*   |save_hek       |const char *str|I32 len|U32 hash
-s      |void   |hv_magic_check |HV *hv|bool *needs_copy|bool *needs_store
-#endif
-
-#if defined(PERL_IN_MG_C) || defined(PERL_DECL_PROT)
-s      |void   |save_magic     |I32 mgs_ix|SV *sv
-s      |int    |magic_methpack |SV *sv|MAGIC *mg|char *meth
-s      |int    |magic_methcall |SV *sv|MAGIC *mg|char *meth|I32 f \
-                               |int n|SV *val
-#endif
-
-#if defined(PERL_IN_OP_C) || defined(PERL_DECL_PROT)
-s      |I32    |list_assignment|OP *o
-s      |void   |bad_type       |I32 n|char *t|char *name|OP *kid
-s      |void   |cop_free       |COP *cop
-s      |OP*    |modkids        |OP *o|I32 type
-s      |void   |no_bareword_allowed|OP *o
-s      |OP*    |no_fh_allowed  |OP *o
-s      |OP*    |scalarboolean  |OP *o
-s      |OP*    |too_few_arguments|OP *o|char* name
-s      |OP*    |too_many_arguments|OP *o|char* name
-s      |PADOFFSET|pad_addlex   |SV* name
-s      |PADOFFSET|pad_findlex  |char* name|PADOFFSET newoff|U32 seq \
-                               |CV* startcv|I32 cx_ix|I32 saweval|U32 flags
-s      |OP*    |newDEFSVOP
-s      |OP*    |new_logop      |I32 type|I32 flags|OP **firstp|OP **otherp
-s      |void   |simplify_sort  |OP *o
-s      |bool   |is_handle_constructor  |OP *o|I32 argnum
-s      |char*  |gv_ename       |GV *gv
-#  if defined(DEBUG_CLOSURES)
-s      |void   |cv_dump        |CV *cv
-#  endif
-s      |CV*    |cv_clone2      |CV *proto|CV *outside
-s      |bool   |scalar_mod_type|OP *o|I32 type
-s      |OP *   |my_kid         |OP *o|OP *attrs|OP **imopsp
-s      |OP *   |dup_attrlist   |OP *o
-s      |void   |apply_attrs    |HV *stash|SV *target|OP *attrs|bool for_my
-s      |void   |apply_attrs_my |HV *stash|OP *target|OP *attrs|OP **imopsp
-#  if defined(PL_OP_SLAB_ALLOC)
-s      |void*  |Slab_Alloc     |int m|size_t sz
-#  endif
-#endif
-
-#if defined(PERL_IN_PERL_C) || defined(PERL_DECL_PROT)
-s      |void   |find_beginning
-s      |void   |forbid_setid   |char *
-s      |void   |incpush        |char *|int|int
-s      |void   |init_interp
-s      |void   |init_ids
-s      |void   |init_lexer
-s      |void   |init_main_stash
-s      |void   |init_perllib
-s      |void   |init_postdump_symbols|int|char **|char **
-s      |void   |init_predump_symbols
-rs     |void   |my_exit_jump
-s      |void   |nuke_stacks
-s      |void   |open_script    |char *|bool|SV *|int *fd
-s      |void   |usage          |char *
-s      |void   |validate_suid  |char *|char*|int
-#  if defined(IAMSUID)
-s      |int    |fd_on_nosuid_fs|int fd
-#  endif
-s      |void*  |parse_body     |char **env|XSINIT_t xsinit
-s      |void*  |run_body       |I32 oldscope
-s      |void   |call_body      |OP *myop|int is_eval
-s      |void*  |call_list_body |CV *cv
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-s      |void*  |vparse_body    |va_list args
-s      |void*  |vrun_body      |va_list args
-s      |void*  |vcall_body     |va_list args
-s      |void*  |vcall_list_body|va_list args
-#endif
-#  if defined(USE_5005THREADS)
-s      |struct perl_thread *   |init_main_thread
-#  endif
-#endif
-
-#if defined(PERL_IN_PP_C) || defined(PERL_DECL_PROT)
-s      |SV*    |refto          |SV* sv
-s      |U32    |seed
-#endif
-
-#if defined(PERL_IN_PP_PACK_C) || defined(PERL_DECL_PROT)
-s      |void   |doencodes      |SV* sv|char* s|I32 len
-s      |SV*    |mul128         |SV *sv|U8 m
-s      |SV*    |is_an_int      |char *s|STRLEN l
-s      |int    |div128         |SV *pnum|bool *done
-#endif
-
-#if defined(PERL_IN_PP_CTL_C) || defined(PERL_DECL_PROT)
-s      |OP*    |docatch        |OP *o
-s      |void*  |docatch_body
-#if defined(PERL_FLEXIBLE_EXCEPTIONS)
-s      |void*  |vdocatch_body  |va_list args
-#endif
-s      |OP*    |dofindlabel    |OP *o|char *label|OP **opstack|OP **oplimit
-s      |void   |doparseform    |SV *sv
-s      |I32    |dopoptoeval    |I32 startingblock
-s      |I32    |dopoptolabel   |char *label
-s      |I32    |dopoptoloop    |I32 startingblock
-s      |I32    |dopoptosub     |I32 startingblock
-s      |I32    |dopoptosub_at  |PERL_CONTEXT* cxstk|I32 startingblock
-s      |void   |save_lines     |AV *array|SV *sv
-s      |OP*    |doeval         |int gimme|OP** startop
-s      |PerlIO *|doopen_pmc    |const char *name|const char *mode
-#endif
-
-#if defined(PERL_IN_PP_HOT_C) || defined(PERL_DECL_PROT)
-s      |int    |do_maybe_phash |AV *ary|SV **lelem|SV **firstlelem \
-                               |SV **relem|SV **lastrelem
-s      |void   |do_oddball     |HV *hash|SV **relem|SV **firstrelem
-s      |CV*    |get_db_sub     |SV **svp|CV *cv
-s      |SV*    |method_common  |SV* meth|U32* hashp
-#endif
-
-#if defined(PERL_IN_PP_SYS_C) || defined(PERL_DECL_PROT)
-s      |OP*    |doform         |CV *cv|GV *gv|OP *retop
-s      |int    |emulate_eaccess|const char* path|Mode_t mode
-#  if !defined(HAS_MKDIR) || !defined(HAS_RMDIR)
-s      |int    |dooneliner     |char *cmd|char *filename
-#  endif
-#endif
-
-#if defined(PERL_IN_REGCOMP_C) || defined(PERL_DECL_PROT)
-s      |regnode*|reg           |struct RExC_state_t*|I32|I32 *
-s      |regnode*|reganode      |struct RExC_state_t*|U8|U32
-s      |regnode*|regatom       |struct RExC_state_t*|I32 *
-s      |regnode*|regbranch     |struct RExC_state_t*|I32 *|I32
-s      |void   |reguni         |struct RExC_state_t*|UV|char *|STRLEN*
-s      |regnode*|regclass      |struct RExC_state_t*
-s      |I32    |regcurly       |char *
-s      |regnode*|reg_node      |struct RExC_state_t*|U8
-s      |regnode*|regpiece      |struct RExC_state_t*|I32 *
-s      |void   |reginsert      |struct RExC_state_t*|U8|regnode *
-s      |void   |regoptail      |struct RExC_state_t*|regnode *|regnode *
-s      |void   |regtail        |struct RExC_state_t*|regnode *|regnode *
-s      |char*|regwhite |char *|char *
-s      |char*|nextchar |struct RExC_state_t*
-#  ifdef DEBUGGING
-s      |regnode*|dumpuntil     |regnode *start|regnode *node \
-                               |regnode *last|SV* sv|I32 l
-s      |void   |put_byte       |SV* sv|int c
-#  endif
-s      |void   |scan_commit    |struct RExC_state_t*|struct scan_data_t *data
-s      |void   |cl_anything    |struct RExC_state_t*|struct regnode_charclass_class *cl
-s      |int    |cl_is_anything |struct regnode_charclass_class *cl
-s      |void   |cl_init        |struct RExC_state_t*|struct regnode_charclass_class *cl
-s      |void   |cl_init_zero   |struct RExC_state_t*|struct regnode_charclass_class *cl
-s      |void   |cl_and         |struct regnode_charclass_class *cl \
-                               |struct regnode_charclass_class *and_with
-s      |void   |cl_or          |struct RExC_state_t*|struct regnode_charclass_class *cl \
-                               |struct regnode_charclass_class *or_with
-s      |I32    |study_chunk    |struct RExC_state_t*|regnode **scanp|I32 *deltap \
-                               |regnode *last|struct scan_data_t *data \
-                               |U32 flags
-s      |I32    |add_data       |struct RExC_state_t*|I32 n|char *s
-rs     |void|re_croak2 |const char* pat1|const char* pat2|...
-s      |I32    |regpposixcc    |struct RExC_state_t*|I32 value
-s      |void   |checkposixcc   |struct RExC_state_t*
-#endif
-
-#if defined(PERL_IN_REGEXEC_C) || defined(PERL_DECL_PROT)
-s      |I32    |regmatch       |regnode *prog
-s      |I32    |regrepeat      |regnode *p|I32 max
-s      |I32    |regrepeat_hard |regnode *p|I32 max|I32 *lp
-s      |I32    |regtry         |regexp *prog|char *startpos
-s      |bool   |reginclass     |regnode *n|U8 *p|bool do_utf8sv_is_utf8
-s      |CHECKPOINT|regcppush   |I32 parenfloor
-s      |char*|regcppop
-s      |char*|regcp_set_to     |I32 ss
-s      |void   |cache_re       |regexp *prog
-s      |U8*    |reghop         |U8 *pos|I32 off
-s      |U8*    |reghop3        |U8 *pos|I32 off|U8 *lim
-s      |U8*    |reghopmaybe    |U8 *pos|I32 off
-s      |U8*    |reghopmaybe3   |U8 *pos|I32 off|U8 *lim
-s      |char*  |find_byclass   |regexp * prog|regnode *c|char *s|char *strend|char *startpos|I32 norun
-#endif
-
-#if defined(PERL_IN_DUMP_C) || defined(PERL_DECL_PROT)
-s      |CV*    |deb_curcv      |I32 ix
-s      |void   |debprof        |OP *o
-#endif
-
-#if defined(PERL_IN_SCOPE_C) || defined(PERL_DECL_PROT)
-s      |SV*    |save_scalar_at |SV **sptr
-#endif
-
-#if defined(USE_ITHREADS)
-Adp    |void        |sharedsv_init
-Adp    |shared_sv*  |sharedsv_new
-Adp    |shared_sv*  |sharedsv_find          |SV* sv
-Adp    |void        |sharedsv_lock          |shared_sv* ssv
-Adp    |void        |sharedsv_unlock        |shared_sv* ssv
-p      |void        |sharedsv_unlock_scope  |shared_sv* ssv
-Adp    |void        |sharedsv_thrcnt_inc    |shared_sv* ssv
-Adp    |void        |sharedsv_thrcnt_dec    |shared_sv* ssv
-#endif
-
-#if defined(PERL_IN_SV_C) || defined(PERL_DECL_PROT)
-s      |IV     |asIV           |SV* sv
-s      |UV     |asUV           |SV* sv
-s      |SV*    |more_sv
-s      |void   |more_xiv
-s      |void   |more_xnv
-s      |void   |more_xpv
-s      |void   |more_xpviv
-s      |void   |more_xpvnv
-s      |void   |more_xpvcv
-s      |void   |more_xpvav
-s      |void   |more_xpvhv
-s      |void   |more_xpvmg
-s      |void   |more_xpvlv
-s      |void   |more_xpvbm
-s      |void   |more_xrv
-s      |XPVIV* |new_xiv
-s      |XPVNV* |new_xnv
-s      |XPV*   |new_xpv
-s      |XPVIV* |new_xpviv
-s      |XPVNV* |new_xpvnv
-s      |XPVCV* |new_xpvcv
-s      |XPVAV* |new_xpvav
-s      |XPVHV* |new_xpvhv
-s      |XPVMG* |new_xpvmg
-s      |XPVLV* |new_xpvlv
-s      |XPVBM* |new_xpvbm
-s      |XRV*   |new_xrv
-s      |void   |del_xiv        |XPVIV* p
-s      |void   |del_xnv        |XPVNV* p
-s      |void   |del_xpv        |XPV* p
-s      |void   |del_xpviv      |XPVIV* p
-s      |void   |del_xpvnv      |XPVNV* p
-s      |void   |del_xpvcv      |XPVCV* p
-s      |void   |del_xpvav      |XPVAV* p
-s      |void   |del_xpvhv      |XPVHV* p
-s      |void   |del_xpvmg      |XPVMG* p
-s      |void   |del_xpvlv      |XPVLV* p
-s      |void   |del_xpvbm      |XPVBM* p
-s      |void   |del_xrv        |XRV* p
-s      |void   |sv_unglob      |SV* sv
-s      |void   |not_a_number   |SV *sv
-s      |I32    |visit          |SVFUNC_t f
-s      |void   |sv_add_backref |SV *tsv|SV *sv
-s      |void   |sv_del_backref |SV *sv
-#  ifdef DEBUGGING
-s      |void   |del_sv |SV *p
-#  endif
-#  if !defined(NV_PRESERVES_UV)
-s      |int    |sv_2iuv_non_preserve   |SV *sv|I32 numtype
-#  endif
-s      |I32    |expect_number  |char** pattern
-#
-#  if defined(USE_ITHREADS)
-s      |SV*    |gv_share       |SV *sv
-#  endif
-#endif
-
-#if defined(PERL_IN_TOKE_C) || defined(PERL_DECL_PROT)
-s      |void   |check_uni
-s      |void   |force_next     |I32 type
-s      |char*  |force_version  |char *start|int guessing
-s      |char*  |force_word     |char *start|int token|int check_keyword \
-                               |int allow_pack|int allow_tick
-s      |SV*    |tokeq          |SV *sv
-s      |int    |pending_ident
-s      |char*  |scan_const     |char *start
-s      |char*  |scan_formline  |char *s
-s      |char*  |scan_heredoc   |char *s
-s      |char*  |scan_ident     |char *s|char *send|char *dest \
-                               |STRLEN destlen|I32 ck_uni
-s      |char*  |scan_inputsymbol|char *start
-s      |char*  |scan_pat       |char *start|I32 type
-s      |char*  |scan_str       |char *start|int keep_quoted|int keep_delims
-s      |char*  |scan_subst     |char *start
-s      |char*  |scan_trans     |char *start
-s      |char*  |scan_word      |char *s|char *dest|STRLEN destlen \
-                               |int allow_package|STRLEN *slp
-s      |char*  |skipspace      |char *s
-s      |char*  |swallow_bom    |U8 *s
-s      |void   |checkcomma     |char *s|char *name|char *what
-s      |void   |force_ident    |char *s|int kind
-s      |void   |incline        |char *s
-s      |int    |intuit_method  |char *s|GV *gv
-s      |int    |intuit_more    |char *s
-s      |I32    |lop            |I32 f|int x|char *s
-s      |void   |missingterm    |char *s
-s      |void   |no_op          |char *what|char *s
-s      |void   |set_csh
-s      |I32    |sublex_done
-s      |I32    |sublex_push
-s      |I32    |sublex_start
-s      |char * |filter_gets    |SV *sv|PerlIO *fp|STRLEN append
-s      |HV *   |find_in_my_stash|char *pkgname|I32 len
-s      |SV*    |new_constant   |char *s|STRLEN len|const char *key|SV *sv \
-                               |SV *pv|const char *type
-#  if defined(DEBUGGING)
-s      |void   |tokereport     |char *thing|char *s|I32 rv
-#  endif
-s      |int    |ao             |int toketype
-s      |void   |depcom
-s      |char*  |incl_perldb
-#if 0
-s      |I32    |utf16_textfilter|int idx|SV *sv|int maxlen
-s      |I32    |utf16rev_textfilter|int idx|SV *sv|int maxlen
-#endif
-#  if defined(CRIPPLED_CC)
-s      |int    |uni            |I32 f|char *s
-#  endif
-#  if defined(PERL_CR_FILTER)
-s      |I32    |cr_textfilter  |int idx|SV *sv|int maxlen
-#  endif
-#endif
-
-#if defined(PERL_IN_UNIVERSAL_C) || defined(PERL_DECL_PROT)
-s      |SV*|isa_lookup |HV *stash|const char *name|int len|int level
-#endif
-
-#if defined(PERL_IN_LOCALE_C) || defined(PERL_DECL_PROT)
-s      |char*  |stdize_locale  |char* locs
-#endif
-
-#if defined(PERL_IN_UTIL_C) || defined(PERL_DECL_PROT)
-s      |COP*   |closest_cop    |COP *cop|OP *o
-s      |SV*    |mess_alloc
-#  if defined(LEAKTEST)
-s      |void   |xstat          |int
-#  endif
-#endif
-
-START_EXTERN_C
-
-Apd    |void   |sv_setsv_flags |SV* dsv|SV* ssv|I32 flags
-Apd    |void   |sv_catpvn_flags|SV* sv|const char* ptr|STRLEN len|I32 flags
-Apd    |void   |sv_catsv_flags |SV* dsv|SV* ssv|I32 flags
-Apd    |STRLEN |sv_utf8_upgrade_flags|SV *sv|I32 flags
-Apd    |char*  |sv_pvn_force_flags|SV* sv|STRLEN* lp|I32 flags
-Apd    |char*  |sv_2pv_flags   |SV* sv|STRLEN* lp|I32 flags
-Ap     |char*  |my_atof2       |const char *s|NV* value
-#if !defined(HAS_SOCKETPAIR) && defined(HAS_SOCKET)
-Apn    |int    |my_socketpair  |int family|int type|int protocol|int fd[2]
-#endif
-
-
-#if defined(USE_PERLIO) && !defined(USE_SFIO)
-Ap     |int    |PerlIO_close           |PerlIO *
-Ap     |int    |PerlIO_fill            |PerlIO *
-Ap     |int    |PerlIO_fileno          |PerlIO *
-Ap     |int    |PerlIO_eof             |PerlIO *
-Ap     |int    |PerlIO_error           |PerlIO *
-Ap     |int    |PerlIO_flush           |PerlIO *
-Ap     |void   |PerlIO_clearerr        |PerlIO *
-Ap     |void   |PerlIO_set_cnt         |PerlIO *|int
-Ap     |void   |PerlIO_set_ptrcnt      |PerlIO *|STDCHAR *|int
-Ap     |void   |PerlIO_setlinebuf      |PerlIO *
-Ap     |SSize_t|PerlIO_read            |PerlIO *|void *|Size_t
-Ap     |SSize_t|PerlIO_write           |PerlIO *|const void *|Size_t
-Ap     |SSize_t|PerlIO_unread          |PerlIO *|const void *|Size_t
-Ap     |Off_t  |PerlIO_tell            |PerlIO *
-Ap     |int    |PerlIO_seek            |PerlIO *|Off_t|int
-
-Ap     |STDCHAR *|PerlIO_get_base      |PerlIO *
-Ap     |STDCHAR *|PerlIO_get_ptr       |PerlIO *
-Ap     |int      |PerlIO_get_bufsiz    |PerlIO *
-Ap     |int      |PerlIO_get_cnt       |PerlIO *
-
-Ap     |PerlIO *|PerlIO_stdin
-Ap     |PerlIO *|PerlIO_stdout
-Ap     |PerlIO *|PerlIO_stderr
-#endif /* PERLIO_LAYERS */
-
-END_EXTERN_C
-
index 915e40c..0b915dd 100644 (file)
@@ -17,6 +17,85 @@ unadorned names, but this support may be disabled in a future release.
 
 The listing is alphabetical, case insensitive.
 
+
+=head1 "Gimme" Values
+
+=over 8
+
+=item GIMME
+
+A backward-compatible version of C<GIMME_V> which can only return
+C<G_SCALAR> or C<G_ARRAY>; in a void context, it returns C<G_SCALAR>.
+Deprecated.  Use C<GIMME_V> instead.
+
+       U32     GIMME
+
+=for hackers
+Found in file op.h
+
+=item GIMME_V
+
+The XSUB-writer's equivalent to Perl's C<wantarray>.  Returns C<G_VOID>,
+C<G_SCALAR> or C<G_ARRAY> for void, scalar or list context,
+respectively.
+
+       U32     GIMME_V
+
+=for hackers
+Found in file op.h
+
+=item G_ARRAY
+
+Used to indicate list context.  See C<GIMME_V>, C<GIMME> and
+L<perlcall>.
+
+=for hackers
+Found in file cop.h
+
+=item G_DISCARD
+
+Indicates that arguments returned from a callback should be discarded.  See
+L<perlcall>.
+
+=for hackers
+Found in file cop.h
+
+=item G_EVAL
+
+Used to force a Perl C<eval> wrapper around a callback.  See
+L<perlcall>.
+
+=for hackers
+Found in file cop.h
+
+=item G_NOARGS
+
+Indicates that no arguments are being sent to a callback.  See
+L<perlcall>.
+
+=for hackers
+Found in file cop.h
+
+=item G_SCALAR
+
+Used to indicate scalar context.  See C<GIMME_V>, C<GIMME>, and
+L<perlcall>.
+
+=for hackers
+Found in file cop.h
+
+=item G_VOID
+
+Used to indicate void context.  See C<GIMME_V> and L<perlcall>.
+
+=for hackers
+Found in file cop.h
+
+
+=back
+
+=head1 Array Manipulation Functions
+
 =over 8
 
 =item AvFILL
@@ -182,47 +261,53 @@ must then use C<av_store> to assign values to these new elements.
 =for hackers
 Found in file av.c
 
-=item ax
+=item get_av
 
-Variable which is setup by C<xsubpp> to indicate the stack base offset,
-used by the C<ST>, C<XSprePUSH> and C<XSRETURN> macros.  The C<dMARK> macro
-must be called prior to setup the C<MARK> variable.
+Returns the AV of the specified Perl array.  If C<create> is set and the
+Perl variable does not exist then it will be created.  If C<create> is not
+set and the variable does not exist then NULL is returned.
 
-       I32     ax
+NOTE: the perl_ form of this function is deprecated.
+
+       AV*     get_av(const char* name, I32 create)
 
 =for hackers
-Found in file XSUB.h
+Found in file perl.c
 
-=item bytes_from_utf8
+=item newAV
 
-Converts a string C<s> of length C<len> from UTF8 into byte encoding.
-Unlike <utf8_to_bytes> but like C<bytes_to_utf8>, returns a pointer to
-the newly-created string, and updates C<len> to contain the new
-length.  Returns the original string if no conversion occurs, C<len>
-is unchanged. Do nothing if C<is_utf8> points to 0. Sets C<is_utf8> to
-0 if C<s> is converted or contains all 7bit characters.
+Creates a new AV.  The reference count is set to 1.
 
-NOTE: this function is experimental and may change or be
-removed without notice.
+       AV*     newAV()
+
+=for hackers
+Found in file av.c
+
+=item Nullav
+
+Null AV pointer.
 
-       U8*     bytes_from_utf8(U8 *s, STRLEN *len, bool *is_utf8)
 
 =for hackers
-Found in file utf8.c
+Found in file av.h
 
-=item bytes_to_utf8
+=item sortsv
 
-Converts a string C<s> of length C<len> from ASCII into UTF8 encoding.
-Returns a pointer to the newly-created string, and sets C<len> to
-reflect the new length.
+Sort an array. Here is an example:
 
-NOTE: this function is experimental and may change or be
-removed without notice.
+    sortsv(AvARRAY(av), av_len(av)+1, Perl_sv_cmp_locale);
 
-       U8*     bytes_to_utf8(U8 *s, STRLEN *len)
+       void    sortsv(SV ** array, size_t num_elts, SVCOMPARE_t cmp)
 
 =for hackers
-Found in file utf8.c
+Found in file pp_sort.c
+
+
+=back
+
+=head1 Callback Functions
+
+=over 8
 
 =item call_argv
 
@@ -270,408 +355,361 @@ NOTE: the perl_ form of this function is deprecated.
 =for hackers
 Found in file perl.c
 
-=item CLASS
+=item ENTER
 
-Variable which is setup by C<xsubpp> to indicate the 
-class name for a C++ XS constructor.  This is always a C<char*>.  See C<THIS>.
+Opening bracket on a callback.  See C<LEAVE> and L<perlcall>.
 
-       char*   CLASS
+               ENTER;
 
 =for hackers
-Found in file XSUB.h
+Found in file scope.h
 
-=item Copy
+=item eval_pv
 
-The XSUB-writer's interface to the C C<memcpy> function.  The C<src> is the
-source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
-the type.  May fail on overlapping copies.  See also C<Move>.
+Tells Perl to C<eval> the given string and return an SV* result.
 
-       void    Copy(void* src, void* dest, int nitems, type)
+NOTE: the perl_ form of this function is deprecated.
 
-=for hackers
-Found in file handy.h
+       SV*     eval_pv(const char* p, I32 croak_on_error)
 
-=item croak
+=for hackers
+Found in file perl.c
 
-This is the XSUB-writer's interface to Perl's C<die> function.
-Normally use this function the same way you use the C C<printf>
-function.  See C<warn>.
+=item eval_sv
 
-If you want to throw an exception object, assign the object to
-C<$@> and then pass C<Nullch> to croak():
+Tells Perl to C<eval> the string in the SV.
 
-   errsv = get_sv("@", TRUE);
-   sv_setsv(errsv, exception_object);
-   croak(Nullch);
+NOTE: the perl_ form of this function is deprecated.
 
-       void    croak(const char* pat, ...)
+       I32     eval_sv(SV* sv, I32 flags)
 
 =for hackers
-Found in file util.c
+Found in file perl.c
 
-=item CvSTASH
+=item FREETMPS
 
-Returns the stash of the CV.
+Closing bracket for temporaries on a callback.  See C<SAVETMPS> and
+L<perlcall>.
 
-       HV*     CvSTASH(CV* cv)
+               FREETMPS;
 
 =for hackers
-Found in file cv.h
-
-=item cv_const_sv
+Found in file scope.h
 
-If C<cv> is a constant sub eligible for inlining. returns the constant
-value returned by the sub.  Otherwise, returns NULL.
+=item LEAVE
 
-Constant subs can be created with C<newCONSTSUB> or as described in
-L<perlsub/"Constant Functions">.
+Closing bracket on a callback.  See C<ENTER> and L<perlcall>.
 
-       SV*     cv_const_sv(CV* cv)
+               LEAVE;
 
 =for hackers
-Found in file op.c
+Found in file scope.h
 
-=item dAX
+=item SAVETMPS
 
-Sets up the C<ax> variable.
-This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
+Opening bracket for temporaries on a callback.  See C<FREETMPS> and
+L<perlcall>.
 
-               dAX;
+               SAVETMPS;
 
 =for hackers
-Found in file XSUB.h
+Found in file scope.h
 
-=item dITEMS
 
-Sets up the C<items> variable.
-This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
+=back
 
-               dITEMS;
+=head1 Character classes
 
-=for hackers
-Found in file XSUB.h
+=over 8
 
-=item dMARK
+=item isALNUM
 
-Declare a stack marker variable, C<mark>, for the XSUB.  See C<MARK> and
-C<dORIGMARK>.
+Returns a boolean indicating whether the C C<char> is an ASCII alphanumeric
+character (including underscore) or digit.
 
-               dMARK;
+       bool    isALNUM(char ch)
 
 =for hackers
-Found in file pp.h
+Found in file handy.h
 
-=item dORIGMARK
+=item isALPHA
 
-Saves the original stack mark for the XSUB.  See C<ORIGMARK>.
+Returns a boolean indicating whether the C C<char> is an ASCII alphabetic
+character.
 
-               dORIGMARK;
+       bool    isALPHA(char ch)
 
 =for hackers
-Found in file pp.h
+Found in file handy.h
 
-=item dSP
+=item isDIGIT
 
-Declares a local copy of perl's stack pointer for the XSUB, available via
-the C<SP> macro.  See C<SP>.
+Returns a boolean indicating whether the C C<char> is an ASCII
+digit.
 
-               dSP;
+       bool    isDIGIT(char ch)
 
 =for hackers
-Found in file pp.h
+Found in file handy.h
 
-=item dXSARGS
+=item isLOWER
 
-Sets up stack and mark pointers for an XSUB, calling dSP and 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>.
+Returns a boolean indicating whether the C C<char> is a lowercase
+character.
 
-               dXSARGS;
+       bool    isLOWER(char ch)
 
 =for hackers
-Found in file XSUB.h
+Found in file handy.h
 
-=item dXSI32
+=item isSPACE
 
-Sets up the C<ix> variable for an XSUB which has aliases.  This is usually
-handled automatically by C<xsubpp>.
+Returns a boolean indicating whether the C C<char> is whitespace.
 
-               dXSI32;
+       bool    isSPACE(char ch)
 
 =for hackers
-Found in file XSUB.h
+Found in file handy.h
 
-=item ENTER
+=item isUPPER
 
-Opening bracket on a callback.  See C<LEAVE> and L<perlcall>.
+Returns a boolean indicating whether the C C<char> is an uppercase
+character.
 
-               ENTER;
+       bool    isUPPER(char ch)
 
 =for hackers
-Found in file scope.h
+Found in file handy.h
 
-=item eval_pv
+=item toLOWER
 
-Tells Perl to C<eval> the given string and return an SV* result.
+Converts the specified character to lowercase.
 
-NOTE: the perl_ form of this function is deprecated.
+       char    toLOWER(char ch)
 
-       SV*     eval_pv(const char* p, I32 croak_on_error)
+=for hackers
+Found in file handy.h
+
+=item toUPPER
+
+Converts the specified character to uppercase.
+
+       char    toUPPER(char ch)
 
 =for hackers
-Found in file perl.c
+Found in file handy.h
 
-=item eval_sv
 
-Tells Perl to C<eval> the string in the SV.
+=back
 
-NOTE: the perl_ form of this function is deprecated.
+=head1 Cloning an interpreter
 
-       I32     eval_sv(SV* sv, I32 flags)
+=over 8
+
+=item perl_clone
+
+Create and return a new interpreter by cloning the current one.
+
+       PerlInterpreter*        perl_clone(PerlInterpreter* interp, UV flags)
 
 =for hackers
-Found in file perl.c
+Found in file sv.c
 
-=item EXTEND
 
-Used to extend the argument stack for an XSUB's return values. Once
-used, guarantees that there is room for at least C<nitems> to be pushed
-onto the stack.
+=back
 
-       void    EXTEND(SP, int nitems)
+=head1 CV Manipulation Functions
+
+=over 8
+
+=item CvSTASH
+
+Returns the stash of the CV.
+
+       HV*     CvSTASH(CV* cv)
 
 =for hackers
-Found in file pp.h
+Found in file cv.h
 
-=item fbm_compile
+=item get_cv
 
-Analyses the string in order to make fast searches on it using fbm_instr()
--- the Boyer-Moore algorithm.
+Returns the CV of the specified Perl subroutine.  If C<create> is set and
+the Perl subroutine does not exist then it will be declared (which has the
+same effect as saying C<sub name;>).  If C<create> is not set and the
+subroutine does not exist then NULL is returned.
 
-       void    fbm_compile(SV* sv, U32 flags)
+NOTE: the perl_ form of this function is deprecated.
+
+       CV*     get_cv(const char* name, I32 create)
 
 =for hackers
-Found in file util.c
+Found in file perl.c
 
-=item fbm_instr
+=item Nullcv
 
-Returns the location of the SV in the string delimited by C<str> and
-C<strend>.  It returns C<Nullch> if the string can't be found.  The C<sv>
-does not have to be fbm_compiled, but the search will not be as fast
-then.
+Null CV pointer.
 
-       char*   fbm_instr(unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags)
 
 =for hackers
-Found in file util.c
+Found in file cv.h
 
-=item form
 
-Takes a sprintf-style format pattern and conventional
-(non-SV) arguments and returns the formatted string.
+=back
 
-    (char *) Perl_form(pTHX_ const char* pat, ...)
+=head1 Embedding Functions
 
-can be used any place a string (char *) is required:
+=over 8
 
-    char * s = Perl_form("%d.%d",major,minor);
+=item load_module
 
-Uses a single private buffer so if you want to format several strings you
-must explicitly copy the earlier strings away (and free the copies when you
-are done).
+Loads the module whose name is pointed to by the string part of name.
+Note that the actual module name, not its filename, should be given.
+Eg, "Foo::Bar" instead of "Foo/Bar.pm".  flags can be any of
+PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
+(or 0 for no flags). ver, if specified, provides version semantics
+similar to C<use Foo::Bar VERSION>.  The optional trailing SV*
+arguments can be used to specify arguments to the module's import()
+method, similar to C<use Foo::Bar VERSION LIST>.
 
-       char*   form(const char* pat, ...)
+       void    load_module(U32 flags, SV* name, SV* ver, ...)
 
 =for hackers
-Found in file util.c
+Found in file op.c
 
-=item FREETMPS
+=item perl_alloc
 
-Closing bracket for temporaries on a callback.  See C<SAVETMPS> and
-L<perlcall>.
+Allocates a new Perl interpreter.  See L<perlembed>.
 
-               FREETMPS;
+       PerlInterpreter*        perl_alloc()
 
 =for hackers
-Found in file scope.h
+Found in file perl.c
 
-=item getcwd_sv
+=item perl_construct
 
-Fill the sv with current working directory
+Initializes a new Perl interpreter.  See L<perlembed>.
 
-       int     getcwd_sv(SV* sv)
+       void    perl_construct(PerlInterpreter* interp)
 
 =for hackers
-Found in file util.c
-
-=item get_av
+Found in file perl.c
 
-Returns the AV of the specified Perl array.  If C<create> is set and the
-Perl variable does not exist then it will be created.  If C<create> is not
-set and the variable does not exist then NULL is returned.
+=item perl_destruct
 
-NOTE: the perl_ form of this function is deprecated.
+Shuts down a Perl interpreter.  See L<perlembed>.
 
-       AV*     get_av(const char* name, I32 create)
+       int     perl_destruct(PerlInterpreter* interp)
 
 =for hackers
 Found in file perl.c
 
-=item get_cv
-
-Returns the CV of the specified Perl subroutine.  If C<create> is set and
-the Perl subroutine does not exist then it will be declared (which has the
-same effect as saying C<sub name;>).  If C<create> is not set and the
-subroutine does not exist then NULL is returned.
+=item perl_free
 
-NOTE: the perl_ form of this function is deprecated.
+Releases a Perl interpreter.  See L<perlembed>.
 
-       CV*     get_cv(const char* name, I32 create)
+       void    perl_free(PerlInterpreter* interp)
 
 =for hackers
 Found in file perl.c
 
-=item get_hv
+=item perl_parse
 
-Returns the HV of the specified Perl hash.  If C<create> is set and the
-Perl variable does not exist then it will be created.  If C<create> is not
-set and the variable does not exist then NULL is returned.
+Tells a Perl interpreter to parse a Perl script.  See L<perlembed>.
 
-NOTE: the perl_ form of this function is deprecated.
+       int     perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env)
 
-       HV*     get_hv(const char* name, I32 create)
+=for hackers
+Found in file perl.c
+
+=item perl_run
+
+Tells a Perl interpreter to run.  See L<perlembed>.
+
+       int     perl_run(PerlInterpreter* interp)
 
 =for hackers
 Found in file perl.c
 
-=item get_sv
+=item require_pv
 
-Returns the SV of the specified Perl scalar.  If C<create> is set and the
-Perl variable does not exist then it will be created.  If C<create> is not
-set and the variable does not exist then NULL is returned.
+Tells Perl to C<require> the file named by the string argument.  It is
+analogous to the Perl code C<eval "require '$file'">.  It's even
+implemented that way; consider using Perl_load_module instead.
 
 NOTE: the perl_ form of this function is deprecated.
 
-       SV*     get_sv(const char* name, I32 create)
+       void    require_pv(const char* pv)
 
 =for hackers
 Found in file perl.c
 
-=item GIMME
 
-A backward-compatible version of C<GIMME_V> which can only return
-C<G_SCALAR> or C<G_ARRAY>; in a void context, it returns C<G_SCALAR>.
-Deprecated.  Use C<GIMME_V> instead.
+=back
 
-       U32     GIMME
+=head1 Global Variables
 
-=for hackers
-Found in file op.h
+=over 8
 
-=item GIMME_V
+=item PL_modglobal
 
-The XSUB-writer's equivalent to Perl's C<wantarray>.  Returns C<G_VOID>,
-C<G_SCALAR> or C<G_ARRAY> for void, scalar or list context,
-respectively.
+C<PL_modglobal> is a general purpose, interpreter global HV for use by
+extensions that need to keep information on a per-interpreter basis.
+In a pinch, it can also be used as a symbol table for extensions
+to share data among each other.  It is a good idea to use keys
+prefixed by the package name of the extension that owns the data.
 
-       U32     GIMME_V
+       HV*     PL_modglobal
 
 =for hackers
-Found in file op.h
+Found in file intrpvar.h
 
-=item grok_bin
+=item PL_na
 
-converts a string representing a binary number to numeric form.
+A convenience variable which is typically used with C<SvPV> when one
+doesn't care about the length of the string.  It is usually more efficient
+to either declare a local variable and use that instead or to use the
+C<SvPV_nolen> macro.
 
-On entry I<start> and I<*len> give the string to scan, I<*flags> gives
-conversion flags, and I<result> should be NULL or a pointer to an NV.
-The scan stops at the end of the string, or the first invalid character.
-On return I<*len> is set to the length scanned string, and I<*flags> gives
-output flags.
+       STRLEN  PL_na
 
-If the value is <= UV_MAX it is returned as a UV, the output flags are clear,
-and nothing is written to I<*result>. If the value is > UV_MAX C<grok_bin>
-returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to I<*result> (or the value is discarded if I<result>
-is NULL).
+=for hackers
+Found in file thrdvar.h
 
-The hex number may optionally be prefixed with "0b" or "b" unless
-C<PERL_SCAN_DISALLOW_PREFIX> is set in I<*flags> on entry. If
-C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the binary
-number may use '_' characters to separate digits.
+=item PL_sv_no
 
-       UV      grok_bin(char* start, STRLEN* len, I32* flags, NV *result)
+This is the C<false> SV.  See C<PL_sv_yes>.  Always refer to this as
+C<&PL_sv_no>.
+
+       SV      PL_sv_no
 
 =for hackers
-Found in file numeric.c
+Found in file intrpvar.h
 
-=item grok_hex
+=item PL_sv_undef
 
-converts a string representing a hex number to numeric form.
+This is the C<undef> SV.  Always refer to this as C<&PL_sv_undef>.
 
-On entry I<start> and I<*len> give the string to scan, I<*flags> gives
-conversion flags, and I<result> should be NULL or a pointer to an NV.
-The scan stops at the end of the string, or the first non-hex-digit character.
-On return I<*len> is set to the length scanned string, and I<*flags> gives
-output flags.
+       SV      PL_sv_undef
 
-If the value is <= UV_MAX it is returned as a UV, the output flags are clear,
-and nothing is written to I<*result>. If the value is > UV_MAX C<grok_hex>
-returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
-and writes the value to I<*result> (or the value is discarded if I<result>
-is NULL).
+=for hackers
+Found in file intrpvar.h
 
-The hex number may optionally be prefixed with "0x" or "x" unless
-C<PERL_SCAN_DISALLOW_PREFIX> is set in I<*flags> on entry. If
-C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the hex
-number may use '_' characters to separate digits.
+=item PL_sv_yes
 
-       UV      grok_hex(char* start, STRLEN* len, I32* flags, NV *result)
+This is the C<true> SV.  See C<PL_sv_no>.  Always refer to this as
+C<&PL_sv_yes>.
+
+       SV      PL_sv_yes
 
 =for hackers
-Found in file numeric.c
+Found in file intrpvar.h
 
-=item grok_number
-
-Recognise (or not) a number.  The type of the number is returned
-(0 if unrecognised), otherwise it is a bit-ORed combination of
-IS_NUMBER_IN_UV, IS_NUMBER_GREATER_THAN_UV_MAX, IS_NUMBER_NOT_INT,
-IS_NUMBER_NEG, IS_NUMBER_INFINITY, IS_NUMBER_NAN (defined in perl.h).
-
-If the value of the number can fit an in UV, it is returned in the *valuep
-IS_NUMBER_IN_UV will be set to indicate that *valuep is valid, IS_NUMBER_IN_UV
-will never be set unless *valuep is valid, but *valuep may have been assigned
-to during processing even though IS_NUMBER_IN_UV is not set on return.
-If valuep is NULL, IS_NUMBER_IN_UV will be set for the same cases as when
-valuep is non-NULL, but no actual assignment (or SEGV) will occur.
-
-IS_NUMBER_NOT_INT will be set with IS_NUMBER_IN_UV if trailing decimals were
-seen (in which case *valuep gives the true value truncated to an integer), and
-IS_NUMBER_NEG if the number is negative (in which case *valuep holds the
-absolute value).  IS_NUMBER_IN_UV is not set if e notation was used or the
-number is larger than a UV.
-
-       int     grok_number(const char *pv, STRLEN len, UV *valuep)
-
-=for hackers
-Found in file numeric.c
-
-=item grok_numeric_radix
-
-Scan and skip for a numeric decimal separator (radix).
-
-       bool    grok_numeric_radix(const char **sp, const char *send)
-
-=for hackers
-Found in file numeric.c
-
-=item grok_oct
 
+=back
 
-       UV      grok_oct(char* start, STRLEN* len, I32* flags, NV *result)
+=head1 GV Functions
 
-=for hackers
-Found in file numeric.c
+=over 8
 
 =item GvSV
 
@@ -764,61 +802,55 @@ valid UTF-8 string.  See C<gv_stashpv>.
 =for hackers
 Found in file gv.c
 
-=item G_ARRAY
 
-Used to indicate list context.  See C<GIMME_V>, C<GIMME> and
-L<perlcall>.
+=back
 
-=for hackers
-Found in file cop.h
+=head1 Handy Values
 
-=item G_DISCARD
+=over 8
 
-Indicates that arguments returned from a callback should be discarded.  See
-L<perlcall>.
+=item HEf_SVKEY
 
-=for hackers
-Found in file cop.h
+This flag, used in the length slot of hash entries and magic structures,
+specifies the structure contains an C<SV*> pointer where a C<char*> pointer
+is to be expected. (For information only--not to be used).
 
-=item G_EVAL
 
-Used to force a Perl C<eval> wrapper around a callback.  See
-L<perlcall>.
+=for hackers
+Found in file hv.h
 
+=item Nullch 
+
+Null character pointer.
 =for hackers
-Found in file cop.h
+Found in file handy.h
 
-=item G_NOARGS
+=item Nullsv
 
-Indicates that no arguments are being sent to a callback.  See
-L<perlcall>.
+Null SV pointer.
 
 =for hackers
-Found in file cop.h
+Found in file handy.h
 
-=item G_SCALAR
 
-Used to indicate scalar context.  See C<GIMME_V>, C<GIMME>, and
-L<perlcall>.
+=back
 
-=for hackers
-Found in file cop.h
+=head1 Hash Manipulation Functions
 
-=item G_VOID
+=over 8
 
-Used to indicate void context.  See C<GIMME_V> and L<perlcall>.
+=item get_hv
 
-=for hackers
-Found in file cop.h
+Returns the HV of the specified Perl hash.  If C<create> is set and the
+Perl variable does not exist then it will be created.  If C<create> is not
+set and the variable does not exist then NULL is returned.
 
-=item HEf_SVKEY
+NOTE: the perl_ form of this function is deprecated.
 
-This flag, used in the length slot of hash entries and magic structures,
-specifies the structure contains an C<SV*> pointer where a C<char*> pointer
-is to be expected. (For information only--not to be used).
+       HV*     get_hv(const char* name, I32 create)
 
 =for hackers
-Found in file hv.h
+Found in file perl.c
 
 =item HeHASH
 
@@ -1128,655 +1160,724 @@ Undefines the hash.
 =for hackers
 Found in file hv.c
 
-=item ibcmp_utf8
-
-Return true if the strings s1 and s2 differ case-insensitively, false
-if not (if they are equal case-insensitively).  If u1 is true, the
-string s1 is assumed to be in UTF-8-encoded Unicode.  If u2 is true,
-the string s2 is assumed to be in UTF-8-encoded Unicode.  If u1 or u2
-are false, the respective string is assumed to be in native 8-bit
-encoding.
-
-If the pe1 and pe2 are non-NULL, the scanning pointers will be copied
-in there (they will point at the beginning of the I<next> character).
-If the pointers behind pe1 or pe2 are non-NULL, they are the end
-pointers beyond which scanning will not continue under any
-circustances.  If the byte lengths l1 and l2 are non-zero, s1+l1 and
-s2+l2 will be used as goal end pointers that will also stop the scan,
-and which qualify towards defining a successful match: all the scans
-that define an explicit length must reach their goal pointers for
-a match to succeed).
+=item newHV
 
-For case-insensitiveness, the "casefolding" of Unicode is used
-instead of upper/lowercasing both the characters, see
-http://www.unicode.org/unicode/reports/tr21/ (Case Mappings).
+Creates a new HV.  The reference count is set to 1.
 
-       I32     ibcmp_utf8(const char* a, char **pe1, UV l1, bool u1, const char* b, char **pe2, UV l2, bool u2)
+       HV*     newHV()
 
 =for hackers
-Found in file utf8.c
+Found in file hv.c
 
-=item isALNUM
+=item Nullhv
 
-Returns a boolean indicating whether the C C<char> is an ASCII alphanumeric
-character (including underscore) or digit.
+Null HV pointer.
 
-       bool    isALNUM(char ch)
 
 =for hackers
-Found in file handy.h
+Found in file hv.h
 
-=item isALPHA
 
-Returns a boolean indicating whether the C C<char> is an ASCII alphabetic
-character.
+=back
 
-       bool    isALPHA(char ch)
+=head1 Magical Functions
 
-=for hackers
-Found in file handy.h
+=over 8
 
-=item isDIGIT
+=item mg_clear
 
-Returns a boolean indicating whether the C C<char> is an ASCII
-digit.
+Clear something magical that the SV represents.  See C<sv_magic>.
 
-       bool    isDIGIT(char ch)
+       int     mg_clear(SV* sv)
 
 =for hackers
-Found in file handy.h
+Found in file mg.c
 
-=item isLOWER
+=item mg_copy
 
-Returns a boolean indicating whether the C C<char> is a lowercase
-character.
+Copies the magic from one SV to another.  See C<sv_magic>.
 
-       bool    isLOWER(char ch)
+       int     mg_copy(SV* sv, SV* nsv, const char* key, I32 klen)
 
 =for hackers
-Found in file handy.h
+Found in file mg.c
 
-=item isSPACE
+=item mg_find
 
-Returns a boolean indicating whether the C C<char> is whitespace.
+Finds the magic pointer for type matching the SV.  See C<sv_magic>.
 
-       bool    isSPACE(char ch)
+       MAGIC*  mg_find(SV* sv, int type)
 
 =for hackers
-Found in file handy.h
+Found in file mg.c
 
-=item isUPPER
+=item mg_free
 
-Returns a boolean indicating whether the C C<char> is an uppercase
-character.
+Free any magic storage used by the SV.  See C<sv_magic>.
 
-       bool    isUPPER(char ch)
+       int     mg_free(SV* sv)
 
 =for hackers
-Found in file handy.h
+Found in file mg.c
 
-=item is_utf8_char
+=item mg_get
 
-Tests if some arbitrary number of bytes begins in a valid UTF-8
-character.  Note that an INVARIANT (i.e. ASCII) character is a valid UTF-8 character.
-The actual number of bytes in the UTF-8 character will be returned if
-it is valid, otherwise 0.
+Do magic after a value is retrieved from the SV.  See C<sv_magic>.
 
-       STRLEN  is_utf8_char(U8 *p)
+       int     mg_get(SV* sv)
 
 =for hackers
-Found in file utf8.c
+Found in file mg.c
 
-=item is_utf8_string
+=item mg_length
 
-Returns true if first C<len> bytes of the given string form a valid UTF8
-string, false otherwise.  Note that 'a valid UTF8 string' does not mean
-'a string that contains UTF8' because a valid ASCII string is a valid
-UTF8 string.
+Report on the SV's length.  See C<sv_magic>.
 
-       bool    is_utf8_string(U8 *s, STRLEN len)
+       U32     mg_length(SV* sv)
 
 =for hackers
-Found in file utf8.c
+Found in file mg.c
 
-=item items
+=item mg_magical
 
-Variable which is setup by C<xsubpp> to indicate the number of 
-items on the stack.  See L<perlxs/"Variable-length Parameter Lists">.
+Turns on the magical status of an SV.  See C<sv_magic>.
 
-       I32     items
+       void    mg_magical(SV* sv)
 
 =for hackers
-Found in file XSUB.h
+Found in file mg.c
 
-=item ix
+=item mg_set
 
-Variable which is setup by C<xsubpp> to indicate which of an 
-XSUB's aliases was used to invoke it.  See L<perlxs/"The ALIAS: Keyword">.
+Do magic after a value is assigned to the SV.  See C<sv_magic>.
 
-       I32     ix
+       int     mg_set(SV* sv)
 
 =for hackers
-Found in file XSUB.h
+Found in file mg.c
 
-=item LEAVE
+=item SvGETMAGIC
 
-Closing bracket on a callback.  See C<ENTER> and L<perlcall>.
+Invokes C<mg_get> on an SV if it has 'get' magic.  This macro evaluates its
+argument more than once.
 
-               LEAVE;
+       void    SvGETMAGIC(SV* sv)
 
 =for hackers
-Found in file scope.h
+Found in file sv.h
 
-=item load_module
+=item SvSETMAGIC
 
-Loads the module whose name is pointed to by the string part of name.
-Note that the actual module name, not its filename, should be given.
-Eg, "Foo::Bar" instead of "Foo/Bar.pm".  flags can be any of
-PERL_LOADMOD_DENY, PERL_LOADMOD_NOIMPORT, or PERL_LOADMOD_IMPORT_OPS
-(or 0 for no flags). ver, if specified, provides version semantics
-similar to C<use Foo::Bar VERSION>.  The optional trailing SV*
-arguments can be used to specify arguments to the module's import()
-method, similar to C<use Foo::Bar VERSION LIST>.
+Invokes C<mg_set> on an SV if it has 'set' magic.  This macro evaluates its
+argument more than once.
 
-       void    load_module(U32 flags, SV* name, SV* ver, ...)
+       void    SvSETMAGIC(SV* sv)
 
 =for hackers
-Found in file op.c
+Found in file sv.h
 
-=item looks_like_number
+=item SvSetMagicSV
 
-Test if the content of an SV looks like a number (or is a number).
-C<Inf> and C<Infinity> are treated as numbers (so will not issue a
-non-numeric warning), even if your atof() doesn't grok them.
+Like C<SvSetSV>, but does any set magic required afterwards.
 
-       I32     looks_like_number(SV* sv)
+       void    SvSetMagicSV(SV* dsb, SV* ssv)
 
 =for hackers
-Found in file sv.c
+Found in file sv.h
 
-=item MARK
+=item SvSetSV
 
-Stack marker variable for the XSUB.  See C<dMARK>.
+Calls C<sv_setsv> if dsv is not the same as ssv.  May evaluate arguments
+more than once.
+
+       void    SvSetSV(SV* dsb, SV* ssv)
 
 =for hackers
-Found in file pp.h
+Found in file sv.h
 
-=item mg_clear
+=item SvSetSV_nosteal
 
-Clear something magical that the SV represents.  See C<sv_magic>.
+Calls a non-destructive version of C<sv_setsv> if dsv is not the same as
+ssv. May evaluate arguments more than once.
 
-       int     mg_clear(SV* sv)
+       void    SvSetSV_nosteal(SV* dsv, SV* ssv)
 
 =for hackers
-Found in file mg.c
+Found in file sv.h
 
-=item mg_copy
 
-Copies the magic from one SV to another.  See C<sv_magic>.
+=back
 
-       int     mg_copy(SV* sv, SV* nsv, const char* key, I32 klen)
+=head1 Memory Management
 
-=for hackers
-Found in file mg.c
+=over 8
 
-=item mg_find
+=item Copy
 
-Finds the magic pointer for type matching the SV.  See C<sv_magic>.
+The XSUB-writer's interface to the C C<memcpy> function.  The C<src> is the
+source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
+the type.  May fail on overlapping copies.  See also C<Move>.
 
-       MAGIC*  mg_find(SV* sv, int type)
+       void    Copy(void* src, void* dest, int nitems, type)
 
 =for hackers
-Found in file mg.c
+Found in file handy.h
 
-=item mg_free
+=item Move
 
-Free any magic storage used by the SV.  See C<sv_magic>.
+The XSUB-writer's interface to the C C<memmove> function.  The C<src> is the
+source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
+the type.  Can do overlapping moves.  See also C<Copy>.
 
-       int     mg_free(SV* sv)
+       void    Move(void* src, void* dest, int nitems, type)
 
 =for hackers
-Found in file mg.c
+Found in file handy.h
 
-=item mg_get
+=item New
 
-Do magic after a value is retrieved from the SV.  See C<sv_magic>.
+The XSUB-writer's interface to the C C<malloc> function.
 
-       int     mg_get(SV* sv)
+       void    New(int id, void* ptr, int nitems, type)
 
 =for hackers
-Found in file mg.c
+Found in file handy.h
 
-=item mg_length
+=item Newc
 
-Report on the SV's length.  See C<sv_magic>.
+The XSUB-writer's interface to the C C<malloc> function, with
+cast.
 
-       U32     mg_length(SV* sv)
+       void    Newc(int id, void* ptr, int nitems, type, cast)
 
 =for hackers
-Found in file mg.c
-
-=item mg_magical
-
-Turns on the magical status of an SV.  See C<sv_magic>.
-
-       void    mg_magical(SV* sv)
+Found in file handy.h
 
-=for hackers
-Found in file mg.c
+=item NEWSV
 
-=item mg_set
+Creates a new SV.  A non-zero C<len> parameter indicates the number of
+bytes of preallocated string space the SV should have.  An extra byte for a
+tailing NUL is also reserved.  (SvPOK is not set for the SV even if string
+space is allocated.)  The reference count for the new SV is set to 1.
+C<id> is an integer id between 0 and 1299 (used to identify leaks).
 
-Do magic after a value is assigned to the SV.  See C<sv_magic>.
 
-       int     mg_set(SV* sv)
+       SV*     NEWSV(int id, STRLEN len)
 
 =for hackers
-Found in file mg.c
+Found in file handy.h
 
-=item Move
+=item Newz
 
-The XSUB-writer's interface to the C C<memmove> function.  The C<src> is the
-source, C<dest> is the destination, C<nitems> is the number of items, and C<type> is
-the type.  Can do overlapping moves.  See also C<Copy>.
+The XSUB-writer's interface to the C C<malloc> function.  The allocated
+memory is zeroed with C<memzero>.
 
-       void    Move(void* src, void* dest, int nitems, type)
+       void    Newz(int id, void* ptr, int nitems, type)
 
 =for hackers
 Found in file handy.h
 
-=item New
+=item Renew
 
-The XSUB-writer's interface to the C C<malloc> function.
+The XSUB-writer's interface to the C C<realloc> function.
 
-       void    New(int id, void* ptr, int nitems, type)
+       void    Renew(void* ptr, int nitems, type)
 
 =for hackers
 Found in file handy.h
 
-=item newAV
+=item Renewc
 
-Creates a new AV.  The reference count is set to 1.
+The XSUB-writer's interface to the C C<realloc> function, with
+cast.
 
-       AV*     newAV()
+       void    Renewc(void* ptr, int nitems, type, cast)
 
 =for hackers
-Found in file av.c
+Found in file handy.h
 
-=item Newc
+=item Safefree
 
-The XSUB-writer's interface to the C C<malloc> function, with
-cast.
+The XSUB-writer's interface to the C C<free> function.
 
-       void    Newc(int id, void* ptr, int nitems, type, cast)
+       void    Safefree(void* ptr)
 
 =for hackers
 Found in file handy.h
 
-=item newCONSTSUB
+=item savepv
 
-Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
-eligible for inlining at compile-time.
+Copy a string to a safe spot.  This does not use an SV.
 
-       CV*     newCONSTSUB(HV* stash, char* name, SV* sv)
+       char*   savepv(const char* sv)
 
 =for hackers
-Found in file op.c
+Found in file util.c
 
-=item newHV
+=item savepvn
 
-Creates a new HV.  The reference count is set to 1.
+Copy a string to a safe spot.  The C<len> indicates number of bytes to
+copy.  This does not use an SV.
 
-       HV*     newHV()
+       char*   savepvn(const char* sv, I32 len)
 
 =for hackers
-Found in file hv.c
+Found in file util.c
 
-=item newRV_inc
+=item StructCopy
 
-Creates an RV wrapper for an SV.  The reference count for the original SV is
-incremented.
+This is an architecture-independent macro to copy one structure to another.
 
-       SV*     newRV_inc(SV* sv)
+       void    StructCopy(type src, type dest, type)
 
 =for hackers
-Found in file sv.h
+Found in file handy.h
 
-=item newRV_noinc
+=item Zero
 
-Creates an RV wrapper for an SV.  The reference count for the original
-SV is B<not> incremented.
+The XSUB-writer's interface to the C C<memzero> function.  The C<dest> is the
+destination, C<nitems> is the number of items, and C<type> is the type.
 
-       SV*     newRV_noinc(SV *sv)
+       void    Zero(void* dest, int nitems, type)
 
 =for hackers
-Found in file sv.c
+Found in file handy.h
 
-=item NEWSV
 
-Creates a new SV.  A non-zero C<len> parameter indicates the number of
-bytes of preallocated string space the SV should have.  An extra byte for a
-tailing NUL is also reserved.  (SvPOK is not set for the SV even if string
-space is allocated.)  The reference count for the new SV is set to 1.
-C<id> is an integer id between 0 and 1299 (used to identify leaks).
+=back
 
-       SV*     NEWSV(int id, STRLEN len)
+=head1 Miscellaneous Functions
 
-=for hackers
-Found in file handy.h
+=over 8
 
-=item newSV
+=item fbm_compile
 
-Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
-with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
-macro.
+Analyses the string in order to make fast searches on it using fbm_instr()
+-- the Boyer-Moore algorithm.
 
-       SV*     newSV(STRLEN len)
+       void    fbm_compile(SV* sv, U32 flags)
 
 =for hackers
-Found in file sv.c
+Found in file util.c
 
-=item newSViv
+=item fbm_instr
 
-Creates a new SV and copies an integer into it.  The reference count for the
-SV is set to 1.
+Returns the location of the SV in the string delimited by C<str> and
+C<strend>.  It returns C<Nullch> if the string can't be found.  The C<sv>
+does not have to be fbm_compiled, but the search will not be as fast
+then.
 
-       SV*     newSViv(IV i)
+       char*   fbm_instr(unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags)
 
 =for hackers
-Found in file sv.c
+Found in file util.c
 
-=item newSVnv
+=item form
 
-Creates a new SV and copies a floating point value into it.
-The reference count for the SV is set to 1.
+Takes a sprintf-style format pattern and conventional
+(non-SV) arguments and returns the formatted string.
 
-       SV*     newSVnv(NV n)
+    (char *) Perl_form(pTHX_ const char* pat, ...)
 
-=for hackers
-Found in file sv.c
+can be used any place a string (char *) is required:
 
-=item newSVpv
+    char * s = Perl_form("%d.%d",major,minor);
 
-Creates a new SV and copies a string into it.  The reference count for the
-SV is set to 1.  If C<len> is zero, Perl will compute the length using
-strlen().  For efficiency, consider using C<newSVpvn> instead.
+Uses a single private buffer so if you want to format several strings you
+must explicitly copy the earlier strings away (and free the copies when you
+are done).
 
-       SV*     newSVpv(const char* s, STRLEN len)
+       char*   form(const char* pat, ...)
 
 =for hackers
-Found in file sv.c
+Found in file util.c
 
-=item newSVpvf
+=item getcwd_sv
 
-Creates a new SV and initializes it with the string formatted like
-C<sprintf>.
+Fill the sv with current working directory
 
-       SV*     newSVpvf(const char* pat, ...)
+       int     getcwd_sv(SV* sv)
 
 =for hackers
-Found in file sv.c
+Found in file util.c
 
-=item newSVpvn
+=item strEQ
 
-Creates a new SV and copies a string into it.  The reference count for the
-SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
-string.  You are responsible for ensuring that the source string is at least
-C<len> bytes long.
+Test two strings to see if they are equal.  Returns true or false.
 
-       SV*     newSVpvn(const char* s, STRLEN len)
+       bool    strEQ(char* s1, char* s2)
 
 =for hackers
-Found in file sv.c
+Found in file handy.h
 
-=item newSVpvn_share
+=item strGE
 
-Creates a new SV with its SvPVX pointing to a shared string in the string
-table. If the string does not already exist in the table, it is created
-first.  Turns on READONLY and FAKE.  The string's hash is stored in the UV
-slot of the SV; if the C<hash> parameter is non-zero, that value is used;
-otherwise the hash is computed.  The idea here is that as the string table
-is used for shared hash keys these strings will have SvPVX == HeKEY and
-hash lookup will avoid string compare.
+Test two strings to see if the first, C<s1>, is greater than or equal to
+the second, C<s2>.  Returns true or false.
 
-       SV*     newSVpvn_share(const char* s, I32 len, U32 hash)
+       bool    strGE(char* s1, char* s2)
 
 =for hackers
-Found in file sv.c
+Found in file handy.h
 
-=item newSVrv
+=item strGT
 
-Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
-it will be upgraded to one.  If C<classname> is non-null then the new SV will
-be blessed in the specified package.  The new SV is returned and its
-reference count is 1.
+Test two strings to see if the first, C<s1>, is greater than the second,
+C<s2>.  Returns true or false.
 
-       SV*     newSVrv(SV* rv, const char* classname)
+       bool    strGT(char* s1, char* s2)
 
 =for hackers
-Found in file sv.c
+Found in file handy.h
 
-=item newSVsv
+=item strLE
 
-Creates a new SV which is an exact duplicate of the original SV.
-(Uses C<sv_setsv>).
+Test two strings to see if the first, C<s1>, is less than or equal to the
+second, C<s2>.  Returns true or false.
 
-       SV*     newSVsv(SV* old)
+       bool    strLE(char* s1, char* s2)
 
 =for hackers
-Found in file sv.c
+Found in file handy.h
 
-=item newSVuv
+=item strLT
 
-Creates a new SV and copies an unsigned integer into it.
-The reference count for the SV is set to 1.
+Test two strings to see if the first, C<s1>, is less than the second,
+C<s2>.  Returns true or false.
 
-       SV*     newSVuv(UV u)
+       bool    strLT(char* s1, char* s2)
 
 =for hackers
-Found in file sv.c
+Found in file handy.h
 
-=item newXS
+=item strNE
 
-Used by C<xsubpp> to hook up XSUBs as Perl subs.
+Test two strings to see if they are different.  Returns true or
+false.
+
+       bool    strNE(char* s1, char* s2)
 
 =for hackers
-Found in file op.c
+Found in file handy.h
 
-=item newXSproto
+=item strnEQ
 
-Used by C<xsubpp> to hook up XSUBs as Perl subs.  Adds Perl prototypes to
-the subs.
+Test two strings to see if they are equal.  The C<len> parameter indicates
+the number of bytes to compare.  Returns true or false. (A wrapper for
+C<strncmp>).
+
+       bool    strnEQ(char* s1, char* s2, STRLEN len)
 
 =for hackers
-Found in file XSUB.h
+Found in file handy.h
 
-=item Newz
+=item strnNE
 
-The XSUB-writer's interface to the C C<malloc> function.  The allocated
-memory is zeroed with C<memzero>.
+Test two strings to see if they are different.  The C<len> parameter
+indicates the number of bytes to compare.  Returns true or false. (A
+wrapper for C<strncmp>).
 
-       void    Newz(int id, void* ptr, int nitems, type)
+       bool    strnNE(char* s1, char* s2, STRLEN len)
 
 =for hackers
 Found in file handy.h
 
-=item new_vstring
 
-Returns a pointer to the next character after the parsed
-vstring, as well as updating the passed in sv.
+=back
 
-Function must be called like
+=head1 Numeric functions
 
-        sv = NEWSV(92,5);
-       s = new_vstring(s,sv);
+=over 8
 
-The sv must already be large enough to store the vstring
-passed in.
+=item grok_bin
 
-       char*   new_vstring(char *vstr, SV *sv)
+converts a string representing a binary number to numeric form.
+
+On entry I<start> and I<*len> give the string to scan, I<*flags> gives
+conversion flags, and I<result> should be NULL or a pointer to an NV.
+The scan stops at the end of the string, or the first invalid character.
+On return I<*len> is set to the length scanned string, and I<*flags> gives
+output flags.
+
+If the value is <= UV_MAX it is returned as a UV, the output flags are clear,
+and nothing is written to I<*result>. If the value is > UV_MAX C<grok_bin>
+returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
+and writes the value to I<*result> (or the value is discarded if I<result>
+is NULL).
+
+The hex number may optionally be prefixed with "0b" or "b" unless
+C<PERL_SCAN_DISALLOW_PREFIX> is set in I<*flags> on entry. If
+C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the binary
+number may use '_' characters to separate digits.
+
+       UV      grok_bin(char* start, STRLEN* len, I32* flags, NV *result)
 
 =for hackers
-Found in file util.c
+Found in file numeric.c
 
-=item Nullav
+=item grok_hex
 
-Null AV pointer.
+converts a string representing a hex number to numeric form.
+
+On entry I<start> and I<*len> give the string to scan, I<*flags> gives
+conversion flags, and I<result> should be NULL or a pointer to an NV.
+The scan stops at the end of the string, or the first non-hex-digit character.
+On return I<*len> is set to the length scanned string, and I<*flags> gives
+output flags.
+
+If the value is <= UV_MAX it is returned as a UV, the output flags are clear,
+and nothing is written to I<*result>. If the value is > UV_MAX C<grok_hex>
+returns UV_MAX, sets C<PERL_SCAN_GREATER_THAN_UV_MAX> in the output flags,
+and writes the value to I<*result> (or the value is discarded if I<result>
+is NULL).
+
+The hex number may optionally be prefixed with "0x" or "x" unless
+C<PERL_SCAN_DISALLOW_PREFIX> is set in I<*flags> on entry. If
+C<PERL_SCAN_ALLOW_UNDERSCORES> is set in I<*flags> then the hex
+number may use '_' characters to separate digits.
+
+       UV      grok_hex(char* start, STRLEN* len, I32* flags, NV *result)
 
 =for hackers
-Found in file av.h
+Found in file numeric.c
 
-=item Nullch
+=item grok_number
 
-Null character pointer.
+Recognise (or not) a number.  The type of the number is returned
+(0 if unrecognised), otherwise it is a bit-ORed combination of
+IS_NUMBER_IN_UV, IS_NUMBER_GREATER_THAN_UV_MAX, IS_NUMBER_NOT_INT,
+IS_NUMBER_NEG, IS_NUMBER_INFINITY, IS_NUMBER_NAN (defined in perl.h).
+
+If the value of the number can fit an in UV, it is returned in the *valuep
+IS_NUMBER_IN_UV will be set to indicate that *valuep is valid, IS_NUMBER_IN_UV
+will never be set unless *valuep is valid, but *valuep may have been assigned
+to during processing even though IS_NUMBER_IN_UV is not set on return.
+If valuep is NULL, IS_NUMBER_IN_UV will be set for the same cases as when
+valuep is non-NULL, but no actual assignment (or SEGV) will occur.
+
+IS_NUMBER_NOT_INT will be set with IS_NUMBER_IN_UV if trailing decimals were
+seen (in which case *valuep gives the true value truncated to an integer), and
+IS_NUMBER_NEG if the number is negative (in which case *valuep holds the
+absolute value).  IS_NUMBER_IN_UV is not set if e notation was used or the
+number is larger than a UV.
+
+       int     grok_number(const char *pv, STRLEN len, UV *valuep)
 
 =for hackers
-Found in file handy.h
+Found in file numeric.c
 
-=item Nullcv
+=item grok_numeric_radix
 
-Null CV pointer.
+Scan and skip for a numeric decimal separator (radix).
+
+       bool    grok_numeric_radix(const char **sp, const char *send)
 
 =for hackers
-Found in file cv.h
+Found in file numeric.c
 
-=item Nullhv
+=item grok_oct
 
-Null HV pointer.
+
+       UV      grok_oct(char* start, STRLEN* len, I32* flags, NV *result)
 
 =for hackers
-Found in file hv.h
+Found in file numeric.c
 
-=item Nullsv
+=item scan_bin
 
-Null SV pointer.
+For backwards compatibility. Use C<grok_bin> instead.
+
+       NV      scan_bin(char* start, STRLEN len, STRLEN* retlen)
 
 =for hackers
-Found in file handy.h
+Found in file numeric.c
 
-=item ORIGMARK
+=item scan_hex
 
-The original stack mark for the XSUB.  See C<dORIGMARK>.
+For backwards compatibility. Use C<grok_hex> instead.
+
+       NV      scan_hex(char* start, STRLEN len, STRLEN* retlen)
 
 =for hackers
-Found in file pp.h
+Found in file numeric.c
 
-=item perl_alloc
+=item scan_oct
 
-Allocates a new Perl interpreter.  See L<perlembed>.
+For backwards compatibility. Use C<grok_oct> instead.
 
-       PerlInterpreter*        perl_alloc()
+       NV      scan_oct(char* start, STRLEN len, STRLEN* retlen)
 
 =for hackers
-Found in file perl.c
+Found in file numeric.c
 
-=item perl_clone
 
-Create and return a new interpreter by cloning the current one.
+=back
 
-       PerlInterpreter*        perl_clone(PerlInterpreter* interp, UV flags)
+=head1 Optree Manipulation Functions
+
+=over 8
+
+=item cv_const_sv
+
+If C<cv> is a constant sub eligible for inlining. returns the constant
+value returned by the sub.  Otherwise, returns NULL.
+
+Constant subs can be created with C<newCONSTSUB> or as described in
+L<perlsub/"Constant Functions">.
+
+       SV*     cv_const_sv(CV* cv)
 
 =for hackers
-Found in file sv.c
+Found in file op.c
 
-=item perl_construct
+=item newCONSTSUB
 
-Initializes a new Perl interpreter.  See L<perlembed>.
+Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
+eligible for inlining at compile-time.
 
-       void    perl_construct(PerlInterpreter* interp)
+       CV*     newCONSTSUB(HV* stash, char* name, SV* sv)
 
 =for hackers
-Found in file perl.c
+Found in file op.c
 
-=item perl_destruct
+=item newXS
 
-Shuts down a Perl interpreter.  See L<perlembed>.
+Used by C<xsubpp> to hook up XSUBs as Perl subs.
 
-       int     perl_destruct(PerlInterpreter* interp)
+=for hackers
+Found in file op.c
+
+
+=back
+
+=head1 Shared SV Functions
+
+=over 8
+
+=item sharedsv_find
+
+Tries to find if a given SV has a shared backend, either by
+looking at magic, or by checking if it is tied again threads::shared.
+
+       shared_sv*      sharedsv_find(SV* sv)
 
 =for hackers
-Found in file perl.c
+Found in file sharedsv.c
 
-=item perl_free
+=item sharedsv_init
 
-Releases a Perl interpreter.  See L<perlembed>.
+Saves a space for keeping SVs wider than an interpreter,
+currently only stores a pointer to the first interpreter.
 
-       void    perl_free(PerlInterpreter* interp)
+       void    sharedsv_init()
 
 =for hackers
-Found in file perl.c
+Found in file sharedsv.c
 
-=item perl_parse
+=item sharedsv_lock
 
-Tells a Perl interpreter to parse a Perl script.  See L<perlembed>.
+Recursive locks on a sharedsv.
+Locks are dynamically scoped at the level of the first lock.
+       void    sharedsv_lock(shared_sv* ssv)
 
-       int     perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env)
+=for hackers
+Found in file sharedsv.c
+
+=item sharedsv_new
+
+Allocates a new shared sv struct, you must yourself create the SV/AV/HV.
+       shared_sv*      sharedsv_new()
 
 =for hackers
-Found in file perl.c
+Found in file sharedsv.c
 
-=item perl_run
+=item sharedsv_thrcnt_dec
+
+Decrements the threadcount of a shared sv. When a threads frontend is freed
+this function should be called.
+
+       void    sharedsv_thrcnt_dec(shared_sv* ssv)
+
+=for hackers
+Found in file sharedsv.c
+
+=item sharedsv_thrcnt_inc
+
+Increments the threadcount of a sharedsv.
+       void    sharedsv_thrcnt_inc(shared_sv* ssv)
+
+=for hackers
+Found in file sharedsv.c
+
+=item sharedsv_unlock
+
+Recursively unlocks a shared sv.
+
+       void    sharedsv_unlock(shared_sv* ssv)
+
+=for hackers
+Found in file sharedsv.c
+
+
+=back
+
+=head1 Stack Manipulation Macros
+
+=over 8
+
+=item dMARK
 
-Tells a Perl interpreter to run.  See L<perlembed>.
+Declare a stack marker variable, C<mark>, for the XSUB.  See C<MARK> and
+C<dORIGMARK>.
 
-       int     perl_run(PerlInterpreter* interp)
+               dMARK;
 
 =for hackers
-Found in file perl.c
+Found in file pp.h
 
-=item PL_modglobal
+=item dORIGMARK
 
-C<PL_modglobal> is a general purpose, interpreter global HV for use by
-extensions that need to keep information on a per-interpreter basis.
-In a pinch, it can also be used as a symbol table for extensions
-to share data among each other.  It is a good idea to use keys
-prefixed by the package name of the extension that owns the data.
+Saves the original stack mark for the XSUB.  See C<ORIGMARK>.
 
-       HV*     PL_modglobal
+               dORIGMARK;
 
 =for hackers
-Found in file intrpvar.h
+Found in file pp.h
 
-=item PL_na
+=item dSP
 
-A convenience variable which is typically used with C<SvPV> when one
-doesn't care about the length of the string.  It is usually more efficient
-to either declare a local variable and use that instead or to use the
-C<SvPV_nolen> macro.
+Declares a local copy of perl's stack pointer for the XSUB, available via
+the C<SP> macro.  See C<SP>.
 
-       STRLEN  PL_na
+               dSP;
 
 =for hackers
-Found in file thrdvar.h
+Found in file pp.h
 
-=item PL_sv_no
+=item EXTEND
 
-This is the C<false> SV.  See C<PL_sv_yes>.  Always refer to this as
-C<&PL_sv_no>.
+Used to extend the argument stack for an XSUB's return values. Once
+used, guarantees that there is room for at least C<nitems> to be pushed
+onto the stack.
 
-       SV      PL_sv_no
+       void    EXTEND(SP, int nitems)
 
 =for hackers
-Found in file intrpvar.h
-
-=item PL_sv_undef
+Found in file pp.h
 
-This is the C<undef> SV.  Always refer to this as C<&PL_sv_undef>.
+=item MARK
 
-       SV      PL_sv_undef
+Stack marker variable for the XSUB.  See C<dMARK>.
 
 =for hackers
-Found in file intrpvar.h
-
-=item PL_sv_yes
+Found in file pp.h
 
-This is the C<true> SV.  See C<PL_sv_no>.  Always refer to this as
-C<&PL_sv_yes>.
+=item ORIGMARK
 
-       SV      PL_sv_yes
+The original stack mark for the XSUB.  See C<dORIGMARK>.
 
 =for hackers
-Found in file intrpvar.h
+Found in file pp.h
 
 =item POPi
 
@@ -1915,317 +2016,441 @@ See C<PUSHMARK> and L<perlcall> for other uses.
 =for hackers
 Found in file pp.h
 
-=item pv_uni_display
+=item SP
 
-Build to the scalar dsv a displayable version of the string spv,
-length len, the displayable version being at most pvlim bytes long
-(if longer, the rest is truncated and "..." will be appended).
-The flags argument is currently unused but available for future extensions.
-The pointer to the PV of the dsv is returned.
+Stack pointer.  This is usually handled by C<xsubpp>.  See C<dSP> and
+C<SPAGAIN>.
 
-       char*   pv_uni_display(SV *dsv, U8 *spv, STRLEN len, STRLEN pvlim, UV flags)
+=for hackers
+Found in file pp.h
+
+=item SPAGAIN
+
+Refetch the stack pointer.  Used after a callback.  See L<perlcall>.
+
+               SPAGAIN;
 
 =for hackers
-Found in file utf8.c
+Found in file pp.h
 
-=item Renew
+=item XPUSHi
 
-The XSUB-writer's interface to the C C<realloc> function.
+Push an integer onto the stack, extending the stack if necessary.  Handles
+'set' magic. See C<PUSHi>.
 
-       void    Renew(void* ptr, int nitems, type)
+       void    XPUSHi(IV iv)
 
 =for hackers
-Found in file handy.h
+Found in file pp.h
 
-=item Renewc
+=item XPUSHn
 
-The XSUB-writer's interface to the C C<realloc> function, with
-cast.
+Push a double onto the stack, extending the stack if necessary.  Handles
+'set' magic.  See C<PUSHn>.
 
-       void    Renewc(void* ptr, int nitems, type, cast)
+       void    XPUSHn(NV nv)
 
 =for hackers
-Found in file handy.h
+Found in file pp.h
 
-=item require_pv
+=item XPUSHp
 
-Tells Perl to C<require> the file named by the string argument.  It is
-analogous to the Perl code C<eval "require '$file'">.  It's even
-implemented that way; consider using Perl_load_module instead.
+Push a string onto the stack, extending the stack if necessary.  The C<len>
+indicates the length of the string.  Handles 'set' magic.  See
+C<PUSHp>.
 
-NOTE: the perl_ form of this function is deprecated.
+       void    XPUSHp(char* str, STRLEN len)
 
-       void    require_pv(const char* pv)
+=for hackers
+Found in file pp.h
+
+=item XPUSHs
+
+Push an SV onto the stack, extending the stack if necessary.  Does not
+handle 'set' magic.  See C<PUSHs>.
+
+       void    XPUSHs(SV* sv)
 
 =for hackers
-Found in file perl.c
+Found in file pp.h
 
-=item RETVAL
+=item XPUSHu
 
-Variable which is setup by C<xsubpp> to hold the return value for an 
-XSUB. This is always the proper type for the XSUB. See 
-L<perlxs/"The RETVAL Variable">.
+Push an unsigned integer onto the stack, extending the stack if necessary.
+See C<PUSHu>.
 
-       (whatever)      RETVAL
+       void    XPUSHu(UV uv)
+
+=for hackers
+Found in file pp.h
+
+=item XSRETURN
+
+Return from XSUB, indicating number of items on the stack.  This is usually
+handled by C<xsubpp>.
+
+       void    XSRETURN(int nitems)
 
 =for hackers
 Found in file XSUB.h
 
-=item Safefree
+=item XSRETURN_IV
 
-The XSUB-writer's interface to the C C<free> function.
+Return an integer from an XSUB immediately.  Uses C<XST_mIV>.
 
-       void    Safefree(void* ptr)
+       void    XSRETURN_IV(IV iv)
 
 =for hackers
-Found in file handy.h
+Found in file XSUB.h
 
-=item savepv
+=item XSRETURN_NO
 
-Copy a string to a safe spot.  This does not use an SV.
+Return C<&PL_sv_no> from an XSUB immediately.  Uses C<XST_mNO>.
 
-       char*   savepv(const char* sv)
+               XSRETURN_NO;
 
 =for hackers
-Found in file util.c
+Found in file XSUB.h
 
-=item savepvn
+=item XSRETURN_NV
 
-Copy a string to a safe spot.  The C<len> indicates number of bytes to
-copy.  This does not use an SV.
+Return a double from an XSUB immediately.  Uses C<XST_mNV>.
 
-       char*   savepvn(const char* sv, I32 len)
+       void    XSRETURN_NV(NV nv)
 
 =for hackers
-Found in file util.c
+Found in file XSUB.h
+
+=item XSRETURN_PV
+
+Return a copy of a string from an XSUB immediately.  Uses C<XST_mPV>.
+
+       void    XSRETURN_PV(char* str)
+
+=for hackers
+Found in file XSUB.h
+
+=item XSRETURN_UNDEF
+
+Return C<&PL_sv_undef> from an XSUB immediately.  Uses C<XST_mUNDEF>.
+
+               XSRETURN_UNDEF;
+
+=for hackers
+Found in file XSUB.h
+
+=item XSRETURN_YES
+
+Return C<&PL_sv_yes> from an XSUB immediately.  Uses C<XST_mYES>.
+
+               XSRETURN_YES;
+
+=for hackers
+Found in file XSUB.h
+
+=item XST_mIV
+
+Place an integer into the specified position C<pos> on the stack.  The
+value is stored in a new mortal SV.
+
+       void    XST_mIV(int pos, IV iv)
+
+=for hackers
+Found in file XSUB.h
+
+=item XST_mNO
+
+Place C<&PL_sv_no> into the specified position C<pos> on the
+stack.
+
+       void    XST_mNO(int pos)
+
+=for hackers
+Found in file XSUB.h
+
+=item XST_mNV
+
+Place a double into the specified position C<pos> on the stack.  The value
+is stored in a new mortal SV.
+
+       void    XST_mNV(int pos, NV nv)
+
+=for hackers
+Found in file XSUB.h
+
+=item XST_mPV
+
+Place a copy of a string into the specified position C<pos> on the stack. 
+The value is stored in a new mortal SV.
+
+       void    XST_mPV(int pos, char* str)
+
+=for hackers
+Found in file XSUB.h
+
+=item XST_mUNDEF
+
+Place C<&PL_sv_undef> into the specified position C<pos> on the
+stack.
+
+       void    XST_mUNDEF(int pos)
+
+=for hackers
+Found in file XSUB.h
+
+=item XST_mYES
+
+Place C<&PL_sv_yes> into the specified position C<pos> on the
+stack.
+
+       void    XST_mYES(int pos)
+
+=for hackers
+Found in file XSUB.h
+
+
+=back
+
+=head1 SV Flags
 
-=item SAVETMPS
+=over 8
 
-Opening bracket for temporaries on a callback.  See C<FREETMPS> and
-L<perlcall>.
+=item svtype
 
-               SAVETMPS;
+An enum of flags for Perl types.  These are found in the file B<sv.h>
+in the C<svtype> enum.  Test these flags with the C<SvTYPE> macro.
 
 =for hackers
-Found in file scope.h
-
-=item scan_bin
+Found in file sv.h
 
-For backwards compatibility. Use C<grok_bin> instead.
+=item SVt_IV
 
-       NV      scan_bin(char* start, STRLEN len, STRLEN* retlen)
+Integer type flag for scalars.  See C<svtype>.
 
 =for hackers
-Found in file numeric.c
-
-=item scan_hex
+Found in file sv.h
 
-For backwards compatibility. Use C<grok_hex> instead.
+=item SVt_NV
 
-       NV      scan_hex(char* start, STRLEN len, STRLEN* retlen)
+Double type flag for scalars.  See C<svtype>.
 
 =for hackers
-Found in file numeric.c
-
-=item scan_oct
+Found in file sv.h
 
-For backwards compatibility. Use C<grok_oct> instead.
+=item SVt_PV
 
-       NV      scan_oct(char* start, STRLEN len, STRLEN* retlen)
+Pointer type flag for scalars.  See C<svtype>.
 
 =for hackers
-Found in file numeric.c
-
-=item sharedsv_find
+Found in file sv.h
 
-Tries to find if a given SV has a shared backend, either by
-looking at magic, or by checking if it is tied again threads::shared.
+=item SVt_PVAV
 
-       shared_sv*      sharedsv_find(SV* sv)
+Type flag for arrays.  See C<svtype>.
 
 =for hackers
-Found in file sharedsv.c
-
-=item sharedsv_init
+Found in file sv.h
 
-Saves a space for keeping SVs wider than an interpreter,
-currently only stores a pointer to the first interpreter.
+=item SVt_PVCV
 
-       void    sharedsv_init()
+Type flag for code refs.  See C<svtype>.
 
 =for hackers
-Found in file sharedsv.c
+Found in file sv.h
 
-=item sharedsv_lock
+=item SVt_PVHV
 
-Recursive locks on a sharedsv.
-Locks are dynamically scoped at the level of the first lock.
-       void    sharedsv_lock(shared_sv* ssv)
+Type flag for hashes.  See C<svtype>.
 
 =for hackers
-Found in file sharedsv.c
+Found in file sv.h
 
-=item sharedsv_new
+=item SVt_PVMG
 
-Allocates a new shared sv struct, you must yourself create the SV/AV/HV.
-       shared_sv*      sharedsv_new()
+Type flag for blessed scalars.  See C<svtype>.
 
 =for hackers
-Found in file sharedsv.c
+Found in file sv.h
 
-=item sharedsv_thrcnt_dec
 
-Decrements the threadcount of a shared sv. When a threads frontend is freed
-this function should be called.
+=back
 
-       void    sharedsv_thrcnt_dec(shared_sv* ssv)
+=head1 SV Manipulation Functions
 
-=for hackers
-Found in file sharedsv.c
+=over 8
 
-=item sharedsv_thrcnt_inc
+=item get_sv
 
-Increments the threadcount of a sharedsv.
-       void    sharedsv_thrcnt_inc(shared_sv* ssv)
+Returns the SV of the specified Perl scalar.  If C<create> is set and the
+Perl variable does not exist then it will be created.  If C<create> is not
+set and the variable does not exist then NULL is returned.
+
+NOTE: the perl_ form of this function is deprecated.
+
+       SV*     get_sv(const char* name, I32 create)
 
 =for hackers
-Found in file sharedsv.c
+Found in file perl.c
 
-=item sharedsv_unlock
+=item looks_like_number
 
-Recursively unlocks a shared sv.
+Test if the content of an SV looks like a number (or is a number).
+C<Inf> and C<Infinity> are treated as numbers (so will not issue a
+non-numeric warning), even if your atof() doesn't grok them.
 
-       void    sharedsv_unlock(shared_sv* ssv)
+       I32     looks_like_number(SV* sv)
 
 =for hackers
-Found in file sharedsv.c
-
-=item sortsv
+Found in file sv.c
 
-Sort an array. Here is an example:
+=item newRV_inc
 
-    sortsv(AvARRAY(av), av_len(av)+1, Perl_sv_cmp_locale);
+Creates an RV wrapper for an SV.  The reference count for the original SV is
+incremented.
 
-       void    sortsv(SV ** array, size_t num_elts, SVCOMPARE_t cmp)
+       SV*     newRV_inc(SV* sv)
 
 =for hackers
-Found in file pp_sort.c
+Found in file sv.h
 
-=item SP
+=item newRV_noinc
 
-Stack pointer.  This is usually handled by C<xsubpp>.  See C<dSP> and
-C<SPAGAIN>.
+Creates an RV wrapper for an SV.  The reference count for the original
+SV is B<not> incremented.
+
+       SV*     newRV_noinc(SV *sv)
 
 =for hackers
-Found in file pp.h
+Found in file sv.c
 
-=item SPAGAIN
+=item newSV
 
-Refetch the stack pointer.  Used after a callback.  See L<perlcall>.
+Create a new null SV, or if len > 0, create a new empty SVt_PV type SV
+with an initial PV allocation of len+1. Normally accessed via the C<NEWSV>
+macro.
 
-               SPAGAIN;
+       SV*     newSV(STRLEN len)
 
 =for hackers
-Found in file pp.h
+Found in file sv.c
 
-=item ST
+=item newSViv
 
-Used to access elements on the XSUB's stack.
+Creates a new SV and copies an integer into it.  The reference count for the
+SV is set to 1.
 
-       SV*     ST(int ix)
+       SV*     newSViv(IV i)
 
 =for hackers
-Found in file XSUB.h
+Found in file sv.c
 
-=item strEQ
+=item newSVnv
 
-Test two strings to see if they are equal.  Returns true or false.
+Creates a new SV and copies a floating point value into it.
+The reference count for the SV is set to 1.
 
-       bool    strEQ(char* s1, char* s2)
+       SV*     newSVnv(NV n)
 
 =for hackers
-Found in file handy.h
+Found in file sv.c
 
-=item strGE
+=item newSVpv
 
-Test two strings to see if the first, C<s1>, is greater than or equal to
-the second, C<s2>.  Returns true or false.
+Creates a new SV and copies a string into it.  The reference count for the
+SV is set to 1.  If C<len> is zero, Perl will compute the length using
+strlen().  For efficiency, consider using C<newSVpvn> instead.
 
-       bool    strGE(char* s1, char* s2)
+       SV*     newSVpv(const char* s, STRLEN len)
 
 =for hackers
-Found in file handy.h
+Found in file sv.c
 
-=item strGT
+=item newSVpvf
 
-Test two strings to see if the first, C<s1>, is greater than the second,
-C<s2>.  Returns true or false.
+Creates a new SV and initializes it with the string formatted like
+C<sprintf>.
 
-       bool    strGT(char* s1, char* s2)
+       SV*     newSVpvf(const char* pat, ...)
 
 =for hackers
-Found in file handy.h
+Found in file sv.c
 
-=item strLE
+=item newSVpvn
 
-Test two strings to see if the first, C<s1>, is less than or equal to the
-second, C<s2>.  Returns true or false.
+Creates a new SV and copies a string into it.  The reference count for the
+SV is set to 1.  Note that if C<len> is zero, Perl will create a zero length
+string.  You are responsible for ensuring that the source string is at least
+C<len> bytes long.
 
-       bool    strLE(char* s1, char* s2)
+       SV*     newSVpvn(const char* s, STRLEN len)
 
 =for hackers
-Found in file handy.h
+Found in file sv.c
 
-=item strLT
+=item newSVpvn_share
 
-Test two strings to see if the first, C<s1>, is less than the second,
-C<s2>.  Returns true or false.
+Creates a new SV with its SvPVX pointing to a shared string in the string
+table. If the string does not already exist in the table, it is created
+first.  Turns on READONLY and FAKE.  The string's hash is stored in the UV
+slot of the SV; if the C<hash> parameter is non-zero, that value is used;
+otherwise the hash is computed.  The idea here is that as the string table
+is used for shared hash keys these strings will have SvPVX == HeKEY and
+hash lookup will avoid string compare.
 
-       bool    strLT(char* s1, char* s2)
+       SV*     newSVpvn_share(const char* s, I32 len, U32 hash)
 
 =for hackers
-Found in file handy.h
+Found in file sv.c
 
-=item strNE
+=item newSVrv
 
-Test two strings to see if they are different.  Returns true or
-false.
+Creates a new SV for the RV, C<rv>, to point to.  If C<rv> is not an RV then
+it will be upgraded to one.  If C<classname> is non-null then the new SV will
+be blessed in the specified package.  The new SV is returned and its
+reference count is 1.
 
-       bool    strNE(char* s1, char* s2)
+       SV*     newSVrv(SV* rv, const char* classname)
 
 =for hackers
-Found in file handy.h
+Found in file sv.c
 
-=item strnEQ
+=item newSVsv
 
-Test two strings to see if they are equal.  The C<len> parameter indicates
-the number of bytes to compare.  Returns true or false. (A wrapper for
-C<strncmp>).
+Creates a new SV which is an exact duplicate of the original SV.
+(Uses C<sv_setsv>).
 
-       bool    strnEQ(char* s1, char* s2, STRLEN len)
+       SV*     newSVsv(SV* old)
 
 =for hackers
-Found in file handy.h
+Found in file sv.c
 
-=item strnNE
+=item newSVuv
 
-Test two strings to see if they are different.  The C<len> parameter
-indicates the number of bytes to compare.  Returns true or false. (A
-wrapper for C<strncmp>).
+Creates a new SV and copies an unsigned integer into it.
+The reference count for the SV is set to 1.
 
-       bool    strnNE(char* s1, char* s2, STRLEN len)
+       SV*     newSVuv(UV u)
 
 =for hackers
-Found in file handy.h
+Found in file sv.c
 
-=item StructCopy
+=item new_vstring
 
-This is an architecture-independent macro to copy one structure to another.
+Returns a pointer to the next character after the parsed
+vstring, as well as updating the passed in sv.
 
-       void    StructCopy(type src, type dest, type)
+Function must be called like
+
+        sv = NEWSV(92,5);
+       s = new_vstring(s,sv);
+
+The sv must already be large enough to store the vstring
+passed in.
+
+       char*   new_vstring(char *vstr, SV *sv)
 
 =for hackers
-Found in file handy.h
+Found in file util.c
 
 =item SvCUR
 
@@ -2245,22 +2470,12 @@ Set the length of the string which is in the SV.  See C<SvCUR>.
 =for hackers
 Found in file sv.h
 
-=item SvEND
-
-Returns a pointer to the last character in the string which is in the SV.
-See C<SvCUR>.  Access the character as *(SvEND(sv)).
-
-       char*   SvEND(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvGETMAGIC
+=item SvEND
 
-Invokes C<mg_get> on an SV if it has 'get' magic.  This macro evaluates its
-argument more than once.
+Returns a pointer to the last character in the string which is in the SV.
+See C<SvCUR>.  Access the character as *(SvEND(sv)).
 
-       void    SvGETMAGIC(SV* sv)
+       char*   SvEND(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -2360,22 +2575,22 @@ version which guarantees to evaluate sv only once.
 =for hackers
 Found in file sv.h
 
-=item SvIVX
+=item SvIVx
 
-Returns the raw value in the SV's IV slot, without checks or conversions.
-Only use when you are sure SvIOK is true. See also C<SvIV()>.
+Coerces the given SV to an integer and returns it. Guarantees to evaluate
+sv only once. Use the more efficient C<SvIV> otherwise.
 
-       IV      SvIVX(SV* sv)
+       IV      SvIVx(SV* sv)
 
 =for hackers
 Found in file sv.h
 
-=item SvIVx
+=item SvIVX
 
-Coerces the given SV to an integer and returns it. Guarantees to evaluate
-sv only once. Use the more efficient C<SvIV> otherwise.
+Returns the raw value in the SV's IV slot, without checks or conversions.
+Only use when you are sure SvIOK is true. See also C<SvIV()>.
 
-       IV      SvIVx(SV* sv)
+       IV      SvIVX(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -2475,22 +2690,22 @@ which guarantees to evaluate sv only once.
 =for hackers
 Found in file sv.h
 
-=item SvNVx
+=item SvNVX
 
-Coerces the given SV to a double and returns it. Guarantees to evaluate
-sv only once. Use the more efficient C<SvNV> otherwise.
+Returns the raw value in the SV's NV slot, without checks or conversions.
+Only use when you are sure SvNOK is true. See also C<SvNV()>.
 
-       NV      SvNVx(SV* sv)
+       NV      SvNVX(SV* sv)
 
 =for hackers
 Found in file sv.h
 
-=item SvNVX
+=item SvNVx
 
-Returns the raw value in the SV's NV slot, without checks or conversions.
-Only use when you are sure SvNOK is true. See also C<SvNV()>.
+Coerces the given SV to a double and returns it. Guarantees to evaluate
+sv only once. Use the more efficient C<SvNV> otherwise.
 
-       NV      SvNVX(SV* sv)
+       NV      SvNVx(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -2796,50 +3011,12 @@ Dereferences an RV to return the SV.
 =for hackers
 Found in file sv.h
 
-=item SvSETMAGIC
-
-Invokes C<mg_set> on an SV if it has 'set' magic.  This macro evaluates its
-argument more than once.
-
-       void    SvSETMAGIC(SV* sv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSetMagicSV
-
-Like C<SvSetSV>, but does any set magic required afterwards.
-
-       void    SvSetMagicSV(SV* dsb, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
 =item SvSetMagicSV_nosteal
 
 Like C<SvSetMagicSV>, but does any set magic required afterwards.
 
-       void    SvSetMagicSV_nosteal(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSetSV
-
-Calls C<sv_setsv> if dsv is not the same as ssv.  May evaluate arguments
-more than once.
-
-       void    SvSetSV(SV* dsb, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
-=item SvSetSV_nosteal
-
-Calls a non-destructive version of C<sv_setsv> if dsv is not the same as
-ssv. May evaluate arguments more than once.
 
-       void    SvSetSV_nosteal(SV* dsv, SV* ssv)
+       void    SvSetMagicSV_nosteal(SV* dsv, SV* ssv)
 
 =for hackers
 Found in file sv.h
@@ -2905,14 +3082,6 @@ false, defined or undefined.  Does not handle 'get' magic.
 =for hackers
 Found in file sv.h
 
-=item svtype
-
-An enum of flags for Perl types.  These are found in the file B<sv.h>
-in the C<svtype> enum.  Test these flags with the C<SvTYPE> macro.
-
-=for hackers
-Found in file sv.h
-
 =item SvTYPE
 
 Returns the type of the SV.  See C<svtype>.
@@ -2922,55 +3091,6 @@ Returns the type of the SV.  See C<svtype>.
 =for hackers
 Found in file sv.h
 
-=item SVt_IV
-
-Integer type flag for scalars.  See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_NV
-
-Double type flag for scalars.  See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PV
-
-Pointer type flag for scalars.  See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVAV
-
-Type flag for arrays.  See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVCV
-
-Type flag for code refs.  See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVHV
-
-Type flag for hashes.  See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
-=item SVt_PVMG
-
-Type flag for blessed scalars.  See C<svtype>.
-
-=for hackers
-Found in file sv.h
-
 =item SvUOK
 
 Returns a boolean indicating whether the SV contains an unsigned integer.
@@ -3740,24 +3860,6 @@ instead.
 =for hackers
 Found in file sv.c
 
-=item sv_recode_to_utf8
-
-The encoding is assumed to be an Encode object, on entry the PV
-of the sv is assumed to be octets in that encoding, and the sv
-will be converted into Unicode (and UTF-8).
-
-If the sv already is UTF-8 (or if it is not POK), or if the encoding
-is not a reference, nothing is done to the sv.  If the encoding is not
-an C<Encode::XS> Encoding object, bad things will happen.
-(See F<lib/encoding.pm> and L<Encode>).
-
-The PV of the sv is returned.
-
-       char*   sv_recode_to_utf8(SV* sv, SV *encoding)
-
-=for hackers
-Found in file sv.c
-
 =item sv_reftype
 
 Returns a string describing what the SV is a reference to.
@@ -4096,19 +4198,6 @@ instead use an in-line version.
 =for hackers
 Found in file sv.c
 
-=item sv_uni_display
-
-Build to the scalar dsv a displayable version of the scalar sv,
-he displayable version being at most pvlim bytes long
-(if longer, the rest is truncated and "..." will be appended).
-The flags argument is currently unused but available for future extensions.
-The pointer to the PV of the dsv is returned.
-
-       char*   sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim, UV flags)
-
-=for hackers
-Found in file utf8.c
-
 =item sv_unmagic
 
 Removes all magic of type C<type> from an SV.
@@ -4289,36 +4378,141 @@ Usually used via one of its frontends C<sv_setpvf> and C<sv_setpvf_mg>.
        void    sv_vsetpvfn(SV* sv, const char* pat, STRLEN patlen, va_list* args, SV** svargs, I32 svmax, bool *maybe_tainted)
 
 =for hackers
-Found in file sv.c
+Found in file sv.c
+
+
+=back
+
+=head1 Unicode Support
+
+=over 8
+
+=item bytes_from_utf8
+
+Converts a string C<s> of length C<len> from UTF8 into byte encoding.
+Unlike <utf8_to_bytes> but like C<bytes_to_utf8>, returns a pointer to
+the newly-created string, and updates C<len> to contain the new
+length.  Returns the original string if no conversion occurs, C<len>
+is unchanged. Do nothing if C<is_utf8> points to 0. Sets C<is_utf8> to
+0 if C<s> is converted or contains all 7bit characters.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+       U8*     bytes_from_utf8(U8 *s, STRLEN *len, bool *is_utf8)
+
+=for hackers
+Found in file utf8.c
+
+=item bytes_to_utf8
+
+Converts a string C<s> of length C<len> from ASCII into UTF8 encoding.
+Returns a pointer to the newly-created string, and sets C<len> to
+reflect the new length.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+       U8*     bytes_to_utf8(U8 *s, STRLEN *len)
+
+=for hackers
+Found in file utf8.c
+
+=item ibcmp_utf8
+
+Return true if the strings s1 and s2 differ case-insensitively, false
+if not (if they are equal case-insensitively).  If u1 is true, the
+string s1 is assumed to be in UTF-8-encoded Unicode.  If u2 is true,
+the string s2 is assumed to be in UTF-8-encoded Unicode.  If u1 or u2
+are false, the respective string is assumed to be in native 8-bit
+encoding.
+
+If the pe1 and pe2 are non-NULL, the scanning pointers will be copied
+in there (they will point at the beginning of the I<next> character).
+If the pointers behind pe1 or pe2 are non-NULL, they are the end
+pointers beyond which scanning will not continue under any
+circustances.  If the byte lengths l1 and l2 are non-zero, s1+l1 and
+s2+l2 will be used as goal end pointers that will also stop the scan,
+and which qualify towards defining a successful match: all the scans
+that define an explicit length must reach their goal pointers for
+a match to succeed).
+
+For case-insensitiveness, the "casefolding" of Unicode is used
+instead of upper/lowercasing both the characters, see
+http://www.unicode.org/unicode/reports/tr21/ (Case Mappings).
+
+       I32     ibcmp_utf8(const char* a, char **pe1, UV l1, bool u1, const char* b, char **pe2, UV l2, bool u2)
+
+=for hackers
+Found in file utf8.c
+
+=item is_utf8_char
+
+Tests if some arbitrary number of bytes begins in a valid UTF-8
+character.  Note that an INVARIANT (i.e. ASCII) character is a valid UTF-8 character.
+The actual number of bytes in the UTF-8 character will be returned if
+it is valid, otherwise 0.
+
+       STRLEN  is_utf8_char(U8 *p)
+
+=for hackers
+Found in file utf8.c
+
+=item is_utf8_string
+
+Returns true if first C<len> bytes of the given string form a valid UTF8
+string, false otherwise.  Note that 'a valid UTF8 string' does not mean
+'a string that contains UTF8' because a valid ASCII string is a valid
+UTF8 string.
+
+       bool    is_utf8_string(U8 *s, STRLEN len)
+
+=for hackers
+Found in file utf8.c
 
-=item THIS
+=item pv_uni_display
 
-Variable which is setup by C<xsubpp> to designate the object in a C++ 
-XSUB.  This is always the proper type for the C++ object.  See C<CLASS> and 
-L<perlxs/"Using XS With C++">.
+Build to the scalar dsv a displayable version of the string spv,
+length len, the displayable version being at most pvlim bytes long
+(if longer, the rest is truncated and "..." will be appended).
+The flags argument is currently unused but available for future extensions.
+The pointer to the PV of the dsv is returned.
 
-       (whatever)      THIS
+       char*   pv_uni_display(SV *dsv, U8 *spv, STRLEN len, STRLEN pvlim, UV flags)
 
 =for hackers
-Found in file XSUB.h
+Found in file utf8.c
 
-=item toLOWER
+=item sv_recode_to_utf8
 
-Converts the specified character to lowercase.
+The encoding is assumed to be an Encode object, on entry the PV
+of the sv is assumed to be octets in that encoding, and the sv
+will be converted into Unicode (and UTF-8).
 
-       char    toLOWER(char ch)
+If the sv already is UTF-8 (or if it is not POK), or if the encoding
+is not a reference, nothing is done to the sv.  If the encoding is not
+an C<Encode::XS> Encoding object, bad things will happen.
+(See F<lib/encoding.pm> and L<Encode>).
+
+The PV of the sv is returned.
+
+       char*   sv_recode_to_utf8(SV* sv, SV *encoding)
 
 =for hackers
-Found in file handy.h
+Found in file sv.c
 
-=item toUPPER
+=item sv_uni_display
 
-Converts the specified character to uppercase.
+Build to the scalar dsv a displayable version of the scalar sv,
+he displayable version being at most pvlim bytes long
+(if longer, the rest is truncated and "..." will be appended).
+The flags argument is currently unused but available for future extensions.
+The pointer to the PV of the dsv is returned.
 
-       char    toUPPER(char ch)
+       char*   sv_uni_display(SV *dsv, SV *ssv, STRLEN pvlim, UV flags)
 
 =for hackers
-Found in file handy.h
+Found in file utf8.c
 
 =item to_utf8_case
 
@@ -4575,205 +4769,148 @@ is the recommended Unicode-aware way of saying
 =for hackers
 Found in file utf8.c
 
-=item warn
-
-This is the XSUB-writer's interface to Perl's C<warn> function.  Use this
-function the same way you use the C C<printf> function.  See
-C<croak>.
-
-       void    warn(const char* pat, ...)
-
-=for hackers
-Found in file util.c
-
-=item XPUSHi
-
-Push an integer onto the stack, extending the stack if necessary.  Handles
-'set' magic. See C<PUSHi>.
-
-       void    XPUSHi(IV iv)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHn
-
-Push a double onto the stack, extending the stack if necessary.  Handles
-'set' magic.  See C<PUSHn>.
-
-       void    XPUSHn(NV nv)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHp
-
-Push a string onto the stack, extending the stack if necessary.  The C<len>
-indicates the length of the string.  Handles 'set' magic.  See
-C<PUSHp>.
-
-       void    XPUSHp(char* str, STRLEN len)
-
-=for hackers
-Found in file pp.h
-
-=item XPUSHs
-
-Push an SV onto the stack, extending the stack if necessary.  Does not
-handle 'set' magic.  See C<PUSHs>.
-
-       void    XPUSHs(SV* sv)
-
-=for hackers
-Found in file pp.h
 
-=item XPUSHu
+=back
 
-Push an unsigned integer onto the stack, extending the stack if necessary.
-See C<PUSHu>.
+=head1 Variables created by C<xsubpp> and C<xsubpp> internal functions
 
-       void    XPUSHu(UV uv)
+=over 8
 
-=for hackers
-Found in file pp.h
+=item ax
 
-=item XS
+Variable which is setup by C<xsubpp> to indicate the stack base offset,
+used by the C<ST>, C<XSprePUSH> and C<XSRETURN> macros.  The C<dMARK> macro
+must be called prior to setup the C<MARK> variable.
 
-Macro to declare an XSUB and its C parameter list.  This is handled by
-C<xsubpp>.
+       I32     ax
 
 =for hackers
 Found in file XSUB.h
 
-=item XSRETURN
+=item CLASS
 
-Return from XSUB, indicating number of items on the stack.  This is usually
-handled by C<xsubpp>.
+Variable which is setup by C<xsubpp> to indicate the 
+class name for a C++ XS constructor.  This is always a C<char*>.  See C<THIS>.
 
-       void    XSRETURN(int nitems)
+       char*   CLASS
 
 =for hackers
 Found in file XSUB.h
 
-=item XSRETURN_EMPTY
+=item dAX
 
-Return an empty list from an XSUB immediately.
+Sets up the C<ax> variable.
+This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
 
-               XSRETURN_EMPTY;
+               dAX;
 
 =for hackers
 Found in file XSUB.h
 
-=item XSRETURN_IV
+=item dITEMS
 
-Return an integer from an XSUB immediately.  Uses C<XST_mIV>.
+Sets up the C<items> variable.
+This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
 
-       void    XSRETURN_IV(IV iv)
+               dITEMS;
 
 =for hackers
 Found in file XSUB.h
 
-=item XSRETURN_NO
+=item dXSARGS
 
-Return C<&PL_sv_no> from an XSUB immediately.  Uses C<XST_mNO>.
+Sets up stack and mark pointers for an XSUB, calling dSP and 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>.
 
-               XSRETURN_NO;
+               dXSARGS;
 
 =for hackers
 Found in file XSUB.h
 
-=item XSRETURN_NV
+=item dXSI32
 
-Return a double from an XSUB immediately.  Uses C<XST_mNV>.
+Sets up the C<ix> variable for an XSUB which has aliases.  This is usually
+handled automatically by C<xsubpp>.
 
-       void    XSRETURN_NV(NV nv)
+               dXSI32;
 
 =for hackers
 Found in file XSUB.h
 
-=item XSRETURN_PV
+=item items
 
-Return a copy of a string from an XSUB immediately.  Uses C<XST_mPV>.
+Variable which is setup by C<xsubpp> to indicate the number of 
+items on the stack.  See L<perlxs/"Variable-length Parameter Lists">.
 
-       void    XSRETURN_PV(char* str)
+       I32     items
 
 =for hackers
 Found in file XSUB.h
 
-=item XSRETURN_UNDEF
+=item ix
 
-Return C<&PL_sv_undef> from an XSUB immediately.  Uses C<XST_mUNDEF>.
+Variable which is setup by C<xsubpp> to indicate which of an 
+XSUB's aliases was used to invoke it.  See L<perlxs/"The ALIAS: Keyword">.
 
-               XSRETURN_UNDEF;
+       I32     ix
 
 =for hackers
 Found in file XSUB.h
 
-=item XSRETURN_YES
-
-Return C<&PL_sv_yes> from an XSUB immediately.  Uses C<XST_mYES>.
+=item newXSproto
 
-               XSRETURN_YES;
+Used by C<xsubpp> to hook up XSUBs as Perl subs.  Adds Perl prototypes to
+the subs.
 
 =for hackers
 Found in file XSUB.h
 
-=item XST_mIV
+=item RETVAL
 
-Place an integer into the specified position C<pos> on the stack.  The
-value is stored in a new mortal SV.
+Variable which is setup by C<xsubpp> to hold the return value for an 
+XSUB. This is always the proper type for the XSUB. See 
+L<perlxs/"The RETVAL Variable">.
 
-       void    XST_mIV(int pos, IV iv)
+       (whatever)      RETVAL
 
 =for hackers
 Found in file XSUB.h
 
-=item XST_mNO
+=item ST
 
-Place C<&PL_sv_no> into the specified position C<pos> on the
-stack.
+Used to access elements on the XSUB's stack.
 
-       void    XST_mNO(int pos)
+       SV*     ST(int ix)
 
 =for hackers
 Found in file XSUB.h
 
-=item XST_mNV
+=item THIS
 
-Place a double into the specified position C<pos> on the stack.  The value
-is stored in a new mortal SV.
+Variable which is setup by C<xsubpp> to designate the object in a C++ 
+XSUB.  This is always the proper type for the C++ object.  See C<CLASS> and 
+L<perlxs/"Using XS With C++">.
 
-       void    XST_mNV(int pos, NV nv)
+       (whatever)      THIS
 
 =for hackers
 Found in file XSUB.h
 
-=item XST_mPV
-
-Place a copy of a string into the specified position C<pos> on the stack. 
-The value is stored in a new mortal SV.
+=item XS
 
-       void    XST_mPV(int pos, char* str)
+Macro to declare an XSUB and its C parameter list.  This is handled by
+C<xsubpp>.
 
 =for hackers
 Found in file XSUB.h
 
-=item XST_mUNDEF
-
-Place C<&PL_sv_undef> into the specified position C<pos> on the
-stack.
-
-       void    XST_mUNDEF(int pos)
-
-=for hackers
-Found in file XSUB.h
+=item XSRETURN_EMPTY
 
-=item XST_mYES
+Return an empty list from an XSUB immediately.
 
-Place C<&PL_sv_yes> into the specified position C<pos> on the
-stack.
 
-       void    XST_mYES(int pos)
+               XSRETURN_EMPTY;
 
 =for hackers
 Found in file XSUB.h
@@ -4797,15 +4934,42 @@ C<xsubpp>.  See L<perlxs/"The VERSIONCHECK: Keyword">.
 =for hackers
 Found in file XSUB.h
 
-=item Zero
 
-The XSUB-writer's interface to the C C<memzero> function.  The C<dest> is the
-destination, C<nitems> is the number of items, and C<type> is the type.
+=back
 
-       void    Zero(void* dest, int nitems, type)
+=head1 Warning and Dieing
+
+=over 8
+
+=item croak
+
+This is the XSUB-writer's interface to Perl's C<die> function.
+Normally use this function the same way you use the C C<printf>
+function.  See C<warn>.
+
+If you want to throw an exception object, assign the object to
+C<$@> and then pass C<Nullch> to croak():
+
+   errsv = get_sv("@", TRUE);
+   sv_setsv(errsv, exception_object);
+   croak(Nullch);
+
+       void    croak(const char* pat, ...)
 
 =for hackers
-Found in file handy.h
+Found in file util.c
+
+=item warn
+
+This is the XSUB-writer's interface to Perl's C<warn> function.  Use this
+function the same way you use the C C<printf> function.  See
+C<croak>.
+
+       void    warn(const char* pat, ...)
+
+=for hackers
+Found in file util.c
+
 
 =back