Change 11653 by jhi@alpha on 2001/08/12 22:46:12

        Not quite so relicy as thought in #11651 (op/concat #4 and #5
        stopped working).

Affected files ...

... //depot/perl/op.h#88 edit
... //depot/perl/pp_ctl.c#276 edit
... //depot/perl/regcomp.c#225 edit

Differences ...

==== //depot/perl/op.h#88 (text) ====
Index: perl/op.h
--- perl/op.h.~1~       Sun Aug 12 17:00:05 2001
+++ perl/op.h   Sun Aug 12 17:00:05 2001
@@ -263,6 +263,10 @@
 
 #define PMdf_USED      0x01            /* pm has been used once already */
 #define PMdf_TAINTED   0x02            /* pm compiled from tainted pattern */
+#define PMdf_UTF8      0x04            /* pm compiled from utf8 data */
+#define PMdf_DYN_UTF8  0x08
+
+#define PMdf_CMP_UTF8  (PMdf_UTF8|PMdf_DYN_UTF8)
 
 #define PMf_RETAINT    0x0001          /* taint $1 etc. if target tainted */
 #define PMf_ONCE       0x0002          /* use pattern only once per reset */

==== //depot/perl/pp_ctl.c#276 (text) ====
Index: perl/pp_ctl.c
--- perl/pp_ctl.c.~1~   Sun Aug 12 17:00:05 2001
+++ perl/pp_ctl.c       Sun Aug 12 17:00:05 2001
@@ -121,7 +121,16 @@
                PL_reginterp_cnt = I32_MAX; /* Mark as safe.  */
 
            pm->op_pmflags = pm->op_pmpermflags;        /* reset case sensitivity */
+           if (DO_UTF8(tmpstr))
+               pm->op_pmdynflags |= PMdf_DYN_UTF8;
+           else {
+               pm->op_pmdynflags &= ~PMdf_DYN_UTF8;
+               if (pm->op_pmdynflags & PMdf_UTF8)
+                   t = (char*)bytes_to_utf8((U8*)t, &len);
+           }
            PM_SETRE(pm, CALLREGCOMP(aTHX_ t, t + len, pm));
+           if (!DO_UTF8(tmpstr) && (pm->op_pmdynflags & PMdf_UTF8))
+               Safefree(t);
            PL_reginterp_cnt = 0;       /* XXXX Be extra paranoid - needed
                                           inside tie/overload accessors.  */
        }

==== //depot/perl/regcomp.c#225 (text) ====
Index: perl/regcomp.c
--- perl/regcomp.c.~1~  Sun Aug 12 17:00:05 2001
+++ perl/regcomp.c      Sun Aug 12 17:00:05 2001
@@ -1666,7 +1666,11 @@
     if (exp == NULL)
        FAIL("NULL regexp argument");
 
-    RExC_utf8 = 0;
+    /* XXXX This looks very suspicious... */
+    if (pm->op_pmdynflags & PMdf_CMP_UTF8)
+        RExC_utf8 = 1;
+    else
+        RExC_utf8 = 0;
 
     RExC_precomp = exp;
     DEBUG_r(if (!PL_colorset) reginitcolors());
End of Patch.

Reply via email to