Blame parts/inc/Sv_set

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
__UNDEFINED__
Packit 7d6a7d
Packit 7d6a7d
=implementation
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__ SvMAGIC_set(sv, val) \
Packit 7d6a7d
                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
Packit 7d6a7d
                (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION < 5.9.3 }
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__ SvPVX_const(sv)     ((const char*) (0 + SvPVX(sv)))
Packit 7d6a7d
__UNDEFINED__ SvPVX_mutable(sv)   (0 + SvPVX(sv))
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__ SvRV_set(sv, val) \
Packit 7d6a7d
                STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
Packit 7d6a7d
                (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END
Packit 7d6a7d
Packit 7d6a7d
#else
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__ SvPVX_const(sv)     ((const char*)((sv)->sv_u.svu_pv))
Packit 7d6a7d
__UNDEFINED__ SvPVX_mutable(sv)   ((sv)->sv_u.svu_pv)
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__ SvRV_set(sv, val) \
Packit 7d6a7d
                STMT_START { assert(SvTYPE(sv) >=  SVt_RV); \
Packit 7d6a7d
                ((sv)->sv_u.svu_rv = (val)); } STMT_END
Packit 7d6a7d
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__ SvSTASH_set(sv, val) \
Packit 7d6a7d
                STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
Packit 7d6a7d
                (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
Packit 7d6a7d
Packit 7d6a7d
#if { VERSION < 5.004 }
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__ SvUV_set(sv, val) \
Packit 7d6a7d
                STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
Packit 7d6a7d
                (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END
Packit 7d6a7d
Packit 7d6a7d
#else
Packit 7d6a7d
Packit 7d6a7d
__UNDEFINED__ SvUV_set(sv, val) \
Packit 7d6a7d
                STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
Packit 7d6a7d
                (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END
Packit 7d6a7d
Packit 7d6a7d
#endif
Packit 7d6a7d
Packit 7d6a7d
=xsubs
Packit 7d6a7d
Packit 7d6a7d
IV
Packit 7d6a7d
TestSvUV_set(sv, val)
Packit 7d6a7d
        SV *sv
Packit 7d6a7d
        UV val
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                SvUV_set(sv, val);
Packit 7d6a7d
                RETVAL = SvUVX(sv) == val ? 42 : -1;
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
IV
Packit 7d6a7d
TestSvPVX_const(sv)
Packit 7d6a7d
        SV *sv
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = strEQ(SvPVX_const(sv), "mhx") ? 43 : -1;
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
IV
Packit 7d6a7d
TestSvPVX_mutable(sv)
Packit 7d6a7d
        SV *sv
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                RETVAL = strEQ(SvPVX_mutable(sv), "mhx") ? 44 : -1;
Packit 7d6a7d
        OUTPUT:
Packit 7d6a7d
                RETVAL
Packit 7d6a7d
Packit 7d6a7d
void
Packit 7d6a7d
TestSvSTASH_set(sv, name)
Packit 7d6a7d
        SV *sv
Packit 7d6a7d
        char *name
Packit 7d6a7d
        CODE:
Packit 7d6a7d
                sv = SvRV(sv);
Packit 7d6a7d
                SvREFCNT_dec(SvSTASH(sv));
Packit 7d6a7d
                SvSTASH_set(sv, (HV*) SvREFCNT_inc(gv_stashpv(name, 0)));
Packit 7d6a7d
Packit 7d6a7d
=tests plan => 5
Packit 7d6a7d
Packit 7d6a7d
my $foo = 5;
Packit 7d6a7d
ok(&Devel::PPPort::TestSvUV_set($foo, 12345), 42);
Packit 7d6a7d
ok(&Devel::PPPort::TestSvPVX_const("mhx"), 43);
Packit 7d6a7d
ok(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44);
Packit 7d6a7d
Packit 7d6a7d
my $bar = [];
Packit 7d6a7d
Packit 7d6a7d
bless $bar, 'foo';
Packit 7d6a7d
ok($bar->x(), 'foobar');
Packit 7d6a7d
Packit 7d6a7d
Devel::PPPort::TestSvSTASH_set($bar, 'bar');
Packit 7d6a7d
ok($bar->x(), 'hacker');
Packit 7d6a7d
Packit 7d6a7d
package foo;
Packit 7d6a7d
Packit 7d6a7d
sub x { 'foobar' }
Packit 7d6a7d
Packit 7d6a7d
package bar;
Packit 7d6a7d
Packit 7d6a7d
sub x { 'hacker' }