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.