diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | Src/subst.c | 20 | ||||
-rw-r--r-- | Test/C01arith.ztst | 8 |
3 files changed, 29 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog index db222762a..31988c5b6 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2015-02-22 Peter Stephenson <p.w.stephenson@ntlworld.com> + * 34606: Src/subst.c, Test/C01arith.ztst: fix up arithmetic + nested in parameter substitution. + * 34604: Src/hist.c: Work around problem with changes in Meta affecting history file when read in. diff --git a/Src/subst.c b/Src/subst.c index 176a004ac..f52bcdfc8 100644 --- a/Src/subst.c +++ b/Src/subst.c @@ -2217,12 +2217,28 @@ paramsubst(LinkList l, LinkNode n, char **str, int qt, int pf_flags) */ idbeg = s; if ((subexp = (inbrace && s[-1] && isstring(*s) && - (s[1] == Inbrace || s[1] == Inpar)))) { + (s[1] == Inbrace || s[1] == Inpar || s[1] == Inparmath)))) { int sav; int quoted = *s == Qstring; + int outtok; val = s++; - skipparens(*s, *s == Inpar ? Outpar : Outbrace, &s); + switch (*s) { + case Inbrace: + outtok = Outbrace; + break; + case Inpar: + outtok = Outpar; + break; + case Inparmath: + outtok = Outparmath; + break; + default: + /* "Can't Happen" (TM) */ + DPUTS(1, "Nested substitution: This Can't Happen (TM)"); + return NULL; + } + skipparens(*s, outtok, &s); sav = *s; *s = 0; /* diff --git a/Test/C01arith.ztst b/Test/C01arith.ztst index 67d78ee13..d3176dd5e 100644 --- a/Test/C01arith.ztst +++ b/Test/C01arith.ztst @@ -300,6 +300,7 @@ print $(( 0b2 )) 1:Binary numbers don't tend to have 2's in ?(eval):1: bad math expression: operator expected at `2 ' +# ` for emacs shell mode integer varassi print $(( varassi = 5.5 / 2.0 )) @@ -376,3 +377,10 @@ esac)) 0:Would-be math expansion with extra parenthesis making it a cmd subst >Worked OK + + (setopt extendedglob + set -- 32.463 + print ${$(( $1 * 100 ))%%.[0-9]#}) +0:Arithmetic substitution nested in parameter substitution +>3246 + |