################################################################################ ## ## Version 3.x, Copyright (C) 2004-2013, Marcus Holland-Moritz. ## Version 2.x, Copyright (C) 2001, Paul Marquess. ## Version 1.x, Copyright (C) 1999, Kenneth Albanowski. ## ## This program is free software; you can redistribute it and/or ## modify it under the same terms as Perl itself. ## ################################################################################ =provides __UNDEFINED__ =implementation __UNDEFINED__ mPUSHs(s) PUSHs(sv_2mortal(s)) __UNDEFINED__ PUSHmortal PUSHs(sv_newmortal()) __UNDEFINED__ mPUSHp(p,l) sv_setpvn(PUSHmortal, (p), (l)) __UNDEFINED__ mPUSHn(n) sv_setnv(PUSHmortal, (NV)(n)) __UNDEFINED__ mPUSHi(i) sv_setiv(PUSHmortal, (IV)(i)) __UNDEFINED__ mPUSHu(u) sv_setuv(PUSHmortal, (UV)(u)) __UNDEFINED__ mXPUSHs(s) XPUSHs(sv_2mortal(s)) __UNDEFINED__ XPUSHmortal XPUSHs(sv_newmortal()) __UNDEFINED__ mXPUSHp(p,l) STMT_START { EXTEND(sp,1); sv_setpvn(PUSHmortal, (p), (l)); } STMT_END __UNDEFINED__ mXPUSHn(n) STMT_START { EXTEND(sp,1); sv_setnv(PUSHmortal, (NV)(n)); } STMT_END __UNDEFINED__ mXPUSHi(i) STMT_START { EXTEND(sp,1); sv_setiv(PUSHmortal, (IV)(i)); } STMT_END __UNDEFINED__ mXPUSHu(u) STMT_START { EXTEND(sp,1); sv_setuv(PUSHmortal, (UV)(u)); } STMT_END =xsubs void mPUSHs() PPCODE: EXTEND(SP, 3); mPUSHs(newSVpv("foo", 0)); mPUSHs(newSVpv("bar13", 3)); mPUSHs(newSViv(42)); XSRETURN(3); void mPUSHp() PPCODE: EXTEND(SP, 3); mPUSHp("one", 3); mPUSHp("two", 3); mPUSHp("three", 5); XSRETURN(3); void mPUSHn() PPCODE: EXTEND(SP, 3); mPUSHn(0.5); mPUSHn(-0.25); mPUSHn(0.125); XSRETURN(3); void mPUSHi() PPCODE: EXTEND(SP, 3); mPUSHi(-1); mPUSHi(2); mPUSHi(-3); XSRETURN(3); void mPUSHu() PPCODE: EXTEND(SP, 3); mPUSHu(1); mPUSHu(2); mPUSHu(3); XSRETURN(3); void mXPUSHs() PPCODE: mXPUSHs(newSVpv("foo", 0)); mXPUSHs(newSVpv("bar13", 3)); mXPUSHs(newSViv(42)); XSRETURN(3); void mXPUSHp() PPCODE: mXPUSHp("one", 3); mXPUSHp("two", 3); mXPUSHp("three", 5); XSRETURN(3); void mXPUSHn() PPCODE: mXPUSHn(0.5); mXPUSHn(-0.25); mXPUSHn(0.125); XSRETURN(3); void mXPUSHi() PPCODE: mXPUSHi(-1); mXPUSHi(2); mXPUSHi(-3); XSRETURN(3); void mXPUSHu() PPCODE: mXPUSHu(1); mXPUSHu(2); mXPUSHu(3); XSRETURN(3); =tests plan => 10 ok(join(':', &Devel::PPPort::mPUSHs()), "foo:bar:42"); ok(join(':', &Devel::PPPort::mPUSHp()), "one:two:three"); ok(join(':', &Devel::PPPort::mPUSHn()), "0.5:-0.25:0.125"); ok(join(':', &Devel::PPPort::mPUSHi()), "-1:2:-3"); ok(join(':', &Devel::PPPort::mPUSHu()), "1:2:3"); ok(join(':', &Devel::PPPort::mXPUSHs()), "foo:bar:42"); ok(join(':', &Devel::PPPort::mXPUSHp()), "one:two:three"); ok(join(':', &Devel::PPPort::mXPUSHn()), "0.5:-0.25:0.125"); ok(join(':', &Devel::PPPort::mXPUSHi()), "-1:2:-3"); ok(join(':', &Devel::PPPort::mXPUSHu()), "1:2:3");