3 * Copyright (C) 2012 by Larry Wall and others
5 * You may distribute under the terms of either the GNU General Public
6 * License or the Artistic License, as specified in the README file.
8 * This file is a home for static inline functions that cannot go in other
9 * headers files, because they depend on proto.h (included after most other
10 * headers) or struct definitions.
12 * Each section names the header file that the functions "belong" to.
15 /* ------------------------------- cv.h ------------------------------- */
17 PERL_STATIC_INLINE I32 *
18 S_CvDEPTHp(const CV * const sv)
20 assert(SvTYPE(sv) == SVt_PVCV || SvTYPE(sv) == SVt_PVFM);
21 return &((XPVCV*)SvANY(sv))->xcv_depth;
24 /* ------------------------------- sv.h ------------------------------- */
26 PERL_STATIC_INLINE SV *
27 S_SvREFCNT_inc(SV *sv)
33 PERL_STATIC_INLINE SV *
34 S_SvREFCNT_inc_NN(SV *sv)
39 PERL_STATIC_INLINE void
40 S_SvREFCNT_inc_void(SV *sv)
45 PERL_STATIC_INLINE void
46 S_SvREFCNT_dec(pTHX_ SV *sv)
50 if (--(SvREFCNT(sv)) == 0)
51 Perl_sv_free2(aTHX_ sv);
58 PERL_STATIC_INLINE void
62 if (SvOBJECT(SvRV(sv))) HvAMAGIC_on(SvSTASH(SvRV(sv)));
64 PERL_STATIC_INLINE void
67 if (SvROK(sv) && SvOBJECT(SvRV(sv)))
68 HvAMAGIC_off(SvSTASH(SvRV(sv)));
71 PERL_STATIC_INLINE U32
74 assert(!(SvFLAGS(sv) & SVs_PADMY));
75 return SvFLAGS(sv) |= SVs_PADTMP;
77 PERL_STATIC_INLINE U32
78 S_SvPADTMP_off(SV *sv)
80 assert(!(SvFLAGS(sv) & SVs_PADMY));
81 return SvFLAGS(sv) &= ~SVs_PADTMP;
83 PERL_STATIC_INLINE U32
84 S_SvPADSTALE_on(SV *sv)
86 assert(SvFLAGS(sv) & SVs_PADMY);
87 return SvFLAGS(sv) |= SVs_PADSTALE;
89 PERL_STATIC_INLINE U32
90 S_SvPADSTALE_off(SV *sv)
92 assert(SvFLAGS(sv) & SVs_PADMY);
93 return SvFLAGS(sv) &= ~SVs_PADSTALE;
96 PERL_STATIC_INLINE STRLEN
97 S_sv_or_pv_pos_u2b(pTHX_ SV *sv, const char *pv, STRLEN pos, STRLEN *lenp)
100 U8 *hopped = utf8_hop((U8 *)pv, pos);
101 if (lenp) *lenp = (STRLEN)(utf8_hop(hopped, *lenp) - hopped);
102 return (STRLEN)(hopped - (U8 *)pv);
104 return sv_pos_u2b_flags(sv,pos,lenp,SV_CONST_RETURN);