summaryrefslogtreecommitdiff
path: root/Src/pattern.c
diff options
context:
space:
mode:
authorPeter Stephenson <pws@users.sourceforge.net>2001-02-18 00:58:07 +0000
committerPeter Stephenson <pws@users.sourceforge.net>2001-02-18 00:58:07 +0000
commit441648bf5d1fed6a087affc6dd80c4d604704173 (patch)
treed3184dd4e0c271f74bdff75b152a8c8ad2a662f3 /Src/pattern.c
parentaf2ae90d25c362365f8fd82c15e57d22b692cddf (diff)
downloadzsh-441648bf5d1fed6a087affc6dd80c4d604704173.tar.gz
zsh-441648bf5d1fed6a087affc6dd80c4d604704173.zip
?## fix from 13497 and site name change from Geoff
Diffstat (limited to 'Src/pattern.c')
-rw-r--r--Src/pattern.c10
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);