|
Packit |
7d6a7d |
################################################################################
|
|
Packit |
7d6a7d |
##
|
|
Packit |
7d6a7d |
## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
|
|
Packit |
7d6a7d |
## Version 2.x, Copyright (C) 2001, Paul Marquess.
|
|
Packit |
7d6a7d |
## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
|
|
Packit |
7d6a7d |
##
|
|
Packit |
7d6a7d |
## This program is free software; you can redistribute it and/or
|
|
Packit |
7d6a7d |
## modify it under the same terms as Perl itself.
|
|
Packit |
7d6a7d |
##
|
|
Packit |
7d6a7d |
################################################################################
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=provides
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
SvREFCNT_inc
|
|
Packit |
7d6a7d |
SvREFCNT_inc_simple
|
|
Packit |
7d6a7d |
SvREFCNT_inc_NN
|
|
Packit |
7d6a7d |
SvREFCNT_inc_void
|
|
Packit |
7d6a7d |
__UNDEFINED__
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=implementation
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#ifndef SvREFCNT_inc
|
|
Packit |
7d6a7d |
# ifdef PERL_USE_GCC_BRACE_GROUPS
|
|
Packit |
7d6a7d |
# define SvREFCNT_inc(sv) \
|
|
Packit |
7d6a7d |
({ \
|
|
Packit |
7d6a7d |
SV * const _sv = (SV*)(sv); \
|
|
Packit |
7d6a7d |
if (_sv) \
|
|
Packit |
7d6a7d |
(SvREFCNT(_sv))++; \
|
|
Packit |
7d6a7d |
_sv; \
|
|
Packit |
7d6a7d |
})
|
|
Packit |
7d6a7d |
# else
|
|
Packit |
7d6a7d |
# define SvREFCNT_inc(sv) \
|
|
Packit |
7d6a7d |
((PL_Sv=(SV*)(sv)) ? (++(SvREFCNT(PL_Sv)),PL_Sv) : NULL)
|
|
Packit |
7d6a7d |
# endif
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#ifndef SvREFCNT_inc_simple
|
|
Packit |
7d6a7d |
# ifdef PERL_USE_GCC_BRACE_GROUPS
|
|
Packit |
7d6a7d |
# define SvREFCNT_inc_simple(sv) \
|
|
Packit |
7d6a7d |
({ \
|
|
Packit |
7d6a7d |
if (sv) \
|
|
Packit |
7d6a7d |
(SvREFCNT(sv))++; \
|
|
Packit |
7d6a7d |
(SV *)(sv); \
|
|
Packit |
7d6a7d |
})
|
|
Packit |
7d6a7d |
# else
|
|
Packit |
7d6a7d |
# define SvREFCNT_inc_simple(sv) \
|
|
Packit |
7d6a7d |
((sv) ? (SvREFCNT(sv)++,(SV*)(sv)) : NULL)
|
|
Packit |
7d6a7d |
# endif
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#ifndef SvREFCNT_inc_NN
|
|
Packit |
7d6a7d |
# ifdef PERL_USE_GCC_BRACE_GROUPS
|
|
Packit |
7d6a7d |
# define SvREFCNT_inc_NN(sv) \
|
|
Packit |
7d6a7d |
({ \
|
|
Packit |
7d6a7d |
SV * const _sv = (SV*)(sv); \
|
|
Packit |
7d6a7d |
SvREFCNT(_sv)++; \
|
|
Packit |
7d6a7d |
_sv; \
|
|
Packit |
7d6a7d |
})
|
|
Packit |
7d6a7d |
# else
|
|
Packit |
7d6a7d |
# define SvREFCNT_inc_NN(sv) \
|
|
Packit |
7d6a7d |
(PL_Sv=(SV*)(sv),++(SvREFCNT(PL_Sv)),PL_Sv)
|
|
Packit |
7d6a7d |
# endif
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#ifndef SvREFCNT_inc_void
|
|
Packit |
7d6a7d |
# ifdef PERL_USE_GCC_BRACE_GROUPS
|
|
Packit |
7d6a7d |
# define SvREFCNT_inc_void(sv) \
|
|
Packit |
7d6a7d |
({ \
|
|
Packit |
7d6a7d |
SV * const _sv = (SV*)(sv); \
|
|
Packit |
7d6a7d |
if (_sv) \
|
|
Packit |
7d6a7d |
(void)(SvREFCNT(_sv)++); \
|
|
Packit |
7d6a7d |
})
|
|
Packit |
7d6a7d |
# else
|
|
Packit |
7d6a7d |
# define SvREFCNT_inc_void(sv) \
|
|
Packit |
7d6a7d |
(void)((PL_Sv=(SV*)(sv)) ? ++(SvREFCNT(PL_Sv)) : 0)
|
|
Packit |
7d6a7d |
# endif
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
__UNDEFINED__ SvREFCNT_inc_simple_void(sv) STMT_START { if (sv) SvREFCNT(sv)++; } STMT_END
|
|
Packit |
7d6a7d |
__UNDEFINED__ SvREFCNT_inc_simple_NN(sv) (++SvREFCNT(sv), (SV*)(sv))
|
|
Packit |
7d6a7d |
__UNDEFINED__ SvREFCNT_inc_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
|
|
Packit |
7d6a7d |
__UNDEFINED__ SvREFCNT_inc_simple_void_NN(sv) (void)(++SvREFCNT((SV*)(sv)))
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=xsubs
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
void
|
|
Packit |
7d6a7d |
SvREFCNT()
|
|
Packit |
7d6a7d |
PREINIT:
|
|
Packit |
7d6a7d |
SV *sv, *svr;
|
|
Packit |
7d6a7d |
PPCODE:
|
|
Packit |
7d6a7d |
sv = newSV(0);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 1);
|
|
Packit |
7d6a7d |
svr = SvREFCNT_inc(sv);
|
|
Packit |
7d6a7d |
mXPUSHi(sv == svr);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 2);
|
|
Packit |
7d6a7d |
svr = SvREFCNT_inc_simple(sv);
|
|
Packit |
7d6a7d |
mXPUSHi(sv == svr);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 3);
|
|
Packit |
7d6a7d |
svr = SvREFCNT_inc_NN(sv);
|
|
Packit |
7d6a7d |
mXPUSHi(sv == svr);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 4);
|
|
Packit |
7d6a7d |
svr = SvREFCNT_inc_simple_NN(sv);
|
|
Packit |
7d6a7d |
mXPUSHi(sv == svr);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 5);
|
|
Packit |
7d6a7d |
SvREFCNT_inc_void(sv);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 6);
|
|
Packit |
7d6a7d |
SvREFCNT_inc_simple_void(sv);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 7);
|
|
Packit |
7d6a7d |
SvREFCNT_inc_void_NN(sv);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 8);
|
|
Packit |
7d6a7d |
SvREFCNT_inc_simple_void_NN(sv);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 9);
|
|
Packit |
7d6a7d |
while (SvREFCNT(sv) > 1)
|
|
Packit |
7d6a7d |
SvREFCNT_dec(sv);
|
|
Packit |
7d6a7d |
mXPUSHi(SvREFCNT(sv) == 1);
|
|
Packit |
7d6a7d |
SvREFCNT_dec(sv);
|
|
Packit |
7d6a7d |
XSRETURN(14);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=tests plan => 14
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
for (Devel::PPPort::SvREFCNT()) {
|
|
Packit |
7d6a7d |
ok(defined $_ and $_);
|
|
Packit |
7d6a7d |
}
|