From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12740 invoked from network); 30 Mar 2004 12:57:32 -0000 Received: from sunsite.dk (130.225.247.90) by ns1.primenet.com.au with SMTP; 30 Mar 2004 12:57:32 -0000 Received: (qmail 13802 invoked by alias); 30 Mar 2004 12:56:30 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 19707 Received: (qmail 13775 invoked from network); 30 Mar 2004 12:56:29 -0000 Received: from localhost (HELO sunsite.dk) (127.0.0.1) by localhost with SMTP; 30 Mar 2004 12:56:29 -0000 X-MessageWall-Score: 0 (sunsite.dk) Received: from [130.225.247.86] by sunsite.dk (MessageWall 1.0.8) with SMTP; 30 Mar 2004 12:56:28 -0000 Received: (qmail 16925 invoked from network); 30 Mar 2004 12:29:47 -0000 Received: from mail36.messagelabs.com (193.109.254.211) by a.mx.sunsite.dk with SMTP; 30 Mar 2004 12:29:45 -0000 X-VirusChecked: Checked X-Env-Sender: okiddle@yahoo.co.uk X-Msg-Ref: server-10.tower-36.messagelabs.com!1080649758!5053535 X-StarScan-Version: 5.2.10; banners=-,-,- X-Originating-IP: [158.234.9.163] Received: (qmail 21172 invoked from network); 30 Mar 2004 12:29:18 -0000 Received: from iris.logica.co.uk (158.234.9.163) by server-10.tower-36.messagelabs.com with SMTP; 30 Mar 2004 12:29:18 -0000 Received: from trentino.logica.co.uk ([158.234.142.61]) by iris.logica.co.uk (8.12.3/8.12.3/Debian -4) with ESMTP id i2UCTHCk023899; Tue, 30 Mar 2004 13:29:18 +0100 Received: from trentino.logica.co.uk (localhost [127.0.0.1]) by trentino.logica.co.uk (Postfix) with ESMTP id 782247969E9B; Tue, 30 Mar 2004 14:28:33 +0200 (CEST) Cc: zsh-workers@sunsite.dk X-VirusChecked: Checked X-StarScan-Version: 5.0.7; banners=.,-,- In-reply-to: <200403251956.00439.jonathan-hankins@mindspring.com> From: Oliver Kiddle References: <200403251956.00439.jonathan-hankins@mindspring.com> To: Jonathan Hankins Subject: PATCH: Re: Subscript of negatively-subscripted array element gives incorrect result Date: Tue, 30 Mar 2004 14:28:33 +0200 Message-ID: <5774.1080649713@trentino.logica.co.uk> X-Spam-Checker-Version: SpamAssassin 2.63 on a.mx.sunsite.dk X-Spam-Level: X-Spam-Status: No, hits=0.0 required=6.0 tests=none autolearn=no version=2.63 X-Spam-Hits: 0.0 On 25 Mar, Jonathan Hankins wrote: > > I am getting different results taking a substring of the same array element > when I index it negatively than when I index it positively. Here is an > example: As Bart surmised, it was returning a one element array when negative indexing was used. Fix is below: Index: Src/params.c =================================================================== RCS file: /cvsroot/zsh/zsh/Src/params.c,v retrieving revision 1.79 diff -u -r1.79 params.c --- Src/params.c 18 Mar 2004 13:54:56 -0000 1.79 +++ Src/params.c 30 Mar 2004 12:09:58 -0000 @@ -1272,13 +1272,14 @@ } else { end = we ? we : start; } + if (start != end) com = 1; if (start > 0) start--; else if (start == 0 && end == 0) end++; if (s == tbrack) { s++; - if (v->isarr && start == end-1 && !com && + if (v->isarr && !com && (!(v->isarr & SCANPM_MATCHMANY) || !(v->isarr & (SCANPM_MATCHKEY | SCANPM_MATCHVAL | SCANPM_KEYMATCH)))) Index: Test/D05array.ztst =================================================================== RCS file: /cvsroot/zsh/zsh/Test/D05array.ztst,v retrieving revision 1.1 diff -u -r1.1 D05array.ztst --- Test/D05array.ztst 2 Apr 2001 12:34:23 -0000 1.1 +++ Test/D05array.ztst 30 Mar 2004 12:09:58 -0000 @@ -3,6 +3,7 @@ %prep foo=(a b c d e f g) + arr=(foo bar baz) mkdir array.tmp touch array.tmp/{1..9} @@ -60,6 +61,20 @@ 0:A slice with a negative start and end >.b c d e f. + echo .${${arr[2]}[1]}. + echo .${${arr[-2]}[1]}. + echo .${${arr[2,2]}[1]}. + echo .${${arr[-2,-2]}[1]}. + echo .${${arr[2,-2]}[1]}. + echo .${${arr[-2,2]}[1]}. +0:slices should return an array, elements a scalar +>.b. +>.b. +>.bar. +>.bar. +>.bar. +>.bar. + setopt ksh_arrays echo .${foo[1,2]}. unsetopt ksh_arrays