regcomp.c: Optimize EXACTFish nodes without folds to EXACT
authorKarl Williamson <public@khwilliamson.com>
Thu, 11 Oct 2012 18:15:53 +0000 (12:15 -0600)
committerKarl Williamson <public@khwilliamson.com>
Fri, 12 Oct 2012 02:37:50 +0000 (20:37 -0600)
commit3465e1f03c6c748e8f8a6bf8bfdfaf1fc58a4810
treec096c1b4462c2c70501f6cf54569be38c0cf0997
parent5e4a1da18f8fd71f2e5f0b98b0d41e3da257281a
regcomp.c: Optimize EXACTFish nodes without folds to EXACT

Often, case folding will be applied to the entire regular expression
(such as by using "/i"), but there will be components in it that are the
same, folded or not.  These components could be represented as EXACT
nodes with no loss of information.  The regex optimizer is then able to
apply more optimizations to them than it could otherwise, and pattern
matching will execute faster.

This commit turns any EXACTFish node (except those under locale rules,
whose folding rules are not known until runtime)) that contains entirely
unfoldable characters into the equivalent EXACT node.

This optimization brings up the idea of possibly splitting an EXACTFish
node that contains a sufficiently long contiguous string of non-folding
characters into the portions that have folding and the portions that
don't.  That might or might not be beneficial; I'm not undertaking the
experiments to check that out.
regcomp.c