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

Re: [bug] Math evaluation done twice in subscript in specific conditions



On Wed, 24 Jul 2019 at 07:12, Stephane Chazelas
<stephane.chazelas@xxxxxxxxx> wrote:
>
> 2019-07-24 01:50:23 +0200, Sebastian Gniazdowski:
> [...]
> > idx=0
> > a=()
> > : ${a[++idx]::=$idx}
> > print -rl $a
> > -> 1
> > : ${a[++idx]::=$idx}
> > print -rl $a
> > -> 1
> > -> 3
> > idx=1
> > : ${a[++idx]::=$idx}
> > print -rl $a
> > -> 1
> > -> 2
> > -> 3
> >
> > So apparently the assignment to idx does change something for the
> > following ::= "call" and makes it work correctly. The second and
> > following ::= calls cause $idx to increment twice.
> [...]
>
> It is increased by 2 on the first one as well:
>
> $ i=0 a=()
> $ : ${a[++i]::=$i}; echo $i $a
> 2 1
> $ : ${a[++i]::=$i}; echo $i $a
> 4 1 3

Ah, of course.

> It makes more sense in that latter case where I imaging a[i] is
> dereferenced first to check if it's empty or not, and then the
> indice is computed again upon assignment.
When I was debugging Zsh in the past, I've very often occurred double
getter call AFAIR, or at least of something underneath. It is basic to
assume that this would call mathevali twice. I was then thinking that
it is like that by design and didn't report it.

-- 
Sebastian Gniazdowski
News: https://twitter.com/ZdharmaI
IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin
Blog: http://zdharma.org



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