Unify the nok setting for better optimizer chances.
authorJarkko Hietaniemi <jhi@iki.fi>
Thu, 25 Sep 2014 01:17:01 +0000 (21:17 -0400)
committerJarkko Hietaniemi <jhi@iki.fi>
Thu, 25 Sep 2014 01:19:13 +0000 (21:19 -0400)
Suggested by bulk88.  Also comment tweaks.

sv.c

diff --git a/sv.c b/sv.c
index 4587f56..5dc0cb6 100644 (file)
--- a/sv.c
+++ b/sv.c
@@ -2075,13 +2075,16 @@ S_sv_setnv(pTHX_ SV* sv, int numtype)
         nok = TRUE;
     }
     else if ((numtype & IS_NUMBER_NAN)) {
-        nok = TRUE;
         SvNV_set(sv, NV_NAN);
+        nok = TRUE;
     }
-    else if (pok)
+    else if (pok) {
         SvNV_set(sv, Atof(SvPVX_const(sv)));
+        /* Purposefully no true nok here, since we don't want to blow
+         * away the possible IOK/UV of an existing sv. */
+    }
     if (nok) {
-        SvNOK_only(sv); /* No IV or UV please. */
+        SvNOK_only(sv); /* No IV or UV please, this is pure infnan. */
         if (pok)
             SvPOK_on(sv); /* PV is okay, though. */
     }