From 93f6e112d1711b0b220ea546f5fcb0f9ef445b66 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Wed, 10 Dec 2014 18:20:19 -0800 Subject: =?UTF-8?q?Don=E2=80=99t=20do=20string=20overloading=20for=20numer?= =?UTF-8?q?ic=20pack=20fmts?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See <20141130160250.GC31019@pjcj.net>. Commit 354b74ae6f broke this. --- pp_pack.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'pp_pack.c') diff --git a/pp_pack.c b/pp_pack.c index eb63db96e8..ad4f186bf9 100644 --- a/pp_pack.c +++ b/pp_pack.c @@ -2088,10 +2088,12 @@ S_sv_exp_grow(pTHX_ SV *sv, STRLEN needed) { return SvGROW(sv, len+extend+1); } -static void +static SV * S_sv_check_infnan(pTHX_ SV *sv, I32 datumtype) { SvGETMAGIC(sv); + if (UNLIKELY(SvAMAGIC(sv))) + sv = sv_2num(sv); if (UNLIKELY(isinfnansv(sv))) { const I32 c = TYPE_NO_MODIFIERS(datumtype); const NV nv = SvNV_nomg(sv); @@ -2100,10 +2102,13 @@ S_sv_check_infnan(pTHX_ SV *sv, I32 datumtype) else Perl_croak(aTHX_ "Cannot pack %"NVgf" with '%c'", nv, (int) c); } + return sv; } -#define SvIV_no_inf(sv,d) (S_sv_check_infnan(aTHX_ sv,d), SvIV_nomg(sv)) -#define SvUV_no_inf(sv,d) (S_sv_check_infnan(aTHX_ sv,d), SvUV_nomg(sv)) +#define SvIV_no_inf(sv,d) \ + ((sv) = S_sv_check_infnan(aTHX_ sv,d), SvIV_nomg(sv)) +#define SvUV_no_inf(sv,d) \ + ((sv) = S_sv_check_infnan(aTHX_ sv,d), SvUV_nomg(sv)) STATIC SV ** -- cgit v1.2.1