[5.004_61 PATCH] Make incompatible changes to RE engine NOW
[p5sagit/p5-mst-13.2.git] / doop.c
diff --git a/doop.c b/doop.c
index be3e674..4b10dde 100644 (file)
--- a/doop.c
+++ b/doop.c
@@ -29,6 +29,7 @@ do_trans(SV *sv, OP *arg)
     register I32 ch;
     register I32 matches = 0;
     register I32 squash = op->op_private & OPpTRANS_SQUASH;
+    register U8 *p;
     STRLEN len;
 
     if (SvREADONLY(sv) && !(op->op_private & OPpTRANS_COUNTONLY))
@@ -63,14 +64,16 @@ do_trans(SV *sv, OP *arg)
     }
     else {
        d = s;
+       p = send;
        while (s < send) {
            if ((ch = tbl[*s]) >= 0) {
                *d = ch;
-               if (matches++ && squash) {
-                   if (d[-1] == *d)
+               matches++;
+               if (squash) {
+                   if (p == d - 1 && *p == *d)
                        matches--;
                    else
-                       d++;
+                       p = d++;
                }
                else
                    d++;