zsh-workers
 help / color / mirror / code / Atom feed
From: Peter Stephenson <p.stephenson@samsung.com>
To: "zsh-workers@zsh.org" <zsh-workers@zsh.org>
Subject: Re: Parse error (lack thereof) on incomplete loops
Date: Fri, 5 Oct 2018 10:14:33 +0100	[thread overview]
Message-ID: <20181005091435eucas1p26edaafb362de339b01c3cb5780fbd108~aq5QQQ6pF1496014960eucas1p2g@eucas1p2.samsung.com> (raw)
In-Reply-To: <CAH+w=7ZLJ5iiph8jpsSiLKdhkozqH+o_kJk7=zfK3DLBegft8g@mail.gmail.com>

On Thu, 2018-10-04 at 13:34 -0700, Bart Schaefer wrote:
> My problem with it is that it's not consistent.
> 
> set -x
> { while false
> while false
> }
> 
> The shell is now in an infinite loop executing "false".  Can this
> really be intentional?

What's happening here is to do with

while false; do
  print Never executed
done
print $?

This prints 0.  So the body of the last "while false" is actually
irrelevant.

The original expression is parsed as

{
  while {
    false
    while false; do
    done
    }; do
  done
}

which is an infinite loop because of the point above.  Or, in other
words, it's the same as

{
  while false
    true
}

This also used to give a parse error for the same reason.  However,
apart from that there's nothing new --- you can see that even with
NO_SHORT_LOOPS,

while false; true; do print Looping; done

(where that "true" could be a "while false" loop, if you like) has been
an infinite loop since way back when.  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.

Without a "do" while doesn't know where the expression ends.  That's
fundamental to how SHORT_LOOPS works and why I regard it as so
ill-defined as to be useless in all but the simplest cases.  This new
(accidental) feature is giving it a particularly straightforward way of
telling it where the expression ends.

Anyway, I'm perfectly happy either restoring the parse error or not,
depending on the opinions of people more likely to use or fall foul of
this kind of syntax but I don't think the reason "it's all a bit weird"
is good enough on its own for restoring it.  Short loops *are* weird.

pws



  reply	other threads:[~2018-10-05  9:14 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CGME20181004154947epcas4p2441e109a2c4e060bf39f0f6925e98241@epcas4p2.samsung.com>
2018-10-04 15:49 ` Bart Schaefer
2018-10-04 16:31   ` Peter Stephenson
2018-10-04 20:04     ` Marc Chantreux
2018-10-04 20:37       ` Bart Schaefer
2018-10-05  6:04         ` Marc Chantreux
2018-10-04 20:34     ` Bart Schaefer
2018-10-05  9:14       ` Peter Stephenson [this message]
2018-10-05 13:26         ` Daniel Shahaf
2018-10-05 13:47           ` Peter Stephenson
2018-10-05 17:04             ` Daniel Shahaf
2018-10-06  1:47         ` Bart Schaefer
2018-10-06 11:15           ` Peter Stephenson
2018-10-06 11:55             ` Peter Stephenson
2018-10-06 18:21           ` Peter Stephenson
2018-10-07  3:51             ` Bart Schaefer
2018-10-07 18:16               ` Bart Schaefer
2018-10-08 10:07               ` Peter Stephenson

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='20181005091435eucas1p26edaafb362de339b01c3cb5780fbd108~aq5QQQ6pF1496014960eucas1p2g@eucas1p2.samsung.com' \
    --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).