/*
=for apidoc AmU||svtype
-An enum of flags for Perl types. These are found in the file B<sv.h>
+An enum of flags for Perl types. These are found in the file B<sv.h>
in the C<svtype> enum. Test these flags with the C<SvTYPE> macro.
=for apidoc AmU||SVt_PV
HV * xcv_stash;
OP * xcv_start;
OP * xcv_root;
- void (*xcv_xsub)(pTHXo_ CV*);
+ void (*xcv_xsub)(pTHX_ CV*);
ANY xcv_xsubany;
GV * xcv_gv;
char * xcv_file;
#define SvAMAGIC_on(sv) (SvFLAGS(sv) |= SVf_AMAGIC)
#define SvAMAGIC_off(sv) (SvFLAGS(sv) &= ~SVf_AMAGIC)
-#define SvGAMAGIC(sv) (SvFLAGS(sv) & (SVs_GMG|SVf_AMAGIC))
+#define SvGAMAGIC(sv) (SvFLAGS(sv) & (SVs_GMG|SVf_AMAGIC))
/*
#define Gv_AMG(stash) \
#ifdef USE_ITHREADS
/* The following uses the FAKE flag to show that a regex pointer is infact
- it's own offset in the regexpad for ithreads */
+ its own offset in the regexpad for ithreads */
#define SvREPADTMP(sv) (SvFLAGS(sv) & SVf_FAKE)
#define SvREPADTMP_on(sv) (SvFLAGS(sv) |= SVf_FAKE)
#define SvREPADTMP_off(sv) (SvFLAGS(sv) &= ~SVf_FAKE)
#define SvPV_force(sv, lp) sv_pvn_force(sv, &lp)
#define SvPV(sv, lp) sv_pvn(sv, &lp)
#define SvPV_nolen(sv) sv_pv(sv)
+#define SvPV_nomg(sv, lp) sv_pvn_nomg(sv, &lp)
+#define SvPV_force_flags(sv, lp, flags) sv_pvn_force_flags(sv, &lp, flags)
#define SvPVutf8_force(sv, lp) sv_pvutf8n_force(sv, &lp)
#define SvPVutf8(sv, lp) sv_pvutf8n(sv, &lp)
#define SvUV(sv) SvUVx(sv)
#define SvTRUE(sv) SvTRUEx(sv)
+/* flag values for sv_*_flags functions */
+#define SV_IMMEDIATE_UNREF 1
+#define SV_GMAGIC 2
+
+#define sv_pvn_force_nomg(sv, lp) sv_pvn_force_flags(sv, lp, 0)
+#define sv_utf8_upgrade_nomg(sv) sv_utf8_upgrade_flags(sv, 0)
+#define sv_catpvn_nomg(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, 0)
+
#ifndef CRIPPLED_CC
/* redefine some things to more efficient inlined versions */
#undef SvNV
#define SvNV(sv) (SvNOK(sv) ? SvNVX(sv) : sv_2nv(sv))
-/* flag values for sv_*_flags functions */
-#define SV_IMMEDIATE_UNREF 1
-#define SV_GMAGIC 2
-
#define sv_setsv_macro(dsv, ssv) sv_setsv_flags(dsv, ssv, SV_GMAGIC)
#define sv_setsv_nomg(dsv, ssv) sv_setsv_flags(dsv, ssv, 0)
#define sv_catsv_macro(dsv, ssv) sv_catsv_flags(dsv, ssv, SV_GMAGIC)
#define sv_catsv_nomg(dsv, ssv) sv_catsv_flags(dsv, ssv, 0)
#define sv_catpvn_macro(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, SV_GMAGIC)
-#define sv_catpvn_nomg(dsv, sstr, slen) sv_catpvn_flags(dsv, sstr, slen, 0)
#define sv_2pv_macro(sv, lp) sv_2pv_flags(sv, lp, SV_GMAGIC)
#define sv_2pv_nomg(sv, lp) sv_2pv_flags(sv, lp, 0)
#define sv_pvn_force_macro(sv, lp) sv_pvn_force_flags(sv, lp, SV_GMAGIC)
-#define sv_pvn_force_nomg(sv, lp) sv_pvn_force_flags(sv, lp, 0)
#define sv_utf8_upgrade_macro(sv) sv_utf8_upgrade_flags(sv, SV_GMAGIC)
-#define sv_utf8_upgrade_nomg(sv) sv_utf8_upgrade_flags(sv, 0)
-/* function style also available for bincompat */
+/* function style also available for sourcecompat */
+#undef sv_setsv
#define sv_setsv(dsv, ssv) sv_setsv_macro(dsv, ssv)
+#undef sv_catsv
#define sv_catsv(dsv, ssv) sv_catsv_macro(dsv, ssv)
+#undef sv_catpvn
#define sv_catpvn(dsv, sstr, slen) sv_catpvn_macro(dsv, sstr, slen)
+#undef sv_2pv
#define sv_2pv(sv, lp) sv_2pv_macro(sv, lp)
+#undef sv_pvn_force
#define sv_pvn_force(sv, lp) sv_pvn_force_macro(sv, lp)
+#undef sv_utf8_upgrade
#define sv_utf8_upgrade(sv) sv_utf8_upgrade_macro(sv)
#undef SvPV
=for apidoc Am|char *|SvGROW|SV* sv|STRLEN len
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
-NUL character). Calls C<sv_grow> to perform the expansion if necessary.
+NUL character). Calls C<sv_grow> to perform the expansion if necessary.
Returns a pointer to the character buffer.
=cut
#define CLONEf_KEEP_PTR_TABLE 2
#define CLONEf_CLONE_HOST 4
-typedef struct {
+struct clone_params {
AV* stashes;
UV flags;
-} clone_params;
+};