diff options
author | Jarkko Hietaniemi <jhi@iki.fi> | 2001-08-12 22:46:12 +0000 |
---|---|---|
committer | Jarkko Hietaniemi <jhi@iki.fi> | 2001-08-12 22:46:12 +0000 |
commit | 84e09d5e9b0e8f355853f7c768e322224fb09c76 (patch) | |
tree | 5a2807645a588817ceccd451f28c08ab70e633e0 | |
parent | ce6dce323a8d0f7e019f361b7d8ad8f9fea59359 (diff) | |
download | perl-84e09d5e9b0e8f355853f7c768e322224fb09c76.tar.gz |
Not quite so relicy as thought in #11651 (op/concat #4 and #5
stopped working).
p4raw-id: //depot/perl@11653
-rw-r--r-- | op.h | 4 | ||||
-rw-r--r-- | pp_ctl.c | 9 | ||||
-rw-r--r-- | regcomp.c | 6 |
3 files changed, 18 insertions, 1 deletions
@@ -263,6 +263,10 @@ struct pmop { #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 */ @@ -121,7 +121,16 @@ PP(pp_regcomp) 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. */ } @@ -1666,7 +1666,11 @@ Perl_pregcomp(pTHX_ char *exp, char *xend, PMOP *pm) 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()); |