Commit | Line | Data |
---|---|---|
25468daa FC |
1 | /* inline.h |
2 | * | |
3 | * Copyright (C) 2012 by Larry Wall and others | |
4 | * | |
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. | |
7 | * | |
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. | |
11 | * | |
12 | * Each section names the header file that the functions "belong" to. | |
13 | */ | |
27669aa4 | 14 | |
1afe1db1 FC |
15 | /* ------------------------------- cv.h ------------------------------- */ |
16 | ||
17 | PERL_STATIC_INLINE I32 * | |
18 | S_CvDEPTHp(const CV * const sv) | |
19 | { | |
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; | |
24 | } | |
25 | ||
27669aa4 FC |
26 | /* ------------------------------- sv.h ------------------------------- */ |
27 | ||
28 | PERL_STATIC_INLINE SV * | |
29 | S_SvREFCNT_inc(SV *sv) | |
30 | { | |
31 | if (sv) | |
32 | SvREFCNT(sv)++; | |
33 | return sv; | |
34 | } | |
35 | PERL_STATIC_INLINE SV * | |
36 | S_SvREFCNT_inc_NN(SV *sv) | |
37 | { | |
38 | SvREFCNT(sv)++; | |
39 | return sv; | |
40 | } | |
41 | PERL_STATIC_INLINE void | |
42 | S_SvREFCNT_inc_void(SV *sv) | |
43 | { | |
44 | if (sv) | |
45 | SvREFCNT(sv)++; | |
46 | } | |
75e16a44 FC |
47 | PERL_STATIC_INLINE void |
48 | S_SvREFCNT_dec(pTHX_ SV *sv) | |
49 | { | |
50 | if (sv) { | |
51 | if (SvREFCNT(sv)) { | |
52 | if (--(SvREFCNT(sv)) == 0) | |
53 | Perl_sv_free2(aTHX_ sv); | |
54 | } else { | |
55 | sv_free(sv); | |
56 | } | |
57 | } | |
58 | } | |
541377b1 FC |
59 | |
60 | PERL_STATIC_INLINE void | |
61 | SvAMAGIC_on(SV *sv) | |
62 | { | |
63 | assert(SvROK(sv)); | |
64 | if (SvOBJECT(SvRV(sv))) HvAMAGIC_on(SvSTASH(SvRV(sv))); | |
65 | } | |
66 | PERL_STATIC_INLINE void | |
67 | SvAMAGIC_off(SV *sv) | |
68 | { | |
69 | if (SvROK(sv) && SvOBJECT(SvRV(sv))) | |
70 | HvAMAGIC_off(SvSTASH(SvRV(sv))); | |
71 | } | |
72 | ||
73 | PERL_STATIC_INLINE U32 | |
74 | S_SvPADTMP_on(SV *sv) | |
75 | { | |
76 | assert(!(SvFLAGS(sv) & SVs_PADMY)); | |
77 | return SvFLAGS(sv) |= SVs_PADTMP; | |
78 | } | |
79 | PERL_STATIC_INLINE U32 | |
80 | S_SvPADTMP_off(SV *sv) | |
81 | { | |
82 | assert(!(SvFLAGS(sv) & SVs_PADMY)); | |
83 | return SvFLAGS(sv) &= ~SVs_PADTMP; | |
84 | } | |
85 | PERL_STATIC_INLINE U32 | |
86 | S_SvPADSTALE_on(SV *sv) | |
87 | { | |
88 | assert(SvFLAGS(sv) & SVs_PADMY); | |
89 | return SvFLAGS(sv) |= SVs_PADSTALE; | |
90 | } | |
91 | PERL_STATIC_INLINE U32 | |
92 | S_SvPADSTALE_off(SV *sv) | |
93 | { | |
94 | assert(SvFLAGS(sv) & SVs_PADMY); | |
95 | return SvFLAGS(sv) &= ~SVs_PADSTALE; | |
96 | } |