diff options
author | Peter Stephenson <pws@zsh.org> | 2016-06-22 13:10:22 +0100 |
---|---|---|
committer | Peter Stephenson <pws@zsh.org> | 2016-06-22 13:10:22 +0100 |
commit | 954cdd77d77136e572fc4896f3c0ba16f5c933ec (patch) | |
tree | 43fcd3fdb0a8f94b4bad0d35d8b64a3571c0d3a7 | |
parent | e83489fc4ba168abeb5ea7e23e64383fed181ed3 (diff) | |
download | zsh-954cdd77d77136e572fc4896f3c0ba16f5c933ec.tar.gz zsh-954cdd77d77136e572fc4896f3c0ba16f5c933ec.tar.xz zsh-954cdd77d77136e572fc4896f3c0ba16f5c933ec.zip |
38746: Fix suffix alias expansion recursion.
This was problematic if the expansion landed you back in command position. Delay marking the alias as out of use until the text that caused the expansion is finished.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | Src/lex.c | 7 | ||||
-rw-r--r-- | Test/A02alias.ztst | 6 |
3 files changed, 15 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog index d352067e7..146f7b882 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2016-06-22 Peter Stephenson <p.stephenson@samsung.com> + + * 38746: Src/lex.c, Test/A02alias.ztst: Delay marking + a suffix alias as free until the last minute. + 2016-06-22 Oliver Kiddle <opk@zsh.org> * 38714: Src/Zle/complete.c, Doc/Zsh/compsys.yo, diff --git a/Src/lex.c b/Src/lex.c index e36a01ec8..5ad3474fe 100644 --- a/Src/lex.c +++ b/Src/lex.c @@ -1842,10 +1842,11 @@ checkalias(void) if ((suf = strrchr(zshlextext, '.')) && suf[1] && suf > zshlextext && suf[-1] != Meta && (an = (Alias)sufaliastab->getnode(sufaliastab, suf+1)) && - !an->inuse && incmdpos) { - inpush(dupstring(zshlextext), INP_ALIAS, NULL); + !an->inuse && incmdpos && + !(inbufflags & INP_ALSUFF)) { + inpush(dupstring(zshlextext), INP_ALIAS, an); inpush(" ", INP_ALIAS, NULL); - inpush(an->text, INP_ALIAS, an); + inpush(an->text, INP_ALIAS, NULL); lexstop = 0; return 1; } diff --git a/Test/A02alias.ztst b/Test/A02alias.ztst index 49e47567c..1e09cd3f1 100644 --- a/Test/A02alias.ztst +++ b/Test/A02alias.ztst @@ -104,3 +104,9 @@ >0 ?(eval):2: invalid alias 'x=y' encountered while printing aliases # Currently, 'alias -L' returns 0 in this case. Perhaps it should return 1. + + alias -s mysuff='print -r "You said it.";' + eval 'thingummy.mysuff' +127:No endless loop with suffix alias in command position +>You said it. +?(eval):1: command not found: thingummy.mysuff |