This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
regcomp.c: Do some extra folding
authorKarl Williamson <khw@cpan.org>
Sat, 4 Apr 2020 22:06:52 +0000 (16:06 -0600)
committerKarl Williamson <khw@cpan.org>
Fri, 16 Oct 2020 13:01:41 +0000 (07:01 -0600)
commitb1826163632422d276c89895546bd113c8f2cfe6
tree3bdfe941cff2457ae6ecef09d0b8e97170ba9f1f
parent4414955b8d69f301cec98246b177ffcc2eb9b061
regcomp.c: Do some extra folding

Generally we have to wait until runtime to do folding for regnodes that
are locale dependent, because we don't know what the locale at runtime
will be, and hence what the folds will be.

But UTF-8 locales all have the same folding behavior, no matter what the
locale is, with the exception of two fold pairs in Turkish.  (Lithuanian
too, but Perl doesn't support that language's special folding rules.)
UTF-8 is the only locale type that Perl supports that can represent code
points above 255.  Therefore we do know at compile time what the
above-255 folds are (again excepting the two in Turkish), and so we can
do the folding then.  But only if both the components are above 255.
There are a few folds that cross the 255/256 boundary, and they must be
deferred.

However, there are two instances where there are three characters that
fold together in which two of them are above 255, and the third isn't.
That the two high ones are equivalent under /i is known at compile time,
and so that equivalence can be stated then.
regcomp.c