################################################################################
##
##  Version 3.x, Copyright (C) 2004-2013, 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

newRV_inc
newRV_noinc

=implementation

__UNDEFINED__  newRV_inc(sv)  newRV(sv)   /* Replace */

#ifndef newRV_noinc
#if defined(__GNUC__) && !defined(PERL_GCC_BRACE_GROUPS_FORBIDDEN)
#  define newRV_noinc(sv) ({ SV *_sv = (SV *)newRV((sv)); SvREFCNT_dec((sv)); _sv; })
#else
#  define newRV_noinc(sv) ((PL_Sv = (SV *)newRV((sv))), SvREFCNT_dec((sv)), PL_Sv)
#endif
#endif

=xsubs

U32
newRV_inc_REFCNT()
        PREINIT:
                SV *sv, *rv;
        CODE:
                sv = newSViv(42);
                rv = newRV_inc(sv);
                SvREFCNT_dec(sv);
                RETVAL = SvREFCNT(sv);
                sv_2mortal(rv);
        OUTPUT:
                RETVAL

U32
newRV_noinc_REFCNT()
        PREINIT:
                SV *sv, *rv;
        CODE:
                sv = newSViv(42);
                rv = newRV_noinc(sv);
                RETVAL = SvREFCNT(sv);
                sv_2mortal(rv);
        OUTPUT:
                RETVAL

=tests plan => 2

is(&Devel::PPPort::newRV_inc_REFCNT, 1);
is(&Devel::PPPort::newRV_noinc_REFCNT, 1);
