Tweak S_hsplit() to return early if there are no keys to process.
authorNicholas Clark <nick@ccl4.org>
Thu, 21 Feb 2013 18:58:04 +0000 (19:58 +0100)
committerNicholas Clark <nick@ccl4.org>
Tue, 26 Feb 2013 15:00:20 +0000 (16:00 +0100)
This mimics the behaviour in Perl_hv_ksplit().

Also remove a vestigial comment. The code it relates to was removed in
commit 7dc8663964c66a69 in Nov 2012.

hv.c

index 51fe12d..dabf384 100644 (file)
--- a/hv.c
+++ b/hv.c
@@ -1124,8 +1124,11 @@ S_hsplit(pTHX_ HV *hv, STRLEN const oldsize, STRLEN newsize)
     Zero(&a[oldsize * sizeof(HE*)], (newsize-oldsize) * sizeof(HE*), char);    /* zero 2nd half*/
     HvMAX(hv) = --newsize;
     HvARRAY(hv) = (HE**) a;
-    aep = (HE**)a;
 
+    if (!HvTOTALKEYS(hv))       /* skip rest if no entries */
+        return;
+
+    aep = (HE**)a;
     for (i=0; i<oldsize; i++) {
        HE **oentry = aep + i;
        HE *entry = aep[i];
@@ -1144,9 +1147,6 @@ S_hsplit(pTHX_ HV *hv, STRLEN const oldsize, STRLEN newsize)
            }
            entry = *oentry;
        } while (entry);
-       /* I think we don't actually need to keep track of the longest length,
-          merely flag if anything is too long. But for the moment while
-          developing this code I'll track it.  */
     }
 }