From 4d91ecccee1825237c33d0a97bebddc384d58dc2 Mon Sep 17 00:00:00 2001 From: Father Chrysostomos Date: Sun, 25 Aug 2013 01:30:18 -0700 Subject: [PATCH] pp_ctl.c:pp_flop: Avoid redundant SvNV calls Calling SvNV on an SV that is IOK is unnecessary, and results in an extra function call if the SV is not NOKp. If an NV is out of range and has been used as an int, it will be IOKp but not IOK. --- pp_ctl.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pp_ctl.c b/pp_ctl.c index 2bed58c..6cb26bd 100644 --- a/pp_ctl.c +++ b/pp_ctl.c @@ -1230,8 +1230,10 @@ PP(pp_flop) if (RANGE_IS_NUMERIC(left,right)) { IV i, j; IV max; - if ((SvOK(left) && SvNV_nomg(left) < IV_MIN) || - (SvOK(right) && SvNV_nomg(right) > IV_MAX)) + if ((SvOK(left) && !SvIOK(left) && SvNV_nomg(left) < IV_MIN) || + (SvOK(right) && (SvIOK(right) + ? SvIsUV(right) && SvUV(right) > IV_MAX + : SvNV_nomg(right) > IV_MAX))) DIE(aTHX_ "Range iterator outside integer range"); i = SvIV_nomg(left); max = SvIV_nomg(right); -- 2.7.4