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.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
@@ -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, @@ -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 |