=for apidoc AmnU||SVt_PVMG
Type flag for scalars. See L</svtype>.
-=for apidoc AmnU||SVt_INVLIST
-Type flag for scalars. See L</svtype>.
+=for apidoc CmnU||SVt_INVLIST
+Type flag for scalars. See L<perlapi/svtype>.
=for apidoc AmnU||SVt_REGEXP
Type flag for regular expressions. See L</svtype>.
SVt_PVCV, /* 13 */
SVt_PVFM, /* 14 */
SVt_PVIO, /* 15 */
+ /* 16-31: Unused, though one should be reserved for a
+ * freed sv, if the other 3 bits below the flags ones
+ * get allocated */
SVt_LAST /* keep last in enum. used to size arrays */
} svtype;
* tables are in perl.h. There are also two affected names tables in dump.c,
* one in B.xs, and 'bodies_by_type[]' in sv.c.
*
- * The bits that match 0xf0 are CURRENTLY UNUSED, except that 0xFF means a
- * freed SV. The bits above that are for flags, like SVf_IOK */
+ * The bits that match 0xe0 are CURRENTLY UNUSED
+ * The bits above that are for flags, like SVf_IOK */
-#define SVt_MASK 0xf /* smallest bitmask that covers all types */
+#define SVt_MASK 0x1f /* smallest bitmask that covers all types */
#ifndef PERL_CORE
/* Fast Boyer Moore tables are now stored in magic attached to PVMGs */
Returns the value of the object's reference count. Exposed
to perl code via Internals::SvREFCNT().
-=for apidoc Am|SV*|SvREFCNT_inc|SV* sv
+=for apidoc SvREFCNT_inc
Increments the reference count of the given SV, returning the SV.
-All of the following C<SvREFCNT_inc>* macros are optimized versions of
+All of the following C<SvREFCNT_inc>* are optimized versions of
C<SvREFCNT_inc>, and can be replaced with C<SvREFCNT_inc>.
-=for apidoc Am|SV*|SvREFCNT_inc_NN|SV* sv
+=for apidoc SvREFCNT_inc_NN
Same as C<SvREFCNT_inc>, but can only be used if you know C<sv>
is not C<NULL>. Since we don't have to check the NULLness, it's faster
and smaller.
-=for apidoc Am|void|SvREFCNT_inc_void|SV* sv
+=for apidoc SvREFCNT_inc_void
Same as C<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.
to return a meaningful value, or check for NULLness, so it's smaller
and faster.
-=for apidoc Am|void|SvREFCNT_dec|SV* sv
+=for apidoc SvREFCNT_dec
Decrements the reference count of the given SV. C<sv> may be C<NULL>.
-=for apidoc Am|void|SvREFCNT_dec_NN|SV* sv
+=for apidoc SvREFCNT_dec_NN
Same as C<SvREFCNT_dec>, but can only be used if you know C<sv>
is not C<NULL>. Since we don't have to check the NULLness, it's faster
and smaller.
#define SvFLAGS(sv) (sv)->sv_flags
#define SvREFCNT(sv) (sv)->sv_refcnt
-#define SvREFCNT_inc(sv) S_SvREFCNT_inc(MUTABLE_SV(sv))
+#define SvREFCNT_inc(sv) Perl_SvREFCNT_inc(MUTABLE_SV(sv))
#define SvREFCNT_inc_simple(sv) SvREFCNT_inc(sv)
-#define SvREFCNT_inc_NN(sv) S_SvREFCNT_inc_NN(MUTABLE_SV(sv))
-#define SvREFCNT_inc_void(sv) S_SvREFCNT_inc_void(MUTABLE_SV(sv))
+#define SvREFCNT_inc_NN(sv) Perl_SvREFCNT_inc_NN(MUTABLE_SV(sv))
+#define SvREFCNT_inc_void(sv) Perl_SvREFCNT_inc_void(MUTABLE_SV(sv))
/* These guys don't need the curly blocks */
#define SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
#define SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT(MUTABLE_SV(sv)))
#define SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT(MUTABLE_SV(sv)))
-#define SvREFCNT_dec(sv) S_SvREFCNT_dec(aTHX_ MUTABLE_SV(sv))
-#define SvREFCNT_dec_NN(sv) S_SvREFCNT_dec_NN(aTHX_ MUTABLE_SV(sv))
+#define SvREFCNT_dec(sv) Perl_SvREFCNT_dec(aTHX_ MUTABLE_SV(sv))
+#define SvREFCNT_dec_NN(sv) Perl_SvREFCNT_dec_NN(aTHX_ MUTABLE_SV(sv))
#define SVTYPEMASK 0xff
#define SvTYPE(sv) ((svtype)((sv)->sv_flags & SVTYPEMASK))
#define PRIVSHIFT 4 /* (SVp_?OK >> PRIVSHIFT) == SVf_?OK */
-/* SVf_AMAGIC means that the stash *may* have have overload methods. It's
+/* SVf_AMAGIC means that the stash *may* have overload methods. It's
* set each time a function is compiled into a stash, and is reset by the
* overload code when called for the first time and finds that there are
* no overload methods. Note that this used to be set on the object; but
=for apidoc Am|bool|SvIOK_UV|SV* sv
Returns a boolean indicating whether the SV contains an integer that must be
interpreted as unsigned. A non-negative integer whose value is within the
-range of both an IV and a UV may be be flagged as either C<SvUOK> or C<SVIOK>.
+range of both an IV and a UV may be flagged as either C<SvUOK> or C<SvIOK>.
=for apidoc Am|bool|SvUOK|SV* sv
Returns a boolean indicating whether the SV contains an integer that must be
interpreted as unsigned. A non-negative integer whose value is within the
-range of both an IV and a UV may be be flagged as either C<SvUOK> or C<SVIOK>.
+range of both an IV and a UV may be flagged as either C<SvUOK> or C<SvIOK>.
=for apidoc Am|bool|SvIOK_notUV|SV* sv
Returns a boolean indicating whether the SV contains a signed integer.
#define SvPADTMP_on(sv) (SvFLAGS(sv) |= SVs_PADTMP)
#define SvPADTMP_off(sv) (SvFLAGS(sv) &= ~SVs_PADTMP)
-#define SvPADSTALE_on(sv) S_SvPADSTALE_on(MUTABLE_SV(sv))
-#define SvPADSTALE_off(sv) S_SvPADSTALE_off(MUTABLE_SV(sv))
+#define SvPADSTALE_on(sv) Perl_SvPADSTALE_on(MUTABLE_SV(sv))
+#define SvPADSTALE_off(sv) Perl_SvPADSTALE_off(MUTABLE_SV(sv))
#define SvTEMP(sv) (SvFLAGS(sv) & SVs_TEMP)
#define SvTEMP_on(sv) (SvFLAGS(sv) |= SVs_TEMP)
/*
=for apidoc Am|U32|SvREADONLY|SV* sv
Returns true if the argument is readonly, otherwise returns false.
-Exposed to to perl code via Internals::SvREADONLY().
+Exposed to perl code via Internals::SvREADONLY().
=for apidoc Am|U32|SvREADONLY_on|SV* sv
Mark an object as readonly. Exactly what this means depends on the object
Like C<SvPVutf8>, but does not process get magic.
=for apidoc Am|char*|SvPVutf8_or_null|SV* sv|STRLEN len
-Like C<SvPVutf8>, but when C<sv> is undef then returns C<NULL>.
+Like C<SvPVutf8>, but when C<sv> is undef, returns C<NULL>.
=for apidoc Am|char*|SvPVutf8_or_null_nomg|SV* sv|STRLEN len
Like C<SvPVutf8_or_null>, but does not process get magic.
Like C<SvPV_nolen>, but converts C<sv> to UTF-8 first if necessary.
=for apidoc Am|char*|SvPVbyte_force|SV* sv|STRLEN len
-Like C<SvPV_force>, but converts C<sv> to byte representation first if necessary.
+Like C<SvPV_force>, but converts C<sv> to byte representation first if
+necessary. If the SV cannot be downgraded from UTF-8, this croaks.
=for apidoc Am|char*|SvPVbyte|SV* sv|STRLEN len
-Like C<SvPV>, but converts C<sv> to byte representation first if necessary.
+Like C<SvPV>, but converts C<sv> to byte representation first if necessary. If
+the SV cannot be downgraded from UTF-8, this croaks.
=for apidoc Am|char*|SvPVbyte_nomg|SV* sv|STRLEN len
Like C<SvPVbyte>, but does not process get magic.
=for apidoc Am|char*|SvPVbyte_or_null|SV* sv|STRLEN len
-Like C<SvPVbyte>, but when C<sv> is undef then returns C<NULL>.
+Like C<SvPVbyte>, but when C<sv> is undef, returns C<NULL>.
=for apidoc Am|char*|SvPVbyte_or_null_nomg|SV* sv|STRLEN len
Like C<SvPVbyte_or_null>, but does not process get magic.
=for apidoc Am|char*|SvPVbyte_nolen|SV* sv
-Like C<SvPV_nolen>, but converts C<sv> to byte representation first if necessary.
+Like C<SvPV_nolen>, but converts C<sv> to byte representation first if
+necessary. If the SV cannot be downgraded from UTF-8, this croaks.
=for apidoc Am|char*|SvPVutf8x_force|SV* sv|STRLEN len
Like C<SvPV_force>, but converts C<sv> to UTF-8 first if necessary.
=for apidoc Am|char*|SvPVbytex_force|SV* sv|STRLEN len
Like C<SvPV_force>, but converts C<sv> to byte representation first if necessary.
Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte_force>
-otherwise.
+otherwise. If the SV cannot be downgraded from UTF-8, this croaks.
=for apidoc Am|char*|SvPVbytex|SV* sv|STRLEN len
Like C<SvPV>, but converts C<sv> to byte representation first if necessary.
Guarantees to evaluate C<sv> only once; use the more efficient C<SvPVbyte>
-otherwise.
+otherwise. If the SV cannot be downgraded from UTF-8, this croaks.
=for apidoc Am|U32|SvIsCOW|SV* sv
Returns a U32 value indicating whether the SV is Copy-On-Write (either shared
#define SvPVutf8x_force(sv, lp) sv_pvutf8n_force(sv, &lp)
#define SvPVbytex_force(sv, lp) sv_pvbyten_force(sv, &lp)
-#define SvTRUE(sv) (LIKELY(sv) && SvTRUE_NN(sv))
+#define SvTRUE(sv) Perl_SvTRUE(aTHX_ sv)
#define SvTRUE_nomg(sv) (LIKELY(sv) && SvTRUE_nomg_NN(sv))
#define SvTRUE_NN(sv) (SvGETMAGIC(sv), SvTRUE_nomg_NN(sv))
#define SvTRUE_nomg_NN(sv) (SvTRUE_common(sv, sv_2bool_nomg(sv)))