diff options
author | Peter Stephenson <pws@zsh.org> | 2015-05-15 10:19:53 +0100 |
---|---|---|
committer | Peter Stephenson <pws@zsh.org> | 2015-05-15 10:19:53 +0100 |
commit | 0da0a0b9c735c5bf0702a0f034976c01ae50fa66 (patch) | |
tree | c1e88de241382f2c7010b43fbf15e1fdf3948ae4 | |
parent | 59a874f94eea24f3697356d536541aa80b7068bf (diff) | |
download | zsh-0da0a0b9c735c5bf0702a0f034976c01ae50fa66.tar.gz zsh-0da0a0b9c735c5bf0702a0f034976c01ae50fa66.tar.xz zsh-0da0a0b9c735c5bf0702a0f034976c01ae50fa66.zip |
35153: nested math substitution
-rw-r--r-- | ChangeLog | 2 | ||||
-rw-r--r-- | Src/subst.c | 13 | ||||
-rw-r--r-- | Test/C01arith.ztst | 8 |
3 files changed, 21 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index 48eda44cd..8e2df6414 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2015-05-15 Peter Stephenson <p.stephenson@samsung.com> + * 35153: Src/subst.c, Test/C01arith.ztst: nested math substitution. + * 35151: Src/subst.c: improved check for both b and q flags. * 35131: Src/pattern.c: "[]" in a pattern is treated as an empty diff --git a/Src/subst.c b/Src/subst.c index 5a12e127f..d4a04b8e5 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -259,10 +259,19 @@ stringsubst(LinkList list, LinkNode node, int pf_flags, int asssub) #endif str--; } else if (c == Inparmath) { - /* Math substitution of the form $((...)) */ + /* + * Math substitution of the form $((...)). + * These can be nested, for goodness sake... + */ + int mathpar = 1; str[-1] = '\0'; - while (*str != Outparmath && *str) + while (mathpar && *str) { str++; + if (*str == Outparmath) + mathpar--; + else if (*str == Inparmath) + mathpar++; + } if (*str != Outparmath) { zerr("failed to find end of math substitution"); return NULL; diff --git a/Test/C01arith.ztst b/Test/C01arith.ztst index e2dfe56fc..d284e0869 100644 --- a/Test/C01arith.ztst +++ b/Test/C01arith.ztst @@ -387,3 +387,11 @@ print $((`:`)) 0:Null string in arithmetic evaluation after command substitution >0 + + print $(( 1 + $(( 2 + 3 )) )) + print $(($((3+4)))) + print $((1*$((2*$((3))*4))*5)) +0:Nested math substitutions. Yes, I know, very useful. +>6 +>7 +>120 |