regexec.c: Most /iaa nodes are now pre-folded
authorKarl Williamson <khw@cpan.org>
Sun, 23 Dec 2018 20:10:09 +0000 (13:10 -0700)
committerKarl Williamson <khw@cpan.org>
Wed, 26 Dec 2018 19:50:37 +0000 (12:50 -0700)
commitaa419ff31a1e359d67cd44223a599ef9f276ca12
tree23c69948685975b5e2a5e8d5490b41dbe82405ba
parent53362e8571b73a5375a41d96a612bb1ff62d5bbf
regexec.c: Most /iaa nodes are now pre-folded

So, we don't have to re-fold them.

Previous commits have caused any EXACTFAA nodes to be pre-folded, and we
now have the infrastructure in regexec.c to take advantage of this,
including in non-UTF-8 patterns.  This commit changes to do this.

The only non-pre-folded EXACTFAA nodes are those that are not UTF-8, but
the target string is.  The reason is that the MICRO SIGN folds to
something representable only in UTF-8, so if you have both non-UTF-8, it
effectively is folded, and if you have the pattern in UTF-8, it gets
folded to the proper character.

In order for non-UTF-8 /iaa nodes to always be fully folded, there would
need to be a separate node for ones that contain the MICRO SIGN, and
then only that one wouldn't be considered folded when the target is
UTF-8.  I don't think it's worth it, as the only gain would be in
matching a non-UTF-8 /iaa node against a UTF-8 target string.  I suspect
/iaa will be used mostly in non-UTF8 target strings.  Comments have been
added to point this out in case someone thinks it should be implemented.
pod/perldebguts.pod
regcomp.sym
regexec.c