Upgrade to Encode 2.14
[p5sagit/p5-mst-13.2.git] / ext / Devel / PPPort / parts / inc / uv
CommitLineData
adfe19db 1################################################################################
2##
9132e1a3 3## $Revision: 10 $
adfe19db 4## $Author: mhx $
9132e1a3 5## $Date: 2005/01/31 08:10:54 +0100 $
adfe19db 6##
7################################################################################
8##
9132e1a3 9## Version 3.x, Copyright (C) 2004-2005, Marcus Holland-Moritz.
adfe19db 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
96ad942f 55__UNDEFINED__ PUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); PUSHTARG; } STMT_END
56__UNDEFINED__ XPUSHu(u) STMT_START { sv_setuv(TARG, (UV)(u)); XPUSHTARG; } STMT_END
57
adfe19db 58=xsubs
59
60SV *
61sv_setuv(uv)
62 UV uv
63 CODE:
64 RETVAL = newSViv(1);
65 sv_setuv(RETVAL, uv);
66 OUTPUT:
67 RETVAL
68
69SV *
70newSVuv(uv)
71 UV uv
72 CODE:
73 RETVAL = newSVuv(uv);
74 OUTPUT:
75 RETVAL
76
77UV
78sv_2uv(sv)
79 SV *sv
80 CODE:
81 RETVAL = sv_2uv(sv);
82 OUTPUT:
83 RETVAL
84
85UV
86SvUVx(sv)
87 SV *sv
88 CODE:
89 sv--;
90 RETVAL = SvUVx(++sv);
91 OUTPUT:
92 RETVAL
93
94void
95XSRETURN_UV()
96 PPCODE:
97 XSRETURN_UV(42);
98
96ad942f 99void
100PUSHu()
101 PREINIT:
102 dTARG;
103 PPCODE:
104 TARG = sv_newmortal();
105 EXTEND(SP, 1);
106 PUSHu(42);
107 XSRETURN(1);
108
109void
110XPUSHu()
111 PREINIT:
112 dTARG;
113 PPCODE:
114 TARG = sv_newmortal();
115 XPUSHu(43);
116 XSRETURN(1);
117
118=tests plan => 10
adfe19db 119
120ok(&Devel::PPPort::sv_setuv(42), 42);
121ok(&Devel::PPPort::newSVuv(123), 123);
122ok(&Devel::PPPort::sv_2uv("4711"), 4711);
123ok(&Devel::PPPort::sv_2uv("1735928559"), 1735928559);
124ok(&Devel::PPPort::SvUVx("1735928559"), 1735928559);
125ok(&Devel::PPPort::SvUVx(1735928559), 1735928559);
126ok(&Devel::PPPort::SvUVx(0xdeadbeef), 0xdeadbeef);
127ok(&Devel::PPPort::XSRETURN_UV(), 42);
96ad942f 128ok(&Devel::PPPort::PUSHu(), 42);
129ok(&Devel::PPPort::XPUSHu(), 43);
adfe19db 130