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

Re: Typeset with array



On Fri, 19 Jun 2015 09:09:04 -0700
Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx> wrote:
> 1. It's now possible to assign both arrays and scalars in one statement.
> 
>  - what happens for  typeset -a x="string" y=(word list)  ??

Oliver noted this, too (most of his examples should in principle do
something sensible eventually but I haven't got round to that level of
detail yet).  I think it doesn't matter that much if either this gets
silently turned into x=("string"), or if there's an error on the x
assignment, as long as we pick one and document it.

> 2. We don't have a distinct syntax for associative array assignment, so
> this still works only for ordinary arrays.
> 
>  - ksh of course uses  h=([key] value)  to assign an associative array.

Well, we don't have that syntax, but this should work:

  typeset -A hash=(bob robert bill william)

but doesn't because of a bug fixed below.  If you're playing along at
home --- this is exclusive to the typeset-array branch.

pws

diff --git a/Src/builtin.c b/Src/builtin.c
index b34669f..6cccf53 100644
--- a/Src/builtin.c
+++ b/Src/builtin.c
@@ -1998,7 +1998,7 @@ typeset_single(char *cname, char *pname, Param pm, UNUSED(int func),
 
     /* attempting a type conversion, or making a tied colonarray? */
     tc = 0;
-    if (ASG_ARRAYP(asg))
+    if (ASG_ARRAYP(asg) && PM_TYPE(on) == PM_SCALAR)
 	on |= PM_ARRAY;
     if (usepm && ASG_ARRAYP(asg) && newspecial == NS_NONE &&
 	PM_TYPE(pm->node.flags) != PM_ARRAY &&



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