From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 5805 invoked from network); 18 Feb 1999 17:35:12 -0000 Received: from sunsite.auc.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 18 Feb 1999 17:35:12 -0000 Received: (qmail 7276 invoked by alias); 18 Feb 1999 17:33:36 -0000 Mailing-List: contact zsh-workers-help@sunsite.auc.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 5421 Received: (qmail 7240 invoked from network); 18 Feb 1999 17:33:33 -0000 Message-Id: <9902181717.AA49245@ibmth.df.unipi.it> To: zsh-workers@sunsite.auc.dk (Zsh hackers list) Subject: PATCH: 3.1.5-pws-8: setting duplicate elements of assoc array Date: Thu, 18 Feb 1999 18:17:26 +0100 From: Peter Stephenson I just discovered: % typeset -A newhash % newhash=(a 1 a 2) This is because createparam() now returns NULL when the parameter already exists. The easiest fix is to allow the later value to override the former. While doing this, I discovered two other bugs which I haven't fixed: 1) % __foo() { local list; list=(a b); complist -y '$list' -k list; } % defcomp __foo foo % foo ^D I don't know if it's supposed to work when list is about to go out of scope, and there's an easy workaround `-y "($list)"' (provided $list doesn't have spaces or commas --- which it actually does in the case I was trying, so I seem to be stuck), but it shouldn't print what it did. 2) % print ${foo%% ^ cursor here after space, hit tab, gives % print ${foo%% BUG: inbrace == '{' in paramsubst() BUG: inbrace == '{' in paramsubst() % print ${foo%% --- Src/params.c.uass Thu Feb 18 11:57:31 1999 +++ Src/params.c Thu Feb 18 17:49:26 1999 @@ -1837,6 +1837,12 @@ while (*aptr) { /* The parameter name is ztrdup'd... */ v->pm = createparam(*aptr, PM_SCALAR|PM_UNSET); + /* + * createparam() doesn't return anything if the parameter + * already existed. + */ + if (!v->pm) + v->pm = (Param) paramtab->getnode(paramtab, *aptr); zsfree(*aptr++); /* ...but we can use the value without copying. */ setstrvalue(v, *aptr++); -- Peter Stephenson Tel: +39 050 844536 WWW: http://www.ifh.de/~pws/ Dipartimento di Fisica, Via Buonarroti 2, 56127 Pisa, Italy