1 ################################################################################
3 ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz.
4 ## Version 2.x, Copyright (C) 2001, Paul Marquess.
5 ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
7 ## This program is free software; you can redistribute it and/or
8 ## modify it under the same terms as Perl itself.
10 ################################################################################
18 __UNDEFINED__ SvMAGIC_set(sv, val) \
19 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
20 (((XPVMG*) SvANY(sv))->xmg_magic = (val)); } STMT_END
22 #if { VERSION < 5.9.3 }
24 __UNDEFINED__ SvPVX_const(sv) ((const char*) (0 + SvPVX(sv)))
25 __UNDEFINED__ SvPVX_mutable(sv) (0 + SvPVX(sv))
27 __UNDEFINED__ SvRV_set(sv, val) \
28 STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
29 (((XRV*) SvANY(sv))->xrv_rv = (val)); } STMT_END
33 __UNDEFINED__ SvPVX_const(sv) ((const char*)((sv)->sv_u.svu_pv))
34 __UNDEFINED__ SvPVX_mutable(sv) ((sv)->sv_u.svu_pv)
36 __UNDEFINED__ SvRV_set(sv, val) \
37 STMT_START { assert(SvTYPE(sv) >= SVt_RV); \
38 ((sv)->sv_u.svu_rv = (val)); } STMT_END
42 __UNDEFINED__ SvSTASH_set(sv, val) \
43 STMT_START { assert(SvTYPE(sv) >= SVt_PVMG); \
44 (((XPVMG*) SvANY(sv))->xmg_stash = (val)); } STMT_END
46 #if { VERSION < 5.004 }
48 __UNDEFINED__ SvUV_set(sv, val) \
49 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
50 (((XPVIV*) SvANY(sv))->xiv_iv = (IV) (val)); } STMT_END
54 __UNDEFINED__ SvUV_set(sv, val) \
55 STMT_START { assert(SvTYPE(sv) == SVt_IV || SvTYPE(sv) >= SVt_PVIV); \
56 (((XPVUV*) SvANY(sv))->xuv_uv = (val)); } STMT_END
68 RETVAL = SvUVX(sv) == val ? 42 : -1;
76 RETVAL = strEQ(SvPVX_const(sv), "mhx") ? 43 : -1;
84 RETVAL = strEQ(SvPVX_mutable(sv), "mhx") ? 44 : -1;
89 TestSvSTASH_set(sv, name)
94 SvREFCNT_dec(SvSTASH(sv));
95 SvSTASH_set(sv, (HV*) SvREFCNT_inc(gv_stashpv(name, 0)));
100 ok(&Devel::PPPort::TestSvUV_set($foo, 12345), 42);
101 ok(&Devel::PPPort::TestSvPVX_const("mhx"), 43);
102 ok(&Devel::PPPort::TestSvPVX_mutable("mhx"), 44);
107 ok($bar->x(), 'foobar');
109 Devel::PPPort::TestSvSTASH_set($bar, 'bar');
110 ok($bar->x(), 'hacker');