pp_subst: combine 3 small elsif blocks into 1
authorDavid Mitchell <davem@iabyn.com>
Mon, 15 Jul 2013 20:24:02 +0000 (21:24 +0100)
committerDavid Mitchell <davem@iabyn.com>
Sun, 28 Jul 2013 09:33:38 +0000 (10:33 +0100)
and slightly reduce the scope of the temporary i var.

pp_hot.c

index e59c9fe..27ecb4a 100644 (file)
--- a/pp_hot.c
+++ b/pp_hot.c
@@ -2179,13 +2179,13 @@ PP(pp_subst)
 
        if (once) {
             char *d, *m;
-            I32 i;
            if (RX_MATCH_TAINTED(rx)) /* run time pattern taint, eg locale */
                rxtainted |= SUBST_TAINT_PAT;
            m = orig + RX_OFFS(rx)[0].start;
            d = orig + RX_OFFS(rx)[0].end;
            s = orig;
            if (m - s > strend - d) {  /* faster to shorten from end */
+                I32 i;
                if (clen) {
                    Copy(c, m, clen, char);
                    m += clen;
@@ -2198,21 +2198,15 @@ PP(pp_subst)
                *m = '\0';
                SvCUR_set(TARG, m - s);
            }
-           else if ((i = m - s)) {     /* faster from front */
+           else {      /* faster from front */
+                I32 i = m - s;
                d -= clen;
-               Move(s, d - i, i, char);
+                if (i > 0)
+                    Move(s, d - i, i, char);
                sv_chop(TARG, d-i);
                if (clen)
                    Copy(c, d, clen, char);
            }
-           else if (clen) {
-               d -= clen;
-               sv_chop(TARG, d);
-               Copy(c, d, clen, char);
-           }
-           else {
-               sv_chop(TARG, d);
-           }
            SPAGAIN;
            PUSHs(&PL_sv_yes);
        }