This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Bug fix for storing shared objects in shared structures
[perl5.git] / pod / perlapi.pod
index 2bee300..ab0463f 100644 (file)
@@ -1,3 +1,9 @@
+-*- buffer-read-only: t -*-
+
+!!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+This file is built by autodoc.pl extracting documentation from the C source
+files.
+
 =head1 NAME
 
 perlapi - autogenerated documentation for the perl public API
@@ -128,6 +134,35 @@ array itself.
 =for hackers
 Found in file av.c
 
+=item av_create_and_push
+X<av_create_and_push>
+
+Push an SV onto the end of the array, creating the array if necessary.
+A small internal helper function to remove a commonly duplicated idiom.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+       void    av_create_and_push(AV **const avp, SV *const val)
+
+=for hackers
+Found in file av.c
+
+=item av_create_and_unshift_one
+X<av_create_and_unshift_one>
+
+Unshifts an SV onto the beginning of the array, creating the array if
+necessary.
+A small internal helper function to remove a commonly duplicated idiom.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+       SV**    av_create_and_unshift_one(AV **const avp, SV *const val)
+
+=for hackers
+Found in file av.c
+
 =item av_delete
 X<av_delete>
 
@@ -182,9 +217,15 @@ Found in file av.c
 =item av_fill
 X<av_fill>
 
-Ensure than an array has a given number of elements, equivalent to
+Set the highest index in the array to the given number, equivalent to
 Perl's C<$#array = $fill;>.
 
+The number of elements in the an array will be C<fill + 1> after
+av_fill() returns.  If the array was previously shorter then the
+additional elements appended are set to C<PL_sv_undef>.  If the array
+was longer, then the excess elements are freed.  C<av_fill(av, -1)> is
+the same as C<av_clear(av)>.
+
        void    av_fill(AV* ar, I32 fill)
 
 =for hackers
@@ -193,8 +234,8 @@ Found in file av.c
 =item av_len
 X<av_len>
 
-Returns the highest index in the array.  Returns -1 if the array is
-empty.
+Returns the highest index in the array.  The number of elements in the
+array is C<av_len(av) + 1>.  Returns -1 if the array is empty.
 
        I32     av_len(const AV* ar)
 
@@ -317,13 +358,24 @@ Sort an array. Here is an example:
 
     sortsv(AvARRAY(av), av_len(av)+1, Perl_sv_cmp_locale);
 
-See lib/sort.pm for details about controlling the sorting algorithm.
+Currently this always uses mergesort. See sortsv_flags for a more
+flexible routine.
 
        void    sortsv(SV** array, size_t num_elts, SVCOMPARE_t cmp)
 
 =for hackers
 Found in file pp_sort.c
 
+=item sortsv_flags
+X<sortsv_flags>
+
+Sort an array, with various options.
+
+       void    sortsv_flags(SV** array, size_t num_elts, SVCOMPARE_t cmp, U32 flags)
+
+=for hackers
+Found in file pp_sort.c
+
 
 =back
 
@@ -558,7 +610,7 @@ without it we only clone the data and zero the stacks,
 with it we copy the stacks and the new perl interpreter is
 ready to run at the exact same point as the previous one.
 The pseudo-fork code uses COPY_STACKS while the
-threads->new doesn't.
+threads->create doesn't.
 
 CLONEf_KEEP_PTR_TABLE
 perl_clone keeps a ptr_table with the pointer of the old
@@ -605,14 +657,27 @@ Found in file cv.h
 =item get_cv
 X<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.
+Uses C<strlen> to get the length of C<name>, then calls C<get_cvn_flags>.
+
+NOTE: the perl_ form of this function is deprecated.
+
+       CV*     get_cv(const char* name, I32 flags)
+
+=for hackers
+Found in file perl.c
+
+=item get_cvn_flags
+X<get_cvn_flags>
+
+Returns the CV of the specified Perl subroutine.  C<flags> are passed to
+C<gv_fetchpvn_flags>. If C<GV_ADD> 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<GV_ADD> is not set and the subroutine does not exist
+then NULL is returned.
 
 NOTE: the perl_ form of this function is deprecated.
 
-       CV*     get_cv(const char* name, I32 create)
+       CV*     get_cvn_flags(const char* name, STRLEN len, I32 flags)
 
 =for hackers
 Found in file perl.c
@@ -742,268 +807,600 @@ Found in file perl.c
 
 =back
 
-=head1 Functions in file pp_pack.c
+=head1 Functions in file dump.c
 
 
 =over 8
 
-=item packlist
-X<packlist>
+=item pv_display
+X<pv_display>
 
-The engine implementing pack() Perl function.
+  char *pv_display(SV *dsv, const char *pv, STRLEN cur, STRLEN len,
+                   STRLEN pvlim, U32 flags)
 
-       void    packlist(SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist)
+Similar to
 
-=for hackers
-Found in file pp_pack.c
+  pv_escape(dsv,pv,cur,pvlim,PERL_PV_ESCAPE_QUOTE);
 
-=item pack_cat
-X<pack_cat>
+except that an additional "\0" will be appended to the string when
+len > cur and pv[cur] is "\0".
 
-The engine implementing pack() Perl function. Note: parameters next_in_list and
-flags are not used. This call should not be used; use packlist instead.
+Note that the final string may be up to 7 chars longer than pvlim.
 
-       void    pack_cat(SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags)
+       char*   pv_display(SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
 
 =for hackers
-Found in file pp_pack.c
+Found in file dump.c
 
-=item unpackstring
-X<unpackstring>
+=item pv_escape
+X<pv_escape>
 
-The engine implementing unpack() Perl function. C<unpackstring> puts the
-extracted list items on the stack and returns the number of elements.
-Issue C<PUTBACK> before and C<SPAGAIN> after the call to this function.
+               |const STRLEN count|const STRLEN max
+               |STRLEN const *escaped, const U32 flags
 
-       I32     unpackstring(const char *pat, const char *patend, const char *s, const char *strend, U32 flags)
+Escapes at most the first "count" chars of pv and puts the results into
+dsv such that the size of the escaped string will not exceed "max" chars
+and will not contain any incomplete escape sequences.
 
-=for hackers
-Found in file pp_pack.c
+If flags contains PERL_PV_ESCAPE_QUOTE then any double quotes in the string
+will also be escaped.
 
-=item unpack_str
-X<unpack_str>
+Normally the SV will be cleared before the escaped string is prepared,
+but when PERL_PV_ESCAPE_NOCLEAR is set this will not occur.
 
-The engine implementing unpack() Perl function. Note: parameters strbeg, new_s
-and ocnt are not used. This call should not be used, use unpackstring instead.
+If PERL_PV_ESCAPE_UNI is set then the input string is treated as Unicode,
+if PERL_PV_ESCAPE_UNI_DETECT is set then the input string is scanned
+using C<is_utf8_string()> to determine if it is Unicode.
 
-       I32     unpack_str(const char *pat, const char *patend, const char *s, const char *strbeg, const char *strend, char **new_s, I32 ocnt, U32 flags)
+If PERL_PV_ESCAPE_ALL is set then all input chars will be output
+using C<\x01F1> style escapes, otherwise only chars above 255 will be
+escaped using this style, other non printable chars will use octal or
+common escaped patterns like C<\n>. If PERL_PV_ESCAPE_NOBACKSLASH
+then all chars below 255 will be treated as printable and 
+will be output as literals.
 
-=for hackers
-Found in file pp_pack.c
+If PERL_PV_ESCAPE_FIRSTCHAR is set then only the first char of the
+string will be escaped, regardles of max. If the string is utf8 and 
+the chars value is >255 then it will be returned as a plain hex 
+sequence. Thus the output will either be a single char, 
+an octal escape sequence, a special escape like C<\n> or a 3 or 
+more digit hex value. 
 
+If PERL_PV_ESCAPE_RE is set then the escape char used will be a '%' and
+not a '\\'. This is because regexes very often contain backslashed
+sequences, whereas '%' is not a particularly common character in patterns.
 
-=back
+Returns a pointer to the escaped text as held by dsv.
 
-=head1 Global Variables
+NOTE: the perl_ form of this function is deprecated.
 
-=over 8
+       char*   pv_escape(SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags)
 
-=item PL_modglobal
-X<PL_modglobal>
+=for hackers
+Found in file dump.c
 
-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.
+=item pv_pretty
+X<pv_pretty>
 
-       HV*     PL_modglobal
+           |const STRLEN count|const STRLEN max\
+           |const char const *start_color| const char const *end_color\
+           |const U32 flags
 
-=for hackers
-Found in file intrpvar.h
+Converts a string into something presentable, handling escaping via
+pv_escape() and supporting quoting and ellipses.
 
-=item PL_na
-X<PL_na>
+If the PERL_PV_PRETTY_QUOTE flag is set then the result will be 
+double quoted with any double quotes in the string escaped. Otherwise
+if the PERL_PV_PRETTY_LTGT flag is set then the result be wrapped in
+angle brackets. 
+           
+If the PERL_PV_PRETTY_ELLIPSES flag is set and not all characters in
+string were output then an ellipsis C<...> will be appended to the
+string. Note that this happens AFTER it has been quoted.
+           
+If start_color is non-null then it will be inserted after the opening
+quote (if there is one) but before the escaped text. If end_color
+is non-null then it will be inserted after the escaped text but before
+any quotes or ellipses.
 
-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.
+Returns a pointer to the prettified text as held by dsv.
+           
+NOTE: the perl_ form of this function is deprecated.
 
-       STRLEN  PL_na
+       char*   pv_pretty(SV *dsv, char const * const str, const STRLEN count, const STRLEN max, char const * const start_color, char const * const end_color, const U32 flags)
 
 =for hackers
-Found in file thrdvar.h
+Found in file dump.c
 
-=item PL_sv_no
-X<PL_sv_no>
 
-This is the C<false> SV.  See C<PL_sv_yes>.  Always refer to this as
-C<&PL_sv_no>.
+=back
 
-       SV      PL_sv_no
+=head1 Functions in file mathoms.c
 
-=for hackers
-Found in file intrpvar.h
 
-=item PL_sv_undef
-X<PL_sv_undef>
+=over 8
 
-This is the C<undef> SV.  Always refer to this as C<&PL_sv_undef>.
+=item gv_fetchmethod
+X<gv_fetchmethod>
 
-       SV      PL_sv_undef
+See L<gv_fetchmethod_autoload>.
+
+       GV*     gv_fetchmethod(HV* stash, const char* name)
 
 =for hackers
-Found in file intrpvar.h
+Found in file mathoms.c
 
-=item PL_sv_yes
-X<PL_sv_yes>
+=item pack_cat
+X<pack_cat>
 
-This is the C<true> SV.  See C<PL_sv_no>.  Always refer to this as
-C<&PL_sv_yes>.
+The engine implementing pack() Perl function. Note: parameters next_in_list and
+flags are not used. This call should not be used; use packlist instead.
 
-       SV      PL_sv_yes
+       void    pack_cat(SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist, SV ***next_in_list, U32 flags)
 
 =for hackers
-Found in file intrpvar.h
-
+Found in file mathoms.c
 
-=back
+=item sv_2pvbyte_nolen
+X<sv_2pvbyte_nolen>
 
-=head1 GV Functions
+Return a pointer to the byte-encoded representation of the SV.
+May cause the SV to be downgraded from UTF-8 as a side-effect.
 
-=over 8
+Usually accessed via the C<SvPVbyte_nolen> macro.
 
-=item GvSV
-X<GvSV>
+       char*   sv_2pvbyte_nolen(SV* sv)
 
-Return the SV from the GV.
+=for hackers
+Found in file mathoms.c
 
-       SV*     GvSV(GV* gv)
+=item sv_2pvutf8_nolen
+X<sv_2pvutf8_nolen>
 
-=for hackers
-Found in file gv.h
+Return a pointer to the UTF-8-encoded representation of the SV.
+May cause the SV to be upgraded to UTF-8 as a side-effect.
 
-=item gv_fetchmeth
-X<gv_fetchmeth>
+Usually accessed via the C<SvPVutf8_nolen> macro.
 
-Returns the glob with the given C<name> and a defined subroutine or
-C<NULL>.  The glob lives in the given C<stash>, or in the stashes
-accessible via @ISA and UNIVERSAL::.
+       char*   sv_2pvutf8_nolen(SV* sv)
 
-The argument C<level> should be either 0 or -1.  If C<level==0>, as a
-side-effect creates a glob with the given C<name> in the given C<stash>
-which in the case of success contains an alias for the subroutine, and sets
-up caching info for this glob.  Similarly for all the searched stashes.
+=for hackers
+Found in file mathoms.c
 
-This function grants C<"SUPER"> token as a postfix of the stash name. The
-GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
-visible to Perl code.  So when calling C<call_sv>, you should not use
-the GV directly; instead, you should use the method's CV, which can be
-obtained from the GV with the C<GvCV> macro.
+=item sv_2pv_nolen
+X<sv_2pv_nolen>
 
-       GV*     gv_fetchmeth(HV* stash, const char* name, STRLEN len, I32 level)
+Like C<sv_2pv()>, but doesn't return the length too. You should usually
+use the macro wrapper C<SvPV_nolen(sv)> instead.
+       char*   sv_2pv_nolen(SV* sv)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
-=item gv_fetchmethod
-X<gv_fetchmethod>
+=item sv_catpvn_mg
+X<sv_catpvn_mg>
 
-See L<gv_fetchmethod_autoload>.
+Like C<sv_catpvn>, but also handles 'set' magic.
 
-       GV*     gv_fetchmethod(HV* stash, const char* name)
+       void    sv_catpvn_mg(SV *sv, const char *ptr, STRLEN len)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
-=item gv_fetchmethod_autoload
-X<gv_fetchmethod_autoload>
+=item sv_catsv_mg
+X<sv_catsv_mg>
 
-Returns the glob which contains the subroutine to call to invoke the method
-on the C<stash>.  In fact in the presence of autoloading this may be the
-glob for "AUTOLOAD".  In this case the corresponding variable $AUTOLOAD is
-already setup.
+Like C<sv_catsv>, but also handles 'set' magic.
 
-The third parameter of C<gv_fetchmethod_autoload> determines whether
-AUTOLOAD lookup is performed if the given method is not present: non-zero
-means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
-Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
-with a non-zero C<autoload> parameter.
+       void    sv_catsv_mg(SV *dstr, SV *sstr)
 
-These functions grant C<"SUPER"> token as a prefix of the method name. Note
-that if you want to keep the returned glob for a long time, you need to
-check for it being "AUTOLOAD", since at the later time the call may load a
-different subroutine due to $AUTOLOAD changing its value. Use the glob
-created via a side effect to do this.
+=for hackers
+Found in file mathoms.c
 
-These functions have the same side-effects and as C<gv_fetchmeth> with
-C<level==0>.  C<name> should be writable if contains C<':'> or C<'
-''>. The warning against passing the GV returned by C<gv_fetchmeth> to
-C<call_sv> apply equally to these functions.
+=item sv_force_normal
+X<sv_force_normal>
 
-       GV*     gv_fetchmethod_autoload(HV* stash, const char* name, I32 autoload)
+Undo various types of fakery on an SV: if the PV is a shared string, make
+a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
+an xpvmg. See also C<sv_force_normal_flags>.
 
-=for hackers
-Found in file gv.c
+       void    sv_force_normal(SV *sv)
 
-=item gv_fetchmeth_autoload
-X<gv_fetchmeth_autoload>
+=for hackers
+Found in file mathoms.c
 
-Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
-Returns a glob for the subroutine.
+=item sv_iv
+X<sv_iv>
 
-For an autoloaded subroutine without a GV, will create a GV even
-if C<level < 0>.  For an autoloaded subroutine without a stub, GvCV()
-of the result may be zero.
+A private implementation of the C<SvIVx> macro for compilers which can't
+cope with complex macro expressions. Always use the macro instead.
 
-       GV*     gv_fetchmeth_autoload(HV* stash, const char* name, STRLEN len, I32 level)
+       IV      sv_iv(SV* sv)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
-=item gv_stashpv
-X<gv_stashpv>
+=item sv_nolocking
+X<sv_nolocking>
+
+Dummy routine which "locks" an SV when there is no locking module present.
+Exists to avoid test for a NULL function pointer and because it could
+potentially warn under some level of strict-ness.
 
-Returns a pointer to the stash for a specified package.  C<name> should
-be a valid UTF-8 string and must be null-terminated.  If C<create> is set
-then the package will be created if it does not already exist.  If C<create>
-is not set and the package does not exist then NULL is returned.
+"Superseded" by sv_nosharing().
 
-       HV*     gv_stashpv(const char* name, I32 create)
+       void    sv_nolocking(SV *sv)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
-=item gv_stashpvn
-X<gv_stashpvn>
+=item sv_nounlocking
+X<sv_nounlocking>
 
-Returns a pointer to the stash for a specified package.  C<name> should
-be a valid UTF-8 string.  The C<namelen> parameter indicates the length of
-the C<name>, in bytes.  If C<create> is set then the package will be
-created if it does not already exist.  If C<create> is not set and the
-package does not exist then NULL is returned.
+Dummy routine which "unlocks" an SV when there is no locking module present.
+Exists to avoid test for a NULL function pointer and because it could
+potentially warn under some level of strict-ness.
+
+"Superseded" by sv_nosharing().
 
-       HV*     gv_stashpvn(const char* name, U32 namelen, I32 create)
+       void    sv_nounlocking(SV *sv)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
-=item gv_stashsv
-X<gv_stashsv>
+=item sv_nv
+X<sv_nv>
 
-Returns a pointer to the stash for a specified package, which must be a
-valid UTF-8 string.  See C<gv_stashpv>.
+A private implementation of the C<SvNVx> macro for compilers which can't
+cope with complex macro expressions. Always use the macro instead.
 
-       HV*     gv_stashsv(SV* sv, I32 create)
+       NV      sv_nv(SV* sv)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
+
+=item sv_pv
+X<sv_pv>
 
+Use the C<SvPV_nolen> macro instead
 
-=back
+       char*   sv_pv(SV *sv)
 
-=head1 Handy Values
+=for hackers
+Found in file mathoms.c
 
-=over 8
+=item sv_pvbyte
+X<sv_pvbyte>
 
-=item Nullav
-X<Nullav>
+Use C<SvPVbyte_nolen> instead.
 
-Null AV pointer.
+       char*   sv_pvbyte(SV *sv)
 
 =for hackers
-Found in file av.h
+Found in file mathoms.c
+
+=item sv_pvbyten
+X<sv_pvbyten>
+
+A private implementation of the C<SvPVbyte> macro for compilers
+which can't cope with complex macro expressions. Always use the macro
+instead.
+
+       char*   sv_pvbyten(SV *sv, STRLEN *len)
+
+=for hackers
+Found in file mathoms.c
+
+=item sv_pvn
+X<sv_pvn>
+
+A private implementation of the C<SvPV> macro for compilers which can't
+cope with complex macro expressions. Always use the macro instead.
+
+       char*   sv_pvn(SV *sv, STRLEN *len)
+
+=for hackers
+Found in file mathoms.c
+
+=item sv_pvutf8
+X<sv_pvutf8>
+
+Use the C<SvPVutf8_nolen> macro instead
+
+       char*   sv_pvutf8(SV *sv)
+
+=for hackers
+Found in file mathoms.c
+
+=item sv_pvutf8n
+X<sv_pvutf8n>
+
+A private implementation of the C<SvPVutf8> macro for compilers
+which can't cope with complex macro expressions. Always use the macro
+instead.
+
+       char*   sv_pvutf8n(SV *sv, STRLEN *len)
+
+=for hackers
+Found in file mathoms.c
+
+=item sv_taint
+X<sv_taint>
+
+Taint an SV. Use C<SvTAINTED_on> instead.
+       void    sv_taint(SV* sv)
+
+=for hackers
+Found in file mathoms.c
+
+=item sv_unref
+X<sv_unref>
+
+Unsets the RV status of the SV, and decrements the reference count of
+whatever was being referenced by the RV.  This can almost be thought of
+as a reversal of C<newSVrv>.  This is C<sv_unref_flags> with the C<flag>
+being zero.  See C<SvROK_off>.
+
+       void    sv_unref(SV* sv)
+
+=for hackers
+Found in file mathoms.c
+
+=item sv_usepvn
+X<sv_usepvn>
+
+Tells an SV to use C<ptr> to find its string value. Implemented by
+calling C<sv_usepvn_flags> with C<flags> of 0, hence does not handle 'set'
+magic. See C<sv_usepvn_flags>.
+
+       void    sv_usepvn(SV* sv, char* ptr, STRLEN len)
+
+=for hackers
+Found in file mathoms.c
+
+=item sv_usepvn_mg
+X<sv_usepvn_mg>
+
+Like C<sv_usepvn>, but also handles 'set' magic.
+
+       void    sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)
+
+=for hackers
+Found in file mathoms.c
+
+=item sv_uv
+X<sv_uv>
+
+A private implementation of the C<SvUVx> macro for compilers which can't
+cope with complex macro expressions. Always use the macro instead.
+
+       UV      sv_uv(SV* sv)
+
+=for hackers
+Found in file mathoms.c
+
+=item unpack_str
+X<unpack_str>
+
+The engine implementing unpack() Perl function. Note: parameters strbeg, new_s
+and ocnt are not used. This call should not be used, use unpackstring instead.
+
+       I32     unpack_str(const char *pat, const char *patend, const char *s, const char *strbeg, const char *strend, char **new_s, I32 ocnt, U32 flags)
+
+=for hackers
+Found in file mathoms.c
+
+
+=back
+
+=head1 Functions in file pp_ctl.c
+
+
+=over 8
+
+=item find_runcv
+X<find_runcv>
+
+Locate the CV corresponding to the currently executing sub or eval.
+If db_seqp is non_null, skip CVs that are in the DB package and populate
+*db_seqp with the cop sequence number at the point that the DB:: code was
+entered. (allows debuggers to eval in the scope of the breakpoint rather
+than in the scope of the debugger itself).
+
+       CV*     find_runcv(U32 *db_seqp)
+
+=for hackers
+Found in file pp_ctl.c
+
+
+=back
+
+=head1 Functions in file pp_pack.c
+
+
+=over 8
+
+=item packlist
+X<packlist>
+
+The engine implementing pack() Perl function.
+
+       void    packlist(SV *cat, const char *pat, const char *patend, SV **beglist, SV **endlist)
+
+=for hackers
+Found in file pp_pack.c
+
+=item unpackstring
+X<unpackstring>
+
+The engine implementing unpack() Perl function. C<unpackstring> puts the
+extracted list items on the stack and returns the number of elements.
+Issue C<PUTBACK> before and C<SPAGAIN> after the call to this function.
+
+       I32     unpackstring(const char *pat, const char *patend, const char *s, const char *strend, U32 flags)
+
+=for hackers
+Found in file pp_pack.c
+
+
+=back
+
+=head1 GV Functions
+
+=over 8
+
+=item GvSV
+X<GvSV>
+
+Return the SV from the GV.
+
+       SV*     GvSV(GV* gv)
+
+=for hackers
+Found in file gv.h
+
+=item gv_const_sv
+X<gv_const_sv>
+
+If C<gv> is a typeglob whose subroutine entry is a constant sub eligible for
+inlining, or C<gv> is a placeholder reference that would be promoted to such
+a typeglob, then returns the value returned by the sub.  Otherwise, returns
+NULL.
+
+       SV*     gv_const_sv(GV* gv)
+
+=for hackers
+Found in file gv.c
+
+=item gv_fetchmeth
+X<gv_fetchmeth>
+
+Returns the glob with the given C<name> and a defined subroutine or
+C<NULL>.  The glob lives in the given C<stash>, or in the stashes
+accessible via @ISA and UNIVERSAL::.
+
+The argument C<level> should be either 0 or -1.  If C<level==0>, as a
+side-effect creates a glob with the given C<name> in the given C<stash>
+which in the case of success contains an alias for the subroutine, and sets
+up caching info for this glob.
+
+This function grants C<"SUPER"> token as a postfix of the stash name. The
+GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
+visible to Perl code.  So when calling C<call_sv>, you should not use
+the GV directly; instead, you should use the method's CV, which can be
+obtained from the GV with the C<GvCV> macro.
+
+       GV*     gv_fetchmeth(HV* stash, const char* name, STRLEN len, I32 level)
+
+=for hackers
+Found in file gv.c
+
+=item gv_fetchmethod_autoload
+X<gv_fetchmethod_autoload>
+
+Returns the glob which contains the subroutine to call to invoke the method
+on the C<stash>.  In fact in the presence of autoloading this may be the
+glob for "AUTOLOAD".  In this case the corresponding variable $AUTOLOAD is
+already setup.
+
+The third parameter of C<gv_fetchmethod_autoload> determines whether
+AUTOLOAD lookup is performed if the given method is not present: non-zero
+means yes, look for AUTOLOAD; zero means no, don't look for AUTOLOAD.
+Calling C<gv_fetchmethod> is equivalent to calling C<gv_fetchmethod_autoload>
+with a non-zero C<autoload> parameter.
+
+These functions grant C<"SUPER"> token as a prefix of the method name. Note
+that if you want to keep the returned glob for a long time, you need to
+check for it being "AUTOLOAD", since at the later time the call may load a
+different subroutine due to $AUTOLOAD changing its value. Use the glob
+created via a side effect to do this.
+
+These functions have the same side-effects and as C<gv_fetchmeth> with
+C<level==0>.  C<name> should be writable if contains C<':'> or C<'
+''>. The warning against passing the GV returned by C<gv_fetchmeth> to
+C<call_sv> apply equally to these functions.
+
+       GV*     gv_fetchmethod_autoload(HV* stash, const char* name, I32 autoload)
+
+=for hackers
+Found in file gv.c
+
+=item gv_fetchmeth_autoload
+X<gv_fetchmeth_autoload>
+
+Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
+Returns a glob for the subroutine.
+
+For an autoloaded subroutine without a GV, will create a GV even
+if C<level < 0>.  For an autoloaded subroutine without a stub, GvCV()
+of the result may be zero.
+
+       GV*     gv_fetchmeth_autoload(HV* stash, const char* name, STRLEN len, I32 level)
+
+=for hackers
+Found in file gv.c
+
+=item gv_stashpv
+X<gv_stashpv>
+
+Returns a pointer to the stash for a specified package.  Uses C<strlen> to
+determine the length of C<name>, then calls C<gv_stashpvn()>.
+
+       HV*     gv_stashpv(const char* name, I32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_stashpvn
+X<gv_stashpvn>
+
+Returns a pointer to the stash for a specified package.  The C<namelen>
+parameter indicates the length of the C<name>, in bytes.  C<flags> is passed
+to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
+created if it does not already exist.  If the package does not exist and
+C<flags> is 0 (or any other setting that does not create packages) then NULL
+is returned.
+
+
+       HV*     gv_stashpvn(const char* name, U32 namelen, I32 flags)
+
+=for hackers
+Found in file gv.c
+
+=item gv_stashpvs
+X<gv_stashpvs>
+
+Like C<gv_stashpvn>, but takes a literal string instead of a string/length pair.
+
+       HV*     gv_stashpvs(const char* name, I32 create)
+
+=for hackers
+Found in file handy.h
+
+=item gv_stashsv
+X<gv_stashsv>
+
+Returns a pointer to the stash for a specified package.  See C<gv_stashpvn>.
+
+       HV*     gv_stashsv(SV* sv, I32 flags)
+
+=for hackers
+Found in file gv.c
+
+
+=back
+
+=head1 Handy Values
+
+=over 8
+
+=item Nullav
+X<Nullav>
+
+Null AV pointer.
+
+=for hackers
+Found in file av.h
 
 =item Nullch
 X<Nullch>
@@ -1125,7 +1522,7 @@ Found in file hv.h
 =item HeSVKEY
 X<HeSVKEY>
 
-Returns the key as an C<SV*>, or C<Nullsv> if the hash entry does not
+Returns the key as an C<SV*>, or C<NULL> if the hash entry does not
 contain an C<SV*> key.
 
        SV*     HeSVKEY(HE* he)
@@ -1278,6 +1675,16 @@ information on how to use this function on tied hashes.
 =for hackers
 Found in file hv.c
 
+=item hv_fetchs
+X<hv_fetchs>
+
+Like C<hv_fetch>, but takes a literal string instead of a string/length pair.
+
+       SV**    hv_fetchs(HV* tb, const char* key, I32 lval)
+
+=for hackers
+Found in file handy.h
+
 =item hv_fetch_ent
 X<hv_fetch_ent>
 
@@ -1445,6 +1852,17 @@ information on how to use this function on tied hashes.
 =for hackers
 Found in file hv.c
 
+=item hv_stores
+X<hv_stores>
+
+Like C<hv_store>, but takes a literal string instead of a string/length pair
+and omits the hash parameter.
+
+       SV**    hv_stores(HV* tb, const char* key, NULLOK SV* val)
+
+=for hackers
+Found in file handy.h
+
 =item hv_store_ent
 X<hv_store_ent>
 
@@ -1740,7 +2158,7 @@ The XSUB-writer's interface to the C C<malloc> function.
 
 In 5.9.3, Newx() and friends replace the older New() API, and drops
 the first parameter, I<x>, a debug aid which allowed callers to identify
-themselves.  This aid has been superceded by a new build option,
+themselves.  This aid has been superseded by a new build option,
 PERL_MEM_LOG (see L<perlhack/PERL_MEM_LOG>).  The older API is still
 there for use in XS modules supporting older perls.
 
@@ -1774,14 +2192,44 @@ Found in file handy.h
 =item Poison
 X<Poison>
 
-Fill up memory with a pattern (byte 0xAB over and over again) that
-hopefully catches attempts to access uninitialized memory.
+PoisonWith(0xEF) for catching access to freed memory.
 
        void    Poison(void* dest, int nitems, type)
 
 =for hackers
 Found in file handy.h
 
+=item PoisonFree
+X<PoisonFree>
+
+PoisonWith(0xEF) for catching access to freed memory.
+
+       void    PoisonFree(void* dest, int nitems, type)
+
+=for hackers
+Found in file handy.h
+
+=item PoisonNew
+X<PoisonNew>
+
+PoisonWith(0xAB) for catching access to allocated but uninitialized memory.
+
+       void    PoisonNew(void* dest, int nitems, type)
+
+=for hackers
+Found in file handy.h
+
+=item PoisonWith
+X<PoisonWith>
+
+Fill up memory with a byte pattern (a byte repeated over and over
+again) that hopefully catches attempts to access uninitialized memory.
+
+       void    PoisonWith(void* dest, int nitems, type, U8 byte)
+
+=for hackers
+Found in file handy.h
+
 =item Renew
 X<Renew>
 
@@ -1831,14 +2279,24 @@ X<savepvn>
 
 Perl's version of what C<strndup()> would be if it existed. Returns a
 pointer to a newly allocated string which is a duplicate of the first
-C<len> bytes from C<pv>. The memory allocated for the new string can be
-freed with the C<Safefree()> function.
+C<len> bytes from C<pv>, plus a trailing NUL byte. The memory allocated for
+the new string can be freed with the C<Safefree()> function.
 
        char*   savepvn(const char* pv, I32 len)
 
 =for hackers
 Found in file util.c
 
+=item savepvs
+X<savepvs>
+
+Like C<savepvn>, but takes a literal string instead of a string/length pair.
+
+       char*   savepvs(const char* s)
+
+=for hackers
+Found in file handy.h
+
 =item savesharedpv
 X<savesharedpv>
 
@@ -1850,6 +2308,18 @@ which is shared between threads.
 =for hackers
 Found in file util.c
 
+=item savesharedpvn
+X<savesharedpvn>
+
+A version of C<savepvn()> which allocates the duplicate string in memory
+which is shared between threads. (With the specific difference that a NULL
+pointer is not acceptable)
+
+       char*   savesharedpvn(const char *const pv, const STRLEN len)
+
+=for hackers
+Found in file util.c
+
 =item savesvpv
 X<savesvpv>
 
@@ -1915,7 +2385,7 @@ Found in file util.c
 X<fbm_instr>
 
 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>
+C<strend>.  It returns C<NULL> 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.
 
@@ -1955,6 +2425,47 @@ Fill the sv with current working directory
 =for hackers
 Found in file util.c
 
+=item my_snprintf
+X<my_snprintf>
+
+The C library C<snprintf> functionality, if available and
+standards-compliant (uses C<vsnprintf>, actually).  However, if the
+C<vsnprintf> is not available, will unfortunately use the unsafe
+C<vsprintf> which can overrun the buffer (there is an overrun check,
+but that may be too late).  Consider using C<sv_vcatpvf> instead, or
+getting C<vsnprintf>.
+
+       int     my_snprintf(char *buffer, const Size_t len, const char *format, ...)
+
+=for hackers
+Found in file util.c
+
+=item my_sprintf
+X<my_sprintf>
+
+The C library C<sprintf>, wrapped if necessary, to ensure that it will return
+the length of the string written to the buffer. Only rare pre-ANSI systems
+need the wrapper function - usually this is a direct call to C<sprintf>.
+
+       int     my_sprintf(char *buffer, const char *pat, ...)
+
+=for hackers
+Found in file util.c
+
+=item my_vsnprintf
+X<my_vsnprintf>
+
+The C library C<vsnprintf> if available and standards-compliant.
+However, if if the C<vsnprintf> is not available, will unfortunately
+use the unsafe C<vsprintf> which can overrun the buffer (there is an
+overrun check, but that may be too late).  Consider using
+C<sv_vcatpvf> instead, or getting C<vsnprintf>.
+
+       int     my_vsnprintf(char *buffer, const Size_t len, const char *format, va_list ap)
+
+=for hackers
+Found in file util.c
+
 =item new_version
 X<new_version>
 
@@ -1980,12 +2491,12 @@ an RV.
 Function must be called with an already existing SV like
 
     sv = newSV(0);
-    s = scan_version(s,SV *sv, bool qv);
+    s = scan_version(s, SV *sv, bool qv);
 
 Performs some preprocessing to the string to ensure that
 it has the correct characteristics of a version.  Flags the
 object if it contains an underscore (which denotes this
-is a alpha version).  The boolean qv denotes that the version
+is an alpha version).  The boolean qv denotes that the version
 should be interpreted as if it had multiple decimals, even if
 it doesn't.
 
@@ -2083,14 +2594,15 @@ wrapper for C<strncmp>).
 =for hackers
 Found in file handy.h
 
-=item sv_nolocking
-X<sv_nolocking>
+=item sv_destroyable
+X<sv_destroyable>
 
-Dummy routine which "locks" an SV when there is no locking module present.
-Exists to avoid test for a NULL function pointer and because it could potentially warn under
-some level of strict-ness.
+Dummy routine which reports that object can be destroyed when there is no
+sharing module present.  It ignores its single SV argument, and returns
+'true'.  Exists to avoid test for a NULL function pointer and because it
+could potentially warn under some level of strict-ness.
 
-       void    sv_nolocking(SV *)
+       bool    sv_destroyable(SV *sv)
 
 =for hackers
 Found in file util.c
@@ -2099,22 +2611,11 @@ Found in file util.c
 X<sv_nosharing>
 
 Dummy routine which "shares" an SV when there is no sharing module present.
-Exists to avoid test for a NULL function pointer and because it could potentially warn under
-some level of strict-ness.
+Or "locks" it. Or "unlocks" it. In other words, ignores its single SV argument.
+Exists to avoid test for a NULL function pointer and because it could
+potentially warn under some level of strict-ness.
 
-       void    sv_nosharing(SV *)
-
-=for hackers
-Found in file util.c
-
-=item sv_nounlocking
-X<sv_nounlocking>
-
-Dummy routine which "unlocks" an SV when there is no locking module present.
-Exists to avoid test for a NULL function pointer and because it could potentially warn under
-some level of strict-ness.
-
-       void    sv_nounlocking(SV *)
+       void    sv_nosharing(SV *sv)
 
 =for hackers
 Found in file util.c
@@ -2124,11 +2625,12 @@ X<upg_version>
 
 In-place upgrade of the supplied SV to a version object.
 
-    SV *sv = upg_version(SV *sv);
+    SV *sv = upg_version(SV *sv, bool qv);
 
-Returns a pointer to the upgraded SV.
+Returns a pointer to the upgraded SV.  Set the boolean qv if you want
+to force this SV to be interpreted as an "extended" version.
 
-       SV*     upg_version(SV *ver)
+       SV*     upg_version(SV *ver, bool qv)
 
 =for hackers
 Found in file util.c
@@ -2207,6 +2709,115 @@ Found in file util.c
 
 =back
 
+=head1 MRO Functions
+
+=over 8
+
+=item mro_get_linear_isa
+X<mro_get_linear_isa>
+
+Returns either C<mro_get_linear_isa_c3> or
+C<mro_get_linear_isa_dfs> for the given stash,
+dependant upon which MRO is in effect
+for that stash.  The return value is a
+read-only AV*.
+
+You are responsible for C<SvREFCNT_inc()> on the
+return value if you plan to store it anywhere
+semi-permanently (otherwise it might be deleted
+out from under you the next time the cache is
+invalidated).
+
+       AV*     mro_get_linear_isa(HV* stash)
+
+=for hackers
+Found in file mro.c
+
+=item mro_method_changed_in
+X<mro_method_changed_in>
+
+Invalidates method caching on any child classes
+of the given stash, so that they might notice
+the changes in this one.
+
+Ideally, all instances of C<PL_sub_generation++> in
+perl source outside of C<mro.c> should be
+replaced by calls to this.
+
+Perl automatically handles most of the common
+ways a method might be redefined.  However, there
+are a few ways you could change a method in a stash
+without the cache code noticing, in which case you
+need to call this method afterwards:
+
+1) Directly manipulating the stash HV entries from
+XS code.
+
+2) Assigning a reference to a readonly scalar
+constant into a stash entry in order to create
+a constant subroutine (like constant.pm
+does).
+
+This same method is available from pure perl
+via, C<mro::method_changed_in(classname)>.
+
+       void    mro_method_changed_in(HV* stash)
+
+=for hackers
+Found in file mro.c
+
+
+=back
+
+=head1 Multicall Functions
+
+=over 8
+
+=item dMULTICALL
+X<dMULTICALL>
+
+Declare local variables for a multicall. See L<perlcall/Lightweight Callbacks>.
+
+               dMULTICALL;
+
+=for hackers
+Found in file cop.h
+
+=item MULTICALL
+X<MULTICALL>
+
+Make a lightweight callback. See L<perlcall/Lightweight Callbacks>.
+
+               MULTICALL;
+
+=for hackers
+Found in file cop.h
+
+=item POP_MULTICALL
+X<POP_MULTICALL>
+
+Closing bracket for a lightweight callback.
+See L<perlcall/Lightweight Callbacks>.
+
+               POP_MULTICALL;
+
+=for hackers
+Found in file cop.h
+
+=item PUSH_MULTICALL
+X<PUSH_MULTICALL>
+
+Opening bracket for a lightweight callback.
+See L<perlcall/Lightweight Callbacks>.
+
+               PUSH_MULTICALL;
+
+=for hackers
+Found in file cop.h
+
+
+=back
+
 =head1 Numeric functions
 
 =over 8
@@ -2332,6 +2943,37 @@ number may use '_' characters to separate digits.
 =for hackers
 Found in file numeric.c
 
+=item Perl_signbit
+X<Perl_signbit>
+
+Return a non-zero integer if the sign bit on an NV is set, and 0 if
+it is not.  
+
+If Configure detects this system has a signbit() that will work with
+our NVs, then we just use it via the #define in perl.h.  Otherwise,
+fall back on this implementation.  As a first pass, this gets everything
+right except -0.0.  Alas, catching -0.0 is the main use for this function,
+so this is not too helpful yet.  Still, at least we have the scaffolding
+in place to support other systems, should that prove useful.
+
+
+Configure notes:  This function is called 'Perl_signbit' instead of a
+plain 'signbit' because it is easy to imagine a system having a signbit()
+function or macro that doesn't happen to work with our particular choice
+of NVs.  We shouldn't just re-#define signbit as Perl_signbit and expect
+the standard system headers to be happy.  Also, this is a no-context
+function (no pTHX_) because Perl_signbit() is usually re-#defined in
+perl.h as a simple macro call to the system's signbit().
+Users should just always call Perl_signbit().
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+       int     Perl_signbit(NV f)
+
+=for hackers
+Found in file numeric.c
+
 =item scan_bin
 X<scan_bin>
 
@@ -2378,47 +3020,158 @@ 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)
+       SV*     cv_const_sv(CV* cv)
+
+=for hackers
+Found in file op.c
+
+=item newCONSTSUB
+X<newCONSTSUB>
+
+Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
+eligible for inlining at compile-time.
+
+       CV*     newCONSTSUB(HV* stash, const char* name, SV* sv)
+
+=for hackers
+Found in file op.c
+
+=item newXS
+X<newXS>
+
+Used by C<xsubpp> to hook up XSUBs as Perl subs.  I<filename> needs to be
+static storage, as it is used directly as CvFILE(), without a copy being made.
+
+=for hackers
+Found in file op.c
+
+
+=back
+
+=head1 Pad Data Structures
+
+=over 8
+
+=item pad_sv
+X<pad_sv>
+
+Get the value at offset po in the current pad.
+Use macro PAD_SV instead of calling this function directly.
+
+       SV*     pad_sv(PADOFFSET po)
+
+=for hackers
+Found in file pad.c
+
+
+=back
+
+=head1 Per-Interpreter Variables
+
+=over 8
+
+=item PL_modglobal
+X<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.
+
+       HV*     PL_modglobal
+
+=for hackers
+Found in file intrpvar.h
+
+=item PL_na
+X<PL_na>
+
+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.
+
+       STRLEN  PL_na
+
+=for hackers
+Found in file intrpvar.h
+
+=item PL_sv_no
+X<PL_sv_no>
+
+This is the C<false> SV.  See C<PL_sv_yes>.  Always refer to this as
+C<&PL_sv_no>.
+
+       SV      PL_sv_no
 
 =for hackers
-Found in file op.c
+Found in file intrpvar.h
 
-=item newCONSTSUB
-X<newCONSTSUB>
+=item PL_sv_undef
+X<PL_sv_undef>
 
-Creates a constant sub equivalent to Perl C<sub FOO () { 123 }> which is
-eligible for inlining at compile-time.
+This is the C<undef> SV.  Always refer to this as C<&PL_sv_undef>.
 
-       CV*     newCONSTSUB(HV* stash, const char* name, SV* sv)
+       SV      PL_sv_undef
 
 =for hackers
-Found in file op.c
+Found in file intrpvar.h
 
-=item newXS
-X<newXS>
+=item PL_sv_yes
+X<PL_sv_yes>
+
+This is the C<true> SV.  See C<PL_sv_no>.  Always refer to this as
+C<&PL_sv_yes>.
 
-Used by C<xsubpp> to hook up XSUBs as Perl subs.
+       SV      PL_sv_yes
 
 =for hackers
-Found in file op.c
+Found in file intrpvar.h
 
 
 =back
 
-=head1 Pad Data Structures
+=head1 REGEXP Functions
 
 =over 8
 
-=item pad_sv
-X<pad_sv>
+=item SvRX
+X<SvRX>
 
-Get the value at offset po in the current pad.
-Use macro PAD_SV instead of calling this function directly.
+Convenience macro to get the REGEXP from a SV. This is approximately
+equivalent to the following snippet:
 
-       SV*     pad_sv(PADOFFSET po)
+    if (SvMAGICAL(sv))
+        mg_get(sv);
+    if (SvROK(sv) &&
+        (tmpsv = (SV*)SvRV(sv)) &&
+        SvTYPE(tmpsv) == SVt_PVMG &&
+        (tmpmg = mg_find(tmpsv, PERL_MAGIC_qr)))
+    {
+        return (REGEXP *)tmpmg->mg_obj;
+    }
+
+NULL will be returned if a REGEXP* is not found.
+
+       REGEXP *        SvRX(SV *sv)
 
 =for hackers
-Found in file pad.c
+Found in file regexp.h
+
+=item SvRXOK
+X<SvRXOK>
+
+Returns a boolean indicating whether the SV contains qr magic
+(PERL_MAGIC_qr).
+
+If you want to do something with the REGEXP* later use SvRX instead
+and check for NULL.
+
+       bool    SvRXOK(SV* sv)
+
+=for hackers
+Found in file regexp.h
 
 
 =back
@@ -3154,18 +3907,6 @@ NOTE: the perl_ form of this function is deprecated.
 =for hackers
 Found in file perl.c
 
-=item looks_like_number
-X<looks_like_number>
-
-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.
-
-       I32     looks_like_number(SV* sv)
-
-=for hackers
-Found in file sv.c
-
 =item newRV_inc
 X<newRV_inc>
 
@@ -3177,164 +3918,6 @@ incremented.
 =for hackers
 Found in file sv.h
 
-=item newRV_noinc
-X<newRV_noinc>
-
-Creates an RV wrapper for an SV.  The reference count for the original
-SV is B<not> incremented.
-
-       SV*     newRV_noinc(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item NEWSV
-X<NEWSV>
-
-Creates a new SV.  A non-zero C<len> parameter indicates the number of
-bytes of preallocated string space the SV should have.  An extra byte for a
-tailing NUL is also reserved.  (SvPOK is not set for the SV even if string
-space is allocated.)  The reference count for the new SV is set to 1.
-C<id> is an integer id between 0 and 1299 (used to identify leaks).
-
-       SV*     NEWSV(int id, STRLEN len)
-
-=for hackers
-Found in file handy.h
-
-=item newSV
-X<newSV>
-
-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.
-
-       SV*     newSV(STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item newSVhek
-X<newSVhek>
-
-Creates a new SV from the hash key structure.  It will generate scalars that
-point to the shared string table where possible. Returns a new (undefined)
-SV if the hek is NULL.
-
-       SV*     newSVhek(const HEK *hek)
-
-=for hackers
-Found in file sv.c
-
-=item newSViv
-X<newSViv>
-
-Creates a new SV and copies an integer into it.  The reference count for the
-SV is set to 1.
-
-       SV*     newSViv(IV i)
-
-=for hackers
-Found in file sv.c
-
-=item newSVnv
-X<newSVnv>
-
-Creates a new SV and copies a floating point value into it.
-The reference count for the SV is set to 1.
-
-       SV*     newSVnv(NV n)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpv
-X<newSVpv>
-
-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.
-
-       SV*     newSVpv(const char* s, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpvf
-X<newSVpvf>
-
-Creates a new SV and initializes it with the string formatted like
-C<sprintf>.
-
-       SV*     newSVpvf(const char* pat, ...)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpvn
-X<newSVpvn>
-
-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.  If the C<s> argument is NULL the new SV will be undefined.
-
-       SV*     newSVpvn(const char* s, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item newSVpvn_share
-X<newSVpvn_share>
-
-Creates a new SV with its SvPVX_const 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_const == 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
-X<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
-X<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
-X<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 SvCUR
 X<SvCUR>
 
@@ -3367,6 +3950,20 @@ See C<SvCUR>.  Access the character as *(SvEND(sv)).
 =for hackers
 Found in file sv.h
 
+=item SvGAMAGIC
+X<SvGAMAGIC>
+
+Returns true if the SV has get magic or overloading. If either is true then
+the scalar is active data, and has the potential to return a new value every
+time it is accessed. Hence you must be careful to only read it once per user
+logical operation and work with that returned value. If neither is true then
+the scalar's value cannot change unless written to.
+
+       char*   SvGAMAGIC(SV* sv)
+
+=for hackers
+Found in file sv.h
+
 =item SvGROW
 X<SvGROW>
 
@@ -3383,9 +3980,9 @@ Found in file sv.h
 =item SvIOK
 X<SvIOK>
 
-Returns a boolean indicating whether the SV contains an integer.
+Returns a U32 value indicating whether the SV contains an integer.
 
-       bool    SvIOK(SV* sv)
+       U32     SvIOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3393,10 +3990,10 @@ Found in file sv.h
 =item SvIOKp
 X<SvIOKp>
 
-Returns a boolean indicating whether the SV contains an integer.  Checks
+Returns a U32 value indicating whether the SV contains an integer.  Checks
 the B<private> setting.  Use C<SvIOK>.
 
-       bool    SvIOKp(SV* sv)
+       U32     SvIOKp(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3487,7 +4084,7 @@ Found in file sv.h
 =item SvIV
 X<SvIV>
 
-Coerces the given SV to an integer and returns it. See  C<SvIVx> for a
+Coerces the given SV to an integer and returns it. See C<SvIVx> for a
 version which guarantees to evaluate sv only once.
 
        IV      SvIV(SV* sv)
@@ -3510,7 +4107,8 @@ Found in file sv.h
 X<SvIVx>
 
 Coerces the given SV to an integer and returns it. Guarantees to evaluate
-sv only once. Use the more efficient C<SvIV> otherwise.
+C<sv> only once. Only use this if C<sv> is an expression with side effects,
+otherwise use the more efficient C<SvIV>.
 
        IV      SvIVx(SV* sv)
 
@@ -3574,10 +4172,10 @@ Found in file sv.h
 =item SvNIOK
 X<SvNIOK>
 
-Returns a boolean indicating whether the SV contains a number, integer or
+Returns a U32 value indicating whether the SV contains a number, integer or
 double.
 
-       bool    SvNIOK(SV* sv)
+       U32     SvNIOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3585,10 +4183,10 @@ Found in file sv.h
 =item SvNIOKp
 X<SvNIOKp>
 
-Returns a boolean indicating whether the SV contains a number, integer or
+Returns a U32 value indicating whether the SV contains a number, integer or
 double.  Checks the B<private> setting.  Use C<SvNIOK>.
 
-       bool    SvNIOKp(SV* sv)
+       U32     SvNIOKp(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3606,9 +4204,9 @@ Found in file sv.h
 =item SvNOK
 X<SvNOK>
 
-Returns a boolean indicating whether the SV contains a double.
+Returns a U32 value indicating whether the SV contains a double.
 
-       bool    SvNOK(SV* sv)
+       U32     SvNOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3616,10 +4214,10 @@ Found in file sv.h
 =item SvNOKp
 X<SvNOKp>
 
-Returns a boolean indicating whether the SV contains a double.  Checks the
+Returns a U32 value indicating whether the SV contains a double.  Checks the
 B<private> setting.  Use C<SvNOK>.
 
-       bool    SvNOKp(SV* sv)
+       U32     SvNOKp(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3657,7 +4255,7 @@ Found in file sv.h
 =item SvNV
 X<SvNV>
 
-Coerce the given SV to a double and return it. See  C<SvNVx> for a version
+Coerce the given SV to a double and return it. See C<SvNVx> for a version
 which guarantees to evaluate sv only once.
 
        NV      SvNV(SV* sv)
@@ -3680,7 +4278,8 @@ Found in file sv.h
 X<SvNVx>
 
 Coerces the given SV to a double and returns it. Guarantees to evaluate
-sv only once. Use the more efficient C<SvNV> otherwise.
+C<sv> only once. Only use this if C<sv> is an expression with side effects,
+otherwise use the more efficient C<SvNV>.
 
        NV      SvNVx(SV* sv)
 
@@ -3700,10 +4299,10 @@ Found in file sv.h
 =item SvOK
 X<SvOK>
 
-Returns a boolean indicating whether the value is an SV. It also tells
+Returns a U32 value indicating whether the value is an SV. It also tells
 whether the value is defined or not.
 
-       bool    SvOK(SV* sv)
+       U32     SvOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3711,12 +4310,12 @@ Found in file sv.h
 =item SvOOK
 X<SvOOK>
 
-Returns a boolean indicating whether the SvIVX is a valid offset value for
+Returns a U32 indicating whether the SvIVX is a valid offset value for
 the SvPVX.  This hack is used internally to speed up removal of characters
 from the beginning of a SvPV.  When SvOOK is true, then the start of the
 allocated string buffer is really (SvPVX - SvIVX).
 
-       bool    SvOOK(SV* sv)
+       U32     SvOOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3724,10 +4323,10 @@ Found in file sv.h
 =item SvPOK
 X<SvPOK>
 
-Returns a boolean indicating whether the SV contains a character
+Returns a U32 value indicating whether the SV contains a character
 string.
 
-       bool    SvPOK(SV* sv)
+       U32     SvPOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3735,10 +4334,10 @@ Found in file sv.h
 =item SvPOKp
 X<SvPOKp>
 
-Returns a boolean indicating whether the SV contains a character string.
+Returns a U32 value indicating whether the SV contains a character string.
 Checks the B<private> setting.  Use C<SvPOK>.
 
-       bool    SvPOKp(SV* sv)
+       U32     SvPOKp(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3920,7 +4519,9 @@ Found in file sv.h
 =item SvPVx
 X<SvPVx>
 
-A version of C<SvPV> which guarantees to evaluate sv only once.
+A version of C<SvPV> which guarantees to evaluate C<sv> only once.
+Only use this if C<sv> is an expression with side effects, otherwise use the
+more efficient C<SvPVX>.
 
        char*   SvPVx(SV* sv, STRLEN len)
 
@@ -3986,29 +4587,115 @@ Found in file sv.h
 =item SvREFCNT
 X<SvREFCNT>
 
-Returns the value of the object's reference count.
+Returns the value of the object's reference count.
+
+       U32     SvREFCNT(SV* sv)
+
+=for hackers
+Found in file sv.h
+
+=item SvREFCNT_dec
+X<SvREFCNT_dec>
+
+Decrements the reference count of the given SV.
+
+       void    SvREFCNT_dec(SV* sv)
+
+=for hackers
+Found in file sv.h
+
+=item SvREFCNT_inc
+X<SvREFCNT_inc>
+
+Increments the reference count of the given SV.
+
+All of the following SvREFCNT_inc* macros are optimized versions of
+SvREFCNT_inc, and can be replaced with SvREFCNT_inc.
+
+       SV*     SvREFCNT_inc(SV* sv)
+
+=for hackers
+Found in file sv.h
+
+=item SvREFCNT_inc_NN
+X<SvREFCNT_inc_NN>
+
+Same as SvREFCNT_inc, but can only be used if you know I<sv>
+is not NULL.  Since we don't have to check the NULLness, it's faster
+and smaller.
+
+       SV*     SvREFCNT_inc_NN(SV* sv)
+
+=for hackers
+Found in file sv.h
+
+=item SvREFCNT_inc_simple
+X<SvREFCNT_inc_simple>
+
+Same as SvREFCNT_inc, but can only be used with expressions without side
+effects.  Since we don't have to store a temporary value, it's faster.
+
+       SV*     SvREFCNT_inc_simple(SV* sv)
+
+=for hackers
+Found in file sv.h
+
+=item SvREFCNT_inc_simple_NN
+X<SvREFCNT_inc_simple_NN>
+
+Same as SvREFCNT_inc_simple, but can only be used if you know I<sv>
+is not NULL.  Since we don't have to check the NULLness, it's faster
+and smaller.
+
+       SV*     SvREFCNT_inc_simple_NN(SV* sv)
+
+=for hackers
+Found in file sv.h
+
+=item SvREFCNT_inc_simple_void
+X<SvREFCNT_inc_simple_void>
+
+Same as SvREFCNT_inc_simple, but can only be used if you don't need the
+return value.  The macro doesn't need to return a meaningful value.
+
+       void    SvREFCNT_inc_simple_void(SV* sv)
+
+=for hackers
+Found in file sv.h
+
+=item SvREFCNT_inc_simple_void_NN
+X<SvREFCNT_inc_simple_void_NN>
 
-       U32     SvREFCNT(SV* sv)
+Same as SvREFCNT_inc, but can only be used if you don't need the return
+value, and you know that I<sv> is not NULL.  The macro doesn't need
+to return a meaningful value, or check for NULLness, so it's smaller
+and faster.
+
+       void    SvREFCNT_inc_simple_void_NN(SV* sv)
 
 =for hackers
 Found in file sv.h
 
-=item SvREFCNT_dec
-X<SvREFCNT_dec>
+=item SvREFCNT_inc_void
+X<SvREFCNT_inc_void>
 
-Decrements the reference count of the given SV.
+Same as SvREFCNT_inc, but can only be used if you don't need the
+return value.  The macro doesn't need to return a meaningful value.
 
-       void    SvREFCNT_dec(SV* sv)
+       void    SvREFCNT_inc_void(SV* sv)
 
 =for hackers
 Found in file sv.h
 
-=item SvREFCNT_inc
-X<SvREFCNT_inc>
+=item SvREFCNT_inc_void_NN
+X<SvREFCNT_inc_void_NN>
 
-Increments the reference count of the given SV.
+Same as SvREFCNT_inc, but can only be used if you don't need the return
+value, and you know that I<sv> is not NULL.  The macro doesn't need
+to return a meaningful value, or check for NULLness, so it's smaller
+and faster.
 
-       SV*     SvREFCNT_inc(SV* sv)
+       void    SvREFCNT_inc_void_NN(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4018,7 +4705,7 @@ X<SvROK>
 
 Tests if the SV is an RV.
 
-       bool    SvROK(SV* sv)
+       U32     SvROK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4078,7 +4765,7 @@ X<SvSTASH_set>
 
 Set the value of the STASH pointer in sv to val.  See C<SvIV_set>.
 
-       void    SvSTASH_set(SV* sv, STASH* val)
+       void    SvSTASH_set(SV* sv, HV* val)
 
 =for hackers
 Found in file sv.h
@@ -4155,7 +4842,7 @@ X<SvUOK>
 
 Returns a boolean indicating whether the SV contains an unsigned integer.
 
-       void    SvUOK(SV* sv)
+       bool    SvUOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4174,9 +4861,11 @@ Found in file sv.h
 =item SvUTF8
 X<SvUTF8>
 
-Returns a boolean indicating whether the SV contains UTF-8 encoded data.
+Returns a U32 value indicating whether the SV contains UTF-8 encoded data.
+Call this after SvPV() in case any call to string overloading updates the
+internal flag.
 
-       bool    SvUTF8(SV* sv)
+       U32     SvUTF8(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4228,7 +4917,8 @@ Found in file sv.h
 X<SvUVx>
 
 Coerces the given SV to an unsigned integer and returns it. Guarantees to
-evaluate sv only once. Use the more efficient C<SvUV> otherwise.
+C<sv> only once. Only use this if C<sv> is an expression with side effects,
+otherwise use the more efficient C<SvUV>.
 
        UV      SvUVx(SV* sv)
 
@@ -4265,6 +4955,271 @@ Returns a boolean indicating whether the SV contains a v-string.
 =for hackers
 Found in file sv.h
 
+=item sv_catpvn_nomg
+X<sv_catpvn_nomg>
+
+Like C<sv_catpvn> but doesn't process magic.
+
+       void    sv_catpvn_nomg(SV* sv, const char* ptr, STRLEN len)
+
+=for hackers
+Found in file sv.h
+
+=item sv_catsv_nomg
+X<sv_catsv_nomg>
+
+Like C<sv_catsv> but doesn't process magic.
+
+       void    sv_catsv_nomg(SV* dsv, SV* ssv)
+
+=for hackers
+Found in file sv.h
+
+=item sv_derived_from
+X<sv_derived_from>
+
+Returns a boolean indicating whether the SV is derived from the specified class
+I<at the C level>.  To check derivation at the Perl level, call C<isa()> as a
+normal Perl method.
+
+       bool    sv_derived_from(SV* sv, const char* name)
+
+=for hackers
+Found in file universal.c
+
+=item sv_does
+X<sv_does>
+
+Returns a boolean indicating whether the SV performs a specific, named role.
+The SV can be a Perl object or the name of a Perl class.
+
+       bool    sv_does(SV* sv, const char* name)
+
+=for hackers
+Found in file universal.c
+
+=item sv_report_used
+X<sv_report_used>
+
+Dump the contents of all SVs not yet freed. (Debugging aid).
+
+       void    sv_report_used()
+
+=for hackers
+Found in file sv.c
+
+=item sv_setsv_nomg
+X<sv_setsv_nomg>
+
+Like C<sv_setsv> but doesn't process magic.
+
+       void    sv_setsv_nomg(SV* dsv, SV* ssv)
+
+=for hackers
+Found in file sv.h
+
+
+=back
+
+=head1 SV-Body Allocation
+
+=over 8
+
+=item looks_like_number
+X<looks_like_number>
+
+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.
+
+       I32     looks_like_number(SV* sv)
+
+=for hackers
+Found in file sv.c
+
+=item newRV_noinc
+X<newRV_noinc>
+
+Creates an RV wrapper for an SV.  The reference count for the original
+SV is B<not> incremented.
+
+       SV*     newRV_noinc(SV* sv)
+
+=for hackers
+Found in file sv.c
+
+=item newSV
+X<newSV>
+
+Creates a new SV.  A non-zero C<len> parameter indicates the number of
+bytes of preallocated string space the SV should have.  An extra byte for a
+trailing 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.
+
+In 5.9.3, newSV() replaces the older NEWSV() API, and drops the first
+parameter, I<x>, a debug aid which allowed callers to identify themselves.
+This aid has been superseded by a new build option, PERL_MEM_LOG (see
+L<perlhack/PERL_MEM_LOG>).  The older API is still there for use in XS
+modules supporting older perls.
+
+       SV*     newSV(STRLEN len)
+
+=for hackers
+Found in file sv.c
+
+=item newSVhek
+X<newSVhek>
+
+Creates a new SV from the hash key structure.  It will generate scalars that
+point to the shared string table where possible. Returns a new (undefined)
+SV if the hek is NULL.
+
+       SV*     newSVhek(const HEK *hek)
+
+=for hackers
+Found in file sv.c
+
+=item newSViv
+X<newSViv>
+
+Creates a new SV and copies an integer into it.  The reference count for the
+SV is set to 1.
+
+       SV*     newSViv(IV i)
+
+=for hackers
+Found in file sv.c
+
+=item newSVnv
+X<newSVnv>
+
+Creates a new SV and copies a floating point value into it.
+The reference count for the SV is set to 1.
+
+       SV*     newSVnv(NV n)
+
+=for hackers
+Found in file sv.c
+
+=item newSVpv
+X<newSVpv>
+
+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.
+
+       SV*     newSVpv(const char* s, STRLEN len)
+
+=for hackers
+Found in file sv.c
+
+=item newSVpvf
+X<newSVpvf>
+
+Creates a new SV and initializes it with the string formatted like
+C<sprintf>.
+
+       SV*     newSVpvf(const char* pat, ...)
+
+=for hackers
+Found in file sv.c
+
+=item newSVpvn
+X<newSVpvn>
+
+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.  If the C<s> argument is NULL the new SV will be undefined.
+
+       SV*     newSVpvn(const char* s, STRLEN len)
+
+=for hackers
+Found in file sv.c
+
+=item newSVpvn_share
+X<newSVpvn_share>
+
+Creates a new SV with its SvPVX_const 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. If the C<hash> parameter is non-zero, that
+value is used; otherwise the hash is computed. The string's hash can be later
+be retrieved from the SV with the C<SvSHARED_HASH()> macro. The idea here is
+that as the string table is used for shared hash keys these strings will have
+SvPVX_const == 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 newSVpvs
+X<newSVpvs>
+
+Like C<newSVpvn>, but takes a literal string instead of a string/length pair.
+
+       SV*     newSVpvs(const char* s)
+
+=for hackers
+Found in file handy.h
+
+=item newSVpvs_share
+X<newSVpvs_share>
+
+Like C<newSVpvn_share>, but takes a literal string instead of a string/length
+pair and omits the hash parameter.
+
+       SV*     newSVpvs_share(const char* s)
+
+=for hackers
+Found in file handy.h
+
+=item newSVrv
+X<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
+X<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
+X<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 newSV_type
+X<newSV_type>
+
+Creates a new SV, of the type specified.  The reference count for the new SV
+is set to 1.
+
+       SV*     newSV_type(svtype type)
+
+=for hackers
+Found in file sv.c
+
 =item sv_2bool
 X<sv_2bool>
 
@@ -4281,6 +5236,7 @@ X<sv_2cv>
 
 Using various gambits, try to get a CV from an SV; in addition, try if
 possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
+The flags in C<lref> are passed to sv_fetchsv.
 
        CV*     sv_2cv(SV* sv, HV** st, GV** gvp, I32 lref)
 
@@ -4338,28 +5294,15 @@ macros.
 Found in file sv.c
 
 =item sv_2pvbyte
-X<sv_2pvbyte>
-
-Return a pointer to the byte-encoded representation of the SV, and set *lp
-to its length.  May cause the SV to be downgraded from UTF-8 as a
-side-effect.
-
-Usually accessed via the C<SvPVbyte> macro.
-
-       char*   sv_2pvbyte(SV* sv, STRLEN* lp)
-
-=for hackers
-Found in file sv.c
-
-=item sv_2pvbyte_nolen
-X<sv_2pvbyte_nolen>
+X<sv_2pvbyte>
 
-Return a pointer to the byte-encoded representation of the SV.
-May cause the SV to be downgraded from UTF-8 as a side-effect.
+Return a pointer to the byte-encoded representation of the SV, and set *lp
+to its length.  May cause the SV to be downgraded from UTF-8 as a
+side-effect.
 
-Usually accessed via the C<SvPVbyte_nolen> macro.
+Usually accessed via the C<SvPVbyte> macro.
 
-       char*   sv_2pvbyte_nolen(SV* sv)
+       char*   sv_2pvbyte(SV* sv, STRLEN* lp)
 
 =for hackers
 Found in file sv.c
@@ -4377,19 +5320,6 @@ Usually accessed via the C<SvPVutf8> macro.
 =for hackers
 Found in file sv.c
 
-=item sv_2pvutf8_nolen
-X<sv_2pvutf8_nolen>
-
-Return a pointer to the UTF-8-encoded representation of the SV.
-May cause the SV to be upgraded to UTF-8 as a side-effect.
-
-Usually accessed via the C<SvPVutf8_nolen> macro.
-
-       char*   sv_2pvutf8_nolen(SV* sv)
-
-=for hackers
-Found in file sv.c
-
 =item sv_2pv_flags
 X<sv_2pv_flags>
 
@@ -4404,16 +5334,6 @@ usually end up here too.
 =for hackers
 Found in file sv.c
 
-=item sv_2pv_nolen
-X<sv_2pv_nolen>
-
-Like C<sv_2pv()>, but doesn't return the length too. You should usually
-use the macro wrapper C<SvPV_nolen(sv)> instead.
-       char*   sv_2pv_nolen(SV* sv)
-
-=for hackers
-Found in file sv.c
-
 =item sv_2uv_flags
 X<sv_2uv_flags>
 
@@ -4515,25 +5435,15 @@ in terms of this function.
 =for hackers
 Found in file sv.c
 
-=item sv_catpvn_mg
-X<sv_catpvn_mg>
-
-Like C<sv_catpvn>, but also handles 'set' magic.
-
-       void    sv_catpvn_mg(SV *sv, const char *ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catpvn_nomg
-X<sv_catpvn_nomg>
+=item sv_catpvs
+X<sv_catpvs>
 
-Like C<sv_catpvn> but doesn't process magic.
+Like C<sv_catpvn>, but takes a literal string instead of a string/length pair.
 
-       void    sv_catpvn_nomg(SV* sv, const char* ptr, STRLEN len)
+       void    sv_catpvs(SV* sv, const char* s)
 
 =for hackers
-Found in file sv.h
+Found in file handy.h
 
 =item sv_catpv_mg
 X<sv_catpv_mg>
@@ -4570,26 +5480,6 @@ and C<sv_catsv_nomg> are implemented in terms of this function.
 =for hackers
 Found in file sv.c
 
-=item sv_catsv_mg
-X<sv_catsv_mg>
-
-Like C<sv_catsv>, but also handles 'set' magic.
-
-       void    sv_catsv_mg(SV *dstr, SV *sstr)
-
-=for hackers
-Found in file sv.c
-
-=item sv_catsv_nomg
-X<sv_catsv_nomg>
-
-Like C<sv_catsv> but doesn't process magic.
-
-       void    sv_catsv_nomg(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
 =item sv_chop
 X<sv_chop>
 
@@ -4667,7 +5557,7 @@ X<sv_copypv>
 Copies a stringified representation of the source SV into the
 destination SV.  Automatically performs any necessary mg_get and
 coercion of numeric values into strings.  Guaranteed to preserve
-UTF-8 flag even from overloaded objects.  Similar in nature to
+UTF8 flag even from overloaded objects.  Similar in nature to
 sv_2pv[_flags] but operates directly on an SV instead of just the
 string.  Mostly uses sv_2pv_flags to do its work, except when that
 would lose the UTF-8'ness of the PV.
@@ -4688,18 +5578,6 @@ if necessary. Handles 'get' magic.
 =for hackers
 Found in file sv.c
 
-=item sv_derived_from
-X<sv_derived_from>
-
-Returns a boolean indicating whether the SV is derived from the specified
-class.  This is the function that implements C<UNIVERSAL::isa>.  It works
-for class names as well as for objects.
-
-       bool    sv_derived_from(SV* sv, const char* name)
-
-=for hackers
-Found in file universal.c
-
 =item sv_eq
 X<sv_eq>
 
@@ -4712,18 +5590,6 @@ coerce its args to strings if necessary.
 =for hackers
 Found in file sv.c
 
-=item sv_force_normal
-X<sv_force_normal>
-
-Undo various types of fakery on an SV: if the PV is a shared string, make
-a private copy; if we're a ref, stop refing; if we're a glob, downgrade to
-an xpvmg. See also C<sv_force_normal_flags>.
-
-       void    sv_force_normal(SV *sv)
-
-=for hackers
-Found in file sv.c
-
 =item sv_force_normal_flags
 X<sv_force_normal_flags>
 
@@ -4824,17 +5690,6 @@ will return false.
 =for hackers
 Found in file sv.c
 
-=item sv_iv
-X<sv_iv>
-
-A private implementation of the C<SvIVx> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
-
-       IV      sv_iv(SV* sv)
-
-=for hackers
-Found in file sv.c
-
 =item sv_len
 X<sv_len>
 
@@ -4933,17 +5788,6 @@ instead.
 =for hackers
 Found in file sv.c
 
-=item sv_nv
-X<sv_nv>
-
-A private implementation of the C<SvNVx> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
-
-       NV      sv_nv(SV* sv)
-
-=for hackers
-Found in file sv.c
-
 =item sv_pos_b2u
 X<sv_pos_b2u>
 
@@ -4970,61 +5814,16 @@ type coercion.
 =for hackers
 Found in file sv.c
 
-=item sv_pv
-X<sv_pv>
-
-Use the C<SvPV_nolen> macro instead
-
-       char*   sv_pv(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvbyte
-X<sv_pvbyte>
-
-Use C<SvPVbyte_nolen> instead.
-
-       char*   sv_pvbyte(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvbyten
-X<sv_pvbyten>
-
-A private implementation of the C<SvPVbyte> macro for compilers
-which can't cope with complex macro expressions. Always use the macro
-instead.
-
-       char*   sv_pvbyten(SV *sv, STRLEN *len)
-
-=for hackers
-Found in file sv.c
-
 =item sv_pvbyten_force
 X<sv_pvbyten_force>
 
-A private implementation of the C<SvPVbytex_force> macro for compilers
-which can't cope with complex macro expressions. Always use the macro
-instead.
+The backend for the C<SvPVbytex_force> macro. Always use the macro instead.
 
        char*   sv_pvbyten_force(SV* sv, STRLEN* lp)
 
 =for hackers
 Found in file sv.c
 
-=item sv_pvn
-X<sv_pvn>
-
-A private implementation of the C<SvPV> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
-
-       char*   sv_pvn(SV *sv, STRLEN *len)
-
-=for hackers
-Found in file sv.c
-
 =item sv_pvn_force
 X<sv_pvn_force>
 
@@ -5052,34 +5851,10 @@ C<SvPV_force> and C<SvPV_force_nomg>
 =for hackers
 Found in file sv.c
 
-=item sv_pvutf8
-X<sv_pvutf8>
-
-Use the C<SvPVutf8_nolen> macro instead
-
-       char*   sv_pvutf8(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvutf8n
-X<sv_pvutf8n>
-
-A private implementation of the C<SvPVutf8> macro for compilers
-which can't cope with complex macro expressions. Always use the macro
-instead.
-
-       char*   sv_pvutf8n(SV *sv, STRLEN *len)
-
-=for hackers
-Found in file sv.c
-
 =item sv_pvutf8n_force
 X<sv_pvutf8n_force>
 
-A private implementation of the C<SvPVutf8_force> macro for compilers
-which can't cope with complex macro expressions. Always use the macro
-instead.
+The backend for the C<SvPVutf8x_force> macro. Always use the macro instead.
 
        char*   sv_pvutf8n_force(SV* sv, STRLEN* lp)
 
@@ -5091,7 +5866,7 @@ X<sv_reftype>
 
 Returns a string describing what the SV is a reference to.
 
-       char*   sv_reftype(const SV* sv, int ob)
+       const char*     sv_reftype(const SV* sv, int ob)
 
 =for hackers
 Found in file sv.c
@@ -5111,16 +5886,6 @@ time you'll want to use C<sv_setsv> or one of its many macro front-ends.
 =for hackers
 Found in file sv.c
 
-=item sv_report_used
-X<sv_report_used>
-
-Dump the contents of all SVs not yet freed. (Debugging aid).
-
-       void    sv_report_used()
-
-=for hackers
-Found in file sv.c
-
 =item sv_reset
 X<sv_reset>
 
@@ -5138,7 +5903,8 @@ X<sv_rvweaken>
 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
 push a back-reference to this RV onto the array of backreferences
-associated with that magic.
+associated with that magic. If the RV is magical, set magic will be
+called after the RV is cleared.
 
        SV*     sv_rvweaken(SV *sv)
 
@@ -5262,6 +6028,16 @@ Like C<sv_setpvn>, but also handles 'set' magic.
 =for hackers
 Found in file sv.c
 
+=item sv_setpvs
+X<sv_setpvs>
+
+Like C<sv_setpvn>, but takes a literal string instead of a string/length pair.
+
+       void    sv_setpvs(SV* sv, const char* s)
+
+=for hackers
+Found in file handy.h
+
 =item sv_setpv_mg
 X<sv_setpv_mg>
 
@@ -5278,7 +6054,7 @@ X<sv_setref_iv>
 Copies an integer into a new SV, optionally blessing the SV.  The C<rv>
 argument will be upgraded to an RV.  That RV will be modified to point to
 the new SV.  The C<classname> argument indicates the package for the
-blessing.  Set C<classname> to C<Nullch> to avoid the blessing.  The new SV
+blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
 will have a reference count of 1, and the RV will be returned.
 
        SV*     sv_setref_iv(SV* rv, const char* classname, IV iv)
@@ -5292,7 +6068,7 @@ X<sv_setref_nv>
 Copies a double into a new SV, optionally blessing the SV.  The C<rv>
 argument will be upgraded to an RV.  That RV will be modified to point to
 the new SV.  The C<classname> argument indicates the package for the
-blessing.  Set C<classname> to C<Nullch> to avoid the blessing.  The new SV
+blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
 will have a reference count of 1, and the RV will be returned.
 
        SV*     sv_setref_nv(SV* rv, const char* classname, NV nv)
@@ -5307,7 +6083,7 @@ Copies a pointer into a new SV, optionally blessing the SV.  The C<rv>
 argument will be upgraded to an RV.  That RV will be modified to point to
 the new SV.  If the C<pv> argument is NULL then C<PL_sv_undef> will be placed
 into the SV.  The C<classname> argument indicates the package for the
-blessing.  Set C<classname> to C<Nullch> to avoid the blessing.  The new SV
+blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
 will have a reference count of 1, and the RV will be returned.
 
 Do not use with other Perl types such as HV, AV, SV, CV, because those
@@ -5327,7 +6103,7 @@ Copies a string into a new SV, optionally blessing the SV.  The length of the
 string must be specified with C<n>.  The C<rv> argument will be upgraded to
 an RV.  That RV will be modified to point to the new SV.  The C<classname>
 argument indicates the package for the blessing.  Set C<classname> to
-C<Nullch> to avoid the blessing.  The new SV will have a reference count
+C<NULL> to avoid the blessing.  The new SV will have a reference count
 of 1, and the RV will be returned.
 
 Note that C<sv_setref_pv> copies the pointer while this copies the string.
@@ -5343,7 +6119,7 @@ X<sv_setref_uv>
 Copies an unsigned integer into a new SV, optionally blessing the SV.  The C<rv>
 argument will be upgraded to an RV.  That RV will be modified to point to
 the new SV.  The C<classname> argument indicates the package for the
-blessing.  Set C<classname> to C<Nullch> to avoid the blessing.  The new SV
+blessing.  Set C<classname> to C<NULL> to avoid the blessing.  The new SV
 will have a reference count of 1, and the RV will be returned.
 
        SV*     sv_setref_uv(SV* rv, const char* classname, UV uv)
@@ -5404,16 +6180,6 @@ Like C<sv_setsv>, but also handles 'set' magic.
 =for hackers
 Found in file sv.c
 
-=item sv_setsv_nomg
-X<sv_setsv_nomg>
-
-Like C<sv_setsv> but doesn't process magic.
-
-       void    sv_setsv_nomg(SV* dsv, SV* ssv)
-
-=for hackers
-Found in file sv.h
-
 =item sv_setuv
 X<sv_setuv>
 
@@ -5435,15 +6201,6 @@ Like C<sv_setuv>, but also handles 'set' magic.
 =for hackers
 Found in file sv.c
 
-=item sv_taint
-X<sv_taint>
-
-Taint an SV. Use C<SvTAINTED_on> instead.
-       void    sv_taint(SV* sv)
-
-=for hackers
-Found in file sv.c
-
 =item sv_tainted
 X<sv_tainted>
 
@@ -5475,19 +6232,6 @@ Removes all magic of type C<type> from an SV.
 =for hackers
 Found in file sv.c
 
-=item sv_unref
-X<sv_unref>
-
-Unsets the RV status of the SV, and decrements the reference count of
-whatever was being referenced by the RV.  This can almost be thought of
-as a reversal of C<newSVrv>.  This is C<sv_unref_flags> with the C<flag>
-being zero.  See C<SvROK_off>.
-
-       void    sv_unref(SV* sv)
-
-=for hackers
-Found in file sv.c
-
 =item sv_unref_flags
 X<sv_unref_flags>
 
@@ -5520,33 +6264,29 @@ Upgrade an SV to a more complex form.  Generally adds a new body type to the
 SV, then copies across as much information as possible from the old body.
 You generally want to use the C<SvUPGRADE> macro wrapper. See also C<svtype>.
 
-       void    sv_upgrade(SV* sv, U32 mt)
+       void    sv_upgrade(SV* sv, svtype new_type)
 
 =for hackers
 Found in file sv.c
 
-=item sv_usepvn
-X<sv_usepvn>
-
-Tells an SV to use C<ptr> to find its string value.  Normally the string is
-stored inside the SV but sv_usepvn allows the SV to use an outside string.
-The C<ptr> should point to memory that was allocated by C<malloc>.  The
-string length, C<len>, must be supplied.  This function will realloc the
-memory pointed to by C<ptr>, so that pointer should not be freed or used by
-the programmer after giving it to sv_usepvn.  Does not handle 'set' magic.
-See C<sv_usepvn_mg>.
+=item sv_usepvn_flags
+X<sv_usepvn_flags>
 
-       void    sv_usepvn(SV* sv, char* ptr, STRLEN len)
-
-=for hackers
-Found in file sv.c
+Tells an SV to use C<ptr> to find its string value.  Normally the
+string is stored inside the SV but sv_usepvn allows the SV to use an
+outside string.  The C<ptr> should point to memory that was allocated
+by C<malloc>.  The string length, C<len>, must be supplied.  By default
+this function will realloc (i.e. move) the memory pointed to by C<ptr>,
+so that pointer should not be freed or used by the programmer after
+giving it to sv_usepvn, and neither should any pointers from "behind"
+that pointer (e.g. ptr + 1) be used.
 
-=item sv_usepvn_mg
-X<sv_usepvn_mg>
-
-Like C<sv_usepvn>, but also handles 'set' magic.
+If C<flags> & SV_SMAGIC is true, will call SvSETMAGIC. If C<flags> &
+SV_HAS_TRAILING_NUL is true, then C<ptr[len]> must be NUL, and the realloc
+will be skipped. (i.e. the buffer is actually at least 1 byte longer than
+C<len>, and already meets the requirements for storing in C<SvPVX>)
 
-       void    sv_usepvn_mg(SV *sv, char *ptr, STRLEN len)
+       void    sv_usepvn_flags(SV* sv, char* ptr, STRLEN len, U32 flags)
 
 =for hackers
 Found in file sv.c
@@ -5632,17 +6372,6 @@ use the Encode extension for that.
 =for hackers
 Found in file sv.c
 
-=item sv_uv
-X<sv_uv>
-
-A private implementation of the C<SvUVx> macro for compilers which can't
-cope with complex macro expressions. Always use the macro instead.
-
-       UV      sv_uv(SV* sv)
-
-=for hackers
-Found in file sv.c
-
 =item sv_vcatpvf
 X<sv_vcatpvf>
 
@@ -5825,7 +6554,7 @@ Found in file utf8.c
 =item is_utf8_string_loc
 X<is_utf8_string_loc>
 
-Like is_ut8_string() but stores the location of the failure (in the
+Like is_utf8_string() but stores the location of the failure (in the
 case of "utf8ness failure") or the location s+len (in the case of
 "utf8ness success") in the C<ep>.
 
@@ -5839,7 +6568,7 @@ Found in file utf8.c
 =item is_utf8_string_loclen
 X<is_utf8_string_loclen>
 
-Like is_ut8_string() but stores the location of the failure (in the
+Like is_utf8_string() but stores the location of the failure (in the
 case of "utf8ness failure") or the location s+len (in the case of
 "utf8ness success") in the C<ep>, and the number of UTF-8
 encoded characters in the C<el>.
@@ -5938,7 +6667,7 @@ of the result.
 The "swashp" is a pointer to the swash to use.
 
 Both the special and normal mappings are stored lib/unicore/To/Foo.pl,
-and loaded by SWASHGET, using lib/utf8_heavy.pl.  The special (usually,
+and loaded by SWASHNEW, using lib/utf8_heavy.pl.  The special (usually,
 but not always, a multicharacter mapping), is tried first.
 
 The "special" is a string like "utf8::ToSpecLower", which means the
@@ -6021,7 +6750,10 @@ Found in file utf8.c
 =item utf8n_to_uvchr
 X<utf8n_to_uvchr>
 
-Returns the native character value of the first character in the string C<s>
+flags
+
+Returns the native character value of the first character in the string 
+C<s>
 which is assumed to be in UTF-8 encoding; C<retlen> will be set to the
 length, in bytes, of that character.
 
@@ -6036,7 +6768,7 @@ Found in file utf8.c
 X<utf8n_to_uvuni>
 
 Bottom level UTF-8 decode routine.
-Returns the unicode code point value of the first character in the string C<s>
+Returns the Unicode code point value of the first character in the string C<s>
 which is assumed to be in UTF-8 encoding and no longer than C<curlen>;
 C<retlen> will be set to the length, in bytes, of that character.
 
@@ -6107,6 +6839,8 @@ Unlike C<bytes_to_utf8>, this over-writes the original string, and
 updates len to contain the new length.
 Returns zero on failure, setting C<len> to -1.
 
+If you need a copy of the string, see C<bytes_from_utf8>.
+
 NOTE: this function is experimental and may change or be
 removed without notice.
 
@@ -6411,11 +7145,11 @@ function.  Calling C<croak> returns control directly to Perl,
 sidestepping the normal C order of execution. See C<warn>.
 
 If you want to throw an exception object, assign the object to
-C<$@> and then pass C<Nullch> to croak():
+C<$@> and then pass C<NULL> to croak():
 
    errsv = get_sv("@", TRUE);
    sv_setsv(errsv, exception_object);
-   croak(Nullch);
+   croak(NULL);
 
        void    croak(const char* pat, ...)
 
@@ -6454,3 +7188,6 @@ Updated to be autogenerated from comments in the source by Benjamin Stuhl.
 
 perlguts(1), perlxs(1), perlxstut(1), perlintern(1)
 
+=cut
+
+ ex: set ro: