This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
PATCH: [perl #78994]: optimizer loses folding
authorKarl Williamson <public@khwilliamson.com>
Wed, 10 Nov 2010 05:05:44 +0000 (22:05 -0700)
committerFather Chrysostomos <sprout@cpan.org>
Thu, 11 Nov 2010 17:35:04 +0000 (09:35 -0800)
commit8951c461a5079d86be33a432491eda98c24dc397
tree6c2018252817c1c89ba0626152dab154d7d01767
parentc914374596ade3d8c652ea5f8dc4d1cd663fd6b0
PATCH: [perl #78994]: optimizer loses folding

The optimizer works by creating an initial ANYOF node that is supposed
to match anything.  When it finds the first node that it wants to allow
be a first match, it ANDs the anything node with that one, effectively
setting the first node to it.  Subsequent nodes that could match in the
first position are OR'd instead, adding to the possibilities that the
first match could be.

But the optimizer was not dealing with the possibility of folding, so
the first node did not have that as a possibility and hence a match that
relied on the fold would not succeed.

Originally, the patch had an 'if (FOLD)' guarding the initialization of
the match anything node , but it turns out that FOLD is set only if
folding is on globally, and in the example program of the trouble
ticket, it isn't set at the proper time, because the regex is recompiled
when upgraded to utf8, and it doesn't get set then.  So I
unconditionally set ANYOF_FOLD.
regcomp.c
t/re/reg_fold.t