Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Re: Parse error (lack thereof) on incomplete loops
- X-seq: zsh-workers 43611
- From: Bart Schaefer <schaefer@xxxxxxxxxxxxxxxx>
- To: Peter Stephenson <p.stephenson@xxxxxxxxxxx>
- Subject: Re: Parse error (lack thereof) on incomplete loops
- Date: Fri, 5 Oct 2018 18:47:01 -0700
- Cc: "zsh-workers@xxxxxxx" <zsh-workers@xxxxxxx>
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20150623.gappssmtp.com; s=20150623; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=fbIWSzPx7a8M3XMvJyn5dtjJnF5jFZy9ta4hMOwbctM=; b=j3hzdHc6CzPfU4jEPQU0s05jgx8A7UYRs/00AclxDOGXUp6G1v59mMciamLKLgubti WP2DtkZ/xNO+2O+R8sHCoFveNgWBIVJo4Gy1Frx9ySC8XvtQRQsvNWVxKDFDFGw2vhad pSaRMjHmHHplM9jMHQyhGLI/zzh8ZZs/JcCNXuVoQe/vfscKLHEzejH0UQXckUUfeLm3 O/x+kaucvr3wgtHB2bacFuebkSMECnGxgmNuBjwHfcB16dgNJMVr6aTRn6YXYPOpBreh wlyIgoFAiSkke/QeX3iYcbsNJGxbBo5rmo78Xwl8MdRcTew2ur0Cq2NlcHAcPXOcZfV2 du3Q==
- In-reply-to: <20181005091435eucas1p26edaafb362de339b01c3cb5780fbd108~aq5QQQ6pF1496014960eucas1p2g@eucas1p2.samsung.com>
- List-help: <mailto:zsh-workers-help@zsh.org>
- List-id: Zsh Workers List <zsh-workers.zsh.org>
- List-post: <mailto:zsh-workers@zsh.org>
- List-unsubscribe: <mailto:zsh-workers-unsubscribe@zsh.org>
- Mailing-list: contact zsh-workers-help@xxxxxxx; run by ezmlm
- References: <CGME20181004154947epcas4p2441e109a2c4e060bf39f0f6925e98241@epcas4p2.samsung.com> <CAH+w=7awbwDuX2RXcB7pK6Hhbi8fjs=NvwkTAEGmY7gvNpLCqA@mail.gmail.com> <20181004163158eucas1p234a045be013b5463d8db44314ed217dc~adN28lJmq0822408224eucas1p2F@eucas1p2.samsung.com> <CAH+w=7ZLJ5iiph8jpsSiLKdhkozqH+o_kJk7=zfK3DLBegft8g@mail.gmail.com> <20181005091435eucas1p26edaafb362de339b01c3cb5780fbd108~aq5QQQ6pF1496014960eucas1p2g@eucas1p2.samsung.com>
On Fri, Oct 5, 2018 at 2:14 AM Peter Stephenson
<p.stephenson@xxxxxxxxxxx> wrote:
>
> The original expression is parsed as
>
> {
> while {
> false
> while false; do
> done
> }; do
> done
> }
>
> which is an infinite loop because of the point above. [...] However,
> apart from that there's nothing new [...] The only new feature is that all
> the "do ... done" clause has become optional if it's possible to infer
> there's nothing there. That seems to me entirely consistent.
I would contend that the point of SHORT_LOOPS is not to be able to
omit the loop body, it's to be able to abbreviate the syntax that
delimits the loop conditions and separates them from the loop body.
But of what possible use, for example, is { repeat 5 } which this
"accidental feature" allows? Or { select foo } or { for x } ? And if
{ for x } is allowed, why is { for x in z } an error, particularly if
you're arguing that it's obvious the "do-done" is meant to be empty?
Why should it have to be { for x in z; } when a trailing semicolon is
not required in other brace expressions?
> Without a "do" while doesn't know where the expression ends. That's
> fundamental to how SHORT_LOOPS works
No it isn't. The documentation explicitly says:
For the if, while and until commands, in both these cases the test part
of the loop must also be suitably delimited, such as by `[[ ... ]]' or
`(( ... )), else the end of the test will not be recognized.
"Both these cases" refers to:
#1 - sublist is of the form `{ list }'
#2 - the SHORT_LOOPS option is set
So you don't get to claim that SHORT_LOOPS is intended to except you
from that restriction. The "]]" or "))" tell while where the
expression ends.
In none of the examples given in this thread so far has the test
expression been delimited that way.
Messages sorted by:
Reverse Date,
Date,
Thread,
Author