summaryrefslogtreecommitdiff
path: root/pp_pack.c
diff options
context:
space:
mode:
authorMarcus Holland-Moritz <mhx-perl@gmx.net>2008-01-04 01:06:10 +0000
committerMarcus Holland-Moritz <mhx-perl@gmx.net>2008-01-04 01:06:10 +0000
commit6e449a3ab1e3bd9d7e138ca681c733e57d4daa49 (patch)
treead260a44d03e2cd4466a3495bd249239dc834046 /pp_pack.c
parentad25789c15269a04312e0efede81842547aa8212 (diff)
downloadperl-6e449a3ab1e3bd9d7e138ca681c733e57d4daa49.tar.gz
Add macros mPUSHs() and mXPUSHs() for pushing SVs on the stack
and mortalizing them. Use these macros where possible. And also mX?PUSH[inpu] where possible. p4raw-id: //depot/perl@32821
Diffstat (limited to 'pp_pack.c')
-rw-r--r--pp_pack.c64
1 files changed, 32 insertions, 32 deletions
diff --git a/pp_pack.c b/pp_pack.c
index 21e6494d2f..7bf1ce1746 100644
--- a/pp_pack.c
+++ b/pp_pack.c
@@ -1293,7 +1293,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
sv = from <= s ?
newSVuv( u8 ? (UV) utf8_length((const U8*)from, (const U8*)s) : (UV) (s-from)) :
newSViv(-(u8 ? (IV) utf8_length((const U8*)s, (const U8*)from) : (IV) (from-s)));
- XPUSHs(sv_2mortal(sv));
+ mXPUSHs(sv);
break;
}
#ifdef PERL_PACK_CAN_SHRIEKSIGN
@@ -1443,7 +1443,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
if (!(symptr->flags & FLAG_WAS_UTF8))
sv_utf8_downgrade(sv, 0);
}
- XPUSHs(sv_2mortal(sv));
+ mXPUSHs(sv);
s += len;
break;
case 'B':
@@ -1586,7 +1586,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
if (aint >= 128 && datumtype != 'C') /* fake up signed chars */
aint -= 256;
if (!checksum)
- PUSHs(sv_2mortal(newSViv((IV)aint)));
+ mPUSHi(aint);
else if (checksum > bits_in_uv)
cdouble += (NV)aint;
else
@@ -1604,7 +1604,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
Perl_croak(aTHX_ "Malformed UTF-8 string in unpack");
s += retlen;
if (!checksum)
- PUSHs(sv_2mortal(newSVuv((UV) val)));
+ mPUSHu(val);
else if (checksum > bits_in_uv)
cdouble += (NV) val;
else
@@ -1613,7 +1613,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
} else if (!checksum)
while (len-- > 0) {
const U8 ch = *(U8 *) s++;
- PUSHs(sv_2mortal(newSVuv((UV) ch)));
+ mPUSHu(ch);
}
else if (checksum > bits_in_uv)
while (len-- > 0) cdouble += (NV) *(U8 *) s++;
@@ -1661,7 +1661,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
s += retlen;
}
if (!checksum)
- PUSHs(sv_2mortal(newSVuv((UV) auv)));
+ mPUSHu(auv);
else if (checksum > bits_in_uv)
cdouble += (NV) auv;
else
@@ -1675,7 +1675,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, ashort, datumtype);
DO_BO_UNPACK(ashort, s);
if (!checksum)
- PUSHs(sv_2mortal(newSViv((IV)ashort)));
+ mPUSHi(ashort);
else if (checksum > bits_in_uv)
cdouble += (NV)ashort;
else
@@ -1699,7 +1699,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
ai16 -= 65536;
#endif
if (!checksum)
- PUSHs(sv_2mortal(newSViv((IV)ai16)));
+ mPUSHi(ai16);
else if (checksum > bits_in_uv)
cdouble += (NV)ai16;
else
@@ -1713,7 +1713,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, aushort, datumtype);
DO_BO_UNPACK(aushort, s);
if (!checksum)
- PUSHs(sv_2mortal(newSVuv((UV) aushort)));
+ mPUSHu(aushort);
else if (checksum > bits_in_uv)
cdouble += (NV)aushort;
else
@@ -1742,7 +1742,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
au16 = vtohs(au16);
#endif
if (!checksum)
- PUSHs(sv_2mortal(newSVuv((UV)au16)));
+ mPUSHu(au16);
else if (checksum > bits_in_uv)
cdouble += (NV) au16;
else
@@ -1767,7 +1767,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
ai16 = (I16) vtohs((U16) ai16);
# endif /* HAS_VTOHS */
if (!checksum)
- PUSHs(sv_2mortal(newSViv((IV)ai16)));
+ mPUSHi(ai16);
else if (checksum > bits_in_uv)
cdouble += (NV) ai16;
else
@@ -1782,7 +1782,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, aint, datumtype);
DO_BO_UNPACK(aint, i);
if (!checksum)
- PUSHs(sv_2mortal(newSViv((IV)aint)));
+ mPUSHi(aint);
else if (checksum > bits_in_uv)
cdouble += (NV)aint;
else
@@ -1796,7 +1796,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, auint, datumtype);
DO_BO_UNPACK(auint, i);
if (!checksum)
- PUSHs(sv_2mortal(newSVuv((UV)auint)));
+ mPUSHu(auint);
else if (checksum > bits_in_uv)
cdouble += (NV)auint;
else
@@ -1817,7 +1817,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
Perl_croak(aTHX_ "'j' not supported on this platform");
#endif
if (!checksum)
- PUSHs(sv_2mortal(newSViv(aiv)));
+ mPUSHi(aiv);
else if (checksum > bits_in_uv)
cdouble += (NV)aiv;
else
@@ -1838,7 +1838,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
Perl_croak(aTHX_ "'J' not supported on this platform");
#endif
if (!checksum)
- PUSHs(sv_2mortal(newSVuv(auv)));
+ mPUSHu(auv);
else if (checksum > bits_in_uv)
cdouble += (NV)auv;
else
@@ -1852,7 +1852,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, along, datumtype);
DO_BO_UNPACK(along, l);
if (!checksum)
- PUSHs(sv_2mortal(newSViv((IV)along)));
+ mPUSHi(along);
else if (checksum > bits_in_uv)
cdouble += (NV)along;
else
@@ -1874,7 +1874,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
if (ai32 > 2147483647) ai32 -= 4294967296;
#endif
if (!checksum)
- PUSHs(sv_2mortal(newSViv((IV)ai32)));
+ mPUSHi(ai32);
else if (checksum > bits_in_uv)
cdouble += (NV)ai32;
else
@@ -1888,7 +1888,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, aulong, datumtype);
DO_BO_UNPACK(aulong, l);
if (!checksum)
- PUSHs(sv_2mortal(newSVuv((UV)aulong)));
+ mPUSHu(aulong);
else if (checksum > bits_in_uv)
cdouble += (NV)aulong;
else
@@ -1917,7 +1917,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
au32 = vtohl(au32);
#endif
if (!checksum)
- PUSHs(sv_2mortal(newSVuv((UV)au32)));
+ mPUSHu(au32);
else if (checksum > bits_in_uv)
cdouble += (NV)au32;
else
@@ -1942,7 +1942,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
ai32 = (I32)vtohl((U32)ai32);
# endif
if (!checksum)
- PUSHs(sv_2mortal(newSViv((IV)ai32)));
+ mPUSHi(ai32);
else if (checksum > bits_in_uv)
cdouble += (NV)ai32;
else
@@ -1956,7 +1956,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, aptr, datumtype);
DO_BO_UNPACK_PC(aptr);
/* newSVpv generates undef if aptr is NULL */
- PUSHs(sv_2mortal(newSVpv(aptr, 0)));
+ mPUSHs(newSVpv(aptr, 0));
}
break;
case 'w':
@@ -1971,7 +1971,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
/* UTF8_IS_XXXXX not right here - using constant 0x80 */
if (ch < 0x80) {
bytes = 0;
- PUSHs(sv_2mortal(newSVuv(auv)));
+ mPUSHu(auv);
len--;
auv = 0;
continue;
@@ -1992,7 +1992,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
while (*t == '0')
t++;
sv_chop(sv, t);
- PUSHs(sv_2mortal(sv));
+ mPUSHs(sv);
len--;
auv = 0;
}
@@ -2020,8 +2020,8 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, aquad, datumtype);
DO_BO_UNPACK(aquad, 64);
if (!checksum)
- PUSHs(sv_2mortal(aquad >= IV_MIN && aquad <= IV_MAX ?
- newSViv((IV)aquad) : newSVnv((NV)aquad)));
+ mPUSHs(aquad >= IV_MIN && aquad <= IV_MAX ?
+ newSViv((IV)aquad) : newSVnv((NV)aquad));
else if (checksum > bits_in_uv)
cdouble += (NV)aquad;
else
@@ -2034,8 +2034,8 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, auquad, datumtype);
DO_BO_UNPACK(auquad, 64);
if (!checksum)
- PUSHs(sv_2mortal(auquad <= UV_MAX ?
- newSVuv((UV)auquad):newSVnv((NV)auquad)));
+ mPUSHs(auquad <= UV_MAX ?
+ newSVuv((UV)auquad) : newSVnv((NV)auquad));
else if (checksum > bits_in_uv)
cdouble += (NV)auquad;
else
@@ -2050,7 +2050,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, afloat, datumtype);
DO_BO_UNPACK_N(afloat, float);
if (!checksum)
- PUSHs(sv_2mortal(newSVnv((NV)afloat)));
+ mPUSHn(afloat);
else
cdouble += afloat;
}
@@ -2061,7 +2061,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, adouble, datumtype);
DO_BO_UNPACK_N(adouble, double);
if (!checksum)
- PUSHs(sv_2mortal(newSVnv((NV)adouble)));
+ mPUSHn(adouble);
else
cdouble += adouble;
}
@@ -2072,7 +2072,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, anv, datumtype);
DO_BO_UNPACK_N(anv, NV);
if (!checksum)
- PUSHs(sv_2mortal(newSVnv(anv)));
+ mPUSHn(anv);
else
cdouble += anv;
}
@@ -2084,7 +2084,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
SHIFT_VAR(utf8, s, strend, aldouble, datumtype);
DO_BO_UNPACK_N(aldouble, long double);
if (!checksum)
- PUSHs(sv_2mortal(newSVnv((NV)aldouble)));
+ mPUSHn(aldouble);
else
cdouble += aldouble;
}
@@ -2187,7 +2187,7 @@ S_unpack_rec(pTHX_ tempsym_t* symptr, const char *s, const char *strbeg, const c
}
sv = newSVuv(cuv);
}
- XPUSHs(sv_2mortal(sv));
+ mXPUSHs(sv);
checksum = 0;
}