From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3200 invoked by alias); 22 Feb 2015 21:29:06 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 34606 Received: (qmail 3854 invoked from network); 22 Feb 2015 21:29:03 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 X-Originating-IP: [86.6.153.127] X-Spam: 0 X-Authority: v=2.1 cv=cpwVkjIi c=1 sm=1 tr=0 a=39NrsSuza2clQiZR/7fYWQ==:117 a=39NrsSuza2clQiZR/7fYWQ==:17 a=kj9zAlcOel0A:10 a=NLZqzBF-AAAA:8 a=pGLkceISAAAA:8 a=7ngJAznkDWdOt_XmWhAA:9 a=CjuIK1q_8ugA:10 Date: Sun, 22 Feb 2015 21:28:58 +0000 From: Peter Stephenson To: zsh workers Subject: Re: code that used to work that doesn't anymore Message-ID: <20150222212858.2ce59c6d@ntlworld.com> In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit On Sun, 22 Feb 2015 22:07:24 +0100 Mikael Magnusson wrote: > No idea if this was meant to be valid syntax, but used to run: > % zselect -t ${$(( $1 * 100 ))%.[0-9]#} > zsh: bad substitution It appears that's supported, but there was no test for it so it didn't get picked up as a change. diff --git a/Src/subst.c b/Src/subst.c index 176a004..f52bcdf 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 67d78ee..d3176dd 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 + -- Peter Stephenson Web page now at http://homepage.ntlworld.com/p.w.stephenson/