Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

PATCH: ksharrays and assoc array assignments (was Re: Files modified after a given date)



On Aug 27,  7:44pm, Gabor wrote:
} Subject: Re: Files modified after a given date
}
} On Fri, Aug 27, 1999 at 10:43:47PM +0000, Bart Schaefer wrote:
} # On Aug 27,  5:51pm, Gabor wrote:
} # > Subject: Re: Files modified after a given date
} # > === gabor $ builtin stat -H foo .zshrc
} # > zsh: attempt to set slice of associative array
} # 
} Well, I figured it out.  I believe this to be a bug, though you
} decide.  I always set ksharrays since I like 0 based indexing and use
} ksh for scripting at work.  With ksharrays unset, it works.

Aha.  Yes, that's a bug.  You can see it more easily with

zsh% setopt ksharrays
zsh% : ${(AA)=foo:=a b c d}
zsh: attempt to set slice of associative array

Here'a patch.

Index: Src/params.c
===================================================================
@@ -1697,9 +1697,14 @@
 	    v = NULL;
 	}
     }
-    if (!v)
-	if (!(v = getvalue(&t, 1)))
-	    return NULL;
+    if (!v) {
+	int k = opts[KSHARRAYS];	/* Remember the value of KSHARRAYS */
+	opts[KSHARRAYS] = 0;		/* and clear it to avoid special-  */
+	v = getvalue(&t, 1);		/* case of $array --> ${array[0]}. */
+	opts[KSHARRAYS] = k;		/* OK because we can't assign to a */
+	if (!v)				/* slice of an association anyway, */
+	    return NULL;		/* so ANY subscript will be wrong. */
+    }
     setarrvalue(v, val);
     return v->pm;
 }

-- 
Bart Schaefer                                 Brass Lantern Enterprises
http://www.well.com/user/barts              http://www.brasslantern.com



Messages sorted by: Reverse Date, Date, Thread, Author