1################################################################################ 2## 3## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. 4## Version 2.x, Copyright (C) 2001, Paul Marquess. 5## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. 6## 7## This program is free software; you can redistribute it and/or 8## modify it under the same terms as Perl itself. 9## 10################################################################################ 11 12=provides 13 14__UNDEFINED__ 15 16=implementation 17 18__UNDEFINED__ mPUSHs(s) PUSHs(sv_2mortal(s)) 19__UNDEFINED__ PUSHmortal PUSHs(sv_newmortal()) 20__UNDEFINED__ mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l)) 21__UNDEFINED__ mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n)) 22__UNDEFINED__ mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i)) 23__UNDEFINED__ mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u)) 24 25__UNDEFINED__ mXPUSHs(s) XPUSHs(sv_2mortal(s)) 26__UNDEFINED__ XPUSHmortal XPUSHs(sv_newmortal()) 27__UNDEFINED__ mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END 28__UNDEFINED__ mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END 29__UNDEFINED__ mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END 30__UNDEFINED__ mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END 31 32=xsubs 33 34void 35mPUSHs() 36 PPCODE: 37 EXTEND(SP, 3); 38 mPUSHs(newSVpv("foo", 0)); 39 mPUSHs(newSVpv("bar13", 3)); 40 mPUSHs(newSViv(42)); 41 XSRETURN(3); 42 43void 44mPUSHp() 45 PPCODE: 46 EXTEND(SP, 3); 47 mPUSHp("one", 3); 48 mPUSHp("two", 3); 49 mPUSHp("three", 5); 50 XSRETURN(3); 51 52void 53mPUSHn() 54 PPCODE: 55 EXTEND(SP, 3); 56 mPUSHn(0.5); 57 mPUSHn(-0.25); 58 mPUSHn(0.125); 59 XSRETURN(3); 60 61void 62mPUSHi() 63 PPCODE: 64 EXTEND(SP, 3); 65 mPUSHi(-1); 66 mPUSHi(2); 67 mPUSHi(-3); 68 XSRETURN(3); 69 70void 71mPUSHu() 72 PPCODE: 73 EXTEND(SP, 3); 74 mPUSHu(1); 75 mPUSHu(2); 76 mPUSHu(3); 77 XSRETURN(3); 78 79void 80mXPUSHs() 81 PPCODE: 82 mXPUSHs(newSVpv("foo", 0)); 83 mXPUSHs(newSVpv("bar13", 3)); 84 mXPUSHs(newSViv(42)); 85 XSRETURN(3); 86 87void 88mXPUSHp() 89 PPCODE: 90 mXPUSHp("one", 3); 91 mXPUSHp("two", 3); 92 mXPUSHp("three", 5); 93 XSRETURN(3); 94 95void 96mXPUSHn() 97 PPCODE: 98 mXPUSHn(0.5); 99 mXPUSHn(-0.25); 100 mXPUSHn(0.125); 101 XSRETURN(3); 102 103void 104mXPUSHi() 105 PPCODE: 106 mXPUSHi(-1); 107 mXPUSHi(2); 108 mXPUSHi(-3); 109 XSRETURN(3); 110 111void 112mXPUSHu() 113 PPCODE: 114 mXPUSHu(1); 115 mXPUSHu(2); 116 mXPUSHu(3); 117 XSRETURN(3); 118 119=tests plan => 10 120 121is(join(':', &Devel::PPPort::mPUSHs()), "foo:bar:42"); 122is(join(':', &Devel::PPPort::mPUSHp()), "one:two:three"); 123is(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125"); 124is(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3"); 125is(join(':', &Devel::PPPort::mPUSHu()), "1:2:3"); 126 127is(join(':', &Devel::PPPort::mXPUSHs()), "foo:bar:42"); 128is(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three"); 129is(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125"); 130is(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3"); 131is(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3"); 132