diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2014-09-25 10:47:14 -0400 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2014-09-25 12:05:16 -0400 |
commit | 84441873284d94d2b1e6a76fda24795fe5cf45f7 (patch) | |
tree | de6d01dc699d7093715c623ea41914a43ac7d63d /pp_pack.c | |
parent | 8fad3ae2f1dcc9a9fcb99cbb38081dc1434f6864 (diff) | |
download | perl-84441873284d94d2b1e6a76fda24795fe5cf45f7.tar.gz |
infnan: in pack, first test for the unlikely infnan-ness.
Also make the type I32, not char.
Diffstat (limited to 'pp_pack.c')
-rw-r--r-- | pp_pack.c | 17 |
1 files changed, 10 insertions, 7 deletions
@@ -2167,13 +2167,16 @@ S_pack_rec(pTHX_ SV *cat, tempsym_t* symptr, SV **beglist, SV **endlist ) fromstr = PEEKFROM; if (SvNOK(fromstr)) { const NV nv = SvNV(fromstr); - const char c = TYPE_NO_MODIFIERS(datumtype); - if (Perl_isinfnan(nv) && !strchr("fdFD", c)) { - if (c == 'w') - Perl_croak(aTHX_ "Cannot compress %"NVgf" in pack", nv); - else - Perl_croak(aTHX_ "Cannot pack %"NVgf" with '%c'", - nv, (int) c); + if (UNLIKELY(Perl_isinfnan(nv))) { + const I32 c = TYPE_NO_MODIFIERS(datumtype); + if (!strchr("fdFD", (char)c)) { /* floats are okay */ + if (c == 'w') + Perl_croak(aTHX_ + "Cannot compress %"NVgf" in pack", nv); + else + Perl_croak(aTHX_ "Cannot pack %"NVgf" with '%c'", + nv, (int) c); + } } } |