zsh-workers
 help / color / mirror / code / Atom feed
From: Peter Stephenson <p.stephenson@samsung.com>
To: Zsh Hackers' List <zsh-workers@zsh.org>
Subject: Re: Typeset with array
Date: Thu, 25 Jun 2015 10:29:23 +0100	[thread overview]
Message-ID: <20150625102923.1dc227ff@pwslap01u.europe.root.pri> (raw)
In-Reply-To: <7337.1434735386@thecus.kiddle.eu>

On Fri, 19 Jun 2015 19:36:26 +0200
Oliver Kiddle <okiddle@yahoo.co.uk> wrote:
>   local -a foo=one
> So scope needs to be handled first and array conversion later.
> Similarly: typeset -i foo=(23)

I decided to make these errors --- the user is in a good position to do
the right thing here since it's staring them in the face and fixing
things up in typeset by guessing what the user actually meant is (you
can trust me on this :-/) very messy, so I think this is reasonable.

> I did something like the following in _git recently. It works
>   arr=( one two three )
>   local $arr
> There is also
>   local $^arr=foo
> and 
>   local $^^arr=foo
> The nearest in bash would be:
>   declare {a,b,c}=foo
> which works, but not:
>   declare {a,b,c}=(one two)

I think this is now working as expected and documented.

> Bash apparently lets you use += with declare but it seems to be
> meaningless because it is not using the value from the outer scope:
>   $ foo=hello
>   $ function foo {
>   > local foo+=bye
>   > echo $foo
>   > }
>   $ foo
>   bye
>   $ echo $foo
>   hello
> Ksh doesn't allow it. Printing an error in this case seems best which is
> what you have: typeset: not valid in this context: var+

This is still the case.

> Bash allows array element assignments:
>   typeset var[4]=hello
> Zsh now prints "can't create local array elements"
> Including when not in a function.

The problem isn't the assignment but you haven't yet told the shell that
"var" is a (local?) variable or what type it is.  So it's claiming to be
a bit confused. Do you really mean it to update an existing array var,
as it looks like, or don't you?  Or are you replacing the 4th character
of a scalar (which doesn't actually exist yet) with a string?  Both
work if var already exists, but if it doesn't it's syntactically
ambiguous even if you could probably guess that it should create ('' ''
'' hello).  We could tweak this, but it's at the point where I'm not
100% convinced it's the right thing to do.

> That could also be extended to something like var[2,7]=(1 2)

Extending assignments (at least to existing arrays) to handle array
slices would certainly be natural, yes.  I hope must of the mechanism is
already present and just needs borrowing from addvars().

> This is perhaps jumping ahead a bit but for completion, it seems we now
> get -command- context after typeset. As long as -var- context is applied
> inside the actual contexts, having -command- context otherwise for
> typeset would probably work fine.

That still needs looking at --- as this is a rather grungy interface
into the main shell it's a bit of a dark art whether this should be
tweaked by fixing up the context or fixing up the handler, or whether
it's one of the cases where the Red Death holds illimitable sway and
dominion.  With any luck one of the first two is possible.

Scalar and array contexts after typeset assignment seem to be working OK
as a -value-.

pws


  parent reply	other threads:[~2015-06-25  9:29 UTC|newest]

Thread overview: 39+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <5578996E.3080700@thequod.de>
     [not found] ` <150610191427.ZM30841@torch.brasslantern.com>
     [not found]   ` <5579C247.1060800@thequod.de>
     [not found]     ` <150611183639.ZM32247@torch.brasslantern.com>
     [not found]       ` <20150612094237.338f79d5@pwslap01u.europe.root.pri>
2015-06-19 11:39         ` Peter Stephenson
2015-06-19 14:06           ` Peter Stephenson
2015-06-19 18:54             ` Bart Schaefer
2015-06-19 20:16               ` Peter Stephenson
2015-06-19 21:11               ` Eric Cook
2015-06-19 16:09           ` Bart Schaefer
2015-06-19 20:32             ` Peter Stephenson
2015-06-20  3:50               ` Bart Schaefer
2015-06-20 17:05                 ` Peter Stephenson
2015-06-19 17:36           ` Oliver Kiddle
2015-06-19 18:40             ` Bart Schaefer
2015-06-25  9:29             ` Peter Stephenson [this message]
2015-06-25 15:16               ` Bart Schaefer
2015-06-25 15:39                 ` Peter Stephenson
2015-06-25 16:08                   ` Bart Schaefer
2015-06-25 16:34                     ` Peter Stephenson
2015-06-26 13:51               ` PATCH: array slice Peter Stephenson
2015-06-26 23:07                 ` Bart Schaefer
2015-06-27 19:42                   ` Peter Stephenson
2015-06-27 20:09                     ` Bart Schaefer
2015-06-26 16:46               ` PATCH: typeset completion Peter Stephenson
2015-06-26 19:14               ` Typeset with array Oliver Kiddle
2015-06-27 16:33                 ` Peter Stephenson
2015-06-21 20:05           ` Peter Stephenson
2015-06-21 20:38             ` Peter Stephenson
2015-06-23 16:47               ` Peter Stephenson
2015-06-23 17:52                 ` Mikael Magnusson
2015-06-23 20:17                   ` Bart Schaefer
2015-06-23 20:21                     ` Peter Stephenson
2015-06-23 20:24                     ` Mikael Magnusson
2015-06-24  1:35                       ` typeset -p with assoc array (was Re: Typeset with array) Bart Schaefer
2015-06-24  6:03                         ` Bart Schaefer
2015-06-23 20:25                 ` Typeset with array Bart Schaefer
2015-06-24  9:14                   ` Peter Stephenson
2015-06-24  9:29                     ` Peter Stephenson
2015-06-24 10:35                       ` Roman Neuhauser
2015-06-24 13:00                       ` Mikael Magnusson
2015-06-24 13:20                         ` Peter Stephenson
2015-06-24 15:03                     ` Bart Schaefer

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20150625102923.1dc227ff@pwslap01u.europe.root.pri \
    --to=p.stephenson@samsung.com \
    --cc=zsh-workers@zsh.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.vuxu.org/mirror/zsh/

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).