X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=regexec.c;h=13832311c7482c18e82397e5e75ff38299a5c2be;hb=f8d9d21fc7f97563d8c8a7012e0c15c8f5aec8de;hp=8c091a172d41db423fd3293bda32a4679bd119e4;hpb=7f16dd3dd4311e49439b9f212f1519735a88c199;p=p5sagit%2Fp5-mst-13.2.git diff --git a/regexec.c b/regexec.c index 8c091a1..1383231 100644 --- a/regexec.c +++ b/regexec.c @@ -126,7 +126,7 @@ #define HOP3c(pos,off,lim) ((char*)HOP3(pos,off,lim)) #define HOPMAYBE3c(pos,off,lim) ((char*)HOPMAYBE3(pos,off,lim)) -#define LOAD_UTF8_CHARCLASS(a,b) STMT_START { if (!CAT2(PL_utf8_,a)) (void)CAT2(is_utf8_, a)((U8*)b); } STMT_END +#define LOAD_UTF8_CHARCLASS(a,b) STMT_START { if (!CAT2(PL_utf8_,a)) { ENTER; save_re_context(); (void)CAT2(is_utf8_, a)((U8*)b); LEAVE; } } STMT_END /* for use after a quantifier and before an EXACT-like node -- japhy */ #define JUMPABLE(rn) ( \ @@ -3110,7 +3110,7 @@ S_regmatch(pTHX_ regnode *prog) if (ckWARN(WARN_REGEXP) && n >= REG_INFTY && !(PL_reg_flags & RF_warned)) { PL_reg_flags |= RF_warned; - Perl_warner(aTHX_ WARN_REGEXP, "%s limit (%d) exceeded", + Perl_warner(aTHX_ packWARN(WARN_REGEXP), "%s limit (%d) exceeded", "Complex regular subexpression recursion", REG_INFTY - 1); } @@ -3162,7 +3162,7 @@ S_regmatch(pTHX_ regnode *prog) if (ckWARN(WARN_REGEXP) && n >= REG_INFTY && !(PL_reg_flags & RF_warned)) { PL_reg_flags |= RF_warned; - Perl_warner(aTHX_ WARN_REGEXP, "%s limit (%d) exceeded", + Perl_warner(aTHX_ packWARN(WARN_REGEXP), "%s limit (%d) exceeded", "Complex regular subexpression recursion", REG_INFTY - 1); } @@ -4260,9 +4260,6 @@ S_reginclasslen(pTHX_ register regnode *n, register U8* p, STRLEN* lenp, registe if (swash_fetch(sw, p, do_utf8)) match = TRUE; else if (flags & ANYOF_FOLD) { - U8 tmpbuf[UTF8_MAXLEN_FOLD+1]; - STRLEN tmplen; - if (!match && lenp && av) { I32 i; @@ -4271,7 +4268,7 @@ S_reginclasslen(pTHX_ register regnode *n, register U8* p, STRLEN* lenp, registe STRLEN len; char *s = SvPV(sv, len); - if (len <= plen && memEQ(s, p, len)) { + if (len <= plen && memEQ(s, (char*)p, len)) { *lenp = len; match = TRUE; break; @@ -4279,15 +4276,13 @@ S_reginclasslen(pTHX_ register regnode *n, register U8* p, STRLEN* lenp, registe } } if (!match) { + U8 tmpbuf[UTF8_MAXLEN_FOLD+1]; + STRLEN tmplen; + to_utf8_fold(p, tmpbuf, &tmplen); if (swash_fetch(sw, tmpbuf, do_utf8)) match = TRUE; } - if (!match) { - to_utf8_upper(p, tmpbuf, &tmplen); - if (swash_fetch(sw, tmpbuf, do_utf8)) - match = TRUE; - } } } }