This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
"don't recompile pattern" check: account for UTF8
authorDavid Mitchell <davem@iabyn.com>
Fri, 18 Nov 2011 14:48:49 +0000 (14:48 +0000)
committerDavid Mitchell <davem@iabyn.com>
Wed, 13 Jun 2012 12:32:45 +0000 (13:32 +0100)
commit6ae44cd27f5f18bfa72c8d5ea352083cea44b3bc
tree54f7f19314f30c3483fb313cff81934902643ac3
parent2bd8e0da284e556e0ebae220a2fa52570cd96ca3
"don't recompile pattern" check: account for UTF8

When recompiling a pattern (e.g. for $x (x,y) { /$x/ }),
it tests whether the new pattern string matches the old one, and if so
skips recompiling it. However, it doesn't take account of the UTF8ness of
the old and new patterns, so can falsely skip recompiling. Now fixed.

Also, there is a feature in re_op_compile() that may abort a pattern
compilation, upgrade the pattern to UTF8, then begin the compile again.
I've added a second check for whether the pattern matches the old pattern,
against the upgraded string. I can't see a way to test this, since its
just an optimisation.  Arguably I could add a BEGIN in an embedded code
block to see if it gets compiled twice, but soon I'm going to make it so
that embedded code blocks always get recompiled anyway.
embed.fnc
proto.h
regcomp.c
t/re/pat.t