summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--MANIFEST2
-rw-r--r--Makefile.SH1
-rw-r--r--autodoc.pl274
-rw-r--r--embed.fnc1340
-rwxr-xr-xembed.pl1563
-rw-r--r--pod/perlapi.pod2294
6 files changed, 2850 insertions, 2624 deletions
diff --git a/MANIFEST b/MANIFEST
index a091af96c5..7420fc52f1 100644
--- 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
diff --git a/Makefile.SH b/Makefile.SH
index 0ee560b69e..d617fc1197 100644
--- a/Makefile.SH
+++ b/Makefile.SH
@@ -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
index 0000000000..8b6f3b4472
--- /dev/null
+++ b/autodoc.pl
@@ -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
index 0000000000..9c8923207b
--- /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
+
diff --git a/embed.pl b/embed.pl
index 3a72d20e4d..6536c83212 100755
--- 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
-
diff --git a/pod/perlapi.pod b/pod/perlapi.pod
index 915e40c21d..0b915ddba6 100644
--- a/pod/perlapi.pod
+++ b/pod/perlapi.pod
@@ -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
-=for hackers
-Found in file pp.h
+=over 8
-=item fbm_compile
+=item CvSTASH
-Analyses the string in order to make fast searches on it using fbm_instr()
--- the Boyer-Moore algorithm.
+Returns the stash of the CV.
- void fbm_compile(SV* sv, U32 flags)
+ HV* CvSTASH(CV* cv)
=for hackers
-Found in file util.c
+Found in file cv.h
-=item fbm_instr
+=item get_cv
-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.
+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.
- char* fbm_instr(unsigned char* big, unsigned char* bigend, SV* littlesv, 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 form
+=item Nullcv
-Takes a sprintf-style format pattern and conventional
-(non-SV) arguments and returns the formatted string.
+Null CV pointer.
- (char *) Perl_form(pTHX_ const char* pat, ...)
-can be used any place a string (char *) is required:
+=for hackers
+Found in file cv.h
- char * s = Perl_form("%d.%d",major,minor);
-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).
+=back
- char* form(const char* pat, ...)
+=head1 Embedding Functions
-=for hackers
-Found in file util.c
+=over 8
-=item FREETMPS
+=item load_module
-Closing bracket for temporaries on a callback. See C<SAVETMPS> and
-L<perlcall>.
+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>.
- FREETMPS;
+ void load_module(U32 flags, SV* name, SV* ver, ...)
=for hackers
-Found in file scope.h
+Found in file op.c
-=item getcwd_sv
+=item perl_alloc
-Fill the sv with current working directory
+Allocates a new Perl interpreter. See L<perlembed>.
- int getcwd_sv(SV* sv)
+ PerlInterpreter* perl_alloc()
=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_construct
-NOTE: the perl_ form of this function is deprecated.
+Initializes a new Perl interpreter. See L<perlembed>.
- AV* get_av(const char* name, I32 create)
+ void perl_construct(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_destruct
-NOTE: the perl_ form of this function is deprecated.
+Shuts down a Perl interpreter. See L<perlembed>.
- CV* get_cv(const char* name, I32 create)
+ int perl_destruct(PerlInterpreter* interp)
=for hackers
Found in file perl.c
-=item get_hv
-
-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 perl_free
-NOTE: the perl_ form of this function is deprecated.
+Releases a Perl interpreter. See L<perlembed>.
- HV* get_hv(const char* name, I32 create)
+ void perl_free(PerlInterpreter* interp)
=for hackers
Found in file perl.c
-=item get_sv
-
-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.
+=item perl_parse
-NOTE: the perl_ form of this function is deprecated.
+Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
- SV* get_sv(const char* name, I32 create)
+ int perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env)
=for hackers
Found in file perl.c
-=item GIMME
+=item perl_run
-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.
+Tells a Perl interpreter to run. See L<perlembed>.
- U32 GIMME
+ int perl_run(PerlInterpreter* interp)
=for hackers
-Found in file op.h
+Found in file perl.c
-=item GIMME_V
+=item require_pv
-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.
+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.
- U32 GIMME_V
+NOTE: the perl_ form of this function is deprecated.
+
+ void require_pv(const char* pv)
=for hackers
-Found in file op.h
+Found in file perl.c
-=item grok_bin
-converts a string representing a binary number to numeric form.
+=back
-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.
+=head1 Global Variables
-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).
+=over 8
-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_modglobal
- UV grok_bin(char* start, STRLEN* len, I32* flags, NV *result)
+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.
-=for hackers
-Found in file numeric.c
+ HV* PL_modglobal
-=item grok_hex
+=for hackers
+Found in file intrpvar.h
-converts a string representing a hex number to numeric form.
+=item PL_na
-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.
+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.
-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).
+ STRLEN PL_na
-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.
+=for hackers
+Found in file thrdvar.h
- UV grok_hex(char* start, STRLEN* len, I32* flags, NV *result)
+=item PL_sv_no
-=for hackers
-Found in file numeric.c
+This is the C<false> SV. See C<PL_sv_yes>. Always refer to this as
+C<&PL_sv_no>.
-=item grok_number
+ SV PL_sv_no
-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).
+=for hackers
+Found in file intrpvar.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.
+=item PL_sv_undef
-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.
+This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
- int grok_number(const char *pv, STRLEN len, UV *valuep)
+ SV PL_sv_undef
=for hackers
-Found in file numeric.c
+Found in file intrpvar.h
-=item grok_numeric_radix
+=item PL_sv_yes
-Scan and skip for a numeric decimal separator (radix).
+This is the C<true> SV. See C<PL_sv_no>. Always refer to this as
+C<&PL_sv_yes>.
- bool grok_numeric_radix(const char **sp, const char *send)
+ SV PL_sv_yes
=for hackers
-Found in file numeric.c
+Found in file intrpvar.h
-=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
+=item newHV
-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.
+Creates a new HV. The reference count is set to 1.
-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).
+ HV* 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).
+=for hackers
+Found in file hv.c
+
+=item Nullhv
+
+Null HV pointer.
- 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
+Found in file hv.h
-=item isALNUM
-Returns a boolean indicating whether the C C<char> is an ASCII alphanumeric
-character (including underscore) or digit.
+=back
- bool isALNUM(char ch)
+=head1 Magical Functions
-=for hackers
-Found in file handy.h
+=over 8
-=item isALPHA
+=item mg_clear
-Returns a boolean indicating whether the C C<char> is an ASCII alphabetic
-character.
+Clear something magical that the SV represents. See C<sv_magic>.
- bool isALPHA(char ch)
+ int mg_clear(SV* sv)
=for hackers
-Found in file handy.h
+Found in file mg.c
-=item isDIGIT
+=item mg_copy
-Returns a boolean indicating whether the C C<char> is an ASCII
-digit.
+Copies the magic from one SV to another. See C<sv_magic>.
- bool isDIGIT(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 isLOWER
+=item mg_find
-Returns a boolean indicating whether the C C<char> is a lowercase
-character.
+Finds the magic pointer for type matching the SV. See C<sv_magic>.
- bool isLOWER(char ch)
+ MAGIC* mg_find(SV* sv, int type)
=for hackers
-Found in file handy.h
+Found in file mg.c
-=item isSPACE
+=item mg_free
-Returns a boolean indicating whether the C C<char> is whitespace.
+Free any magic storage used by the SV. See C<sv_magic>.
- bool isSPACE(char ch)
+ int mg_free(SV* sv)
=for hackers
-Found in file handy.h
+Found in file mg.c
-=item isUPPER
+=item mg_get
-Returns a boolean indicating whether the C C<char> is an uppercase
-character.
+Do magic after a value is retrieved from the SV. See C<sv_magic>.
- bool isUPPER(char ch)
+ int mg_get(SV* sv)
=for hackers
-Found in file handy.h
+Found in file mg.c
-=item is_utf8_char
+=item mg_length
-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.
+Report on the SV's length. See C<sv_magic>.
- STRLEN is_utf8_char(U8 *p)
+ U32 mg_length(SV* sv)
=for hackers
-Found in file utf8.c
+Found in file mg.c
-=item is_utf8_string
+=item mg_magical
-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.
+Turns on the magical status of an SV. See C<sv_magic>.
- bool is_utf8_string(U8 *s, STRLEN len)
+ void mg_magical(SV* sv)
=for hackers
-Found in file utf8.c
+Found in file mg.c
-=item items
+=item mg_set
-Variable which is setup by C<xsubpp> to indicate the number of
-items on the stack. See L<perlxs/"Variable-length Parameter Lists">.
+Do magic after a value is assigned to the SV. See C<sv_magic>.
- I32 items
+ int mg_set(SV* sv)
=for hackers
-Found in file XSUB.h
+Found in file mg.c
-=item ix
+=item SvGETMAGIC
-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">.
+Invokes C<mg_get> on an SV if it has 'get' magic. This macro evaluates its
+argument more than once.
- I32 ix
+ void SvGETMAGIC(SV* sv)
=for hackers
-Found in file XSUB.h
+Found in file sv.h
-=item LEAVE
+=item SvSETMAGIC
-Closing bracket on a callback. See C<ENTER> and L<perlcall>.
+Invokes C<mg_set> on an SV if it has 'set' magic. This macro evaluates its
+argument more than once.
- LEAVE;
+ void SvSETMAGIC(SV* sv)
=for hackers
-Found in file scope.h
+Found in file sv.h
-=item load_module
+=item SvSetMagicSV
-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>.
+Like C<SvSetSV>, but does any set magic required afterwards.
- void load_module(U32 flags, SV* name, SV* ver, ...)
+ void SvSetMagicSV(SV* dsb, SV* ssv)
=for hackers
-Found in file op.c
+Found in file sv.h
-=item looks_like_number
+=item SvSetSV
-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.
+Calls C<sv_setsv> if dsv is not the same as ssv. May evaluate arguments
+more than once.
- I32 looks_like_number(SV* sv)
+ void SvSetSV(SV* dsb, SV* ssv)
=for hackers
-Found in file sv.c
+Found in file sv.h
-=item MARK
+=item SvSetSV_nosteal
-Stack marker variable for the XSUB. See C<dMARK>.
+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)
=for hackers
-Found in file pp.h
+Found in file sv.h
-=item mg_clear
-Clear something magical that the SV represents. See C<sv_magic>.
+=back
- int mg_clear(SV* sv)
+=head1 Memory Management
-=for hackers
-Found in file mg.c
+=over 8
-=item mg_copy
+=item Copy
-Copies the magic from one SV to another. 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>.
- int mg_copy(SV* sv, SV* nsv, const char* key, I32 klen)
+ void Copy(void* src, void* dest, int nitems, type)
=for hackers
-Found in file mg.c
+Found in file handy.h
-=item mg_find
+=item Move
-Finds the magic pointer for type matching 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>.
- MAGIC* mg_find(SV* sv, int type)
+ void Move(void* src, void* dest, int nitems, type)
=for hackers
-Found in file mg.c
+Found in file handy.h
-=item mg_free
+=item New
-Free any magic storage used by the SV. See C<sv_magic>.
+The XSUB-writer's interface to the C C<malloc> function.
- int mg_free(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_get
+=item Newc
-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, with
+cast.
- int mg_get(SV* sv)
+ void Newc(int id, void* ptr, int nitems, type, cast)
=for hackers
-Found in file mg.c
+Found in file handy.h
-=item mg_length
+=item NEWSV
-Report on the SV's length. See C<sv_magic>.
+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).
- U32 mg_length(SV* sv)
+
+ SV* NEWSV(int id, STRLEN len)
=for hackers
-Found in file mg.c
+Found in file handy.h
-=item mg_magical
+=item Newz
-Turns on the magical status of an SV. See C<sv_magic>.
+The XSUB-writer's interface to the C C<malloc> function. The allocated
+memory is zeroed with C<memzero>.
- void mg_magical(SV* sv)
+ void Newz(int id, void* ptr, int nitems, type)
=for hackers
-Found in file mg.c
+Found in file handy.h
-=item mg_set
+=item Renew
-Do magic after a value is assigned to the SV. See C<sv_magic>.
+The XSUB-writer's interface to the C C<realloc> function.
- int mg_set(SV* sv)
+ void Renew(void* ptr, int nitems, type)
=for hackers
-Found in file mg.c
+Found in file handy.h
-=item Move
+=item Renewc
-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<realloc> function, with
+cast.
- void Move(void* src, void* dest, int nitems, type)
+ void Renewc(void* ptr, int nitems, type, cast)
=for hackers
Found in file handy.h
-=item New
+=item Safefree
-The XSUB-writer's interface to the C C<malloc> function.
+The XSUB-writer's interface to the C C<free> function.
- void New(int id, void* ptr, int nitems, type)
+ void Safefree(void* ptr)
=for hackers
Found in file handy.h
-=item newAV
+=item savepv
-Creates a new AV. The reference count is set to 1.
+Copy a string to a safe spot. This does not use an SV.
- AV* newAV()
+ char* savepv(const char* sv)
=for hackers
-Found in file av.c
+Found in file util.c
-=item Newc
+=item savepvn
-The XSUB-writer's interface to the C C<malloc> function, with
-cast.
+Copy a string to a safe spot. The C<len> indicates number of bytes to
+copy. This does not use an SV.
- void Newc(int id, void* ptr, int nitems, type, cast)
+ char* savepvn(const char* sv, I32 len)
=for hackers
-Found in file handy.h
+Found in file util.c
-=item newCONSTSUB
+=item StructCopy
-Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
-eligible for inlining at compile-time.
+This is an architecture-independent macro to copy one structure to another.
- CV* newCONSTSUB(HV* stash, char* name, SV* sv)
+ void StructCopy(type src, type dest, type)
=for hackers
-Found in file op.c
+Found in file handy.h
-=item newHV
+=item Zero
-Creates a new HV. The reference count is set to 1.
+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.
- HV* newHV()
+ void Zero(void* dest, int nitems, type)
=for hackers
-Found in file hv.c
+Found in file handy.h
-=item newRV_inc
-Creates an RV wrapper for an SV. The reference count for the original SV is
-incremented.
+=back
- SV* newRV_inc(SV* sv)
+=head1 Miscellaneous Functions
-=for hackers
-Found in file sv.h
+=over 8
-=item newRV_noinc
+=item fbm_compile
-Creates an RV wrapper for an SV. The reference count for the original
-SV is B<not> incremented.
+Analyses the string in order to make fast searches on it using fbm_instr()
+-- the Boyer-Moore algorithm.
- SV* newRV_noinc(SV *sv)
+ void fbm_compile(SV* sv, U32 flags)
=for hackers
-Found in file sv.c
+Found in file util.c
-=item NEWSV
+=item fbm_instr
-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).
+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* NEWSV(int id, STRLEN len)
+ char* fbm_instr(unsigned char* big, unsigned char* bigend, SV* littlesv, U32 flags)
=for hackers
-Found in file handy.h
+Found in file util.c
-=item newSV
+=item form
-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.
+Takes a sprintf-style format pattern and conventional
+(non-SV) arguments and returns the formatted string.
- SV* newSV(STRLEN len)
+ (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 newSViv
+ char * s = Perl_form("%d.%d",major,minor);
-Creates a new SV and copies an integer into it. The reference count for the
-SV is set to 1.
+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* newSViv(IV i)
+ char* form(const char* pat, ...)
=for hackers
-Found in file sv.c
+Found in file util.c
-=item newSVnv
+=item getcwd_sv
-Creates a new SV and copies a floating point value into it.
-The reference count for the SV is set to 1.
+Fill the sv with current working directory
- SV* newSVnv(NV n)
+ int getcwd_sv(SV* sv)
=for hackers
-Found in file sv.c
+Found in file util.c
-=item newSVpv
+=item strEQ
-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.
+Test two strings to see if they are equal. Returns true or false.
- SV* newSVpv(const char* s, STRLEN len)
+ bool strEQ(char* s1, char* s2)
=for hackers
-Found in file sv.c
+Found in file handy.h
-=item newSVpvf
+=item strGE
-Creates a new SV and initializes it with the string formatted like
-C<sprintf>.
+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* newSVpvf(const char* pat, ...)
+ bool strGE(char* s1, char* s2)
=for hackers
-Found in file sv.c
+Found in file handy.h
-=item newSVpvn
+=item strGT
-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 the first, C<s1>, is greater than the second,
+C<s2>. Returns true or false.
- SV* newSVpvn(const char* s, STRLEN len)
+ bool strGT(char* s1, char* s2)
=for hackers
-Found in file sv.c
+Found in file handy.h
-=item newSVpvn_share
+=item strLE
-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 less than or equal to the
+second, C<s2>. Returns true or false.
- SV* newSVpvn_share(const char* s, I32 len, U32 hash)
+ bool strLE(char* s1, char* s2)
=for hackers
-Found in file sv.c
+Found in file handy.h
-=item newSVrv
+=item strLT
-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 less than the second,
+C<s2>. Returns true or false.
- SV* newSVrv(SV* rv, const char* classname)
+ bool strLT(char* s1, char* s2)
=for hackers
-Found in file sv.c
+Found in file handy.h
-=item newSVsv
+=item strNE
-Creates a new SV which is an exact duplicate of the original SV.
-(Uses C<sv_setsv>).
+Test two strings to see if they are different. Returns true or
+false.
- SV* newSVsv(SV* old)
+ bool strNE(char* s1, char* s2)
=for hackers
-Found in file sv.c
+Found in file handy.h
-=item newSVuv
+=item strnEQ
-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 they are equal. The C<len> parameter indicates
+the number of bytes to compare. Returns true or false. (A wrapper for
+C<strncmp>).
- SV* newSVuv(UV u)
+ bool strnEQ(char* s1, char* s2, STRLEN len)
=for hackers
-Found in file sv.c
+Found in file handy.h
-=item newXS
+=item strnNE
-Used by C<xsubpp> to hook up XSUBs as Perl subs.
+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>).
+
+ bool strnNE(char* s1, char* s2, STRLEN len)
=for hackers
-Found in file op.c
+Found in file handy.h
-=item newXSproto
-Used by C<xsubpp> to hook up XSUBs as Perl subs. Adds Perl prototypes to
-the subs.
+=back
-=for hackers
-Found in file XSUB.h
+=head1 Numeric functions
-=item Newz
+=over 8
-The XSUB-writer's interface to the C C<malloc> function. The allocated
-memory is zeroed with C<memzero>.
+=item grok_bin
- void Newz(int id, void* ptr, int nitems, type)
+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 handy.h
+Found in file numeric.c
-=item new_vstring
+=item grok_hex
-Returns a pointer to the next character after the parsed
-vstring, as well as updating the passed in sv.
+converts a string representing a hex number to numeric form.
-Function must be called like
+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 = NEWSV(92,5);
- s = new_vstring(s,sv);
+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 sv must already be large enough to store the vstring
-passed in.
+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.
- char* new_vstring(char *vstr, SV *sv)
+ UV grok_hex(char* start, STRLEN* len, I32* flags, NV *result)
=for hackers
-Found in file util.c
+Found in file numeric.c
-=item Nullav
+=item grok_number
-Null AV 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 av.h
+Found in file numeric.c
-=item Nullch
+=item grok_numeric_radix
-Null character 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 handy.h
+Found in file numeric.c
-=item Nullcv
+=item grok_oct
-Null CV pointer.
+
+ UV grok_oct(char* start, STRLEN* len, I32* flags, NV *result)
=for hackers
-Found in file cv.h
+Found in file numeric.c
-=item Nullhv
+=item scan_bin
-Null HV pointer.
+For backwards compatibility. Use C<grok_bin> instead.
+
+ NV scan_bin(char* start, STRLEN len, STRLEN* retlen)
=for hackers
-Found in file hv.h
+Found in file numeric.c
-=item Nullsv
+=item scan_hex
-Null SV pointer.
+For backwards compatibility. Use C<grok_hex> instead.
+
+ NV scan_hex(char* start, STRLEN len, STRLEN* retlen)
=for hackers
-Found in file handy.h
+Found in file numeric.c
-=item ORIGMARK
+=item scan_oct
-The original stack mark for the XSUB. See C<dORIGMARK>.
+For backwards compatibility. Use C<grok_oct> instead.
+
+ NV scan_oct(char* start, STRLEN len, STRLEN* retlen)
=for hackers
-Found in file pp.h
+Found in file numeric.c
-=item perl_alloc
-Allocates a new Perl interpreter. See L<perlembed>.
+=back
- PerlInterpreter* perl_alloc()
+=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 perl.c
+Found in file op.c
-=item perl_clone
+=item newCONSTSUB
-Create and return a new interpreter by cloning the current one.
+Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
+eligible for inlining at compile-time.
- PerlInterpreter* perl_clone(PerlInterpreter* interp, UV flags)
+ CV* newCONSTSUB(HV* stash, char* name, SV* sv)
=for hackers
-Found in file sv.c
+Found in file op.c
-=item perl_construct
+=item newXS
-Initializes a new Perl interpreter. See L<perlembed>.
+Used by C<xsubpp> to hook up XSUBs as Perl subs.
- void perl_construct(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_destruct
+=item sharedsv_init
-Shuts down 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.
- int perl_destruct(PerlInterpreter* interp)
+ void sharedsv_init()
=for hackers
-Found in file perl.c
+Found in file sharedsv.c
-=item perl_free
+=item sharedsv_lock
-Releases a Perl interpreter. 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)
- void perl_free(PerlInterpreter* interp)
+=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_parse
+=item sharedsv_thrcnt_dec
-Tells a Perl interpreter to parse a Perl script. See L<perlembed>.
+Decrements the threadcount of a shared sv. When a threads frontend is freed
+this function should be called.
- int perl_parse(PerlInterpreter* interp, XSINIT_t xsinit, int argc, char** argv, char** env)
+ void sharedsv_thrcnt_dec(shared_sv* ssv)
=for hackers
-Found in file perl.c
+Found in file sharedsv.c
-=item perl_run
+=item sharedsv_thrcnt_inc
-Tells a Perl interpreter to run. See L<perlembed>.
+Increments the threadcount of a sharedsv.
+ void sharedsv_thrcnt_inc(shared_sv* ssv)
- int perl_run(PerlInterpreter* interp)
+=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 perl.c
+Found in file sharedsv.c
-=item PL_modglobal
-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.
+=back
- HV* PL_modglobal
+=head1 Stack Manipulation Macros
+
+=over 8
+
+=item dMARK
+
+Declare a stack marker variable, C<mark>, for the XSUB. See C<MARK> and
+C<dORIGMARK>.
+
+ dMARK;
=for hackers
-Found in file intrpvar.h
+Found in file pp.h
-=item PL_na
+=item dORIGMARK
-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.
+Saves the original stack mark for the XSUB. See C<ORIGMARK>.
- STRLEN PL_na
+ dORIGMARK;
=for hackers
-Found in file thrdvar.h
+Found in file pp.h
-=item PL_sv_no
+=item dSP
-This is the C<false> SV. See C<PL_sv_yes>. Always refer to this as
-C<&PL_sv_no>.
+Declares a local copy of perl's stack pointer for the XSUB, available via
+the C<SP> macro. See C<SP>.
- SV PL_sv_no
+ dSP;
=for hackers
-Found in file intrpvar.h
+Found in file pp.h
-=item PL_sv_undef
+=item EXTEND
-This is the C<undef> SV. Always refer to this as C<&PL_sv_undef>.
+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_undef
+ void EXTEND(SP, int nitems)
=for hackers
-Found in file intrpvar.h
+Found in file pp.h
-=item PL_sv_yes
+=item MARK
-This is the C<true> SV. See C<PL_sv_no>. Always refer to this as
-C<&PL_sv_yes>.
+Stack marker variable for the XSUB. See C<dMARK>.
- SV PL_sv_yes
+=for hackers
+Found in file pp.h
+
+=item ORIGMARK
+
+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 SAVETMPS
+=item XSRETURN_PV
-Opening bracket for temporaries on a callback. See C<FREETMPS> and
-L<perlcall>.
+Return a copy of a string from an XSUB immediately. Uses C<XST_mPV>.
- SAVETMPS;
+ void XSRETURN_PV(char* str)
=for hackers
-Found in file scope.h
+Found in file XSUB.h
-=item scan_bin
+=item XSRETURN_UNDEF
-For backwards compatibility. Use C<grok_bin> instead.
+Return C<&PL_sv_undef> from an XSUB immediately. Uses C<XST_mUNDEF>.
- NV scan_bin(char* start, STRLEN len, STRLEN* retlen)
+ XSRETURN_UNDEF;
=for hackers
-Found in file numeric.c
+Found in file XSUB.h
-=item scan_hex
+=item XSRETURN_YES
-For backwards compatibility. Use C<grok_hex> instead.
+Return C<&PL_sv_yes> from an XSUB immediately. Uses C<XST_mYES>.
- NV scan_hex(char* start, STRLEN len, STRLEN* retlen)
+ XSRETURN_YES;
=for hackers
-Found in file numeric.c
+Found in file XSUB.h
-=item scan_oct
+=item XST_mIV
-For backwards compatibility. Use C<grok_oct> instead.
+Place an integer into the specified position C<pos> on the stack. The
+value is stored in a new mortal SV.
- NV scan_oct(char* start, STRLEN len, STRLEN* retlen)
+ void XST_mIV(int pos, IV iv)
=for hackers
-Found in file numeric.c
+Found in file XSUB.h
-=item sharedsv_find
+=item XST_mNO
-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.
+Place C<&PL_sv_no> into the specified position C<pos> on the
+stack.
- shared_sv* sharedsv_find(SV* sv)
+ void XST_mNO(int pos)
=for hackers
-Found in file sharedsv.c
+Found in file XSUB.h
-=item sharedsv_init
+=item XST_mNV
-Saves a space for keeping SVs wider than an interpreter,
-currently only stores a pointer to the first interpreter.
+Place a double into the specified position C<pos> on the stack. The value
+is stored in a new mortal SV.
- void sharedsv_init()
+ void XST_mNV(int pos, NV nv)
=for hackers
-Found in file sharedsv.c
+Found in file XSUB.h
-=item sharedsv_lock
+=item XST_mPV
-Recursive locks on a sharedsv.
-Locks are dynamically scoped at the level of the first lock.
- void sharedsv_lock(shared_sv* ssv)
+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 sharedsv.c
+Found in file XSUB.h
-=item sharedsv_new
+=item XST_mUNDEF
-Allocates a new shared sv struct, you must yourself create the SV/AV/HV.
- shared_sv* sharedsv_new()
+Place C<&PL_sv_undef> into the specified position C<pos> on the
+stack.
+
+ void XST_mUNDEF(int pos)
=for hackers
-Found in file sharedsv.c
+Found in file XSUB.h
-=item sharedsv_thrcnt_dec
+=item XST_mYES
-Decrements the threadcount of a shared sv. When a threads frontend is freed
-this function should be called.
+Place C<&PL_sv_yes> into the specified position C<pos> on the
+stack.
- void sharedsv_thrcnt_dec(shared_sv* ssv)
+ void XST_mYES(int pos)
=for hackers
-Found in file sharedsv.c
+Found in file XSUB.h
-=item sharedsv_thrcnt_inc
-Increments the threadcount of a sharedsv.
- void sharedsv_thrcnt_inc(shared_sv* ssv)
+=back
+
+=head1 SV Flags
+
+=over 8
+
+=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 sharedsv.c
+Found in file sv.h
-=item sharedsv_unlock
+=item SVt_IV
-Recursively unlocks a shared sv.
+Integer type flag for scalars. See C<svtype>.
- void sharedsv_unlock(shared_sv* ssv)
+=for hackers
+Found in file sv.h
+
+=item SVt_NV
+
+Double type flag for scalars. See C<svtype>.
=for hackers
-Found in file sharedsv.c
+Found in file sv.h
-=item sortsv
+=item SVt_PV
-Sort an array. Here is an example:
+Pointer type flag for scalars. See C<svtype>.
- sortsv(AvARRAY(av), av_len(av)+1, Perl_sv_cmp_locale);
+=for hackers
+Found in file sv.h
- void sortsv(SV ** array, size_t num_elts, SVCOMPARE_t cmp)
+=item SVt_PVAV
+
+Type flag for arrays. See C<svtype>.
=for hackers
-Found in file pp_sort.c
+Found in file sv.h
-=item SP
+=item SVt_PVCV
-Stack pointer. This is usually handled by C<xsubpp>. See C<dSP> and
-C<SPAGAIN>.
+Type flag for code refs. See C<svtype>.
=for hackers
-Found in file pp.h
+Found in file sv.h
-=item SPAGAIN
+=item SVt_PVHV
-Refetch the stack pointer. Used after a callback. See L<perlcall>.
+Type flag for hashes. See C<svtype>.
- SPAGAIN;
+=for hackers
+Found in file sv.h
+
+=item SVt_PVMG
+
+Type flag for blessed scalars. See C<svtype>.
=for hackers
-Found in file pp.h
+Found in file sv.h
-=item ST
-Used to access elements on the XSUB's stack.
+=back
- SV* ST(int ix)
+=head1 SV Manipulation Functions
+
+=over 8
+
+=item get_sv
+
+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 XSUB.h
+Found in file perl.c
-=item strEQ
+=item looks_like_number
-Test two strings to see if they are equal. Returns true or false.
+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.
- bool strEQ(char* s1, char* s2)
+ I32 looks_like_number(SV* sv)
=for hackers
-Found in file handy.h
+Found in file sv.c
-=item strGE
+=item newRV_inc
-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 an RV wrapper for an SV. The reference count for the original SV is
+incremented.
- bool strGE(char* s1, char* s2)
+ SV* newRV_inc(SV* sv)
=for hackers
-Found in file handy.h
+Found in file sv.h
-=item strGT
+=item newRV_noinc
-Test two strings to see if the first, C<s1>, is greater than the second,
-C<s2>. Returns true or false.
+Creates an RV wrapper for an SV. The reference count for the original
+SV is B<not> incremented.
- bool strGT(char* s1, char* s2)
+ SV* newRV_noinc(SV *sv)
=for hackers
-Found in file handy.h
+Found in file sv.c
-=item strLE
+=item newSV
-Test two strings to see if the first, C<s1>, is less than or equal to the
-second, C<s2>. Returns true or false.
+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.
- bool strLE(char* s1, char* s2)
+ SV* newSV(STRLEN len)
=for hackers
-Found in file handy.h
+Found in file sv.c
-=item strLT
+=item newSViv
-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 and copies an integer into it. The reference count for the
+SV is set to 1.
- bool strLT(char* s1, char* s2)
+ SV* newSViv(IV i)
=for hackers
-Found in file handy.h
+Found in file sv.c
-=item strNE
+=item newSVnv
-Test two strings to see if they are different. 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 strNE(char* s1, char* s2)
+ SV* newSVnv(NV n)
=for hackers
-Found in file handy.h
+Found in file sv.c
-=item strnEQ
+=item newSVpv
-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 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 strnEQ(char* s1, char* s2, STRLEN len)
+ SV* newSVpv(const char* s, STRLEN len)
=for hackers
-Found in file handy.h
+Found in file sv.c
-=item strnNE
+=item newSVpvf
-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 initializes it with the string formatted like
+C<sprintf>.
- bool strnNE(char* s1, char* s2, STRLEN len)
+ SV* newSVpvf(const char* pat, ...)
=for hackers
-Found in file handy.h
+Found in file sv.c
-=item StructCopy
+=item newSVpvn
-This is an architecture-independent macro to copy one structure to another.
+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.
- void StructCopy(type src, type dest, type)
+ SV* newSVpvn(const char* s, STRLEN len)
=for hackers
-Found in file handy.h
+Found in file sv.c
+
+=item newSVpvn_share
+
+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.
+
+ SV* newSVpvn_share(const char* s, I32 len, U32 hash)
+
+=for hackers
+Found in file sv.c
+
+=item newSVrv
+
+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.
+
+ SV* newSVrv(SV* rv, const char* classname)
+
+=for hackers
+Found in file sv.c
+
+=item newSVsv
+
+Creates a new SV which is an exact duplicate of the original SV.
+(Uses C<sv_setsv>).
+
+ SV* newSVsv(SV* old)
+
+=for hackers
+Found in file sv.c
+
+=item newSVuv
+
+Creates a new SV and copies an unsigned integer into it.
+The reference count for the SV is set to 1.
+
+ SV* newSVuv(UV u)
+
+=for hackers
+Found in file sv.c
+
+=item new_vstring
+
+Returns a pointer to the next character after the parsed
+vstring, as well as updating the passed in sv.
+
+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 util.c
=item SvCUR
@@ -2255,16 +2480,6 @@ See C<SvCUR>. Access the character as *(SvEND(sv)).
=for hackers
Found in file sv.h
-=item SvGETMAGIC
-
-Invokes C<mg_get> on an SV if it has 'get' magic. This macro evaluates its
-argument more than once.
-
- void SvGETMAGIC(SV* sv)
-
-=for hackers
-Found in file sv.h
-
=item SvGROW
Expands the character buffer in the SV so that it has room for the
@@ -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.
@@ -4291,34 +4380,139 @@ Usually used via one of its frontends C<sv_setpvf> and C<sv_setpvf_mg>.
=for hackers
Found in file sv.c
-=item THIS
-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++">.
+=back
- (whatever) THIS
+=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 XSUB.h
+Found in file utf8.c
-=item toLOWER
+=item bytes_to_utf8
-Converts the specified character to lowercase.
+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.
- char toLOWER(char ch)
+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 handy.h
+Found in file utf8.c
-=item toUPPER
+=item ibcmp_utf8
-Converts the specified character to uppercase.
+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.
- char toUPPER(char ch)
+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 handy.h
+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 pv_uni_display
+
+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.
+
+ char* pv_uni_display(SV *dsv, U8 *spv, STRLEN len, STRLEN pvlim, UV flags)
+
+=for hackers
+Found in file utf8.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_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 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