Re: [PATCH] User pragmas now accessible from B
[p5sagit/p5-mst-13.2.git] / pod / perlapi.pod
index 8dfce33..6471081 100644 (file)
@@ -1,8 +1,15 @@
+-*- 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
 
 =head1 DESCRIPTION
+X<Perl API> X<API> X<api>
 
 This file contains the documentation of the perl public API generated by
 embed.pl, specifically a listing of functions, macros, flags, and variables
@@ -23,6 +30,7 @@ The listing is alphabetical, case insensitive.
 =over 8
 
 =item GIMME
+X<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>.
@@ -34,6 +42,7 @@ Deprecated.  Use C<GIMME_V> instead.
 Found in file op.h
 
 =item GIMME_V
+X<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,
@@ -45,6 +54,7 @@ respectively.
 Found in file op.h
 
 =item G_ARRAY
+X<G_ARRAY>
 
 Used to indicate list context.  See C<GIMME_V>, C<GIMME> and
 L<perlcall>.
@@ -53,6 +63,7 @@ L<perlcall>.
 Found in file cop.h
 
 =item G_DISCARD
+X<G_DISCARD>
 
 Indicates that arguments returned from a callback should be discarded.  See
 L<perlcall>.
@@ -61,6 +72,7 @@ L<perlcall>.
 Found in file cop.h
 
 =item G_EVAL
+X<G_EVAL>
 
 Used to force a Perl C<eval> wrapper around a callback.  See
 L<perlcall>.
@@ -69,6 +81,7 @@ L<perlcall>.
 Found in file cop.h
 
 =item G_NOARGS
+X<G_NOARGS>
 
 Indicates that no arguments are being sent to a callback.  See
 L<perlcall>.
@@ -77,6 +90,7 @@ L<perlcall>.
 Found in file cop.h
 
 =item G_SCALAR
+X<G_SCALAR>
 
 Used to indicate scalar context.  See C<GIMME_V>, C<GIMME>, and
 L<perlcall>.
@@ -85,6 +99,7 @@ L<perlcall>.
 Found in file cop.h
 
 =item G_VOID
+X<G_VOID>
 
 Used to indicate void context.  See C<GIMME_V> and L<perlcall>.
 
@@ -99,6 +114,7 @@ Found in file cop.h
 =over 8
 
 =item AvFILL
+X<AvFILL>
 
 Same as C<av_len()>.  Deprecated, use C<av_len()> instead.
 
@@ -108,6 +124,7 @@ Same as C<av_len()>.  Deprecated, use C<av_len()> instead.
 Found in file av.h
 
 =item av_clear
+X<av_clear>
 
 Clears an array, making it empty.  Does not free the memory used by the
 array itself.
@@ -118,6 +135,7 @@ array itself.
 Found in file av.c
 
 =item av_delete
+X<av_delete>
 
 Deletes the element indexed by C<key> from the array.  Returns the
 deleted element. If C<flags> equals C<G_DISCARD>, the element is freed
@@ -129,6 +147,7 @@ and null is returned.
 Found in file av.c
 
 =item av_exists
+X<av_exists>
 
 Returns true if the element indexed by C<key> has been initialized.
 
@@ -141,6 +160,7 @@ C<&PL_sv_undef>.
 Found in file av.c
 
 =item av_extend
+X<av_extend>
 
 Pre-extend an array.  The C<key> is the index to which the array should be
 extended.
@@ -151,6 +171,7 @@ extended.
 Found in file av.c
 
 =item av_fetch
+X<av_fetch>
 
 Returns the SV at the specified index in the array.  The C<key> is the
 index.  If C<lval> is set then the fetch will be part of a store.  Check
@@ -165,19 +186,27 @@ more information on how to use this function on tied arrays.
 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
 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)
 
@@ -185,6 +214,7 @@ empty.
 Found in file av.c
 
 =item av_make
+X<av_make>
 
 Creates a new AV and populates it with a list of SVs.  The SVs are copied
 into the array, so they may be freed after the call to av_make.  The new AV
@@ -196,6 +226,7 @@ will have a reference count of 1.
 Found in file av.c
 
 =item av_pop
+X<av_pop>
 
 Pops an SV off the end of the array.  Returns C<&PL_sv_undef> if the array
 is empty.
@@ -206,6 +237,7 @@ is empty.
 Found in file av.c
 
 =item av_push
+X<av_push>
 
 Pushes an SV onto the end of the array.  The array will grow automatically
 to accommodate the addition.
@@ -216,6 +248,7 @@ to accommodate the addition.
 Found in file av.c
 
 =item av_shift
+X<av_shift>
 
 Shifts an SV off the beginning of the array.
 
@@ -225,6 +258,7 @@ Shifts an SV off the beginning of the array.
 Found in file av.c
 
 =item av_store
+X<av_store>
 
 Stores an SV in an array.  The array index is specified as C<key>.  The
 return value will be NULL if the operation failed or if the value did not
@@ -243,6 +277,7 @@ more information on how to use this function on tied arrays.
 Found in file av.c
 
 =item av_undef
+X<av_undef>
 
 Undefines the array.  Frees the memory used by the array itself.
 
@@ -252,6 +287,7 @@ Undefines the array.  Frees the memory used by the array itself.
 Found in file av.c
 
 =item av_unshift
+X<av_unshift>
 
 Unshift the given number of C<undef> values onto the beginning of the
 array.  The array will grow automatically to accommodate the addition.  You
@@ -263,6 +299,7 @@ must then use C<av_store> to assign values to these new elements.
 Found in file av.c
 
 =item get_av
+X<get_av>
 
 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
@@ -276,6 +313,7 @@ NOTE: the perl_ form of this function is deprecated.
 Found in file perl.c
 
 =item newAV
+X<newAV>
 
 Creates a new AV.  The reference count is set to 1.
 
@@ -285,14 +323,26 @@ Creates a new AV.  The reference count is set to 1.
 Found in file av.c
 
 =item sortsv
+X<sortsv>
 
 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>
 
-       void    sortsv(SV ** array, size_t num_elts, SVCOMPARE_t cmp)
+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
@@ -305,6 +355,7 @@ Found in file pp_sort.c
 =over 8
 
 =item call_argv
+X<call_argv>
 
 Performs a callback to the specified Perl sub.  See L<perlcall>.
 
@@ -316,6 +367,7 @@ NOTE: the perl_ form of this function is deprecated.
 Found in file perl.c
 
 =item call_method
+X<call_method>
 
 Performs a callback to the specified Perl method.  The blessed object must
 be on the stack.  See L<perlcall>.
@@ -328,6 +380,7 @@ NOTE: the perl_ form of this function is deprecated.
 Found in file perl.c
 
 =item call_pv
+X<call_pv>
 
 Performs a callback to the specified Perl sub.  See L<perlcall>.
 
@@ -339,6 +392,7 @@ NOTE: the perl_ form of this function is deprecated.
 Found in file perl.c
 
 =item call_sv
+X<call_sv>
 
 Performs a callback to the Perl sub whose name is in the SV.  See
 L<perlcall>.
@@ -351,6 +405,7 @@ NOTE: the perl_ form of this function is deprecated.
 Found in file perl.c
 
 =item ENTER
+X<ENTER>
 
 Opening bracket on a callback.  See C<LEAVE> and L<perlcall>.
 
@@ -360,6 +415,7 @@ Opening bracket on a callback.  See C<LEAVE> and L<perlcall>.
 Found in file scope.h
 
 =item eval_pv
+X<eval_pv>
 
 Tells Perl to C<eval> the given string and return an SV* result.
 
@@ -371,6 +427,7 @@ NOTE: the perl_ form of this function is deprecated.
 Found in file perl.c
 
 =item eval_sv
+X<eval_sv>
 
 Tells Perl to C<eval> the string in the SV.
 
@@ -382,6 +439,7 @@ NOTE: the perl_ form of this function is deprecated.
 Found in file perl.c
 
 =item FREETMPS
+X<FREETMPS>
 
 Closing bracket for temporaries on a callback.  See C<SAVETMPS> and
 L<perlcall>.
@@ -392,6 +450,7 @@ L<perlcall>.
 Found in file scope.h
 
 =item LEAVE
+X<LEAVE>
 
 Closing bracket on a callback.  See C<ENTER> and L<perlcall>.
 
@@ -401,6 +460,7 @@ Closing bracket on a callback.  See C<ENTER> and L<perlcall>.
 Found in file scope.h
 
 =item SAVETMPS
+X<SAVETMPS>
 
 Opening bracket for temporaries on a callback.  See C<FREETMPS> and
 L<perlcall>.
@@ -418,6 +478,7 @@ Found in file scope.h
 =over 8
 
 =item isALNUM
+X<isALNUM>
 
 Returns a boolean indicating whether the C C<char> is an ASCII alphanumeric
 character (including underscore) or digit.
@@ -428,6 +489,7 @@ character (including underscore) or digit.
 Found in file handy.h
 
 =item isALPHA
+X<isALPHA>
 
 Returns a boolean indicating whether the C C<char> is an ASCII alphabetic
 character.
@@ -438,6 +500,7 @@ character.
 Found in file handy.h
 
 =item isDIGIT
+X<isDIGIT>
 
 Returns a boolean indicating whether the C C<char> is an ASCII
 digit.
@@ -448,6 +511,7 @@ digit.
 Found in file handy.h
 
 =item isLOWER
+X<isLOWER>
 
 Returns a boolean indicating whether the C C<char> is a lowercase
 character.
@@ -458,6 +522,7 @@ character.
 Found in file handy.h
 
 =item isSPACE
+X<isSPACE>
 
 Returns a boolean indicating whether the C C<char> is whitespace.
 
@@ -467,6 +532,7 @@ Returns a boolean indicating whether the C C<char> is whitespace.
 Found in file handy.h
 
 =item isUPPER
+X<isUPPER>
 
 Returns a boolean indicating whether the C C<char> is an uppercase
 character.
@@ -477,6 +543,7 @@ character.
 Found in file handy.h
 
 =item toLOWER
+X<toLOWER>
 
 Converts the specified character to lowercase.
 
@@ -486,6 +553,7 @@ Converts the specified character to lowercase.
 Found in file handy.h
 
 =item toUPPER
+X<toUPPER>
 
 Converts the specified character to uppercase.
 
@@ -502,6 +570,7 @@ Found in file handy.h
 =over 8
 
 =item perl_clone
+X<perl_clone>
 
 Create and return a new interpreter by cloning the current one.
 
@@ -547,6 +616,7 @@ Found in file sv.c
 =over 8
 
 =item CvSTASH
+X<CvSTASH>
 
 Returns the stash of the CV.
 
@@ -556,6 +626,7 @@ Returns the stash of the CV.
 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
@@ -577,6 +648,7 @@ Found in file perl.c
 =over 8
 
 =item cv_undef
+X<cv_undef>
 
 Clear out all the active components of a CV. This can happen either
 by an explicit C<undef &foo>, or by the reference count going to zero.
@@ -589,6 +661,7 @@ children can still follow the full lexical scope chain.
 Found in file op.c
 
 =item load_module
+X<load_module>
 
 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.
@@ -605,6 +678,7 @@ method, similar to C<use Foo::Bar VERSION LIST>.
 Found in file op.c
 
 =item nothreadhook
+X<nothreadhook>
 
 Stub that provides thread hook for perl_destruct when there are
 no threads.
@@ -615,6 +689,7 @@ no threads.
 Found in file perl.c
 
 =item perl_alloc
+X<perl_alloc>
 
 Allocates a new Perl interpreter.  See L<perlembed>.
 
@@ -624,6 +699,7 @@ Allocates a new Perl interpreter.  See L<perlembed>.
 Found in file perl.c
 
 =item perl_construct
+X<perl_construct>
 
 Initializes a new Perl interpreter.  See L<perlembed>.
 
@@ -633,6 +709,7 @@ Initializes a new Perl interpreter.  See L<perlembed>.
 Found in file perl.c
 
 =item perl_destruct
+X<perl_destruct>
 
 Shuts down a Perl interpreter.  See L<perlembed>.
 
@@ -642,6 +719,7 @@ Shuts down a Perl interpreter.  See L<perlembed>.
 Found in file perl.c
 
 =item perl_free
+X<perl_free>
 
 Releases a Perl interpreter.  See L<perlembed>.
 
@@ -651,6 +729,7 @@ Releases a Perl interpreter.  See L<perlembed>.
 Found in file perl.c
 
 =item perl_parse
+X<perl_parse>
 
 Tells a Perl interpreter to parse a Perl script.  See L<perlembed>.
 
@@ -660,6 +739,7 @@ Tells a Perl interpreter to parse a Perl script.  See L<perlembed>.
 Found in file perl.c
 
 =item perl_run
+X<perl_run>
 
 Tells a Perl interpreter to run.  See L<perlembed>.
 
@@ -669,6 +749,7 @@ Tells a Perl interpreter to run.  See L<perlembed>.
 Found in file perl.c
 
 =item require_pv
+X<require_pv>
 
 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
@@ -684,287 +765,683 @@ Found in file perl.c
 
 =back
 
-=head1 Functions in file pp_pack.c
+=head1 Functions in file dump.c
 
 
 =over 8
 
-=item 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
+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
-
-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.
+=item pv_escape
+X<pv_escape>
 
-       I32     unpackstring(const char *pat, const char *patend, const char *s, const char *strend, U32 flags)
+               |const STRLEN count|const STRLEN max
+               |STRLEN const *escaped, const U32 flags
 
-=for hackers
-Found in file pp_pack.c
+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.
 
-=item unpack_str
+If flags contains PERL_PV_ESCAPE_QUOTE then any double quotes in the string
+will also be escaped.
 
-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.
+Normally the SV will be cleared before the escaped string is prepared,
+but when PERL_PV_ESCAPE_NOCLEAR is set this will not occur.
 
-       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_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.
 
-=for hackers
-Found in file pp_pack.c
+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.
 
+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. 
 
-=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
+=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 elipses. 
 
-=item 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_ELIPSES flag is set and not all characters in
+string were output then an elipses 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 elipses.
 
-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
 
-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
+=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
+=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
 
+=item sv_2pvbyte_nolen
+X<sv_2pvbyte_nolen>
 
-=back
+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.
 
-=head1 GV Functions
+Usually accessed via the C<SvPVbyte_nolen> macro.
 
-=over 8
+       char*   sv_2pvbyte_nolen(SV* sv)
 
-=item GvSV
+=for hackers
+Found in file mathoms.c
 
-Return the SV from the GV.
+=item sv_2pvutf8_nolen
+X<sv_2pvutf8_nolen>
 
-       SV*     GvSV(GV* gv)
+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 gv.h
+Found in file mathoms.c
 
-=item gv_fetchmeth
+=item sv_2pv_nolen
+X<sv_2pv_nolen>
 
-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::.
+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)
 
-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_catpvn_mg
+X<sv_catpvn_mg>
 
-       GV*     gv_fetchmeth(HV* stash, const char* name, STRLEN len, I32 level)
+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 gv.c
+Found in file mathoms.c
 
-=item gv_fetchmethod
+=item sv_catsv_mg
+X<sv_catsv_mg>
 
-See L<gv_fetchmethod_autoload>.
+Like C<sv_catsv>, but also handles 'set' magic.
 
-       GV*     gv_fetchmethod(HV* stash, const char* name)
+       void    sv_catsv_mg(SV *dstr, SV *sstr)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
-=item gv_fetchmethod_autoload
+=item sv_force_normal
+X<sv_force_normal>
 
-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.
+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>.
 
-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_force_normal(SV *sv)
 
-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_iv
+X<sv_iv>
 
-       GV*     gv_fetchmethod_autoload(HV* stash, const char* name, I32 autoload)
+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 gv.c
+Found in file mathoms.c
 
-=item gv_fetchmeth_autoload
+=item sv_nolocking
+X<sv_nolocking>
 
-Same as gv_fetchmeth(), but looks for autoloaded subroutines too.
-Returns a glob for the subroutine.
+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.
 
-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.
+"Superseded" by sv_nosharing().
 
-       GV*     gv_fetchmeth_autoload(HV* stash, const char* name, STRLEN len, I32 level)
+       void    sv_nolocking(SV *sv)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
-=item gv_stashpv
+=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 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.
+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.
 
-       HV*     gv_stashpv(const char* name, I32 create)
+"Superseded" by sv_nosharing().
+
+       void    sv_nounlocking(SV *sv)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
-=item gv_stashpvn
+=item sv_nv
+X<sv_nv>
 
-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.
+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_stashpvn(const char* name, U32 namelen, I32 create)
+       NV      sv_nv(SV* sv)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
-=item gv_stashsv
+=item sv_pv
+X<sv_pv>
 
-Returns a pointer to the stash for a specified package, which must be a
-valid UTF-8 string.  See C<gv_stashpv>.
+Use the C<SvPV_nolen> macro instead
 
-       HV*     gv_stashsv(SV* sv, I32 create)
+       char*   sv_pv(SV *sv)
 
 =for hackers
-Found in file gv.c
+Found in file mathoms.c
 
+=item sv_pvbyte
+X<sv_pvbyte>
 
-=back
+Use C<SvPVbyte_nolen> instead.
 
-=head1 Handy Values
+       char*   sv_pvbyte(SV *sv)
 
-=over 8
+=for hackers
+Found in file mathoms.c
 
-=item Nullav
+=item sv_pvbyten
+X<sv_pvbyten>
 
-Null AV pointer.
+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 av.h
+Found in file mathoms.c
 
-=item Nullch
+=item sv_pvn
+X<sv_pvn>
 
-Null character pointer.
+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 handy.h
+Found in file mathoms.c
 
-=item Nullcv
+=item sv_pvutf8
+X<sv_pvutf8>
 
-Null CV pointer.
+Use the C<SvPVutf8_nolen> macro instead
+
+       char*   sv_pvutf8(SV *sv)
 
 =for hackers
-Found in file cv.h
+Found in file mathoms.c
 
-=item Nullhv
+=item sv_pvutf8n
+X<sv_pvutf8n>
 
-Null HV pointer.
+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 hv.h
+Found in file mathoms.c
 
-=item Nullsv
+=item sv_taint
+X<sv_taint>
 
-Null SV pointer.
+Taint an SV. Use C<SvTAINTED_on> instead.
+       void    sv_taint(SV* sv)
 
 =for hackers
-Found in file handy.h
+Found in file mathoms.c
 
+=item sv_unref
+X<sv_unref>
 
-=back
+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_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 Global 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 thrdvar.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 intrpvar.h
+
+=item PL_sv_undef
+X<PL_sv_undef>
+
+This is the C<undef> SV.  Always refer to this as C<&PL_sv_undef>.
+
+       SV      PL_sv_undef
+
+=for hackers
+Found in file intrpvar.h
+
+=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>.
+
+       SV      PL_sv_yes
+
+=for hackers
+Found in file intrpvar.h
+
+
+=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.  Similarly for all the searched stashes.
+
+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.  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.
+
+       HV*     gv_stashpv(const char* name, I32 create)
+
+=for hackers
+Found in file gv.c
+
+=item gv_stashpvn
+X<gv_stashpvn>
+
+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.
+
+       HV*     gv_stashpvn(const char* name, U32 namelen, I32 create)
+
+=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, which must be a
+valid UTF-8 string.  See C<gv_stashpv>.
+
+       HV*     gv_stashsv(SV* sv, I32 create)
+
+=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>
+
+Null character pointer.
+
+=for hackers
+Found in file handy.h
+
+=item Nullcv
+X<Nullcv>
+
+Null CV pointer.
+
+=for hackers
+Found in file cv.h
+
+=item Nullhv
+X<Nullhv>
+
+Null HV pointer.
+
+=for hackers
+Found in file hv.h
+
+=item Nullsv
+X<Nullsv>
+
+Null SV pointer.
+
+=for hackers
+Found in file handy.h
+
+
+=back
 
 =head1 Hash Manipulation Functions
 
 =over 8
 
 =item get_hv
+X<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
@@ -978,6 +1455,7 @@ NOTE: the perl_ form of this function is deprecated.
 Found in file perl.c
 
 =item HEf_SVKEY
+X<HEf_SVKEY>
 
 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
@@ -987,6 +1465,7 @@ is to be expected. (For information only--not to be used).
 Found in file hv.h
 
 =item HeHASH
+X<HeHASH>
 
 Returns the computed hash stored in the hash entry.
 
@@ -996,6 +1475,7 @@ Returns the computed hash stored in the hash entry.
 Found in file hv.h
 
 =item HeKEY
+X<HeKEY>
 
 Returns the actual pointer stored in the key slot of the hash entry. The
 pointer may be either C<char*> or C<SV*>, depending on the value of
@@ -1008,6 +1488,7 @@ usually preferable for finding the value of a key.
 Found in file hv.h
 
 =item HeKLEN
+X<HeKLEN>
 
 If this is negative, and amounts to C<HEf_SVKEY>, it indicates the entry
 holds an C<SV*> key.  Otherwise, holds the actual length of the key.  Can
@@ -1020,6 +1501,7 @@ lengths.
 Found in file hv.h
 
 =item HePV
+X<HePV>
 
 Returns the key slot of the hash entry as a C<char*> value, doing any
 necessary dereferencing of possibly C<SV*> keys.  The length of the string
@@ -1037,8 +1519,9 @@ described elsewhere in this document.
 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)
@@ -1047,6 +1530,7 @@ contain an C<SV*> key.
 Found in file hv.h
 
 =item HeSVKEY_force
+X<HeSVKEY_force>
 
 Returns the key as an C<SV*>.  Will create and return a temporary mortal
 C<SV*> if the hash entry contains only a C<char*> key.
@@ -1057,6 +1541,7 @@ C<SV*> if the hash entry contains only a C<char*> key.
 Found in file hv.h
 
 =item HeSVKEY_set
+X<HeSVKEY_set>
 
 Sets the key to a given C<SV*>, taking care to set the appropriate flags to
 indicate the presence of an C<SV*> key, and returns the same
@@ -1068,6 +1553,7 @@ C<SV*>.
 Found in file hv.h
 
 =item HeVAL
+X<HeVAL>
 
 Returns the value slot (type C<SV*>) stored in the hash entry.
 
@@ -1077,6 +1563,7 @@ Returns the value slot (type C<SV*>) stored in the hash entry.
 Found in file hv.h
 
 =item HvNAME
+X<HvNAME>
 
 Returns the package name of a stash, or NULL if C<stash> isn't a stash.
 See C<SvSTASH>, C<CvSTASH>.
@@ -1087,6 +1574,7 @@ See C<SvSTASH>, C<CvSTASH>.
 Found in file hv.h
 
 =item hv_assert
+X<hv_assert>
 
 Check that a hash is in an internally consistent state.
 
@@ -1096,6 +1584,7 @@ Check that a hash is in an internally consistent state.
 Found in file hv.c
 
 =item hv_clear
+X<hv_clear>
 
 Clears a hash, making it empty.
 
@@ -1105,6 +1594,7 @@ Clears a hash, making it empty.
 Found in file hv.c
 
 =item hv_clear_placeholders
+X<hv_clear_placeholders>
 
 Clears any placeholders from a hash.  If a restricted hash has any of its keys
 marked as readonly and the key is subsequently deleted, the key is not actually
@@ -1120,6 +1610,7 @@ See Hash::Util::lock_keys() for an example of its use.
 Found in file hv.c
 
 =item hv_delete
+X<hv_delete>
 
 Deletes a key/value pair in the hash.  The value SV is removed from the
 hash and returned to the caller.  The C<klen> is the length of the key.
@@ -1132,6 +1623,7 @@ will be returned.
 Found in file hv.c
 
 =item hv_delete_ent
+X<hv_delete_ent>
 
 Deletes a key/value pair in the hash.  The value SV is removed from the
 hash and returned to the caller.  The C<flags> value will normally be zero;
@@ -1144,6 +1636,7 @@ precomputed hash value, or 0 to ask for it to be computed.
 Found in file hv.c
 
 =item hv_exists
+X<hv_exists>
 
 Returns a boolean indicating whether the specified hash key exists.  The
 C<klen> is the length of the key.
@@ -1154,6 +1647,7 @@ C<klen> is the length of the key.
 Found in file hv.c
 
 =item hv_exists_ent
+X<hv_exists_ent>
 
 Returns a boolean indicating whether the specified hash key exists. C<hash>
 can be a valid precomputed hash value, or 0 to ask for it to be
@@ -1165,6 +1659,7 @@ computed.
 Found in file hv.c
 
 =item hv_fetch
+X<hv_fetch>
 
 Returns the SV which corresponds to the specified key in the hash.  The
 C<klen> is the length of the key.  If C<lval> is set then the fetch will be
@@ -1179,7 +1674,18 @@ 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>
 
 Returns the hash entry which corresponds to the specified key in the hash.
 C<hash> must be a valid precomputed hash number for the given C<key>, or 0
@@ -1198,6 +1704,7 @@ information on how to use this function on tied hashes.
 Found in file hv.c
 
 =item hv_iterinit
+X<hv_iterinit>
 
 Prepares a starting point to traverse a hash table.  Returns the number of
 keys in the hash (i.e. the same as C<HvKEYS(tb)>).  The return value is
@@ -1214,6 +1721,7 @@ value, you can get it through the macro C<HvFILL(tb)>.
 Found in file hv.c
 
 =item hv_iterkey
+X<hv_iterkey>
 
 Returns the key from the current position of the hash iterator.  See
 C<hv_iterinit>.
@@ -1224,6 +1732,7 @@ C<hv_iterinit>.
 Found in file hv.c
 
 =item hv_iterkeysv
+X<hv_iterkeysv>
 
 Returns the key as an C<SV*> from the current position of the hash
 iterator.  The return value will always be a mortal copy of the key.  Also
@@ -1235,6 +1744,7 @@ see C<hv_iterinit>.
 Found in file hv.c
 
 =item hv_iternext
+X<hv_iternext>
 
 Returns entries from a hash iterator.  See C<hv_iterinit>.
 
@@ -1252,6 +1762,7 @@ trigger the resource deallocation.
 Found in file hv.c
 
 =item hv_iternextsv
+X<hv_iternextsv>
 
 Performs an C<hv_iternext>, C<hv_iterkey>, and C<hv_iterval> in one
 operation.
@@ -1262,6 +1773,7 @@ operation.
 Found in file hv.c
 
 =item hv_iternext_flags
+X<hv_iternext_flags>
 
 Returns entries from a hash iterator.  See C<hv_iterinit> and C<hv_iternext>.
 The C<flags> value will normally be zero; if HV_ITERNEXT_WANTPLACEHOLDERS is
@@ -1281,6 +1793,7 @@ removed without notice.
 Found in file hv.c
 
 =item hv_iterval
+X<hv_iterval>
 
 Returns the value from the current position of the hash iterator.  See
 C<hv_iterkey>.
@@ -1291,6 +1804,7 @@ C<hv_iterkey>.
 Found in file hv.c
 
 =item hv_magic
+X<hv_magic>
 
 Adds magic to a hash.  See C<sv_magic>.
 
@@ -1300,6 +1814,7 @@ Adds magic to a hash.  See C<sv_magic>.
 Found in file hv.c
 
 =item hv_scalar
+X<hv_scalar>
 
 Evaluates the hash in scalar context and returns the result. Handles magic when the hash is tied.
 
@@ -1309,6 +1824,7 @@ Evaluates the hash in scalar context and returns the result. Handles magic when
 Found in file hv.c
 
 =item hv_store
+X<hv_store>
 
 Stores an SV in a hash.  The hash key is specified as C<key> and C<klen> is
 the length of the key.  The C<hash> parameter is the precomputed hash
@@ -1335,7 +1851,19 @@ 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>
 
 Stores C<val> in a hash.  The hash key is specified as C<key>.  The C<hash>
 parameter is the precomputed hash value; if it is zero then Perl will
@@ -1366,6 +1894,7 @@ information on how to use this function on tied hashes.
 Found in file hv.c
 
 =item hv_undef
+X<hv_undef>
 
 Undefines the hash.
 
@@ -1375,10 +1904,25 @@ Undefines the hash.
 Found in file hv.c
 
 =item newHV
+X<newHV>
 
 Creates a new HV.  The reference count is set to 1.
 
-       HV*     newHV()
+       HV*     newHV()
+
+=for hackers
+Found in file hv.c
+
+=item refcounted_he_chain_2hv
+X<refcounted_he_chain_2hv>
+
+Generates an returns a C<HV *> by walking up the tree starting at the passed
+in C<struct refcounted_he *>.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+       HV *    refcounted_he_chain_2hv(const struct refcounted_he *c)
 
 =for hackers
 Found in file hv.c
@@ -1391,6 +1935,7 @@ Found in file hv.c
 =over 8
 
 =item mg_clear
+X<mg_clear>
 
 Clear something magical that the SV represents.  See C<sv_magic>.
 
@@ -1400,6 +1945,7 @@ Clear something magical that the SV represents.  See C<sv_magic>.
 Found in file mg.c
 
 =item mg_copy
+X<mg_copy>
 
 Copies the magic from one SV to another.  See C<sv_magic>.
 
@@ -1409,6 +1955,7 @@ Copies the magic from one SV to another.  See C<sv_magic>.
 Found in file mg.c
 
 =item mg_find
+X<mg_find>
 
 Finds the magic pointer for type matching the SV.  See C<sv_magic>.
 
@@ -1418,6 +1965,7 @@ Finds the magic pointer for type matching the SV.  See C<sv_magic>.
 Found in file mg.c
 
 =item mg_free
+X<mg_free>
 
 Free any magic storage used by the SV.  See C<sv_magic>.
 
@@ -1427,6 +1975,7 @@ Free any magic storage used by the SV.  See C<sv_magic>.
 Found in file mg.c
 
 =item mg_get
+X<mg_get>
 
 Do magic after a value is retrieved from the SV.  See C<sv_magic>.
 
@@ -1436,6 +1985,7 @@ Do magic after a value is retrieved from the SV.  See C<sv_magic>.
 Found in file mg.c
 
 =item mg_length
+X<mg_length>
 
 Report on the SV's length.  See C<sv_magic>.
 
@@ -1445,6 +1995,7 @@ Report on the SV's length.  See C<sv_magic>.
 Found in file mg.c
 
 =item mg_magical
+X<mg_magical>
 
 Turns on the magical status of an SV.  See C<sv_magic>.
 
@@ -1454,6 +2005,7 @@ Turns on the magical status of an SV.  See C<sv_magic>.
 Found in file mg.c
 
 =item mg_set
+X<mg_set>
 
 Do magic after a value is assigned to the SV.  See C<sv_magic>.
 
@@ -1463,6 +2015,7 @@ Do magic after a value is assigned to the SV.  See C<sv_magic>.
 Found in file mg.c
 
 =item SvGETMAGIC
+X<SvGETMAGIC>
 
 Invokes C<mg_get> on an SV if it has 'get' magic.  This macro evaluates its
 argument more than once.
@@ -1473,6 +2026,7 @@ argument more than once.
 Found in file sv.h
 
 =item SvLOCK
+X<SvLOCK>
 
 Arranges for a mutual exclusion lock to be obtained on sv if a suitable module
 has been loaded.
@@ -1483,6 +2037,7 @@ has been loaded.
 Found in file sv.h
 
 =item SvSETMAGIC
+X<SvSETMAGIC>
 
 Invokes C<mg_set> on an SV if it has 'set' magic.  This macro evaluates its
 argument more than once.
@@ -1493,6 +2048,7 @@ argument more than once.
 Found in file sv.h
 
 =item SvSetMagicSV
+X<SvSetMagicSV>
 
 Like C<SvSetSV>, but does any set magic required afterwards.
 
@@ -1502,6 +2058,7 @@ Like C<SvSetSV>, but does any set magic required afterwards.
 Found in file sv.h
 
 =item SvSetMagicSV_nosteal
+X<SvSetMagicSV_nosteal>
 
 Like C<SvSetSV_nosteal>, but does any set magic required afterwards.
 
@@ -1511,6 +2068,7 @@ Like C<SvSetSV_nosteal>, but does any set magic required afterwards.
 Found in file sv.h
 
 =item SvSetSV
+X<SvSetSV>
 
 Calls C<sv_setsv> if dsv is not the same as ssv.  May evaluate arguments
 more than once.
@@ -1521,6 +2079,7 @@ more than once.
 Found in file sv.h
 
 =item SvSetSV_nosteal
+X<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.
@@ -1531,6 +2090,7 @@ ssv. May evaluate arguments more than once.
 Found in file sv.h
 
 =item SvSHARE
+X<SvSHARE>
 
 Arranges for sv to be shared between threads if a suitable module
 has been loaded.
@@ -1541,6 +2101,7 @@ has been loaded.
 Found in file sv.h
 
 =item SvUNLOCK
+X<SvUNLOCK>
 
 Releases a mutual exclusion lock on sv if a suitable module
 has been loaded.
@@ -1558,6 +2119,7 @@ Found in file sv.h
 =over 8
 
 =item Copy
+X<Copy>
 
 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
@@ -1569,6 +2131,7 @@ the type.  May fail on overlapping copies.  See also C<Move>.
 Found in file handy.h
 
 =item CopyD
+X<CopyD>
 
 Like C<Copy> but returns dest. Useful for encouraging compilers to tail-call
 optimise.
@@ -1579,6 +2142,7 @@ optimise.
 Found in file handy.h
 
 =item Move
+X<Move>
 
 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
@@ -1590,6 +2154,7 @@ the type.  Can do overlapping moves.  See also C<Copy>.
 Found in file handy.h
 
 =item MoveD
+X<MoveD>
 
 Like C<Move> but returns dest. Useful for encouraging compilers to tail-call
 optimise.
@@ -1600,12 +2165,13 @@ optimise.
 Found in file handy.h
 
 =item Newx
+X<Newx>
 
 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.
 
@@ -1615,6 +2181,7 @@ there for use in XS modules supporting older perls.
 Found in file handy.h
 
 =item Newxc
+X<Newxc>
 
 The XSUB-writer's interface to the C C<malloc> function, with
 cast.  See also C<Newx>.
@@ -1625,6 +2192,7 @@ cast.  See also C<Newx>.
 Found in file handy.h
 
 =item Newxz
+X<Newxz>
 
 The XSUB-writer's interface to the C C<malloc> function.  The allocated
 memory is zeroed with C<memzero>.  See also C<Newx>.
@@ -1635,16 +2203,48 @@ memory is zeroed with C<memzero>.  See also C<Newx>.
 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>
 
 The XSUB-writer's interface to the C C<realloc> function.
 
@@ -1654,6 +2254,7 @@ The XSUB-writer's interface to the C C<realloc> function.
 Found in file handy.h
 
 =item Renewc
+X<Renewc>
 
 The XSUB-writer's interface to the C C<realloc> function, with
 cast.
@@ -1664,6 +2265,7 @@ cast.
 Found in file handy.h
 
 =item Safefree
+X<Safefree>
 
 The XSUB-writer's interface to the C C<free> function.
 
@@ -1673,6 +2275,7 @@ The XSUB-writer's interface to the C C<free> function.
 Found in file handy.h
 
 =item savepv
+X<savepv>
 
 Perl's version of C<strdup()>. Returns a pointer to a newly allocated
 string which is a duplicate of C<pv>. The size of the string is
@@ -1685,18 +2288,30 @@ be freed with the C<Safefree()> function.
 Found in file util.c
 
 =item savepvn
+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>
 
 A version of C<savepv()> which allocates the duplicate string in memory
 which is shared between threads.
@@ -1707,6 +2322,7 @@ which is shared between threads.
 Found in file util.c
 
 =item savesvpv
+X<savesvpv>
 
 A version of C<savepv()>/C<savepvn()> which gets the string to duplicate from
 the passed in SV using C<SvPV()>
@@ -1717,6 +2333,7 @@ the passed in SV using C<SvPV()>
 Found in file util.c
 
 =item StructCopy
+X<StructCopy>
 
 This is an architecture-independent macro to copy one structure to another.
 
@@ -1726,6 +2343,7 @@ This is an architecture-independent macro to copy one structure to another.
 Found in file handy.h
 
 =item Zero
+X<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.
@@ -1736,6 +2354,7 @@ destination, C<nitems> is the number of items, and C<type> is the type.
 Found in file handy.h
 
 =item ZeroD
+X<ZeroD>
 
 Like C<Zero> but returns dest. Useful for encouraging compilers to tail-call
 optimise.
@@ -1753,6 +2372,7 @@ Found in file handy.h
 =over 8
 
 =item fbm_compile
+X<fbm_compile>
 
 Analyses the string in order to make fast searches on it using fbm_instr()
 -- the Boyer-Moore algorithm.
@@ -1763,9 +2383,10 @@ Analyses the string in order to make fast searches on it using fbm_instr()
 Found in file util.c
 
 =item fbm_instr
+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.
 
@@ -1775,6 +2396,7 @@ then.
 Found in file util.c
 
 =item form
+X<form>
 
 Takes a sprintf-style format pattern and conventional
 (non-SV) arguments and returns the formatted string.
@@ -1795,6 +2417,7 @@ are done).
 Found in file util.c
 
 =item getcwd_sv
+X<getcwd_sv>
 
 Fill the sv with current working directory
 
@@ -1803,7 +2426,49 @@ 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>
 
 Returns a new version object based on the passed in SV:
 
@@ -1818,6 +2483,7 @@ want to upgrade the SV.
 Found in file util.c
 
 =item scan_version
+X<scan_version>
 
 Returns a pointer to the next character after the parsed
 version string, as well as upgrading the passed in SV to
@@ -1841,6 +2507,7 @@ it doesn't.
 Found in file util.c
 
 =item strEQ
+X<strEQ>
 
 Test two strings to see if they are equal.  Returns true or false.
 
@@ -1850,6 +2517,7 @@ Test two strings to see if they are equal.  Returns true or false.
 Found in file handy.h
 
 =item strGE
+X<strGE>
 
 Test two strings to see if the first, C<s1>, is greater than or equal to
 the second, C<s2>.  Returns true or false.
@@ -1860,6 +2528,7 @@ the second, C<s2>.  Returns true or false.
 Found in file handy.h
 
 =item strGT
+X<strGT>
 
 Test two strings to see if the first, C<s1>, is greater than the second,
 C<s2>.  Returns true or false.
@@ -1870,6 +2539,7 @@ C<s2>.  Returns true or false.
 Found in file handy.h
 
 =item strLE
+X<strLE>
 
 Test two strings to see if the first, C<s1>, is less than or equal to the
 second, C<s2>.  Returns true or false.
@@ -1880,6 +2550,7 @@ second, C<s2>.  Returns true or false.
 Found in file handy.h
 
 =item strLT
+X<strLT>
 
 Test two strings to see if the first, C<s1>, is less than the second,
 C<s2>.  Returns true or false.
@@ -1890,6 +2561,7 @@ C<s2>.  Returns true or false.
 Found in file handy.h
 
 =item strNE
+X<strNE>
 
 Test two strings to see if they are different.  Returns true or
 false.
@@ -1900,6 +2572,7 @@ false.
 Found in file handy.h
 
 =item strnEQ
+X<strnEQ>
 
 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
@@ -1911,6 +2584,7 @@ C<strncmp>).
 Found in file handy.h
 
 =item strnNE
+X<strnNE>
 
 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
@@ -1921,40 +2595,21 @@ wrapper for C<strncmp>).
 =for hackers
 Found in file handy.h
 
-=item 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.
-
-       void    sv_nolocking(SV *)
-
-=for hackers
-Found in file util.c
-
 =item sv_nosharing
+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.
-
-       void    sv_nosharing(SV *)
-
-=for hackers
-Found in file util.c
-
-=item 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.
+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_nounlocking(SV *)
+       void    sv_nosharing(SV *sv)
 
 =for hackers
 Found in file util.c
 
 =item upg_version
+X<upg_version>
 
 In-place upgrade of the supplied SV to a version object.
 
@@ -1968,6 +2623,7 @@ Returns a pointer to the upgraded SV.
 Found in file util.c
 
 =item vcmp
+X<vcmp>
 
 Version object aware cmp.  Both operands must already have been 
 converted into version objects.
@@ -1978,6 +2634,7 @@ converted into version objects.
 Found in file util.c
 
 =item vnormal
+X<vnormal>
 
 Accepts a version object and returns the normalized string
 representation.  Call like:
@@ -1993,6 +2650,7 @@ contained within the RV.
 Found in file util.c
 
 =item vnumify
+X<vnumify>
 
 Accepts a version object and returns the normalized floating
 point representation.  Call like:
@@ -2008,6 +2666,7 @@ contained within the RV.
 Found in file util.c
 
 =item vstringify
+X<vstringify>
 
 In order to maintain maximum compatibility with earlier versions
 of Perl, this function will return either the floating point
@@ -2019,6 +2678,70 @@ the original version contained 1 or more dots, respectively
 =for hackers
 Found in file util.c
 
+=item vverify
+X<vverify>
+
+Validates that the SV contains a valid version object.
+
+    bool vverify(SV *vobj);
+
+Note that it only confirms the bare minimum structure (so as not to get
+confused by derived classes which may contain additional hash entries):
+
+       bool    vverify(SV *vs)
+
+=for hackers
+Found in file util.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
 
@@ -2027,6 +2750,7 @@ Found in file util.c
 =over 8
 
 =item grok_bin
+X<grok_bin>
 
 converts a string representing a binary number to numeric form.
 
@@ -2055,6 +2779,7 @@ number may use '_' characters to separate digits.
 Found in file numeric.c
 
 =item grok_hex
+X<grok_hex>
 
 converts a string representing a hex number to numeric form.
 
@@ -2083,6 +2808,7 @@ number may use '_' characters to separate digits.
 Found in file numeric.c
 
 =item grok_number
+X<grok_number>
 
 Recognise (or not) a number.  The type of the number is returned
 (0 if unrecognised), otherwise it is a bit-ORed combination of
@@ -2108,6 +2834,7 @@ number is larger than a UV.
 Found in file numeric.c
 
 =item grok_numeric_radix
+X<grok_numeric_radix>
 
 Scan and skip for a numeric decimal separator (radix).
 
@@ -2117,6 +2844,7 @@ Scan and skip for a numeric decimal separator (radix).
 Found in file numeric.c
 
 =item grok_oct
+X<grok_oct>
 
 converts a string representing an octal number to numeric form.
 
@@ -2143,6 +2871,7 @@ number may use '_' characters to separate digits.
 Found in file numeric.c
 
 =item scan_bin
+X<scan_bin>
 
 For backwards compatibility. Use C<grok_bin> instead.
 
@@ -2152,6 +2881,7 @@ For backwards compatibility. Use C<grok_bin> instead.
 Found in file numeric.c
 
 =item scan_hex
+X<scan_hex>
 
 For backwards compatibility. Use C<grok_hex> instead.
 
@@ -2161,6 +2891,7 @@ For backwards compatibility. Use C<grok_hex> instead.
 Found in file numeric.c
 
 =item scan_oct
+X<scan_oct>
 
 For backwards compatibility. Use C<grok_oct> instead.
 
@@ -2177,6 +2908,7 @@ Found in file numeric.c
 =over 8
 
 =item cv_const_sv
+X<cv_const_sv>
 
 If C<cv> is a constant sub eligible for inlining. returns the constant
 value returned by the sub.  Otherwise, returns NULL.
@@ -2190,6 +2922,7 @@ L<perlsub/"Constant Functions">.
 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.
@@ -2200,8 +2933,10 @@ eligible for inlining at compile-time.
 Found in file op.c
 
 =item newXS
+X<newXS>
 
-Used by C<xsubpp> to hook up XSUBs as Perl subs.
+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
@@ -2214,6 +2949,7 @@ Found in file op.c
 =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.
@@ -2231,8 +2967,9 @@ Found in file pad.c
 =over 8
 
 =item dXCPT
+X<dXCPT>
 
-Set up neccessary local variables for exception handling.
+Set up necessary local variables for exception handling.
 See L<perlguts/"Exception Handling">.
 
                dXCPT;
@@ -2241,6 +2978,7 @@ See L<perlguts/"Exception Handling">.
 Found in file XSUB.h
 
 =item XCPT_CATCH
+X<XCPT_CATCH>
 
 Introduces a catch block.  See L<perlguts/"Exception Handling">.
 
@@ -2248,6 +2986,7 @@ Introduces a catch block.  See L<perlguts/"Exception Handling">.
 Found in file XSUB.h
 
 =item XCPT_RETHROW
+X<XCPT_RETHROW>
 
 Rethrows a previously caught exception.  See L<perlguts/"Exception Handling">.
 
@@ -2257,6 +2996,7 @@ Rethrows a previously caught exception.  See L<perlguts/"Exception Handling">.
 Found in file XSUB.h
 
 =item XCPT_TRY_END
+X<XCPT_TRY_END>
 
 Ends a try block.  See L<perlguts/"Exception Handling">.
 
@@ -2264,6 +3004,7 @@ Ends a try block.  See L<perlguts/"Exception Handling">.
 Found in file XSUB.h
 
 =item XCPT_TRY_START
+X<XCPT_TRY_START>
 
 Starts a try block.  See L<perlguts/"Exception Handling">.
 
@@ -2278,6 +3019,7 @@ Found in file XSUB.h
 =over 8
 
 =item dMARK
+X<dMARK>
 
 Declare a stack marker variable, C<mark>, for the XSUB.  See C<MARK> and
 C<dORIGMARK>.
@@ -2288,6 +3030,7 @@ C<dORIGMARK>.
 Found in file pp.h
 
 =item dORIGMARK
+X<dORIGMARK>
 
 Saves the original stack mark for the XSUB.  See C<ORIGMARK>.
 
@@ -2297,6 +3040,7 @@ Saves the original stack mark for the XSUB.  See C<ORIGMARK>.
 Found in file pp.h
 
 =item dSP
+X<dSP>
 
 Declares a local copy of perl's stack pointer for the XSUB, available via
 the C<SP> macro.  See C<SP>.
@@ -2307,6 +3051,7 @@ the C<SP> macro.  See C<SP>.
 Found in file pp.h
 
 =item EXTEND
+X<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
@@ -2318,6 +3063,7 @@ onto the stack.
 Found in file pp.h
 
 =item MARK
+X<MARK>
 
 Stack marker variable for the XSUB.  See C<dMARK>.
 
@@ -2325,6 +3071,7 @@ Stack marker variable for the XSUB.  See C<dMARK>.
 Found in file pp.h
 
 =item mPUSHi
+X<mPUSHi>
 
 Push an integer onto the stack.  The stack must have room for this element.
 Handles 'set' magic.  Does not use C<TARG>.  See also C<PUSHi>, C<mXPUSHi>
@@ -2336,6 +3083,7 @@ and C<XPUSHi>.
 Found in file pp.h
 
 =item mPUSHn
+X<mPUSHn>
 
 Push a double onto the stack.  The stack must have room for this element.
 Handles 'set' magic.  Does not use C<TARG>.  See also C<PUSHn>, C<mXPUSHn>
@@ -2347,6 +3095,7 @@ and C<XPUSHn>.
 Found in file pp.h
 
 =item mPUSHp
+X<mPUSHp>
 
 Push a string onto the stack.  The stack must have room for this element.
 The C<len> indicates the length of the string.  Handles 'set' magic.  Does
@@ -2358,6 +3107,7 @@ not use C<TARG>.  See also C<PUSHp>, C<mXPUSHp> and C<XPUSHp>.
 Found in file pp.h
 
 =item mPUSHu
+X<mPUSHu>
 
 Push an unsigned integer onto the stack.  The stack must have room for this
 element.  Handles 'set' magic.  Does not use C<TARG>.  See also C<PUSHu>,
@@ -2369,6 +3119,7 @@ C<mXPUSHu> and C<XPUSHu>.
 Found in file pp.h
 
 =item mXPUSHi
+X<mXPUSHi>
 
 Push an integer onto the stack, extending the stack if necessary.  Handles
 'set' magic.  Does not use C<TARG>.  See also C<XPUSHi>, C<mPUSHi> and
@@ -2380,6 +3131,7 @@ C<PUSHi>.
 Found in file pp.h
 
 =item mXPUSHn
+X<mXPUSHn>
 
 Push a double onto the stack, extending the stack if necessary.  Handles
 'set' magic.  Does not use C<TARG>.  See also C<XPUSHn>, C<mPUSHn> and
@@ -2391,6 +3143,7 @@ C<PUSHn>.
 Found in file pp.h
 
 =item mXPUSHp
+X<mXPUSHp>
 
 Push a string onto the stack, extending the stack if necessary.  The C<len>
 indicates the length of the string.  Handles 'set' magic.  Does not use
@@ -2402,6 +3155,7 @@ C<TARG>.  See also C<XPUSHp>, C<mPUSHp> and C<PUSHp>.
 Found in file pp.h
 
 =item mXPUSHu
+X<mXPUSHu>
 
 Push an unsigned integer onto the stack, extending the stack if necessary.
 Handles 'set' magic.  Does not use C<TARG>.  See also C<XPUSHu>, C<mPUSHu>
@@ -2413,6 +3167,7 @@ and C<PUSHu>.
 Found in file pp.h
 
 =item ORIGMARK
+X<ORIGMARK>
 
 The original stack mark for the XSUB.  See C<dORIGMARK>.
 
@@ -2420,6 +3175,7 @@ The original stack mark for the XSUB.  See C<dORIGMARK>.
 Found in file pp.h
 
 =item POPi
+X<POPi>
 
 Pops an integer off the stack.
 
@@ -2429,6 +3185,7 @@ Pops an integer off the stack.
 Found in file pp.h
 
 =item POPl
+X<POPl>
 
 Pops a long off the stack.
 
@@ -2438,6 +3195,7 @@ Pops a long off the stack.
 Found in file pp.h
 
 =item POPn
+X<POPn>
 
 Pops a double off the stack.
 
@@ -2447,6 +3205,7 @@ Pops a double off the stack.
 Found in file pp.h
 
 =item POPp
+X<POPp>
 
 Pops a string off the stack. Deprecated. New code should use POPpx.
 
@@ -2456,6 +3215,7 @@ Pops a string off the stack. Deprecated. New code should use POPpx.
 Found in file pp.h
 
 =item POPpbytex
+X<POPpbytex>
 
 Pops a string off the stack which must consist of bytes i.e. characters < 256.
 
@@ -2465,6 +3225,7 @@ Pops a string off the stack which must consist of bytes i.e. characters < 256.
 Found in file pp.h
 
 =item POPpx
+X<POPpx>
 
 Pops a string off the stack.
 
@@ -2474,6 +3235,7 @@ Pops a string off the stack.
 Found in file pp.h
 
 =item POPs
+X<POPs>
 
 Pops an SV off the stack.
 
@@ -2483,6 +3245,7 @@ Pops an SV off the stack.
 Found in file pp.h
 
 =item PUSHi
+X<PUSHi>
 
 Push an integer onto the stack.  The stack must have room for this element.
 Handles 'set' magic.  Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be
@@ -2496,6 +3259,7 @@ C<mXPUSHi>.
 Found in file pp.h
 
 =item PUSHMARK
+X<PUSHMARK>
 
 Opening bracket for arguments on a callback.  See C<PUTBACK> and
 L<perlcall>.
@@ -2506,6 +3270,7 @@ L<perlcall>.
 Found in file pp.h
 
 =item PUSHmortal
+X<PUSHmortal>
 
 Push a new mortal SV onto the stack.  The stack must have room for this
 element.  Does not handle 'set' magic.  Does not use C<TARG>.  See also
@@ -2517,6 +3282,7 @@ C<PUSHs>, C<XPUSHmortal> and C<XPUSHs>.
 Found in file pp.h
 
 =item PUSHn
+X<PUSHn>
 
 Push a double onto the stack.  The stack must have room for this element.
 Handles 'set' magic.  Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be
@@ -2530,6 +3296,7 @@ C<mXPUSHn>.
 Found in file pp.h
 
 =item PUSHp
+X<PUSHp>
 
 Push a string onto the stack.  The stack must have room for this element.
 The C<len> indicates the length of the string.  Handles 'set' magic.  Uses
@@ -2543,6 +3310,7 @@ C<mPUSHp> instead.  See also C<XPUSHp> and C<mXPUSHp>.
 Found in file pp.h
 
 =item PUSHs
+X<PUSHs>
 
 Push an SV onto the stack.  The stack must have room for this element.
 Does not handle 'set' magic.  Does not use C<TARG>.  See also C<PUSHmortal>,
@@ -2554,6 +3322,7 @@ C<XPUSHs> and C<XPUSHmortal>.
 Found in file pp.h
 
 =item PUSHu
+X<PUSHu>
 
 Push an unsigned integer onto the stack.  The stack must have room for this
 element.  Handles 'set' magic.  Uses C<TARG>, so C<dTARGET> or C<dXSTARG>
@@ -2567,6 +3336,7 @@ C<XPUSHu> and C<mXPUSHu>.
 Found in file pp.h
 
 =item PUTBACK
+X<PUTBACK>
 
 Closing bracket for XSUB arguments.  This is usually handled by C<xsubpp>.
 See C<PUSHMARK> and L<perlcall> for other uses.
@@ -2577,6 +3347,7 @@ See C<PUSHMARK> and L<perlcall> for other uses.
 Found in file pp.h
 
 =item SP
+X<SP>
 
 Stack pointer.  This is usually handled by C<xsubpp>.  See C<dSP> and
 C<SPAGAIN>.
@@ -2585,6 +3356,7 @@ C<SPAGAIN>.
 Found in file pp.h
 
 =item SPAGAIN
+X<SPAGAIN>
 
 Refetch the stack pointer.  Used after a callback.  See L<perlcall>.
 
@@ -2594,6 +3366,7 @@ Refetch the stack pointer.  Used after a callback.  See L<perlcall>.
 Found in file pp.h
 
 =item XPUSHi
+X<XPUSHi>
 
 Push an integer onto the stack, extending the stack if necessary.  Handles
 'set' magic.  Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to
@@ -2606,6 +3379,7 @@ from XSUB's - see C<mXPUSHi> instead.  See also C<PUSHi> and C<mPUSHi>.
 Found in file pp.h
 
 =item XPUSHmortal
+X<XPUSHmortal>
 
 Push a new mortal SV onto the stack, extending the stack if necessary.  Does
 not handle 'set' magic.  Does not use C<TARG>.  See also C<XPUSHs>,
@@ -2617,6 +3391,7 @@ C<PUSHmortal> and C<PUSHs>.
 Found in file pp.h
 
 =item XPUSHn
+X<XPUSHn>
 
 Push a double onto the stack, extending the stack if necessary.  Handles
 'set' magic.  Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be called to
@@ -2629,6 +3404,7 @@ from XSUB's - see C<mXPUSHn> instead.  See also C<PUSHn> and C<mPUSHn>.
 Found in file pp.h
 
 =item XPUSHp
+X<XPUSHp>
 
 Push a string onto the stack, extending the stack if necessary.  The C<len>
 indicates the length of the string.  Handles 'set' magic.  Uses C<TARG>, so
@@ -2642,6 +3418,7 @@ C<mXPUSHp> instead.  See also C<PUSHp> and C<mPUSHp>.
 Found in file pp.h
 
 =item XPUSHs
+X<XPUSHs>
 
 Push an SV onto the stack, extending the stack if necessary.  Does not
 handle 'set' magic.  Does not use C<TARG>.  See also C<XPUSHmortal>,
@@ -2653,6 +3430,7 @@ C<PUSHs> and C<PUSHmortal>.
 Found in file pp.h
 
 =item XPUSHu
+X<XPUSHu>
 
 Push an unsigned integer onto the stack, extending the stack if necessary.
 Handles 'set' magic.  Uses C<TARG>, so C<dTARGET> or C<dXSTARG> should be
@@ -2666,6 +3444,7 @@ C<mPUSHu>.
 Found in file pp.h
 
 =item XSRETURN
+X<XSRETURN>
 
 Return from XSUB, indicating number of items on the stack.  This is usually
 handled by C<xsubpp>.
@@ -2676,6 +3455,7 @@ handled by C<xsubpp>.
 Found in file XSUB.h
 
 =item XSRETURN_EMPTY
+X<XSRETURN_EMPTY>
 
 Return an empty list from an XSUB immediately.
 
@@ -2685,6 +3465,7 @@ Return an empty list from an XSUB immediately.
 Found in file XSUB.h
 
 =item XSRETURN_IV
+X<XSRETURN_IV>
 
 Return an integer from an XSUB immediately.  Uses C<XST_mIV>.
 
@@ -2694,6 +3475,7 @@ Return an integer from an XSUB immediately.  Uses C<XST_mIV>.
 Found in file XSUB.h
 
 =item XSRETURN_NO
+X<XSRETURN_NO>
 
 Return C<&PL_sv_no> from an XSUB immediately.  Uses C<XST_mNO>.
 
@@ -2703,6 +3485,7 @@ Return C<&PL_sv_no> from an XSUB immediately.  Uses C<XST_mNO>.
 Found in file XSUB.h
 
 =item XSRETURN_NV
+X<XSRETURN_NV>
 
 Return a double from an XSUB immediately.  Uses C<XST_mNV>.
 
@@ -2712,6 +3495,7 @@ Return a double from an XSUB immediately.  Uses C<XST_mNV>.
 Found in file XSUB.h
 
 =item XSRETURN_PV
+X<XSRETURN_PV>
 
 Return a copy of a string from an XSUB immediately.  Uses C<XST_mPV>.
 
@@ -2721,6 +3505,7 @@ Return a copy of a string from an XSUB immediately.  Uses C<XST_mPV>.
 Found in file XSUB.h
 
 =item XSRETURN_UNDEF
+X<XSRETURN_UNDEF>
 
 Return C<&PL_sv_undef> from an XSUB immediately.  Uses C<XST_mUNDEF>.
 
@@ -2730,6 +3515,7 @@ Return C<&PL_sv_undef> from an XSUB immediately.  Uses C<XST_mUNDEF>.
 Found in file XSUB.h
 
 =item XSRETURN_UV
+X<XSRETURN_UV>
 
 Return an integer from an XSUB immediately.  Uses C<XST_mUV>.
 
@@ -2739,6 +3525,7 @@ Return an integer from an XSUB immediately.  Uses C<XST_mUV>.
 Found in file XSUB.h
 
 =item XSRETURN_YES
+X<XSRETURN_YES>
 
 Return C<&PL_sv_yes> from an XSUB immediately.  Uses C<XST_mYES>.
 
@@ -2748,6 +3535,7 @@ Return C<&PL_sv_yes> from an XSUB immediately.  Uses C<XST_mYES>.
 Found in file XSUB.h
 
 =item XST_mIV
+X<XST_mIV>
 
 Place an integer into the specified position C<pos> on the stack.  The
 value is stored in a new mortal SV.
@@ -2758,6 +3546,7 @@ value is stored in a new mortal SV.
 Found in file XSUB.h
 
 =item XST_mNO
+X<XST_mNO>
 
 Place C<&PL_sv_no> into the specified position C<pos> on the
 stack.
@@ -2768,6 +3557,7 @@ stack.
 Found in file XSUB.h
 
 =item XST_mNV
+X<XST_mNV>
 
 Place a double into the specified position C<pos> on the stack.  The value
 is stored in a new mortal SV.
@@ -2778,6 +3568,7 @@ is stored in a new mortal SV.
 Found in file XSUB.h
 
 =item XST_mPV
+X<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.
@@ -2788,6 +3579,7 @@ The value is stored in a new mortal SV.
 Found in file XSUB.h
 
 =item XST_mUNDEF
+X<XST_mUNDEF>
 
 Place C<&PL_sv_undef> into the specified position C<pos> on the
 stack.
@@ -2798,6 +3590,7 @@ stack.
 Found in file XSUB.h
 
 =item XST_mYES
+X<XST_mYES>
 
 Place C<&PL_sv_yes> into the specified position C<pos> on the
 stack.
@@ -2815,6 +3608,7 @@ Found in file XSUB.h
 =over 8
 
 =item svtype
+X<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.
@@ -2823,6 +3617,7 @@ in the C<svtype> enum.  Test these flags with the C<SvTYPE> macro.
 Found in file sv.h
 
 =item SVt_IV
+X<SVt_IV>
 
 Integer type flag for scalars.  See C<svtype>.
 
@@ -2830,6 +3625,7 @@ Integer type flag for scalars.  See C<svtype>.
 Found in file sv.h
 
 =item SVt_NV
+X<SVt_NV>
 
 Double type flag for scalars.  See C<svtype>.
 
@@ -2837,6 +3633,7 @@ Double type flag for scalars.  See C<svtype>.
 Found in file sv.h
 
 =item SVt_PV
+X<SVt_PV>
 
 Pointer type flag for scalars.  See C<svtype>.
 
@@ -2844,6 +3641,7 @@ Pointer type flag for scalars.  See C<svtype>.
 Found in file sv.h
 
 =item SVt_PVAV
+X<SVt_PVAV>
 
 Type flag for arrays.  See C<svtype>.
 
@@ -2851,6 +3649,7 @@ Type flag for arrays.  See C<svtype>.
 Found in file sv.h
 
 =item SVt_PVCV
+X<SVt_PVCV>
 
 Type flag for code refs.  See C<svtype>.
 
@@ -2858,6 +3657,7 @@ Type flag for code refs.  See C<svtype>.
 Found in file sv.h
 
 =item SVt_PVHV
+X<SVt_PVHV>
 
 Type flag for hashes.  See C<svtype>.
 
@@ -2865,6 +3665,7 @@ Type flag for hashes.  See C<svtype>.
 Found in file sv.h
 
 =item SVt_PVMG
+X<SVt_PVMG>
 
 Type flag for blessed scalars.  See C<svtype>.
 
@@ -2879,6 +3680,7 @@ Found in file sv.h
 =over 8
 
 =item get_sv
+X<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
@@ -2891,18 +3693,8 @@ NOTE: the perl_ form of this function is deprecated.
 =for hackers
 Found in file perl.c
 
-=item 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>
 
 Creates an RV wrapper for an SV.  The reference count for the original SV is
 incremented.
@@ -2912,152 +3704,8 @@ incremented.
 =for hackers
 Found in file sv.h
 
-=item 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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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
-
-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 SvCUR
+X<SvCUR>
 
 Returns the length of the string which is in the SV.  See C<SvLEN>.
 
@@ -3067,6 +3715,7 @@ Returns the length of the string which is in the SV.  See C<SvLEN>.
 Found in file sv.h
 
 =item SvCUR_set
+X<SvCUR_set>
 
 Set the current length of the string which is in the SV.  See C<SvCUR>
 and C<SvIV_set>.
@@ -3076,17 +3725,33 @@ and C<SvIV_set>.
 =for hackers
 Found in file sv.h
 
-=item SvEND
+=item SvEND
+X<SvEND>
+
+Returns a pointer to the last character in the string which is in the SV.
+See C<SvCUR>.  Access the character as *(SvEND(sv)).
+
+       char*   SvEND(SV* sv)
+
+=for hackers
+Found in file sv.h
+
+=item SvGAMAGIC
+X<SvGAMAGIC>
 
-Returns a pointer to the last character in the string which is in the SV.
-See C<SvCUR>.  Access the character as *(SvEND(sv)).
+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*   SvEND(SV* sv)
+       char*   SvGAMAGIC(SV* sv)
 
 =for hackers
 Found in file sv.h
 
 =item SvGROW
+X<SvGROW>
 
 Expands the character buffer in the SV so that it has room for the
 indicated number of bytes (remember to reserve space for an extra trailing
@@ -3099,6 +3764,7 @@ Returns a pointer to the character buffer.
 Found in file sv.h
 
 =item SvIOK
+X<SvIOK>
 
 Returns a boolean indicating whether the SV contains an integer.
 
@@ -3108,6 +3774,7 @@ Returns a boolean indicating whether the SV contains an integer.
 Found in file sv.h
 
 =item SvIOKp
+X<SvIOKp>
 
 Returns a boolean indicating whether the SV contains an integer.  Checks
 the B<private> setting.  Use C<SvIOK>.
@@ -3118,6 +3785,7 @@ the B<private> setting.  Use C<SvIOK>.
 Found in file sv.h
 
 =item SvIOK_notUV
+X<SvIOK_notUV>
 
 Returns a boolean indicating whether the SV contains a signed integer.
 
@@ -3127,6 +3795,7 @@ Returns a boolean indicating whether the SV contains a signed integer.
 Found in file sv.h
 
 =item SvIOK_off
+X<SvIOK_off>
 
 Unsets the IV status of an SV.
 
@@ -3136,6 +3805,7 @@ Unsets the IV status of an SV.
 Found in file sv.h
 
 =item SvIOK_on
+X<SvIOK_on>
 
 Tells an SV that it is an integer.
 
@@ -3145,6 +3815,7 @@ Tells an SV that it is an integer.
 Found in file sv.h
 
 =item SvIOK_only
+X<SvIOK_only>
 
 Tells an SV that it is an integer and disables all other OK bits.
 
@@ -3154,6 +3825,7 @@ Tells an SV that it is an integer and disables all other OK bits.
 Found in file sv.h
 
 =item SvIOK_only_UV
+X<SvIOK_only_UV>
 
 Tells and SV that it is an unsigned integer and disables all other OK bits.
 
@@ -3163,6 +3835,7 @@ Tells and SV that it is an unsigned integer and disables all other OK bits.
 Found in file sv.h
 
 =item SvIOK_UV
+X<SvIOK_UV>
 
 Returns a boolean indicating whether the SV contains an unsigned integer.
 
@@ -3172,6 +3845,7 @@ Returns a boolean indicating whether the SV contains an unsigned integer.
 Found in file sv.h
 
 =item SvIsCOW
+X<SvIsCOW>
 
 Returns a boolean indicating whether the SV is Copy-On-Write. (either shared
 hash key scalars, or full Copy On Write scalars if 5.9.0 is configured for
@@ -3183,6 +3857,7 @@ COW)
 Found in file sv.h
 
 =item SvIsCOW_shared_hash
+X<SvIsCOW_shared_hash>
 
 Returns a boolean indicating whether the SV is Copy-On-Write shared hash key
 scalar.
@@ -3193,6 +3868,7 @@ scalar.
 Found in file sv.h
 
 =item SvIV
+X<SvIV>
 
 Coerces the given SV to an integer and returns it. See  C<SvIVx> for a
 version which guarantees to evaluate sv only once.
@@ -3203,6 +3879,7 @@ version which guarantees to evaluate sv only once.
 Found in file sv.h
 
 =item SvIVX
+X<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()>.
@@ -3213,6 +3890,7 @@ Only use when you are sure SvIOK is true. See also C<SvIV()>.
 Found in file sv.h
 
 =item SvIVx
+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.
@@ -3223,6 +3901,7 @@ sv only once. Use the more efficient C<SvIV> otherwise.
 Found in file sv.h
 
 =item SvIV_nomg
+X<SvIV_nomg>
 
 Like C<SvIV> but doesn't process magic.
 
@@ -3232,6 +3911,7 @@ Like C<SvIV> but doesn't process magic.
 Found in file sv.h
 
 =item SvIV_set
+X<SvIV_set>
 
 Set the value of the IV pointer in sv to val.  It is possible to perform
 the same function of this macro with an lvalue assignment to C<SvIVX>.
@@ -3244,6 +3924,7 @@ C<SvIV_set> instead of the lvalue assignment to C<SvIVX>.
 Found in file sv.h
 
 =item SvLEN
+X<SvLEN>
 
 Returns the size of the string buffer in the SV, not including any part
 attributable to C<SvOOK>.  See C<SvCUR>.
@@ -3254,6 +3935,7 @@ attributable to C<SvOOK>.  See C<SvCUR>.
 Found in file sv.h
 
 =item SvLEN_set
+X<SvLEN_set>
 
 Set the actual length of the string which is in the SV.  See C<SvIV_set>.
 
@@ -3263,6 +3945,7 @@ Set the actual length of the string which is in the SV.  See C<SvIV_set>.
 Found in file sv.h
 
 =item SvMAGIC_set
+X<SvMAGIC_set>
 
 Set the value of the MAGIC pointer in sv to val.  See C<SvIV_set>.
 
@@ -3272,6 +3955,7 @@ Set the value of the MAGIC pointer in sv to val.  See C<SvIV_set>.
 Found in file sv.h
 
 =item SvNIOK
+X<SvNIOK>
 
 Returns a boolean indicating whether the SV contains a number, integer or
 double.
@@ -3282,6 +3966,7 @@ double.
 Found in file sv.h
 
 =item SvNIOKp
+X<SvNIOKp>
 
 Returns a boolean indicating whether the SV contains a number, integer or
 double.  Checks the B<private> setting.  Use C<SvNIOK>.
@@ -3292,6 +3977,7 @@ double.  Checks the B<private> setting.  Use C<SvNIOK>.
 Found in file sv.h
 
 =item SvNIOK_off
+X<SvNIOK_off>
 
 Unsets the NV/IV status of an SV.
 
@@ -3301,6 +3987,7 @@ Unsets the NV/IV status of an SV.
 Found in file sv.h
 
 =item SvNOK
+X<SvNOK>
 
 Returns a boolean indicating whether the SV contains a double.
 
@@ -3310,6 +3997,7 @@ Returns a boolean indicating whether the SV contains a double.
 Found in file sv.h
 
 =item SvNOKp
+X<SvNOKp>
 
 Returns a boolean indicating whether the SV contains a double.  Checks the
 B<private> setting.  Use C<SvNOK>.
@@ -3320,6 +4008,7 @@ B<private> setting.  Use C<SvNOK>.
 Found in file sv.h
 
 =item SvNOK_off
+X<SvNOK_off>
 
 Unsets the NV status of an SV.
 
@@ -3329,6 +4018,7 @@ Unsets the NV status of an SV.
 Found in file sv.h
 
 =item SvNOK_on
+X<SvNOK_on>
 
 Tells an SV that it is a double.
 
@@ -3338,6 +4028,7 @@ Tells an SV that it is a double.
 Found in file sv.h
 
 =item SvNOK_only
+X<SvNOK_only>
 
 Tells an SV that it is a double and disables all other OK bits.
 
@@ -3347,6 +4038,7 @@ Tells an SV that it is a double and disables all other OK bits.
 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
 which guarantees to evaluate sv only once.
@@ -3357,6 +4049,7 @@ which guarantees to evaluate sv only once.
 Found in file sv.h
 
 =item SvNVX
+X<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()>.
@@ -3367,6 +4060,7 @@ Only use when you are sure SvNOK is true. See also C<SvNV()>.
 Found in file sv.h
 
 =item SvNVx
+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.
@@ -3377,6 +4071,7 @@ sv only once. Use the more efficient C<SvNV> otherwise.
 Found in file sv.h
 
 =item SvNV_set
+X<SvNV_set>
 
 Set the value of the NV pointer in sv to val.  See C<SvIV_set>.
 
@@ -3386,6 +4081,7 @@ Set the value of the NV pointer in sv to val.  See C<SvIV_set>.
 Found in file sv.h
 
 =item SvOK
+X<SvOK>
 
 Returns a boolean indicating whether the value is an SV. It also tells
 whether the value is defined or not.
@@ -3396,6 +4092,7 @@ whether the value is defined or not.
 Found in file sv.h
 
 =item SvOOK
+X<SvOOK>
 
 Returns a boolean indicating whether the SvIVX is a valid offset value for
 the SvPVX.  This hack is used internally to speed up removal of characters
@@ -3408,6 +4105,7 @@ allocated string buffer is really (SvPVX - SvIVX).
 Found in file sv.h
 
 =item SvPOK
+X<SvPOK>
 
 Returns a boolean indicating whether the SV contains a character
 string.
@@ -3418,6 +4116,7 @@ string.
 Found in file sv.h
 
 =item SvPOKp
+X<SvPOKp>
 
 Returns a boolean indicating whether the SV contains a character string.
 Checks the B<private> setting.  Use C<SvPOK>.
@@ -3428,6 +4127,7 @@ Checks the B<private> setting.  Use C<SvPOK>.
 Found in file sv.h
 
 =item SvPOK_off
+X<SvPOK_off>
 
 Unsets the PV status of an SV.
 
@@ -3437,6 +4137,7 @@ Unsets the PV status of an SV.
 Found in file sv.h
 
 =item SvPOK_on
+X<SvPOK_on>
 
 Tells an SV that it is a string.
 
@@ -3446,6 +4147,7 @@ Tells an SV that it is a string.
 Found in file sv.h
 
 =item SvPOK_only
+X<SvPOK_only>
 
 Tells an SV that it is a string and disables all other OK bits.
 Will also turn off the UTF-8 status.
@@ -3456,6 +4158,7 @@ Will also turn off the UTF-8 status.
 Found in file sv.h
 
 =item SvPOK_only_UTF8
+X<SvPOK_only_UTF8>
 
 Tells an SV that it is a string and disables all other OK bits,
 and leaves the UTF-8 status as it was.
@@ -3466,6 +4169,7 @@ and leaves the UTF-8 status as it was.
 Found in file sv.h
 
 =item SvPV
+X<SvPV>
 
 Returns a pointer to the string in the SV, or a stringified form of
 the SV if the SV does not contain a string.  The SV may cache the
@@ -3478,6 +4182,7 @@ C<SvPVx> for a version which guarantees to evaluate sv only once.
 Found in file sv.h
 
 =item SvPVbyte
+X<SvPVbyte>
 
 Like C<SvPV>, but converts sv to byte representation first if necessary.
 
@@ -3487,6 +4192,7 @@ Like C<SvPV>, but converts sv to byte representation first if necessary.
 Found in file sv.h
 
 =item SvPVbytex
+X<SvPVbytex>
 
 Like C<SvPV>, but converts sv to byte representation first if necessary.
 Guarantees to evaluate sv only once; use the more efficient C<SvPVbyte>
@@ -3498,6 +4204,7 @@ otherwise.
 Found in file sv.h
 
 =item SvPVbytex_force
+X<SvPVbytex_force>
 
 Like C<SvPV_force>, but converts sv to byte representation first if necessary.
 Guarantees to evaluate sv only once; use the more efficient C<SvPVbyte_force>
@@ -3509,6 +4216,7 @@ otherwise.
 Found in file sv.h
 
 =item SvPVbyte_force
+X<SvPVbyte_force>
 
 Like C<SvPV_force>, but converts sv to byte representation first if necessary.
 
@@ -3518,6 +4226,7 @@ Like C<SvPV_force>, but converts sv to byte representation first if necessary.
 Found in file sv.h
 
 =item SvPVbyte_nolen
+X<SvPVbyte_nolen>
 
 Like C<SvPV_nolen>, but converts sv to byte representation first if necessary.
 
@@ -3527,6 +4236,7 @@ Like C<SvPV_nolen>, but converts sv to byte representation first if necessary.
 Found in file sv.h
 
 =item SvPVutf8
+X<SvPVutf8>
 
 Like C<SvPV>, but converts sv to utf8 first if necessary.
 
@@ -3536,6 +4246,7 @@ Like C<SvPV>, but converts sv to utf8 first if necessary.
 Found in file sv.h
 
 =item SvPVutf8x
+X<SvPVutf8x>
 
 Like C<SvPV>, but converts sv to utf8 first if necessary.
 Guarantees to evaluate sv only once; use the more efficient C<SvPVutf8>
@@ -3547,6 +4258,7 @@ otherwise.
 Found in file sv.h
 
 =item SvPVutf8x_force
+X<SvPVutf8x_force>
 
 Like C<SvPV_force>, but converts sv to utf8 first if necessary.
 Guarantees to evaluate sv only once; use the more efficient C<SvPVutf8_force>
@@ -3558,6 +4270,7 @@ otherwise.
 Found in file sv.h
 
 =item SvPVutf8_force
+X<SvPVutf8_force>
 
 Like C<SvPV_force>, but converts sv to utf8 first if necessary.
 
@@ -3567,6 +4280,7 @@ Like C<SvPV_force>, but converts sv to utf8 first if necessary.
 Found in file sv.h
 
 =item SvPVutf8_nolen
+X<SvPVutf8_nolen>
 
 Like C<SvPV_nolen>, but converts sv to utf8 first if necessary.
 
@@ -3576,6 +4290,7 @@ Like C<SvPV_nolen>, but converts sv to utf8 first if necessary.
 Found in file sv.h
 
 =item SvPVX
+X<SvPVX>
 
 Returns a pointer to the physical string in the SV.  The SV must contain a
 string.
@@ -3586,6 +4301,7 @@ string.
 Found in file sv.h
 
 =item SvPVx
+X<SvPVx>
 
 A version of C<SvPV> which guarantees to evaluate sv only once.
 
@@ -3595,6 +4311,7 @@ A version of C<SvPV> which guarantees to evaluate sv only once.
 Found in file sv.h
 
 =item SvPV_force
+X<SvPV_force>
 
 Like C<SvPV> but will force the SV into containing just a string
 (C<SvPOK_only>).  You want force if you are going to update the C<SvPVX>
@@ -3606,6 +4323,7 @@ directly.
 Found in file sv.h
 
 =item SvPV_force_nomg
+X<SvPV_force_nomg>
 
 Like C<SvPV> but will force the SV into containing just a string
 (C<SvPOK_only>).  You want force if you are going to update the C<SvPVX>
@@ -3617,6 +4335,7 @@ directly. Doesn't process magic.
 Found in file sv.h
 
 =item SvPV_nolen
+X<SvPV_nolen>
 
 Returns a pointer to the string in the SV, or a stringified form of
 the SV if the SV does not contain a string.  The SV may cache the
@@ -3628,6 +4347,7 @@ stringified form becoming C<SvPOK>.  Handles 'get' magic.
 Found in file sv.h
 
 =item SvPV_nomg
+X<SvPV_nomg>
 
 Like C<SvPV> but doesn't process magic.
 
@@ -3637,6 +4357,7 @@ Like C<SvPV> but doesn't process magic.
 Found in file sv.h
 
 =item SvPV_set
+X<SvPV_set>
 
 Set the value of the PV pointer in sv to val.  See C<SvIV_set>.
 
@@ -3646,6 +4367,7 @@ Set the value of the PV pointer in sv to val.  See C<SvIV_set>.
 Found in file sv.h
 
 =item SvREFCNT
+X<SvREFCNT>
 
 Returns the value of the object's reference count.
 
@@ -3655,6 +4377,7 @@ Returns the value of the object's reference count.
 Found in file sv.h
 
 =item SvREFCNT_dec
+X<SvREFCNT_dec>
 
 Decrements the reference count of the given SV.
 
@@ -3664,15 +4387,104 @@ Decrements the reference count of the given SV.
 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 simple variables, not
+expressions or pointer dereferences.  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>
+
+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_inc_void
+X<SvREFCNT_inc_void>
+
+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_inc_void(SV* sv)
+
+=for hackers
+Found in file sv.h
+
+=item SvREFCNT_inc_void_NN
+X<SvREFCNT_inc_void_NN>
+
+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_void_NN(SV* sv)
+
+=for hackers
+Found in file sv.h
+
 =item SvROK
+X<SvROK>
 
 Tests if the SV is an RV.
 
@@ -3682,6 +4494,7 @@ Tests if the SV is an RV.
 Found in file sv.h
 
 =item SvROK_off
+X<SvROK_off>
 
 Unsets the RV status of an SV.
 
@@ -3691,6 +4504,7 @@ Unsets the RV status of an SV.
 Found in file sv.h
 
 =item SvROK_on
+X<SvROK_on>
 
 Tells an SV that it is an RV.
 
@@ -3700,6 +4514,7 @@ Tells an SV that it is an RV.
 Found in file sv.h
 
 =item SvRV
+X<SvRV>
 
 Dereferences an RV to return the SV.
 
@@ -3709,6 +4524,7 @@ Dereferences an RV to return the SV.
 Found in file sv.h
 
 =item SvRV_set
+X<SvRV_set>
 
 Set the value of the RV pointer in sv to val.  See C<SvIV_set>.
 
@@ -3718,6 +4534,7 @@ Set the value of the RV pointer in sv to val.  See C<SvIV_set>.
 Found in file sv.h
 
 =item SvSTASH
+X<SvSTASH>
 
 Returns the stash of the SV.
 
@@ -3727,15 +4544,17 @@ Returns the stash of the SV.
 Found in file sv.h
 
 =item SvSTASH_set
+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
 
 =item SvTAINT
+X<SvTAINT>
 
 Taints an SV if tainting is enabled.
 
@@ -3745,6 +4564,7 @@ Taints an SV if tainting is enabled.
 Found in file sv.h
 
 =item SvTAINTED
+X<SvTAINTED>
 
 Checks to see if an SV is tainted. Returns TRUE if it is, FALSE if
 not.
@@ -3755,6 +4575,7 @@ not.
 Found in file sv.h
 
 =item SvTAINTED_off
+X<SvTAINTED_off>
 
 Untaints an SV. Be I<very> careful with this routine, as it short-circuits
 some of Perl's fundamental security features. XS module authors should not
@@ -3769,6 +4590,7 @@ untainting variables.
 Found in file sv.h
 
 =item SvTAINTED_on
+X<SvTAINTED_on>
 
 Marks an SV as tainted if tainting is enabled.
 
@@ -3778,6 +4600,7 @@ Marks an SV as tainted if tainting is enabled.
 Found in file sv.h
 
 =item SvTRUE
+X<SvTRUE>
 
 Returns a boolean indicating whether Perl would evaluate the SV as true or
 false, defined or undefined.  Does not handle 'get' magic.
@@ -3788,6 +4611,7 @@ false, defined or undefined.  Does not handle 'get' magic.
 Found in file sv.h
 
 =item SvTYPE
+X<SvTYPE>
 
 Returns the type of the SV.  See C<svtype>.
 
@@ -3797,6 +4621,7 @@ Returns the type of the SV.  See C<svtype>.
 Found in file sv.h
 
 =item SvUOK
+X<SvUOK>
 
 Returns a boolean indicating whether the SV contains an unsigned integer.
 
@@ -3806,6 +4631,7 @@ Returns a boolean indicating whether the SV contains an unsigned integer.
 Found in file sv.h
 
 =item SvUPGRADE
+X<SvUPGRADE>
 
 Used to upgrade an SV to a more complex form.  Uses C<sv_upgrade> to
 perform the upgrade if necessary.  See C<svtype>.
@@ -3816,6 +4642,7 @@ perform the upgrade if necessary.  See C<svtype>.
 Found in file sv.h
 
 =item SvUTF8
+X<SvUTF8>
 
 Returns a boolean indicating whether the SV contains UTF-8 encoded data.
 
@@ -3825,6 +4652,7 @@ Returns a boolean indicating whether the SV contains UTF-8 encoded data.
 Found in file sv.h
 
 =item SvUTF8_off
+X<SvUTF8_off>
 
 Unsets the UTF-8 status of an SV.
 
@@ -3834,6 +4662,7 @@ Unsets the UTF-8 status of an SV.
 Found in file sv.h
 
 =item SvUTF8_on
+X<SvUTF8_on>
 
 Turn on the UTF-8 status of an SV (the data is not changed, just the flag).
 Do not use frivolously.
@@ -3844,6 +4673,7 @@ Do not use frivolously.
 Found in file sv.h
 
 =item SvUV
+X<SvUV>
 
 Coerces the given SV to an unsigned integer and returns it.  See C<SvUVx>
 for a version which guarantees to evaluate sv only once.
@@ -3854,6 +4684,7 @@ for a version which guarantees to evaluate sv only once.
 Found in file sv.h
 
 =item SvUVX
+X<SvUVX>
 
 Returns the raw value in the SV's UV slot, without checks or conversions.
 Only use when you are sure SvIOK is true. See also C<SvUV()>.
@@ -3864,6 +4695,7 @@ Only use when you are sure SvIOK is true. See also C<SvUV()>.
 Found in file sv.h
 
 =item SvUVx
+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.
@@ -3874,33 +4706,291 @@ evaluate sv only once. Use the more efficient C<SvUV> otherwise.
 Found in file sv.h
 
 =item SvUV_nomg
+X<SvUV_nomg>
 
 Like C<SvUV> but doesn't process magic.
 
        UV      SvUV_nomg(SV* sv)
 
 =for hackers
-Found in file sv.h
+Found in file sv.h
+
+=item SvUV_set
+X<SvUV_set>
+
+Set the value of the UV pointer in sv to val.  See C<SvIV_set>.
+
+       void    SvUV_set(SV* sv, UV val)
+
+=for hackers
+Found in file sv.h
+
+=item SvVOK
+X<SvVOK>
+
+Returns a boolean indicating whether the SV contains a v-string.
+
+       bool    SvVOK(SV* sv)
+
+=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.  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 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 SvUV_set
+=item newSVsv
+X<newSVsv>
 
-Set the value of the UV pointer in sv to val.  See C<SvIV_set>.
+Creates a new SV which is an exact duplicate of the original SV.
+(Uses C<sv_setsv>).
 
-       void    SvUV_set(SV* sv, UV val)
+       SV*     newSVsv(SV* old)
 
 =for hackers
-Found in file sv.h
+Found in file sv.c
 
-=item SvVOK
+=item newSVuv
+X<newSVuv>
 
-Returns a boolean indicating whether the SV contains a v-string.
+Creates a new SV and copies an unsigned integer into it.
+The reference count for the SV is set to 1.
 
-       bool    SvVOK(SV* sv)
+       SV*     newSVuv(UV u)
 
 =for hackers
-Found in file sv.h
+Found in file sv.c
 
 =item sv_2bool
+X<sv_2bool>
 
 This function is only called on magical items, and is only used by
 sv_true() or its macro equivalent.
@@ -3911,9 +5001,11 @@ sv_true() or its macro equivalent.
 Found in file sv.c
 
 =item sv_2cv
+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)
 
@@ -3921,6 +5013,7 @@ possible to set C<*st> and C<*gvp> to the stash and GV associated with it.
 Found in file sv.c
 
 =item sv_2io
+X<sv_2io>
 
 Using various gambits, try to get an IO from an SV: the IO slot if its a
 GV; or the recursive result if we're an RV; or the IO slot of the symbol
@@ -3932,6 +5025,7 @@ named after the PV if we're a string.
 Found in file sv.c
 
 =item sv_2iv_flags
+X<sv_2iv_flags>
 
 Return the integer value of an SV, doing any necessary string
 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
@@ -3943,6 +5037,7 @@ Normally used via the C<SvIV(sv)> and C<SvIVx(sv)> macros.
 Found in file sv.c
 
 =item sv_2mortal
+X<sv_2mortal>
 
 Marks an existing SV as mortal.  The SV will be destroyed "soon", either
 by an explicit call to FREETMPS, or by an implicit call at places such as
@@ -3956,6 +5051,7 @@ and C<sv_mortalcopy>.
 Found in file sv.c
 
 =item sv_2nv
+X<sv_2nv>
 
 Return the num value of an SV, doing any necessary string or integer
 conversion, magic etc. Normally used via the C<SvNV(sv)> and C<SvNVx(sv)>
@@ -3967,6 +5063,7 @@ 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
@@ -3979,19 +5076,8 @@ Usually accessed via the C<SvPVbyte> macro.
 =for hackers
 Found in file sv.c
 
-=item sv_2pvbyte_nolen
-
-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.
-
-Usually accessed via the C<SvPVbyte_nolen> macro.
-
-       char*   sv_2pvbyte_nolen(SV* sv)
-
-=for hackers
-Found in file sv.c
-
 =item sv_2pvutf8
+X<sv_2pvutf8>
 
 Return a pointer to the UTF-8-encoded representation of the SV, and set *lp
 to its length.  May cause the SV to be upgraded to UTF-8 as a side-effect.
@@ -4003,19 +5089,8 @@ Usually accessed via the C<SvPVutf8> macro.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 Returns a pointer to the string value of an SV, and sets *lp to its length.
 If flags includes SV_GMAGIC, does an mg_get() first. Coerces sv to a string
@@ -4028,16 +5103,8 @@ usually end up here too.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 Return the unsigned integer value of an SV, doing any necessary string
 conversion.  If flags includes SV_GMAGIC, does an mg_get() first.
@@ -4049,6 +5116,7 @@ Normally used via the C<SvUV(sv)> and C<SvUVx(sv)> macros.
 Found in file sv.c
 
 =item sv_backoff
+X<sv_backoff>
 
 Remove any string offset. You should normally use the C<SvOOK_off> macro
 wrapper instead.
@@ -4059,6 +5127,7 @@ wrapper instead.
 Found in file sv.c
 
 =item sv_bless
+X<sv_bless>
 
 Blesses an SV into a specified package.  The SV must be an RV.  The package
 must be designated by its stash (see C<gv_stashpv()>).  The reference count
@@ -4070,6 +5139,7 @@ of the SV is unaffected.
 Found in file sv.c
 
 =item sv_catpv
+X<sv_catpv>
 
 Concatenates the string onto the end of the string which is in the SV.
 If the SV has the UTF-8 status set, then the bytes appended should be
@@ -4081,6 +5151,7 @@ valid UTF-8.  Handles 'get' magic, but not 'set' magic.  See C<sv_catpv_mg>.
 Found in file sv.c
 
 =item sv_catpvf
+X<sv_catpvf>
 
 Processes its arguments like C<sprintf> and appends the formatted
 output to an SV.  If the appended data contains "wide" characters
@@ -4096,6 +5167,7 @@ valid UTF-8; if the original SV was bytes, the pattern should be too.
 Found in file sv.c
 
 =item sv_catpvf_mg
+X<sv_catpvf_mg>
 
 Like C<sv_catpvf>, but also handles 'set' magic.
 
@@ -4105,6 +5177,7 @@ Like C<sv_catpvf>, but also handles 'set' magic.
 Found in file sv.c
 
 =item sv_catpvn
+X<sv_catpvn>
 
 Concatenates the string onto the end of the string which is in the SV.  The
 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
@@ -4117,6 +5190,7 @@ Handles 'get' magic, but not 'set' magic.  See C<sv_catpvn_mg>.
 Found in file sv.c
 
 =item sv_catpvn_flags
+X<sv_catpvn_flags>
 
 Concatenates the string onto the end of the string which is in the SV.  The
 C<len> indicates number of bytes to copy.  If the SV has the UTF-8
@@ -4130,25 +5204,18 @@ in terms of this function.
 =for hackers
 Found in file sv.c
 
-=item 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
+=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>
 
 Like C<sv_catpv>, but also handles 'set' magic.
 
@@ -4158,6 +5225,7 @@ Like C<sv_catpv>, but also handles 'set' magic.
 Found in file sv.c
 
 =item sv_catsv
+X<sv_catsv>
 
 Concatenates the string from SV C<ssv> onto the end of the string in
 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  Handles 'get' magic, but
@@ -4169,6 +5237,7 @@ not 'set' magic.  See C<sv_catsv_mg>.
 Found in file sv.c
 
 =item sv_catsv_flags
+X<sv_catsv_flags>
 
 Concatenates the string from SV C<ssv> onto the end of the string in
 SV C<dsv>.  Modifies C<dsv> but not C<ssv>.  If C<flags> has C<SV_GMAGIC>
@@ -4180,25 +5249,8 @@ and C<sv_catsv_nomg> are implemented in terms of this function.
 =for hackers
 Found in file sv.c
 
-=item 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
-
-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>
 
 Efficient removal of characters from the beginning of the string buffer.
 SvPOK(sv) must be true and the C<ptr> must be a pointer to somewhere inside
@@ -4213,6 +5265,7 @@ refer to the same chunk of data.
 Found in file sv.c
 
 =item sv_clear
+X<sv_clear>
 
 Clear an SV: call any destructors, free up any memory used by the body,
 and free the body itself. The SV's head is I<not> freed, although
@@ -4228,6 +5281,7 @@ instead.
 Found in file sv.c
 
 =item sv_cmp
+X<sv_cmp>
 
 Compares the strings in two SVs.  Returns -1, 0, or 1 indicating whether the
 string in C<sv1> is less than, equal to, or greater than the string in
@@ -4240,6 +5294,7 @@ coerce its args to strings if necessary.  See also C<sv_cmp_locale>.
 Found in file sv.c
 
 =item sv_cmp_locale
+X<sv_cmp_locale>
 
 Compares the strings in two SVs in a locale-aware manner. Is UTF-8 and
 'use bytes' aware, handles get magic, and will coerce its args to strings
@@ -4251,6 +5306,7 @@ if necessary.  See also C<sv_cmp_locale>.  See also C<sv_cmp>.
 Found in file sv.c
 
 =item sv_collxfrm
+X<sv_collxfrm>
 
 Add Collate Transform magic to an SV if it doesn't already have it.
 
@@ -4265,6 +5321,7 @@ settings.
 Found in file sv.c
 
 =item sv_copypv
+X<sv_copypv>
 
 Copies a stringified representation of the source SV into the
 destination SV.  Automatically performs any necessary mg_get and
@@ -4280,6 +5337,7 @@ would lose the UTF-8'ness of the PV.
 Found in file sv.c
 
 =item sv_dec
+X<sv_dec>
 
 Auto-decrement of the value in the SV, doing string to numeric conversion
 if necessary. Handles 'get' magic.
@@ -4289,18 +5347,8 @@ if necessary. Handles 'get' magic.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 Returns a boolean indicating whether the strings in the two SVs are
 identical. Is UTF-8 and 'use bytes' aware, handles get magic, and will
@@ -4311,18 +5359,8 @@ coerce its args to strings if necessary.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 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
@@ -4340,6 +5378,7 @@ with flags set to 0.
 Found in file sv.c
 
 =item sv_free
+X<sv_free>
 
 Decrement an SV's reference count, and if it drops to zero, call
 C<sv_clear> to invoke destructors and free up any memory used by
@@ -4352,6 +5391,7 @@ Normally called via a wrapper macro C<SvREFCNT_dec>.
 Found in file sv.c
 
 =item sv_gets
+X<sv_gets>
 
 Get a line from the filehandle and store it into the SV, optionally
 appending to the currently-stored string.
@@ -4362,6 +5402,7 @@ appending to the currently-stored string.
 Found in file sv.c
 
 =item sv_grow
+X<sv_grow>
 
 Expands the character buffer in the SV.  If necessary, uses C<sv_unref> and
 upgrades the SV to C<SVt_PV>.  Returns a pointer to the character buffer.
@@ -4373,6 +5414,7 @@ Use the C<SvGROW> wrapper instead.
 Found in file sv.c
 
 =item sv_inc
+X<sv_inc>
 
 Auto-increment of the value in the SV, doing string to numeric conversion
 if necessary. Handles 'get' magic.
@@ -4383,6 +5425,7 @@ if necessary. Handles 'get' magic.
 Found in file sv.c
 
 =item sv_insert
+X<sv_insert>
 
 Inserts a string at the specified offset/length within the SV. Similar to
 the Perl substr() function.
@@ -4393,6 +5436,7 @@ the Perl substr() function.
 Found in file sv.c
 
 =item sv_isa
+X<sv_isa>
 
 Returns a boolean indicating whether the SV is blessed into the specified
 class.  This does not check for subtypes; use C<sv_derived_from> to verify
@@ -4404,6 +5448,7 @@ an inheritance relationship.
 Found in file sv.c
 
 =item sv_isobject
+X<sv_isobject>
 
 Returns a boolean indicating whether the SV is an RV pointing to a blessed
 object.  If the SV is not an RV, or if the object is not blessed, then this
@@ -4414,17 +5459,8 @@ will return false.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 Returns the length of the string in the SV. Handles magic and type
 coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
@@ -4435,6 +5471,7 @@ coercion.  See also C<SvCUR>, which gives raw access to the xpv_cur slot.
 Found in file sv.c
 
 =item sv_len_utf8
+X<sv_len_utf8>
 
 Returns the number of characters in the string in an SV, counting wide
 UTF-8 bytes as a single character. Handles magic and type coercion.
@@ -4445,6 +5482,7 @@ UTF-8 bytes as a single character. Handles magic and type coercion.
 Found in file sv.c
 
 =item sv_magic
+X<sv_magic>
 
 Adds magic to an SV. First upgrades C<sv> to type C<SVt_PVMG> if necessary,
 then adds a new magic item of type C<how> to the head of the magic list.
@@ -4461,6 +5499,7 @@ to add more than one instance of the same 'how'.
 Found in file sv.c
 
 =item sv_magicext
+X<sv_magicext>
 
 Adds magic to an SV, upgrading it if necessary. Applies the
 supplied vtable and returns a pointer to the magic added.
@@ -4476,12 +5515,13 @@ to contain an C<SV*> and is stored as-is with its REFCNT incremented.
 
 (This is now used as a subroutine by C<sv_magic>.)
 
-       MAGIC * sv_magicext(SV* sv, SV* obj, int how, const MGVTBL *vtbl, const char* name, I32 namlen)
+       MAGIC * sv_magicext(SV* sv, SV* obj, int how, MGVTBL *vtbl, const char* name, I32 namlen)
 
 =for hackers
 Found in file sv.c
 
 =item sv_mortalcopy
+X<sv_mortalcopy>
 
 Creates a new SV which is a copy of the original SV (using C<sv_setsv>).
 The new SV is marked as mortal. It will be destroyed "soon", either by an
@@ -4494,6 +5534,7 @@ statement boundaries.  See also C<sv_newmortal> and C<sv_2mortal>.
 Found in file sv.c
 
 =item sv_newmortal
+X<sv_newmortal>
 
 Creates a new null SV which is mortal.  The reference count of the SV is
 set to 1. It will be destroyed "soon", either by an explicit call to
@@ -4506,6 +5547,7 @@ See also C<sv_mortalcopy> and C<sv_2mortal>.
 Found in file sv.c
 
 =item sv_newref
+X<sv_newref>
 
 Increment an SV's reference count. Use the C<SvREFCNT_inc()> wrapper
 instead.
@@ -4515,17 +5557,8 @@ instead.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 Converts the value pointed to by offsetp from a count of bytes from the
 start of the string, to a count of the equivalent number of UTF-8 chars.
@@ -4537,6 +5570,7 @@ Handles magic and type coercion.
 Found in file sv.c
 
 =item sv_pos_u2b
+X<sv_pos_u2b>
 
 Converts the value pointed to by offsetp from a count of UTF-8 chars from
 the start of the string, to a count of the equivalent number of bytes; if
@@ -4549,57 +5583,18 @@ type coercion.
 =for hackers
 Found in file sv.c
 
-=item sv_pv
-
-Use the C<SvPV_nolen> macro instead
-
-       char*   sv_pv(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item sv_pvbyte
-
-Use C<SvPVbyte_nolen> instead.
-
-       char*   sv_pvbyte(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item 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
-
-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>
 
 Get a sensible string out of the SV somehow.
 A private implementation of the C<SvPV_force> macro for compilers which
@@ -4611,6 +5606,7 @@ can't cope with complex macro expressions. Always use the macro instead.
 Found in file sv.c
 
 =item sv_pvn_force_flags
+X<sv_pvn_force_flags>
 
 Get a sensible string out of the SV somehow.
 If C<flags> has C<SV_GMAGIC> bit set, will C<mg_get> on C<sv> if
@@ -4624,31 +5620,10 @@ C<SvPV_force> and C<SvPV_force_nomg>
 =for hackers
 Found in file sv.c
 
-=item sv_pvutf8
-
-Use the C<SvPVutf8_nolen> macro instead
-
-       char*   sv_pvutf8(SV *sv)
-
-=for hackers
-Found in file sv.c
-
-=item 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)
 
@@ -4656,15 +5631,17 @@ instead.
 Found in file sv.c
 
 =item sv_reftype
+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
 
 =item sv_replace
+X<sv_replace>
 
 Make the first argument a copy of the second, then delete the original.
 The target SV physically takes over ownership of the body of the source SV
@@ -4678,16 +5655,8 @@ 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
-
-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>
 
 Underlying implementation for the C<reset> Perl function.
 Note that the perl-level function is vaguely deprecated.
@@ -4698,11 +5667,13 @@ Note that the perl-level function is vaguely deprecated.
 Found in file sv.c
 
 =item sv_rvweaken
+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)
 
@@ -4710,6 +5681,7 @@ associated with that magic.
 Found in file sv.c
 
 =item sv_setiv
+X<sv_setiv>
 
 Copies an integer into the given SV, upgrading first if necessary.
 Does not handle 'set' magic.  See also C<sv_setiv_mg>.
@@ -4720,6 +5692,7 @@ Does not handle 'set' magic.  See also C<sv_setiv_mg>.
 Found in file sv.c
 
 =item sv_setiv_mg
+X<sv_setiv_mg>
 
 Like C<sv_setiv>, but also handles 'set' magic.
 
@@ -4729,6 +5702,7 @@ Like C<sv_setiv>, but also handles 'set' magic.
 Found in file sv.c
 
 =item sv_setnv
+X<sv_setnv>
 
 Copies a double into the given SV, upgrading first if necessary.
 Does not handle 'set' magic.  See also C<sv_setnv_mg>.
@@ -4739,6 +5713,7 @@ Does not handle 'set' magic.  See also C<sv_setnv_mg>.
 Found in file sv.c
 
 =item sv_setnv_mg
+X<sv_setnv_mg>
 
 Like C<sv_setnv>, but also handles 'set' magic.
 
@@ -4748,6 +5723,7 @@ Like C<sv_setnv>, but also handles 'set' magic.
 Found in file sv.c
 
 =item sv_setpv
+X<sv_setpv>
 
 Copies a string into an SV.  The string must be null-terminated.  Does not
 handle 'set' magic.  See C<sv_setpv_mg>.
@@ -4758,6 +5734,7 @@ handle 'set' magic.  See C<sv_setpv_mg>.
 Found in file sv.c
 
 =item sv_setpvf
+X<sv_setpvf>
 
 Works like C<sv_catpvf> but copies the text into the SV instead of
 appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
@@ -4768,6 +5745,7 @@ appending it.  Does not handle 'set' magic.  See C<sv_setpvf_mg>.
 Found in file sv.c
 
 =item sv_setpvf_mg
+X<sv_setpvf_mg>
 
 Like C<sv_setpvf>, but also handles 'set' magic.
 
@@ -4777,6 +5755,7 @@ Like C<sv_setpvf>, but also handles 'set' magic.
 Found in file sv.c
 
 =item sv_setpviv
+X<sv_setpviv>
 
 Copies an integer into the given SV, also updating its string value.
 Does not handle 'set' magic.  See C<sv_setpviv_mg>.
@@ -4787,6 +5766,7 @@ Does not handle 'set' magic.  See C<sv_setpviv_mg>.
 Found in file sv.c
 
 =item sv_setpviv_mg
+X<sv_setpviv_mg>
 
 Like C<sv_setpviv>, but also handles 'set' magic.
 
@@ -4796,6 +5776,7 @@ Like C<sv_setpviv>, but also handles 'set' magic.
 Found in file sv.c
 
 =item sv_setpvn
+X<sv_setpvn>
 
 Copies a string into an SV.  The C<len> parameter indicates the number of
 bytes to be copied.  If the C<ptr> argument is NULL the SV will become
@@ -4807,6 +5788,7 @@ undefined.  Does not handle 'set' magic.  See C<sv_setpvn_mg>.
 Found in file sv.c
 
 =item sv_setpvn_mg
+X<sv_setpvn_mg>
 
 Like C<sv_setpvn>, but also handles 'set' magic.
 
@@ -4815,7 +5797,18 @@ 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>
 
 Like C<sv_setpv>, but also handles 'set' magic.
 
@@ -4825,11 +5818,12 @@ Like C<sv_setpv>, but also handles 'set' magic.
 Found in file sv.c
 
 =item sv_setref_iv
+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)
@@ -4838,11 +5832,12 @@ will have a reference count of 1, and the RV will be returned.
 Found in file sv.c
 
 =item sv_setref_nv
+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)
@@ -4851,12 +5846,13 @@ will have a reference count of 1, and the RV will be returned.
 Found in file sv.c
 
 =item sv_setref_pv
+X<sv_setref_pv>
 
 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
@@ -4870,12 +5866,13 @@ Note that C<sv_setref_pvn> copies the string while this copies the pointer.
 Found in file sv.c
 
 =item sv_setref_pvn
+X<sv_setref_pvn>
 
 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.
@@ -4886,11 +5883,12 @@ Note that C<sv_setref_pv> copies the pointer while this copies the string.
 Found in file sv.c
 
 =item sv_setref_uv
+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)
@@ -4899,6 +5897,7 @@ will have a reference count of 1, and the RV will be returned.
 Found in file sv.c
 
 =item sv_setsv
+X<sv_setsv>
 
 Copies the contents of the source SV C<ssv> into the destination SV
 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
@@ -4916,6 +5915,7 @@ C<SvSetMagicSV_nosteal>.
 Found in file sv.c
 
 =item sv_setsv_flags
+X<sv_setsv_flags>
 
 Copies the contents of the source SV C<ssv> into the destination SV
 C<dsv>.  The source SV may be destroyed if it is mortal, so don't use this
@@ -4940,6 +5940,7 @@ copy-ish functions and macros use this underneath.
 Found in file sv.c
 
 =item sv_setsv_mg
+X<sv_setsv_mg>
 
 Like C<sv_setsv>, but also handles 'set' magic.
 
@@ -4948,16 +5949,8 @@ Like C<sv_setsv>, but also handles 'set' magic.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 Copies an unsigned integer into the given SV, upgrading first if necessary.
 Does not handle 'set' magic.  See also C<sv_setuv_mg>.
@@ -4968,6 +5961,7 @@ Does not handle 'set' magic.  See also C<sv_setuv_mg>.
 Found in file sv.c
 
 =item sv_setuv_mg
+X<sv_setuv_mg>
 
 Like C<sv_setuv>, but also handles 'set' magic.
 
@@ -4976,15 +5970,8 @@ Like C<sv_setuv>, but also handles 'set' magic.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 Test an SV for taintedness. Use C<SvTAINTED> instead.
        bool    sv_tainted(SV* sv)
@@ -4993,6 +5980,7 @@ Test an SV for taintedness. Use C<SvTAINTED> instead.
 Found in file sv.c
 
 =item sv_true
+X<sv_true>
 
 Returns true if the SV has a true value by Perl's rules.
 Use the C<SvTRUE> macro instead, which may call C<sv_true()> or may
@@ -5004,6 +5992,7 @@ instead use an in-line version.
 Found in file sv.c
 
 =item sv_unmagic
+X<sv_unmagic>
 
 Removes all magic of type C<type> from an SV.
 
@@ -5012,19 +6001,8 @@ Removes all magic of type C<type> from an SV.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 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
@@ -5040,6 +6018,7 @@ See C<SvROK_off>.
 Found in file sv.c
 
 =item sv_untaint
+X<sv_untaint>
 
 Untaint an SV. Use C<SvTAINTED_off> instead.
        void    sv_untaint(SV* sv)
@@ -5048,41 +6027,41 @@ Untaint an SV. Use C<SvTAINTED_off> instead.
 Found in file sv.c
 
 =item sv_upgrade
+X<sv_upgrade>
 
 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
-
-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>.
-
-       void    sv_usepvn(SV* sv, char* ptr, STRLEN len)
+=item sv_usepvn_flags
+X<sv_usepvn_flags>
 
-=for hackers
-Found in file sv.c
-
-=item sv_usepvn_mg
+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.
 
-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
 
 =item sv_utf8_decode
+X<sv_utf8_decode>
 
 If the PV of the SV is an octet sequence in UTF-8
 and contains a multiple-byte character, the C<SvUTF8> flag is turned on
@@ -5099,6 +6078,7 @@ removed without notice.
 Found in file sv.c
 
 =item sv_utf8_downgrade
+X<sv_utf8_downgrade>
 
 Attempts to convert the PV of an SV from characters to bytes.
 If the PV contains a character beyond byte, this conversion will fail;
@@ -5117,6 +6097,7 @@ removed without notice.
 Found in file sv.c
 
 =item sv_utf8_encode
+X<sv_utf8_encode>
 
 Converts the PV of an SV to UTF-8, but then turns the C<SvUTF8>
 flag off so that it looks like octets again.
@@ -5127,6 +6108,7 @@ flag off so that it looks like octets again.
 Found in file sv.c
 
 =item sv_utf8_upgrade
+X<sv_utf8_upgrade>
 
 Converts the PV of an SV to its UTF-8-encoded form.
 Forces the SV to string form if it is not already.
@@ -5142,6 +6124,7 @@ use the Encode extension for that.
 Found in file sv.c
 
 =item sv_utf8_upgrade_flags
+X<sv_utf8_upgrade_flags>
 
 Converts the PV of an SV to its UTF-8-encoded form.
 Forces the SV to string form if it is not already.
@@ -5158,17 +6141,8 @@ use the Encode extension for that.
 =for hackers
 Found in file sv.c
 
-=item 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>
 
 Processes its arguments like C<vsprintf> and appends the formatted output
 to an SV.  Does not handle 'set' magic.  See C<sv_vcatpvf_mg>.
@@ -5181,6 +6155,7 @@ Usually used via its frontend C<sv_catpvf>.
 Found in file sv.c
 
 =item sv_vcatpvfn
+X<sv_vcatpvfn>
 
 Processes its arguments like C<vsprintf> and appends the formatted output
 to an SV.  Uses an array of SVs if the C style variable argument list is
@@ -5196,6 +6171,7 @@ Usually used via one of its frontends C<sv_vcatpvf> and C<sv_vcatpvf_mg>.
 Found in file sv.c
 
 =item sv_vcatpvf_mg
+X<sv_vcatpvf_mg>
 
 Like C<sv_vcatpvf>, but also handles 'set' magic.
 
@@ -5207,6 +6183,7 @@ Usually used via its frontend C<sv_catpvf_mg>.
 Found in file sv.c
 
 =item sv_vsetpvf
+X<sv_vsetpvf>
 
 Works like C<sv_vcatpvf> but copies the text into the SV instead of
 appending it.  Does not handle 'set' magic.  See C<sv_vsetpvf_mg>.
@@ -5219,6 +6196,7 @@ Usually used via its frontend C<sv_setpvf>.
 Found in file sv.c
 
 =item sv_vsetpvfn
+X<sv_vsetpvfn>
 
 Works like C<sv_vcatpvfn> but copies the text into the SV instead of
 appending it.
@@ -5231,6 +6209,7 @@ Usually used via one of its frontends C<sv_vsetpvf> and C<sv_vsetpvf_mg>.
 Found in file sv.c
 
 =item sv_vsetpvf_mg
+X<sv_vsetpvf_mg>
 
 Like C<sv_vsetpvf>, but also handles 'set' magic.
 
@@ -5249,6 +6228,7 @@ Found in file sv.c
 =over 8
 
 =item bytes_from_utf8
+X<bytes_from_utf8>
 
 Converts a string C<s> of length C<len> from UTF-8 into byte encoding.
 Unlike C<utf8_to_bytes> but like C<bytes_to_utf8>, returns a pointer to
@@ -5266,6 +6246,7 @@ removed without notice.
 Found in file utf8.c
 
 =item bytes_to_utf8
+X<bytes_to_utf8>
 
 Converts a string C<s> of length C<len> from ASCII into UTF-8 encoding.
 Returns a pointer to the newly-created string, and sets C<len> to
@@ -5283,6 +6264,7 @@ removed without notice.
 Found in file utf8.c
 
 =item ibcmp_utf8
+X<ibcmp_utf8>
 
 Return true if the strings s1 and s2 differ case-insensitively, false
 if not (if they are equal case-insensitively).  If u1 is true, the
@@ -5311,6 +6293,7 @@ http://www.unicode.org/unicode/reports/tr21/ (Case Mappings).
 Found in file utf8.c
 
 =item is_utf8_char
+X<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
@@ -5323,6 +6306,7 @@ will be returned if it is valid, otherwise 0.
 Found in file utf8.c
 
 =item is_utf8_string
+X<is_utf8_string>
 
 Returns true if first C<len> bytes of the given string form a valid
 UTF-8 string, false otherwise.  Note that 'a valid UTF-8 string' does
@@ -5337,8 +6321,9 @@ See also is_utf8_string_loclen() and is_utf8_string_loc().
 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>.
 
@@ -5350,8 +6335,9 @@ See also is_utf8_string_loclen() and is_utf8_string().
 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>.
@@ -5364,6 +6350,7 @@ See also is_utf8_string_loc() and is_utf8_string().
 Found in file utf8.c
 
 =item pv_uni_display
+X<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
@@ -5384,6 +6371,7 @@ The pointer to the PV of the dsv is returned.
 Found in file utf8.c
 
 =item sv_cat_decode
+X<sv_cat_decode>
 
 The encoding is assumed to be an Encode object, the PV of the ssv is
 assumed to be octets in that encoding and decoding the input starts
@@ -5401,6 +6389,7 @@ Returns TRUE if the terminator was found, else returns FALSE.
 Found in file sv.c
 
 =item sv_recode_to_utf8
+X<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
@@ -5419,6 +6408,7 @@ The PV of the sv is returned.
 Found in file sv.c
 
 =item sv_uni_display
+X<sv_uni_display>
 
 Build to the scalar dsv a displayable version of the scalar sv,
 the displayable version being at most pvlim bytes long
@@ -5434,6 +6424,7 @@ The pointer to the PV of the dsv is returned.
 Found in file utf8.c
 
 =item to_utf8_case
+X<to_utf8_case>
 
 The "p" contains the pointer to the UTF-8 string encoding
 the character that is being converted.
@@ -5445,7 +6436,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
@@ -5455,12 +6446,13 @@ Perl_to_utf8_case().
 The "normal" is a string like "ToLower" which means the swash
 %utf8::ToLower.
 
-       UV      to_utf8_case(const U8 *p, U8* ustrp, STRLEN *lenp, SV **swash, const char *normal, const char *special)
+       UV      to_utf8_case(const U8 *p, U8* ustrp, STRLEN *lenp, SV **swashp, const char *normal, const char *special)
 
 =for hackers
 Found in file utf8.c
 
 =item to_utf8_fold
+X<to_utf8_fold>
 
 Convert the UTF-8 encoded character at p to its foldcase version and
 store that in UTF-8 in ustrp and its length in bytes in lenp.  Note
@@ -5477,6 +6469,7 @@ The first character of the foldcased version is returned
 Found in file utf8.c
 
 =item to_utf8_lower
+X<to_utf8_lower>
 
 Convert the UTF-8 encoded character at p to its lowercase version and
 store that in UTF-8 in ustrp and its length in bytes in lenp.  Note
@@ -5492,6 +6485,7 @@ The first character of the lowercased version is returned
 Found in file utf8.c
 
 =item to_utf8_title
+X<to_utf8_title>
 
 Convert the UTF-8 encoded character at p to its titlecase version and
 store that in UTF-8 in ustrp and its length in bytes in lenp.  Note
@@ -5507,6 +6501,7 @@ The first character of the titlecased version is returned
 Found in file utf8.c
 
 =item to_utf8_upper
+X<to_utf8_upper>
 
 Convert the UTF-8 encoded character at p to its uppercase version and
 store that in UTF-8 in ustrp and its length in bytes in lenp.  Note
@@ -5522,19 +6517,24 @@ The first character of the uppercased version is returned
 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.
 
 Allows length and flags to be passed to low level routine.
 
-       UV      utf8n_to_uvchr(const U8 *s, STRLEN curlen, STRLEN* retlen, U32 flags)
+       UV      utf8n_to_uvchr(const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
 
 =for hackers
 Found in file utf8.c
 
 =item utf8n_to_uvuni
+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>
@@ -5554,12 +6554,13 @@ the strict UTF-8 encoding (see F<utf8.h>).
 
 Most code should use utf8_to_uvchr() rather than call this directly.
 
-       UV      utf8n_to_uvuni(const U8 *s, STRLEN curlen, STRLEN* retlen, U32 flags)
+       UV      utf8n_to_uvuni(const U8 *s, STRLEN curlen, STRLEN *retlen, U32 flags)
 
 =for hackers
 Found in file utf8.c
 
 =item utf8_distance
+X<utf8_distance>
 
 Returns the number of UTF-8 characters between the UTF-8 pointers C<a>
 and C<b>.
@@ -5573,6 +6574,7 @@ same UTF-8 buffer.
 Found in file utf8.c
 
 =item utf8_hop
+X<utf8_hop>
 
 Return the UTF-8 pointer C<s> displaced by C<off> characters, either
 forward or backward.
@@ -5587,6 +6589,7 @@ on the first byte of character or just after the last byte of a character.
 Found in file utf8.c
 
 =item utf8_length
+X<utf8_length>
 
 Return the length of the UTF-8 char encoded string C<s> in characters.
 Stops at C<e> (inclusive).  If C<e E<lt> s> or if the scan would end
@@ -5598,12 +6601,15 @@ up past C<e>, croaks.
 Found in file utf8.c
 
 =item utf8_to_bytes
+X<utf8_to_bytes>
 
 Converts a string C<s> of length C<len> from UTF-8 into byte encoding.
 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.
 
@@ -5613,6 +6619,7 @@ removed without notice.
 Found in file utf8.c
 
 =item utf8_to_uvchr
+X<utf8_to_uvchr>
 
 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
@@ -5621,12 +6628,13 @@ length, in bytes, of that character.
 If C<s> does not point to a well-formed UTF-8 character, zero is
 returned and retlen is set, if possible, to -1.
 
-       UV      utf8_to_uvchr(const U8 *s, STRLEN* retlen)
+       UV      utf8_to_uvchr(const U8 *s, STRLEN *retlen)
 
 =for hackers
 Found in file utf8.c
 
 =item utf8_to_uvuni
+X<utf8_to_uvuni>
 
 Returns the Unicode code point 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
@@ -5638,12 +6646,13 @@ an index into the Unicode semantic tables (e.g. swashes).
 If C<s> does not point to a well-formed UTF-8 character, zero is
 returned and retlen is set, if possible, to -1.
 
-       UV      utf8_to_uvuni(const U8 *s, STRLEN* retlen)
+       UV      utf8_to_uvuni(const U8 *s, STRLEN *retlen)
 
 =for hackers
 Found in file utf8.c
 
 =item uvchr_to_utf8
+X<uvchr_to_utf8>
 
 Adds the UTF-8 representation of the Native codepoint C<uv> to the end
 of the string C<d>; C<d> should be have at least C<UTF8_MAXBYTES+1> free
@@ -5662,6 +6671,7 @@ is the recommended wide native character-aware way of saying
 Found in file utf8.c
 
 =item uvuni_to_utf8_flags
+X<uvuni_to_utf8_flags>
 
 Adds the UTF-8 representation of the Unicode codepoint C<uv> to the end
 of the string C<d>; C<d> should be have at least C<UTF8_MAXBYTES+1> free
@@ -5695,6 +6705,7 @@ Found in file utf8.c
 =over 8
 
 =item ax
+X<ax>
 
 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
@@ -5706,6 +6717,7 @@ must be called prior to setup the C<MARK> variable.
 Found in file XSUB.h
 
 =item CLASS
+X<CLASS>
 
 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>.
@@ -5716,6 +6728,7 @@ class name for a C++ XS constructor.  This is always a C<char*>.  See C<THIS>.
 Found in file XSUB.h
 
 =item dAX
+X<dAX>
 
 Sets up the C<ax> variable.
 This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
@@ -5726,6 +6739,7 @@ This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
 Found in file XSUB.h
 
 =item dAXMARK
+X<dAXMARK>
 
 Sets up the C<ax> variable and stack marker variable C<mark>.
 This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
@@ -5736,6 +6750,7 @@ This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
 Found in file XSUB.h
 
 =item dITEMS
+X<dITEMS>
 
 Sets up the C<items> variable.
 This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
@@ -5746,6 +6761,7 @@ This is usually handled automatically by C<xsubpp> by calling C<dXSARGS>.
 Found in file XSUB.h
 
 =item dUNDERBAR
+X<dUNDERBAR>
 
 Sets up the C<padoff_du> variable for an XSUB that wishes to use
 C<UNDERBAR>.
@@ -5756,6 +6772,7 @@ C<UNDERBAR>.
 Found in file XSUB.h
 
 =item dXSARGS
+X<dXSARGS>
 
 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>.
@@ -5767,6 +6784,7 @@ This is usually handled automatically by C<xsubpp>.
 Found in file XSUB.h
 
 =item dXSI32
+X<dXSI32>
 
 Sets up the C<ix> variable for an XSUB which has aliases.  This is usually
 handled automatically by C<xsubpp>.
@@ -5777,6 +6795,7 @@ handled automatically by C<xsubpp>.
 Found in file XSUB.h
 
 =item items
+X<items>
 
 Variable which is setup by C<xsubpp> to indicate the number of 
 items on the stack.  See L<perlxs/"Variable-length Parameter Lists">.
@@ -5787,6 +6806,7 @@ items on the stack.  See L<perlxs/"Variable-length Parameter Lists">.
 Found in file XSUB.h
 
 =item ix
+X<ix>
 
 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">.
@@ -5797,6 +6817,7 @@ XSUB's aliases was used to invoke it.  See L<perlxs/"The ALIAS: Keyword">.
 Found in file XSUB.h
 
 =item newXSproto
+X<newXSproto>
 
 Used by C<xsubpp> to hook up XSUBs as Perl subs.  Adds Perl prototypes to
 the subs.
@@ -5805,6 +6826,7 @@ the subs.
 Found in file XSUB.h
 
 =item RETVAL
+X<RETVAL>
 
 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 
@@ -5816,6 +6838,7 @@ L<perlxs/"The RETVAL Variable">.
 Found in file XSUB.h
 
 =item ST
+X<ST>
 
 Used to access elements on the XSUB's stack.
 
@@ -5825,6 +6848,7 @@ Used to access elements on the XSUB's stack.
 Found in file XSUB.h
 
 =item THIS
+X<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 
@@ -5836,6 +6860,7 @@ L<perlxs/"Using XS With C++">.
 Found in file XSUB.h
 
 =item UNDERBAR
+X<UNDERBAR>
 
 The SV* corresponding to the $_ variable. Works even if there
 is a lexical $_ in scope.
@@ -5844,6 +6869,7 @@ is a lexical $_ in scope.
 Found in file XSUB.h
 
 =item XS
+X<XS>
 
 Macro to declare an XSUB and its C parameter list.  This is handled by
 C<xsubpp>.
@@ -5852,6 +6878,7 @@ C<xsubpp>.
 Found in file XSUB.h
 
 =item XS_VERSION
+X<XS_VERSION>
 
 The version identifier for an XS module.  This is usually
 handled automatically by C<ExtUtils::MakeMaker>.  See C<XS_VERSION_BOOTCHECK>.
@@ -5860,6 +6887,7 @@ handled automatically by C<ExtUtils::MakeMaker>.  See C<XS_VERSION_BOOTCHECK>.
 Found in file XSUB.h
 
 =item XS_VERSION_BOOTCHECK
+X<XS_VERSION_BOOTCHECK>
 
 Macro to verify that a PM module's $VERSION variable matches the XS
 module's C<XS_VERSION> variable.  This is usually handled automatically by
@@ -5878,6 +6906,7 @@ Found in file XSUB.h
 =over 8
 
 =item croak
+X<croak>
 
 This is the XSUB-writer's interface to Perl's C<die> function.
 Normally call this function the same way you call the C C<printf>
@@ -5885,11 +6914,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, ...)
 
@@ -5897,6 +6926,7 @@ C<$@> and then pass C<Nullch> to croak():
 Found in file util.c
 
 =item warn
+X<warn>
 
 This is the XSUB-writer's interface to Perl's C<warn> function.  Call this
 function the same way you call the C C<printf> function.  See C<croak>.
@@ -5927,3 +6957,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: