From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17799 invoked from network); 15 May 2000 14:57:42 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 15 May 2000 14:57:42 -0000 Received: (qmail 11396 invoked by alias); 15 May 2000 14:57:33 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 11380 Received: (qmail 11389 invoked from network); 15 May 2000 14:57:33 -0000 Date: Mon, 15 May 2000 16:57:24 +0200 (MET DST) Message-Id: <200005151457.QAA20907@beta.informatik.hu-berlin.de> From: Sven Wischnowsky To: zsh-workers@sunsite.auc.dk In-reply-to: Peter Stephenson's message of Mon, 15 May 2000 11:01:24 +0100 Subject: PATCH: Re: ${-str} Peter Stephenson wrote: > Sven wrote: > > Geoff Wing wrote: > > > :serein% print -lr ${-str} > > > :569XZfims > > > % setopt norcs; echo ${-} > > > 569XZfims > > > > Yep. The same as for the other special parameters (`${$foo}'). > > Shouldn't we change this to be an error? Or do we really need this for > > compatibility? > > I think this should be an error. This was never documented behaviour and > most forms of bad parameter syntax produce complaints. Hope I haven't missed a special (and allowed) character... This is done quite lately to be able to catch `${foo[1][2]xxx}'. It doesn't catch `${}', but since `${:-...}' is valid, that's probably ok. The other hunks avoid a `unused variable' warning. Bye Sven Index: Src/subst.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/subst.c,v retrieving revision 1.4 diff -u -r1.4 subst.c --- Src/subst.c 2000/05/08 08:58:37 1.4 +++ Src/subst.c 2000/05/15 14:56:35 @@ -1230,6 +1230,15 @@ if (!inbrace) break; } + if (inbrace && + (c = *s) != '-' && c != '+' && c != ':' && c != '%' && c != '/' && + c != '=' && c != Equals && + c != '#' && c != Pound && + c != '?' && c != Quest && + c != '}' && c != Outbrace) { + zerr("bad substitution", NULL, 0); + return NULL; + } if (isarr) { if (nojoin) isarr = -1; @@ -1463,9 +1472,6 @@ } } { - char t = s[-1]; - - singsub(&s); #if 0 /* * This allows # and % to be at the start of @@ -1473,6 +1479,11 @@ * a bit nasty, and can be done (although * less efficiently) with anchors. */ + + char t = s[-1]; + + singsub(&s); + if (t == '/' && (flags & SUB_SUBSTR)) { if ((c = *s) == '#' || c == '%') { flags &= ~SUB_SUBSTR; @@ -1483,6 +1494,8 @@ s++; } } +#else + singsub(&s); #endif } -- Sven Wischnowsky wischnow@informatik.hu-berlin.de