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 SvTYPE(sv) == SVt_PVCV
22 ? &((XPVCV*)SvANY(sv))->xcv_depth
23 : &((XPVCV*)SvANY(sv))->xpv_fmdepth;
26 /* ------------------------------- sv.h ------------------------------- */
28 PERL_STATIC_INLINE SV *
29 S_SvREFCNT_inc(SV *sv)
35 PERL_STATIC_INLINE SV *
36 S_SvREFCNT_inc_NN(SV *sv)
41 PERL_STATIC_INLINE void
42 S_SvREFCNT_inc_void(SV *sv)
47 PERL_STATIC_INLINE void
48 S_SvREFCNT_dec(pTHX_ SV *sv)
52 if (--(SvREFCNT(sv)) == 0)
53 Perl_sv_free2(aTHX_ sv);
60 PERL_STATIC_INLINE void
64 if (SvOBJECT(SvRV(sv))) HvAMAGIC_on(SvSTASH(SvRV(sv)));
66 PERL_STATIC_INLINE void
69 if (SvROK(sv) && SvOBJECT(SvRV(sv)))
70 HvAMAGIC_off(SvSTASH(SvRV(sv)));
73 PERL_STATIC_INLINE U32
76 assert(!(SvFLAGS(sv) & SVs_PADMY));
77 return SvFLAGS(sv) |= SVs_PADTMP;
79 PERL_STATIC_INLINE U32
80 S_SvPADTMP_off(SV *sv)
82 assert(!(SvFLAGS(sv) & SVs_PADMY));
83 return SvFLAGS(sv) &= ~SVs_PADTMP;
85 PERL_STATIC_INLINE U32
86 S_SvPADSTALE_on(SV *sv)
88 assert(SvFLAGS(sv) & SVs_PADMY);
89 return SvFLAGS(sv) |= SVs_PADSTALE;
91 PERL_STATIC_INLINE U32
92 S_SvPADSTALE_off(SV *sv)
94 assert(SvFLAGS(sv) & SVs_PADMY);
95 return SvFLAGS(sv) &= ~SVs_PADSTALE;