1 ################################################################################
5 ## $Date: 2006/05/22 00:51:52 +0200 $
7 ################################################################################
9 ## Version 3.x, Copyright (C) 2004-2006, Marcus Holland-Moritz.
10 ## Version 2.x, Copyright (C) 2001, Paul Marquess.
11 ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
13 ## This program is free software; you can redistribute it and/or
14 ## modify it under the same terms as Perl itself.
16 ################################################################################
29 # ifdef PERL_USE_GCC_BRACE_GROUPS
30 # define SvREFCNT_inc(sv) \
32 SV * const _sv = (SV*)(sv); \
38 # define SvREFCNT_inc(sv) \
39 ((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
43 #ifndef SvREFCNT_inc_simple
44 # ifdef PERL_USE_GCC_BRACE_GROUPS
45 # define SvREFCNT_inc_simple(sv) \
52 # define SvREFCNT_inc_simple(sv) \
53 ((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
57 #ifndef SvREFCNT_inc_NN
58 # ifdef PERL_USE_GCC_BRACE_GROUPS
59 # define SvREFCNT_inc_NN(sv) \
61 SV * const _sv = (SV*)(sv); \
66 # define SvREFCNT_inc_NN(sv) \
67 (PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
71 #ifndef SvREFCNT_inc_void
72 # ifdef PERL_USE_GCC_BRACE_GROUPS
73 # define SvREFCNT_inc_void(sv) \
75 SV * const _sv = (SV*)(sv); \
77 (void)(SvREFCNT(_sv)++); \
80 # define SvREFCNT_inc_void(sv) \
81 (void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
85 __UNDEFINED__ SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
86 __UNDEFINED__ SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv))
87 __UNDEFINED__ SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
88 __UNDEFINED__ SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
98 XPUSHs(newSViv(SvREFCNT(sv) == 1));
99 svr = SvREFCNT_inc(sv);
100 XPUSHs(newSViv(sv == svr));
101 XPUSHs(newSViv(SvREFCNT(sv) == 2));
102 svr = SvREFCNT_inc_simple(sv);
103 XPUSHs(newSViv(sv == svr));
104 XPUSHs(newSViv(SvREFCNT(sv) == 3));
105 svr = SvREFCNT_inc_NN(sv);
106 XPUSHs(newSViv(sv == svr));
107 XPUSHs(newSViv(SvREFCNT(sv) == 4));
108 svr = SvREFCNT_inc_simple_NN(sv);
109 XPUSHs(newSViv(sv == svr));
110 XPUSHs(newSViv(SvREFCNT(sv) == 5));
111 SvREFCNT_inc_void(sv);
112 XPUSHs(newSViv(SvREFCNT(sv) == 6));
113 SvREFCNT_inc_simple_void(sv);
114 XPUSHs(newSViv(SvREFCNT(sv) == 7));
115 SvREFCNT_inc_void_NN(sv);
116 XPUSHs(newSViv(SvREFCNT(sv) == 8));
117 SvREFCNT_inc_simple_void_NN(sv);
118 XPUSHs(newSViv(SvREFCNT(sv) == 9));
119 while (SvREFCNT(sv) > 1)
121 XPUSHs(newSViv(SvREFCNT(sv) == 1));
127 for (Devel::PPPort::SvREFCNT()) {
128 ok(defined $_ and $_);