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