Upgrade to Devel::PPPort 3.00.
[p5sagit/p5-mst-13.2.git] / ext / Devel / PPPort / parts / inc / uv
CommitLineData
adfe19db 1################################################################################
2##
3## $Revision: 8 $
4## $Author: mhx $
5## $Date: 2004/08/13 12:47:17 +0200 $
6##
7################################################################################
8##
9## Version 3.x, Copyright (C) 2004, Marcus Holland-Moritz.
10## Version 2.x, Copyright (C) 2001, Paul Marquess.
11## Version 1.x, Copyright (C) 1999, Kenneth Albanowski.
12##
13## This program is free software; you can redistribute it and/or
14## modify it under the same terms as Perl itself.
15##
16################################################################################
17
18=provides
19
20sv_setuv
21newSVuv
22__UNDEFINED__
23
24=implementation
25
26#ifndef sv_setuv
27# define sv_setuv(sv, uv) \
28 STMT_START { \
29 UV TeMpUv = uv; \
30 if (TeMpUv <= IV_MAX) \
31 sv_setiv(sv, TeMpUv); \
32 else \
33 sv_setnv(sv, (double)TeMpUv); \
34 } STMT_END
35#endif
36
37#ifndef newSVuv
38# define newSVuv(uv) ((uv) <= IV_MAX ? newSViv((IV)uv) : newSVnv((NV)uv))
39#endif
40
41__UNDEFINED__ sv_2uv(sv) ((PL_Sv = (sv)), (UV) (SvNOK(PL_Sv) ? SvNV(PL_Sv) : sv_2nv(PL_Sv)))
42__UNDEFINED__ SvUVX(sv) ((UV)SvIVX(sv))
43__UNDEFINED__ SvUVXx(sv) SvUVX(sv)
44__UNDEFINED__ SvUV(sv) (SvIOK(sv) ? SvUVX(sv) : sv_2uv(sv))
45__UNDEFINED__ SvUVx(sv) ((PL_Sv = (sv)), SvUV(PL_Sv))
46
47/* Hint: sv_uv
48 * Always use the SvUVx() macro instead of sv_uv().
49 */
50__UNDEFINED__ sv_uv(sv) SvUVx(sv)
51
52__UNDEFINED__ XST_mUV(i,v) (ST(i) = sv_2mortal(newSVuv(v)) )
53__UNDEFINED__ XSRETURN_UV(v) STMT_START { XST_mUV(0,v); XSRETURN(1); } STMT_END
54
55=xsubs
56
57SV *
58sv_setuv(uv)
59 UV uv
60 CODE:
61 RETVAL = newSViv(1);
62 sv_setuv(RETVAL, uv);
63 OUTPUT:
64 RETVAL
65
66SV *
67newSVuv(uv)
68 UV uv
69 CODE:
70 RETVAL = newSVuv(uv);
71 OUTPUT:
72 RETVAL
73
74UV
75sv_2uv(sv)
76 SV *sv
77 CODE:
78 RETVAL = sv_2uv(sv);
79 OUTPUT:
80 RETVAL
81
82UV
83SvUVx(sv)
84 SV *sv
85 CODE:
86 sv--;
87 RETVAL = SvUVx(++sv);
88 OUTPUT:
89 RETVAL
90
91void
92XSRETURN_UV()
93 PPCODE:
94 XSRETURN_UV(42);
95
96=tests plan => 8
97
98ok(&Devel::PPPort::sv_setuv(42), 42);
99ok(&Devel::PPPort::newSVuv(123), 123);
100ok(&Devel::PPPort::sv_2uv("4711"), 4711);
101ok(&Devel::PPPort::sv_2uv("1735928559"), 1735928559);
102ok(&Devel::PPPort::SvUVx("1735928559"), 1735928559);
103ok(&Devel::PPPort::SvUVx(1735928559), 1735928559);
104ok(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
105ok(&Devel::PPPort::XSRETURN_UV(), 42);
106