diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2001-02-18 00:58:07 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2001-02-18 00:58:07 +0000 |
commit | 441648bf5d1fed6a087affc6dd80c4d604704173 (patch) | |
tree | d3184dd4e0c271f74bdff75b152a8c8ad2a662f3 /Src/pattern.c | |
parent | af2ae90d25c362365f8fd82c15e57d22b692cddf (diff) | |
download | zsh-441648bf5d1fed6a087affc6dd80c4d604704173.tar.gz zsh-441648bf5d1fed6a087affc6dd80c4d604704173.tar.xz zsh-441648bf5d1fed6a087affc6dd80c4d604704173.zip |
?## fix from 13497 and site name change from Geoff
Diffstat (limited to 'Src/pattern.c')
-rw-r--r-- | Src/pattern.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/Src/pattern.c b/Src/pattern.c index deb094d5f..db5344230 100644 --- a/Src/pattern.c +++ b/Src/pattern.c @@ -1103,13 +1103,19 @@ patcomppiece(int *flagp) * each time we fail on a non-empty branch, we try the empty branch, * which is equivalent to backtracking. */ - if ((flags & P_SIMPLE) && op == P_ONEHASH && + if ((flags & P_SIMPLE) && (op == P_ONEHASH || op == P_TWOHASH) && P_OP((Upat)patout+starter) == P_ANY) { /* Optimize ?# to *. Silly thing to do, since who would use * use ?# ? But it makes the later code shorter. */ Upat uptr = (Upat)patout + starter; - uptr->l = (uptr->l & ~0xff) | P_STAR; + if (op == P_TWOHASH) { + /* ?## becomes ?* */ + uptr->l = (uptr->l & ~0xff) | P_ANY; + pattail(starter, patnode(P_STAR)); + } else { + uptr->l = (uptr->l & ~0xff) | P_STAR; + } } else if ((flags & P_SIMPLE) && op && !(patglobflags & 0xff)) { /* Don't simplify if we need to look for approximations. */ patinsert(op, starter, NULL, 0); |