Upgrade to Devel::PPPort 3.07
[p5sagit/p5-mst-13.2.git] / ext / Devel / PPPort / parts / inc / mPUSH
1 ################################################################################
2 ##
3 ##  $Revision: 6 $
4 ##  $Author: mhx $
5 ##  $Date: 2006/01/14 18:08:01 +0100 $
6 ##
7 ################################################################################
8 ##
9 ##  Version 3.x, Copyright (C) 2004-2006, 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
20 __UNDEFINED__
21
22 =implementation
23
24 __UNDEFINED__  PUSHmortal       PUSHs(sv_newmortal())
25 __UNDEFINED__  mPUSHp(p,l)      sv_setpvn_mg(PUSHmortal, (p), (l))
26 __UNDEFINED__  mPUSHn(n)        sv_setnv_mg(PUSHmortal, (NV)(n))
27 __UNDEFINED__  mPUSHi(i)        sv_setiv_mg(PUSHmortal, (IV)(i))
28 __UNDEFINED__  mPUSHu(u)        sv_setuv_mg(PUSHmortal, (UV)(u))
29
30 __UNDEFINED__  XPUSHmortal      XPUSHs(sv_newmortal())
31 __UNDEFINED__  mXPUSHp(p,l)     STMT_START { EXTEND(sp,1); sv_setpvn_mg(PUSHmortal, (p), (l)); } STMT_END
32 __UNDEFINED__  mXPUSHn(n)       STMT_START { EXTEND(sp,1); sv_setnv_mg(PUSHmortal, (NV)(n)); } STMT_END
33 __UNDEFINED__  mXPUSHi(i)       STMT_START { EXTEND(sp,1); sv_setiv_mg(PUSHmortal, (IV)(i)); } STMT_END
34 __UNDEFINED__  mXPUSHu(u)       STMT_START { EXTEND(sp,1); sv_setuv_mg(PUSHmortal, (UV)(u)); } STMT_END
35
36 =xsubs
37
38 void
39 mPUSHp()
40         PPCODE:
41         EXTEND(SP, 3);
42         mPUSHp("one", 3);
43         mPUSHp("two", 3);
44         mPUSHp("three", 5);
45         XSRETURN(3);
46
47 void
48 mPUSHn()
49         PPCODE:
50         EXTEND(SP, 3);
51         mPUSHn(0.5);
52         mPUSHn(-0.25);
53         mPUSHn(0.125);
54         XSRETURN(3);
55
56 void
57 mPUSHi()
58         PPCODE:
59         EXTEND(SP, 3);
60         mPUSHi(-1);
61         mPUSHi(2);
62         mPUSHi(-3);
63         XSRETURN(3);
64
65 void
66 mPUSHu()
67         PPCODE:
68         EXTEND(SP, 3);
69         mPUSHu(1);
70         mPUSHu(2);
71         mPUSHu(3);
72         XSRETURN(3);
73
74 void
75 mXPUSHp()
76         PPCODE:
77         mXPUSHp("one", 3);
78         mXPUSHp("two", 3);
79         mXPUSHp("three", 5);
80         XSRETURN(3);
81
82 void
83 mXPUSHn()
84         PPCODE:
85         mXPUSHn(0.5);
86         mXPUSHn(-0.25);
87         mXPUSHn(0.125);
88         XSRETURN(3);
89
90 void
91 mXPUSHi()
92         PPCODE:
93         mXPUSHi(-1);
94         mXPUSHi(2);
95         mXPUSHi(-3);
96         XSRETURN(3);
97
98 void
99 mXPUSHu()
100         PPCODE:
101         mXPUSHu(1);
102         mXPUSHu(2);
103         mXPUSHu(3);
104         XSRETURN(3);
105
106 =tests plan => 8
107
108 ok(join(':', &Devel::PPPort::mPUSHp()), "one:two:three");
109 ok(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125");
110 ok(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3");
111 ok(join(':', &Devel::PPPort::mPUSHu()), "1:2:3");
112
113 ok(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three");
114 ok(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125");
115 ok(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3");
116 ok(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3");
117