|
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 |
SvUOK
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=implementation
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
__UNDEFINED__ sv_setuv(sv, uv) \
|
|
Packit |
7d6a7d |
STMT_START { \
|
|
Packit |
7d6a7d |
UV TeMpUv = uv; \
|
|
Packit |
7d6a7d |
if (TeMpUv <= IV_MAX) \
|
|
Packit |
7d6a7d |
sv_setiv(sv, TeMpUv); \
|
|
Packit |
7d6a7d |
else \
|
|
Packit |
7d6a7d |
sv_setnv(sv, (double)TeMpUv); \
|
|
Packit |
7d6a7d |
} STMT_END
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
__UNDEFINED__ newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
__UNDEFINED__ sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
|
|
Packit |
7d6a7d |
__UNDEFINED__ SvUVX(sv) ((UV)SvIVX(sv))
|
|
Packit |
7d6a7d |
__UNDEFINED__ SvUVXx(sv) SvUVX(sv)
|
|
Packit |
7d6a7d |
__UNDEFINED__ SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
|
|
Packit |
7d6a7d |
__UNDEFINED__ SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
/* Hint: sv_uv
|
|
Packit |
7d6a7d |
* Always use the SvUVx() macro instead of sv_uv().
|
|
Packit |
7d6a7d |
*/
|
|
Packit |
7d6a7d |
__UNDEFINED__ sv_uv(sv) SvUVx(sv)
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
#if !defined(SvUOK) && defined(SvIOK_UV)
|
|
Packit |
7d6a7d |
# define SvUOK(sv) SvIOK_UV(sv)
|
|
Packit |
7d6a7d |
#endif
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
__UNDEFINED__ XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) )
|
|
Packit |
7d6a7d |
__UNDEFINED__ XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
__UNDEFINED__ PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
|
|
Packit |
7d6a7d |
__UNDEFINED__ XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=xsubs
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
SV *
|
|
Packit |
7d6a7d |
sv_setuv(uv)
|
|
Packit |
7d6a7d |
UV uv
|
|
Packit |
7d6a7d |
CODE:
|
|
Packit |
7d6a7d |
RETVAL = newSViv(1);
|
|
Packit |
7d6a7d |
sv_setuv(RETVAL, uv);
|
|
Packit |
7d6a7d |
OUTPUT:
|
|
Packit |
7d6a7d |
RETVAL
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
SV *
|
|
Packit |
7d6a7d |
newSVuv(uv)
|
|
Packit |
7d6a7d |
UV uv
|
|
Packit |
7d6a7d |
CODE:
|
|
Packit |
7d6a7d |
RETVAL = newSVuv(uv);
|
|
Packit |
7d6a7d |
OUTPUT:
|
|
Packit |
7d6a7d |
RETVAL
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
UV
|
|
Packit |
7d6a7d |
sv_2uv(sv)
|
|
Packit |
7d6a7d |
SV *sv
|
|
Packit |
7d6a7d |
CODE:
|
|
Packit |
7d6a7d |
RETVAL = sv_2uv(sv);
|
|
Packit |
7d6a7d |
OUTPUT:
|
|
Packit |
7d6a7d |
RETVAL
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
UV
|
|
Packit |
7d6a7d |
SvUVx(sv)
|
|
Packit |
7d6a7d |
SV *sv
|
|
Packit |
7d6a7d |
CODE:
|
|
Packit |
7d6a7d |
sv--;
|
|
Packit |
7d6a7d |
RETVAL = SvUVx(++sv);
|
|
Packit |
7d6a7d |
OUTPUT:
|
|
Packit |
7d6a7d |
RETVAL
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
void
|
|
Packit |
7d6a7d |
XSRETURN_UV()
|
|
Packit |
7d6a7d |
PPCODE:
|
|
Packit |
7d6a7d |
XSRETURN_UV(42);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
void
|
|
Packit |
7d6a7d |
PUSHu()
|
|
Packit |
7d6a7d |
PREINIT:
|
|
Packit |
7d6a7d |
dTARG;
|
|
Packit |
7d6a7d |
PPCODE:
|
|
Packit |
7d6a7d |
TARG = sv_newmortal();
|
|
Packit |
7d6a7d |
EXTEND(SP, 1);
|
|
Packit |
7d6a7d |
PUSHu(42);
|
|
Packit |
7d6a7d |
XSRETURN(1);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
void
|
|
Packit |
7d6a7d |
XPUSHu()
|
|
Packit |
7d6a7d |
PREINIT:
|
|
Packit |
7d6a7d |
dTARG;
|
|
Packit |
7d6a7d |
PPCODE:
|
|
Packit |
7d6a7d |
TARG = sv_newmortal();
|
|
Packit |
7d6a7d |
XPUSHu(43);
|
|
Packit |
7d6a7d |
XSRETURN(1);
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
=tests plan => 10
|
|
Packit |
7d6a7d |
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::sv_setuv(42), 42);
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::newSVuv(123), 123);
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::sv_2uv("4711"), 4711);
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::sv_2uv("1735928559"), 1735928559);
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::SvUVx("1735928559"), 1735928559);
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::SvUVx(1735928559), 1735928559);
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::XSRETURN_UV(), 42);
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::PUSHu(), 42);
|
|
Packit |
7d6a7d |
ok(&Devel::PPPort::XPUSHu(), 43);
|