Blame parts/inc/SvREFCNT

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
}