This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
SvRX() and SvRXOK() macros
[perl5.git] / pod / perlapi.pod
index c3b6074..e4ae012 100644 (file)
@@ -1,3 +1,9 @@
+-*- buffer-read-only: t -*-
+
+!!!!!!!   DO NOT EDIT THIS FILE   !!!!!!!
+This file is built by autodoc.pl extracting documentation from the C source
+files.
+
 =head1 NAME
 
 perlapi - autogenerated documentation for the perl public API
@@ -128,6 +134,35 @@ array itself.
 =for hackers
 Found in file av.c
 
+=item av_create_and_push
+X<av_create_and_push>
+
+Push an SV onto the end of the array, creating the array if necessary.
+A small internal helper function to remove a commonly duplicated idiom.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+       void    av_create_and_push(AV **const avp, SV *const val)
+
+=for hackers
+Found in file av.c
+
+=item av_create_and_unshift_one
+X<av_create_and_unshift_one>
+
+Unshifts an SV onto the beginning of the array, creating the array if
+necessary.
+A small internal helper function to remove a commonly duplicated idiom.
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+       SV**    av_create_and_unshift_one(AV **const avp, SV *const val)
+
+=for hackers
+Found in file av.c
+
 =item av_delete
 X<av_delete>
 
@@ -182,9 +217,15 @@ Found in file av.c
 =item av_fill
 X<av_fill>
 
-Ensure than an array has a given number of elements, equivalent to
+Set the highest index in the array to the given number, equivalent to
 Perl's C<$#array = $fill;>.
 
+The number of elements in the an array will be C<fill + 1> after
+av_fill() returns.  If the array was previously shorter then the
+additional elements appended are set to C<PL_sv_undef>.  If the array
+was longer, then the excess elements are freed.  C<av_fill(av, -1)> is
+the same as C<av_clear(av)>.
+
        void    av_fill(AV* ar, I32 fill)
 
 =for hackers
@@ -193,8 +234,8 @@ Found in file av.c
 =item av_len
 X<av_len>
 
-Returns the highest index in the array.  Returns -1 if the array is
-empty.
+Returns the highest index in the array.  The number of elements in the
+array is C<av_len(av) + 1>.  Returns -1 if the array is empty.
 
        I32     av_len(const AV* ar)
 
@@ -569,7 +610,7 @@ without it we only clone the data and zero the stacks,
 with it we copy the stacks and the new perl interpreter is
 ready to run at the exact same point as the previous one.
 The pseudo-fork code uses COPY_STACKS while the
-threads->new doesn't.
+threads->create doesn't.
 
 CLONEf_KEEP_PTR_TABLE
 perl_clone keeps a ptr_table with the pointer of the old
@@ -616,14 +657,27 @@ Found in file cv.h
 =item get_cv
 X<get_cv>
 
-Returns the CV of the specified Perl subroutine.  If C<create> is set and
-the Perl subroutine does not exist then it will be declared (which has the
-same effect as saying C<sub name;>).  If C<create> is not set and the
-subroutine does not exist then NULL is returned.
+Uses C<strlen> to get the length of C<name>, then calls C<get_cvn_flags>.
+
+NOTE: the perl_ form of this function is deprecated.
+
+       CV*     get_cv(const char* name, I32 flags)
+
+=for hackers
+Found in file perl.c
+
+=item get_cvn_flags
+X<get_cvn_flags>
+
+Returns the CV of the specified Perl subroutine.  C<flags> are passed to
+C<gv_fetchpvn_flags>. If C<GV_ADD> is set and the Perl subroutine does not
+exist then it will be declared (which has the same effect as saying
+C<sub name;>).  If C<GV_ADD> is not set and the subroutine does not exist
+then NULL is returned.
 
 NOTE: the perl_ form of this function is deprecated.
 
-       CV*     get_cv(const char* name, I32 create)
+       CV*     get_cvn_flags(const char* name, STRLEN len, I32 flags)
 
 =for hackers
 Found in file perl.c
@@ -753,6 +807,114 @@ Found in file perl.c
 
 =back
 
+=head1 Functions in file dump.c
+
+
+=over 8
+
+=item pv_display
+X<pv_display>
+
+  char *pv_display(SV *dsv, const char *pv, STRLEN cur, STRLEN len,
+                   STRLEN pvlim, U32 flags)
+
+Similar to
+
+  pv_escape(dsv,pv,cur,pvlim,PERL_PV_ESCAPE_QUOTE);
+
+except that an additional "\0" will be appended to the string when
+len > cur and pv[cur] is "\0".
+
+Note that the final string may be up to 7 chars longer than pvlim.
+
+       char*   pv_display(SV *dsv, const char *pv, STRLEN cur, STRLEN len, STRLEN pvlim)
+
+=for hackers
+Found in file dump.c
+
+=item pv_escape
+X<pv_escape>
+
+               |const STRLEN count|const STRLEN max
+               |STRLEN const *escaped, const U32 flags
+
+Escapes at most the first "count" chars of pv and puts the results into
+dsv such that the size of the escaped string will not exceed "max" chars
+and will not contain any incomplete escape sequences.
+
+If flags contains PERL_PV_ESCAPE_QUOTE then any double quotes in the string
+will also be escaped.
+
+Normally the SV will be cleared before the escaped string is prepared,
+but when PERL_PV_ESCAPE_NOCLEAR is set this will not occur.
+
+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.
+
+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. 
+
+If PERL_PV_ESCAPE_RE is set then the escape char used will be a '%' and
+not a '\\'. This is because regexes very often contain backslashed
+sequences, whereas '%' is not a particularly common character in patterns.
+
+Returns a pointer to the escaped text as held by dsv.
+
+NOTE: the perl_ form of this function is deprecated.
+
+       char*   pv_escape(SV *dsv, char const * const str, const STRLEN count, const STRLEN max, STRLEN * const escaped, const U32 flags)
+
+=for hackers
+Found in file dump.c
+
+=item pv_pretty
+X<pv_pretty>
+
+           |const STRLEN count|const STRLEN max\
+           |const char const *start_color| const char const *end_color\
+           |const U32 flags
+
+Converts a string into something presentable, handling escaping via
+pv_escape() and supporting quoting and elipses. 
+
+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.
+
+Returns a pointer to the prettified text as held by dsv.
+           
+NOTE: the perl_ form of this function is deprecated.
+
+       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 dump.c
+
+
+=back
+
 =head1 Functions in file mathoms.c
 
 
@@ -1061,72 +1223,6 @@ 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
@@ -1164,7 +1260,7 @@ 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.
+up caching info for this glob.
 
 This function grants C<"SUPER"> token as a postfix of the stash name. The
 GV returned from C<gv_fetchmeth> may be a method cache entry, which is not
@@ -1225,12 +1321,10 @@ 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.
+Returns a pointer to the stash for a specified package.  Uses C<strlen> to
+determine the length of C<name>, then calls C<gv_stashpvn()>.
 
-       HV*     gv_stashpv(const char* name, I32 create)
+       HV*     gv_stashpv(const char* name, I32 flags)
 
 =for hackers
 Found in file gv.c
@@ -1238,24 +1332,35 @@ 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.
+Returns a pointer to the stash for a specified package.  The C<namelen>
+parameter indicates the length of the C<name>, in bytes.  C<flags> is passed
+to C<gv_fetchpvn_flags()>, so if set to C<GV_ADD> then the package will be
+created if it does not already exist.  If the package does not exist and
+C<flags> is 0 (or any other setting that does not create packages) then NULL
+is returned.
+
 
-       HV*     gv_stashpvn(const char* name, U32 namelen, I32 create)
+       HV*     gv_stashpvn(const char* name, U32 namelen, I32 flags)
 
 =for hackers
 Found in file gv.c
 
+=item gv_stashpvs
+X<gv_stashpvs>
+
+Like C<gv_stashpvn>, but takes a literal string instead of a string/length pair.
+
+       HV*     gv_stashpvs(const char* name, I32 create)
+
+=for hackers
+Found in file handy.h
+
 =item gv_stashsv
 X<gv_stashsv>
 
-Returns a pointer to the stash for a specified package, which must be a
-valid UTF-8 string.  See C<gv_stashpv>.
+Returns a pointer to the stash for a specified package.  See C<gv_stashpvn>.
 
-       HV*     gv_stashsv(SV* sv, I32 create)
+       HV*     gv_stashsv(SV* sv, I32 flags)
 
 =for hackers
 Found in file gv.c
@@ -1548,6 +1653,16 @@ information on how to use this function on tied hashes.
 =for hackers
 Found in file hv.c
 
+=item hv_fetchs
+X<hv_fetchs>
+
+Like C<hv_fetch>, but takes a literal string instead of a string/length pair.
+
+       SV**    hv_fetchs(HV* tb, const char* key, I32 lval)
+
+=for hackers
+Found in file handy.h
+
 =item hv_fetch_ent
 X<hv_fetch_ent>
 
@@ -1715,6 +1830,17 @@ information on how to use this function on tied hashes.
 =for hackers
 Found in file hv.c
 
+=item hv_stores
+X<hv_stores>
+
+Like C<hv_store>, but takes a literal string instead of a string/length pair
+and omits the hash parameter.
+
+       SV**    hv_stores(HV* tb, const char* key, NULLOK SV* val)
+
+=for hackers
+Found in file handy.h
+
 =item hv_store_ent
 X<hv_store_ent>
 
@@ -2051,6 +2177,16 @@ PoisonWith(0xEF) for catching access to freed memory.
 =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>
 
@@ -2129,6 +2265,16 @@ the new string can be freed with the C<Safefree()> function.
 =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>
 
@@ -2140,6 +2286,18 @@ which is shared between threads.
 =for hackers
 Found in file util.c
 
+=item savesharedpvn
+X<savesharedpvn>
+
+A version of C<savepvn()> which allocates the duplicate string in memory
+which is shared between threads. (With the specific difference that a NULL
+pointer is not acceptable)
+
+       char*   savesharedpvn(const char *const pv, const STRLEN len)
+
+=for hackers
+Found in file util.c
+
 =item savesvpv
 X<savesvpv>
 
@@ -2249,9 +2407,11 @@ Found in file util.c
 X<my_snprintf>
 
 The C library C<snprintf> functionality, if available and
-standards-compliant (uses C<vsnprintf>, actually).  If the
+standards-compliant (uses C<vsnprintf>, actually).  However, if the
 C<vsnprintf> is not available, will unfortunately use the unsafe
-C<vsprintf>.  Consider using C<sv_vcatpvf> instead.
+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, ...)
 
@@ -2273,9 +2433,11 @@ Found in file util.c
 =item my_vsnprintf
 X<my_vsnprintf>
 
-The C library C<vsnprintf> if available and standards-compliant,
-but if the C<vsnprintf> is not available, will unfortunately use
-the unsafe C<vsprintf>.  Consider using C<sv_vcatpvf> instead.
+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)
 
@@ -2307,12 +2469,12 @@ an RV.
 Function must be called with an already existing SV like
 
     sv = newSV(0);
-    s = scan_version(s,SV *sv, bool qv);
+    s = scan_version(s, SV *sv, bool qv);
 
 Performs some preprocessing to the string to ensure that
 it has the correct characteristics of a version.  Flags the
 object if it contains an underscore (which denotes this
-is a alpha version).  The boolean qv denotes that the version
+is an alpha version).  The boolean qv denotes that the version
 should be interpreted as if it had multiple decimals, even if
 it doesn't.
 
@@ -2428,11 +2590,12 @@ X<upg_version>
 
 In-place upgrade of the supplied SV to a version object.
 
-    SV *sv = upg_version(SV *sv);
+    SV *sv = upg_version(SV *sv, bool qv);
 
-Returns a pointer to the upgraded SV.
+Returns a pointer to the upgraded SV.  Set the boolean qv if you want
+to force this SV to be interpreted as an "extended" version.
 
-       SV*     upg_version(SV *ver)
+       SV*     upg_version(SV *ver, bool qv)
 
 =for hackers
 Found in file util.c
@@ -2511,6 +2674,104 @@ Found in file util.c
 
 =back
 
+=head1 MRO Functions
+
+=over 8
+
+=item mro_get_linear_isa
+X<mro_get_linear_isa>
+
+Returns either C<mro_get_linear_isa_c3> or
+C<mro_get_linear_isa_dfs> for the given stash,
+dependant upon which MRO is in effect
+for that stash.  The return value is a
+read-only AV*.
+
+You are responsible for C<SvREFCNT_inc()> on the
+return value if you plan to store it anywhere
+semi-permanently (otherwise it might be deleted
+out from under you the next time the cache is
+invalidated).
+
+       AV*     mro_get_linear_isa(HV* stash)
+
+=for hackers
+Found in file mro.c
+
+=item mro_get_linear_isa_c3
+X<mro_get_linear_isa_c3>
+
+Returns the C3 linearization of @ISA
+the given stash.  The return value is a read-only AV*.
+C<level> should be 0 (it is used internally in this
+function's recursion).
+
+You are responsible for C<SvREFCNT_inc()> on the
+return value if you plan to store it anywhere
+semi-permanently (otherwise it might be deleted
+out from under you the next time the cache is
+invalidated).
+
+       AV*     mro_get_linear_isa_c3(HV* stash, I32 level)
+
+=for hackers
+Found in file mro.c
+
+=item mro_get_linear_isa_dfs
+X<mro_get_linear_isa_dfs>
+
+Returns the Depth-First Search linearization of @ISA
+the given stash.  The return value is a read-only AV*.
+C<level> should be 0 (it is used internally in this
+function's recursion).
+
+You are responsible for C<SvREFCNT_inc()> on the
+return value if you plan to store it anywhere
+semi-permanently (otherwise it might be deleted
+out from under you the next time the cache is
+invalidated).
+
+       AV*     mro_get_linear_isa_dfs(HV* stash, I32 level)
+
+=for hackers
+Found in file mro.c
+
+=item mro_method_changed_in
+X<mro_method_changed_in>
+
+Invalidates method caching on any child classes
+of the given stash, so that they might notice
+the changes in this one.
+
+Ideally, all instances of C<PL_sub_generation++> in
+perl source outside of C<mro.c> should be
+replaced by calls to this.
+
+Perl automatically handles most of the common
+ways a method might be redefined.  However, there
+are a few ways you could change a method in a stash
+without the cache code noticing, in which case you
+need to call this method afterwards:
+
+1) Directly manipulating the stash HV entries from
+XS code.
+
+2) Assigning a reference to a readonly scalar
+constant into a stash entry in order to create
+a constant subroutine (like constant.pm
+does).
+
+This same method is available from pure perl
+via, C<mro::method_changed_in(classname)>.
+
+       void    mro_method_changed_in(HV* stash)
+
+=for hackers
+Found in file mro.c
+
+
+=back
+
 =head1 Multicall Functions
 
 =over 8
@@ -2685,6 +2946,37 @@ number may use '_' characters to separate digits.
 =for hackers
 Found in file numeric.c
 
+=item Perl_signbit
+X<Perl_signbit>
+
+Return a non-zero integer if the sign bit on an NV is set, and 0 if
+it is not.  
+
+If Configure detects this system has a signbit() that will work with
+our NVs, then we just use it via the #define in perl.h.  Otherwise,
+fall back on this implementation.  As a first pass, this gets everything
+right except -0.0.  Alas, catching -0.0 is the main use for this function,
+so this is not too helpful yet.  Still, at least we have the scaffolding
+in place to support other systems, should that prove useful.
+
+
+Configure notes:  This function is called 'Perl_signbit' instead of a
+plain 'signbit' because it is easy to imagine a system having a signbit()
+function or macro that doesn't happen to work with our particular choice
+of NVs.  We shouldn't just re-#define signbit as Perl_signbit and expect
+the standard system headers to be happy.  Also, this is a no-context
+function (no pTHX_) because Perl_signbit() is usually re-#defined in
+perl.h as a simple macro call to the system's signbit().
+Users should just always call Perl_signbit().
+
+NOTE: this function is experimental and may change or be
+removed without notice.
+
+       int     Perl_signbit(NV f)
+
+=for hackers
+Found in file numeric.c
+
 =item scan_bin
 X<scan_bin>
 
@@ -2777,6 +3069,116 @@ Found in file pad.c
 
 =back
 
+=head1 Per-Interpreter Variables
+
+=over 8
+
+=item PL_modglobal
+X<PL_modglobal>
+
+C<PL_modglobal> is a general purpose, interpreter global HV for use by
+extensions that need to keep information on a per-interpreter basis.
+In a pinch, it can also be used as a symbol table for extensions
+to share data among each other.  It is a good idea to use keys
+prefixed by the package name of the extension that owns the data.
+
+       HV*     PL_modglobal
+
+=for hackers
+Found in file intrpvar.h
+
+=item PL_na
+X<PL_na>
+
+A convenience variable which is typically used with C<SvPV> when one
+doesn't care about the length of the string.  It is usually more efficient
+to either declare a local variable and use that instead or to use the
+C<SvPV_nolen> macro.
+
+       STRLEN  PL_na
+
+=for hackers
+Found in file intrpvar.h
+
+=item PL_sv_no
+X<PL_sv_no>
+
+This is the C<false> SV.  See C<PL_sv_yes>.  Always refer to this as
+C<&PL_sv_no>.
+
+       SV      PL_sv_no
+
+=for hackers
+Found in file 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 REGEXP Functions
+
+=over 8
+
+=item SvRX
+X<SvRX>
+
+Convenience macro to get the REGEXP from a SV. This is approximately
+equivalent to the following snippet:
+
+    if (SvMAGICAL(sv))
+        mg_get(sv);
+    if (SvROK(sv) &&
+        (tmpsv = (SV*)SvRV(sv)) &&
+        SvTYPE(tmpsv) == SVt_PVMG &&
+        (tmpmg = mg_find(tmpsv, PERL_MAGIC_qr)))
+    {
+        return (REGEXP *)tmpmg->mg_obj;
+    }
+
+NULL will be returned if a REGEXP* is not found.
+
+       REGEXP *        SvRX(SV *sv)
+
+=for hackers
+Found in file regexp.h
+
+=item SvRXOK
+X<SvRXOK>
+
+Returns a boolean indicating whether the SV contains qr magic
+(PERL_MAGIC_qr).
+
+If you want to do something with the REGEXP* later use SvRX instead
+and check for NULL.
+
+       bool    SvRXOK(SV* sv)
+
+=for hackers
+Found in file regexp.h
+
+
+=back
+
 =head1 Simple Exception Handling Macros
 
 =over 8
@@ -3581,9 +3983,9 @@ Found in file sv.h
 =item SvIOK
 X<SvIOK>
 
-Returns a boolean indicating whether the SV contains an integer.
+Returns a U32 value indicating whether the SV contains an integer.
 
-       bool    SvIOK(SV* sv)
+       U32     SvIOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3591,10 +3993,10 @@ Found in file sv.h
 =item SvIOKp
 X<SvIOKp>
 
-Returns a boolean indicating whether the SV contains an integer.  Checks
+Returns a U32 value indicating whether the SV contains an integer.  Checks
 the B<private> setting.  Use C<SvIOK>.
 
-       bool    SvIOKp(SV* sv)
+       U32     SvIOKp(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3685,7 +4087,7 @@ Found in file sv.h
 =item SvIV
 X<SvIV>
 
-Coerces the given SV to an integer and returns it. See  C<SvIVx> for a
+Coerces the given SV to an integer and returns it. See C<SvIVx> for a
 version which guarantees to evaluate sv only once.
 
        IV      SvIV(SV* sv)
@@ -3708,7 +4110,8 @@ Found in file sv.h
 X<SvIVx>
 
 Coerces the given SV to an integer and returns it. Guarantees to evaluate
-sv only once. Use the more efficient C<SvIV> otherwise.
+C<sv> only once. Only use this if C<sv> is an expression with side effects,
+otherwise use the more efficient C<SvIV>.
 
        IV      SvIVx(SV* sv)
 
@@ -3772,10 +4175,10 @@ Found in file sv.h
 =item SvNIOK
 X<SvNIOK>
 
-Returns a boolean indicating whether the SV contains a number, integer or
+Returns a U32 value indicating whether the SV contains a number, integer or
 double.
 
-       bool    SvNIOK(SV* sv)
+       U32     SvNIOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3783,10 +4186,10 @@ Found in file sv.h
 =item SvNIOKp
 X<SvNIOKp>
 
-Returns a boolean indicating whether the SV contains a number, integer or
+Returns a U32 value indicating whether the SV contains a number, integer or
 double.  Checks the B<private> setting.  Use C<SvNIOK>.
 
-       bool    SvNIOKp(SV* sv)
+       U32     SvNIOKp(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3804,9 +4207,9 @@ Found in file sv.h
 =item SvNOK
 X<SvNOK>
 
-Returns a boolean indicating whether the SV contains a double.
+Returns a U32 value indicating whether the SV contains a double.
 
-       bool    SvNOK(SV* sv)
+       U32     SvNOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3814,10 +4217,10 @@ Found in file sv.h
 =item SvNOKp
 X<SvNOKp>
 
-Returns a boolean indicating whether the SV contains a double.  Checks the
+Returns a U32 value indicating whether the SV contains a double.  Checks the
 B<private> setting.  Use C<SvNOK>.
 
-       bool    SvNOKp(SV* sv)
+       U32     SvNOKp(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3855,7 +4258,7 @@ Found in file sv.h
 =item SvNV
 X<SvNV>
 
-Coerce the given SV to a double and return it. See  C<SvNVx> for a version
+Coerce the given SV to a double and return it. See C<SvNVx> for a version
 which guarantees to evaluate sv only once.
 
        NV      SvNV(SV* sv)
@@ -3878,7 +4281,8 @@ Found in file sv.h
 X<SvNVx>
 
 Coerces the given SV to a double and returns it. Guarantees to evaluate
-sv only once. Use the more efficient C<SvNV> otherwise.
+C<sv> only once. Only use this if C<sv> is an expression with side effects,
+otherwise use the more efficient C<SvNV>.
 
        NV      SvNVx(SV* sv)
 
@@ -3898,10 +4302,10 @@ Found in file sv.h
 =item SvOK
 X<SvOK>
 
-Returns a boolean indicating whether the value is an SV. It also tells
+Returns a U32 value indicating whether the value is an SV. It also tells
 whether the value is defined or not.
 
-       bool    SvOK(SV* sv)
+       U32     SvOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3909,12 +4313,12 @@ Found in file sv.h
 =item SvOOK
 X<SvOOK>
 
-Returns a boolean indicating whether the SvIVX is a valid offset value for
+Returns a U32 indicating whether the SvIVX is a valid offset value for
 the SvPVX.  This hack is used internally to speed up removal of characters
 from the beginning of a SvPV.  When SvOOK is true, then the start of the
 allocated string buffer is really (SvPVX - SvIVX).
 
-       bool    SvOOK(SV* sv)
+       U32     SvOOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3922,10 +4326,10 @@ Found in file sv.h
 =item SvPOK
 X<SvPOK>
 
-Returns a boolean indicating whether the SV contains a character
+Returns a U32 value indicating whether the SV contains a character
 string.
 
-       bool    SvPOK(SV* sv)
+       U32     SvPOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -3933,10 +4337,10 @@ Found in file sv.h
 =item SvPOKp
 X<SvPOKp>
 
-Returns a boolean indicating whether the SV contains a character string.
+Returns a U32 value indicating whether the SV contains a character string.
 Checks the B<private> setting.  Use C<SvPOK>.
 
-       bool    SvPOKp(SV* sv)
+       U32     SvPOKp(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4118,7 +4522,9 @@ Found in file sv.h
 =item SvPVx
 X<SvPVx>
 
-A version of C<SvPV> which guarantees to evaluate sv only once.
+A version of C<SvPV> which guarantees to evaluate C<sv> only once.
+Only use this if C<sv> is an expression with side effects, otherwise use the
+more efficient C<SvPVX>.
 
        char*   SvPVx(SV* sv, STRLEN len)
 
@@ -4206,6 +4612,9 @@ 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
@@ -4226,9 +4635,8 @@ 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.
+Same as SvREFCNT_inc, but can only be used with expressions without side
+effects.  Since we don't have to store a temporary value, it's faster.
 
        SV*     SvREFCNT_inc_simple(SV* sv)
 
@@ -4253,7 +4661,20 @@ 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.
 
-       SV*     SvREFCNT_inc_simple_void(SV* sv)
+       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
@@ -4264,7 +4685,7 @@ 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.
 
-       SV*     SvREFCNT_inc_void(SV* sv)
+       void    SvREFCNT_inc_void(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4277,7 +4698,7 @@ value, and you know that I<sv> is not NULL.  The macro doesn't need
 to return a meaningful value, or check for NULLness, so it's smaller
 and faster.
 
-       SV*     SvREFCNT_inc_void_NN(SV* sv)
+       void    SvREFCNT_inc_void_NN(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4287,7 +4708,7 @@ X<SvROK>
 
 Tests if the SV is an RV.
 
-       bool    SvROK(SV* sv)
+       U32     SvROK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4347,7 +4768,7 @@ X<SvSTASH_set>
 
 Set the value of the STASH pointer in sv to val.  See C<SvIV_set>.
 
-       void    SvSTASH_set(SV* sv, STASH* val)
+       void    SvSTASH_set(SV* sv, HV* val)
 
 =for hackers
 Found in file sv.h
@@ -4424,7 +4845,7 @@ X<SvUOK>
 
 Returns a boolean indicating whether the SV contains an unsigned integer.
 
-       void    SvUOK(SV* sv)
+       bool    SvUOK(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4443,9 +4864,11 @@ Found in file sv.h
 =item SvUTF8
 X<SvUTF8>
 
-Returns a boolean indicating whether the SV contains UTF-8 encoded data.
+Returns a U32 value indicating whether the SV contains UTF-8 encoded data.
+Call this after SvPV() in case any call to string overloading updates the
+internal flag.
 
-       bool    SvUTF8(SV* sv)
+       U32     SvUTF8(SV* sv)
 
 =for hackers
 Found in file sv.h
@@ -4497,7 +4920,8 @@ Found in file sv.h
 X<SvUVx>
 
 Coerces the given SV to an unsigned integer and returns it. Guarantees to
-evaluate sv only once. Use the more efficient C<SvUV> otherwise.
+C<sv> only once. Only use this if C<sv> is an expression with side effects,
+otherwise use the more efficient C<SvUV>.
 
        UV      SvUVx(SV* sv)
 
@@ -4557,15 +4981,26 @@ 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.  This is the function that implements C<UNIVERSAL::isa>.  It works
-for class names as well as for objects.
+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>
 
@@ -4721,6 +5156,27 @@ hash lookup will avoid string compare.
 =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>
 
@@ -4756,6 +5212,17 @@ The reference count for the SV is set to 1.
 =for hackers
 Found in file sv.c
 
+=item newSV_type
+X<newSV_type>
+
+Creates a new SV, of the type specificied.  The reference count for the new SV
+is set to 1.
+
+       SV*     newSV_type(svtype type)
+
+=for hackers
+Found in file sv.c
+
 =item sv_2bool
 X<sv_2bool>
 
@@ -4971,6 +5438,16 @@ in terms of this function.
 =for hackers
 Found in file sv.c
 
+=item sv_catpvs
+X<sv_catpvs>
+
+Like C<sv_catpvn>, but takes a literal string instead of a string/length pair.
+
+       void    sv_catpvs(SV* sv, const char* s)
+
+=for hackers
+Found in file handy.h
+
 =item sv_catpv_mg
 X<sv_catpv_mg>
 
@@ -5083,7 +5560,7 @@ X<sv_copypv>
 Copies a stringified representation of the source SV into the
 destination SV.  Automatically performs any necessary mg_get and
 coercion of numeric values into strings.  Guaranteed to preserve
-UTF-8 flag even from overloaded objects.  Similar in nature to
+UTF8 flag even from overloaded objects.  Similar in nature to
 sv_2pv[_flags] but operates directly on an SV instead of just the
 string.  Mostly uses sv_2pv_flags to do its work, except when that
 would lose the UTF-8'ness of the PV.
@@ -5272,7 +5749,7 @@ 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, MGVTBL *vtbl, const char* name, I32 namlen)
+       MAGIC * sv_magicext(SV* sv, SV* obj, int how, const MGVTBL *vtbl, const char* name, I32 namlen)
 
 =for hackers
 Found in file sv.c
@@ -5392,7 +5869,7 @@ X<sv_reftype>
 
 Returns a string describing what the SV is a reference to.
 
-       char*   sv_reftype(const SV* sv, int ob)
+       const char*     sv_reftype(const SV* sv, int ob)
 
 =for hackers
 Found in file sv.c
@@ -5429,7 +5906,8 @@ X<sv_rvweaken>
 Weaken a reference: set the C<SvWEAKREF> flag on this RV; give the
 referred-to SV C<PERL_MAGIC_backref> magic if it hasn't already; and
 push a back-reference to this RV onto the array of backreferences
-associated with that magic.
+associated with that magic. If the RV is magical, set magic will be
+called after the RV is cleared.
 
        SV*     sv_rvweaken(SV *sv)
 
@@ -5553,6 +6031,16 @@ Like C<sv_setpvn>, but also handles 'set' magic.
 =for hackers
 Found in file sv.c
 
+=item sv_setpvs
+X<sv_setpvs>
+
+Like C<sv_setpvn>, but takes a literal string instead of a string/length pair.
+
+       void    sv_setpvs(SV* sv, const char* s)
+
+=for hackers
+Found in file handy.h
+
 =item sv_setpv_mg
 X<sv_setpv_mg>
 
@@ -5779,7 +6267,7 @@ 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
@@ -6703,3 +7191,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: