1################################################################################
2##
3##  $Revision: 1.2 $
4##  $Author: millert $
5##  $Date: 2006/03/28 19:23:02 $
6##
7################################################################################
8##
9##  Version 3.x, Copyright (C) 2004-2005, 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
38void
39mPUSHp()
40	PPCODE:
41	EXTEND(SP, 3);
42	mPUSHp("one", 3);
43	mPUSHp("two", 3);
44	mPUSHp("three", 5);
45	XSRETURN(3);
46
47void
48mPUSHn()
49	PPCODE:
50	EXTEND(SP, 3);
51	mPUSHn(0.5);
52	mPUSHn(-0.25);
53	mPUSHn(0.125);
54	XSRETURN(3);
55
56void
57mPUSHi()
58	PPCODE:
59	EXTEND(SP, 3);
60	mPUSHi(-1);
61	mPUSHi(2);
62	mPUSHi(-3);
63	XSRETURN(3);
64
65void
66mPUSHu()
67	PPCODE:
68	EXTEND(SP, 3);
69	mPUSHu(1);
70	mPUSHu(2);
71	mPUSHu(3);
72	XSRETURN(3);
73
74void
75mXPUSHp()
76	PPCODE:
77	mXPUSHp("one", 3);
78	mXPUSHp("two", 3);
79	mXPUSHp("three", 5);
80	XSRETURN(3);
81
82void
83mXPUSHn()
84	PPCODE:
85	mXPUSHn(0.5);
86	mXPUSHn(-0.25);
87	mXPUSHn(0.125);
88	XSRETURN(3);
89
90void
91mXPUSHi()
92	PPCODE:
93	mXPUSHi(-1);
94	mXPUSHi(2);
95	mXPUSHi(-3);
96	XSRETURN(3);
97
98void
99mXPUSHu()
100	PPCODE:
101	mXPUSHu(1);
102	mXPUSHu(2);
103	mXPUSHu(3);
104	XSRETURN(3);
105
106=tests plan => 8
107
108ok(join(':', &Devel::PPPort::mPUSHp()), "one:two:three");
109ok(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125");
110ok(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3");
111ok(join(':', &Devel::PPPort::mPUSHu()), "1:2:3");
112
113ok(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three");
114ok(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125");
115ok(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3");
116ok(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3");
117
118