Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Substitution ${...///} slows down when certain UTF character occurs



On Sun, 27 Sep 2015 09:11:21 -0700
Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
> Still I think the biggest issue is that unmetafication happening too
> low down.  Since pattry*() is being called repeatedly with the same two
> first arguments (prog and string) it might be possible to cache the
> unmetafied string after the first call.

It would be good to optimise the cases where the calling code in glob.c
(for the parameter-style operators only) matches at different places along
the string, too, which means unmetafying at a higher level.  That's
quite a lot of work in the glob.c code, though, because we'll need to
deal with length and switch the multibyte handlers to umetafied.

I think a reasonable strategy would be to change the call sequence for
pattrylen() and pattryrefs(), which are the key ones, to pass in an
optional unmatefied string; some of the remaining calls in glob.c could
be premoted to pattrylen which is a strict superset of pattry.  That
would leave pattry() untouched for the majority of cases doing one-off
matching.

Ideally we only want to pass in either a metafied or unmetafied string.
I don't know off the top of my head how much work it is to fix up the
PAT_PURES optimisation where we've got an already unmetafied string but
it shouldn't be too much.

pws



Messages sorted by: Reverse Date, Date, Thread, Author