From: Jarkko Hietaniemi Date: Sun, 23 Dec 2001 01:29:45 +0000 (+0000) Subject: More \X fixing. X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=b7c83a7e594640c2503df864ea898c1fad026a14;p=p5sagit%2Fp5-mst-13.2.git More \X fixing. p4raw-id: //depot/perl@13860 --- diff --git a/regexec.c b/regexec.c index 1a8a8e7..8e5efb0 100644 --- a/regexec.c +++ b/regexec.c @@ -2591,16 +2591,19 @@ S_regmatch(pTHX_ regnode *prog) nextchr = UCHARAT(++locinput); break; case CLUMP: - LOAD_UTF8_CHARCLASS(mark,"~"); - if (locinput >= PL_regeol || - swash_fetch(PL_utf8_mark,(U8*)locinput, do_utf8)) - sayNO; - locinput += PL_utf8skip[nextchr]; - while (locinput < PL_regeol && - swash_fetch(PL_utf8_mark,(U8*)locinput, do_utf8)) - locinput += UTF8SKIP(locinput); - if (locinput > PL_regeol) + if (locinput >= PL_regeol) sayNO; + if (do_utf8) { + LOAD_UTF8_CHARCLASS(mark,"~"); + if (swash_fetch(PL_utf8_mark,(U8*)locinput, do_utf8)) + sayNO; + locinput += PL_utf8skip[nextchr]; + while (locinput < PL_regeol && + swash_fetch(PL_utf8_mark,(U8*)locinput, do_utf8)) + locinput += UTF8SKIP(locinput); + if (locinput > PL_regeol) + sayNO; + } nextchr = UCHARAT(locinput); break; case REFFL: diff --git a/t/op/pat.t b/t/op/pat.t index 03eec49..7a88b04 100755 --- a/t/op/pat.t +++ b/t/op/pat.t @@ -6,7 +6,7 @@ $| = 1; -print "1..786\n"; +print "1..792\n"; BEGIN { chdir 't' if -d 't'; @@ -2389,3 +2389,18 @@ print "# some Unicode properties\n"; # Before #13843 this was failing by matching falsely. print "_:$char:_" =~ m/_:$SIGMA:_/i ? "not ok 786\n" : "ok 786\n"; } + +{ + print "# \\X\n"; + + use charnames ':full'; + + print "a!" =~ /\X!/ ? "ok 787\n" : "not ok 787\n"; + print "\xDF!" =~ /\X!/ ? "ok 788\n" : "not ok 788\n"; + print "\x{100}!" =~ /\X!/ ? "ok 789\n" : "not ok 789\n"; + print "\x{100}\x{300}!" =~ /\X!/ ? "ok 790\n" : "not ok 790\n"; + print "\N{LATIN CAPITAL LETTER E}!" =~ /\X!/ ? + "ok 791\n" : "not ok 791\n"; + print "\N{LATIN CAPITAL LETTER E}\N{COMBINING GRAVE ACCENT}!" =~ /\X!/ ? + "ok 792\n" : "not ok 792\n"; +}