zsh-workers
 help / color / mirror / code / Atom feed
From: Oliver Kiddle <opk@zsh.org>
To: Bart Schaefer <schaefer@brasslantern.com>
Cc: Zsh hackers list <zsh-workers@zsh.org>
Subject: Re: "break" and functions
Date: Fri, 29 Mar 2024 18:38:46 +0100	[thread overview]
Message-ID: <43539-1711733926.063834@011r.oEGd.QZp_> (raw)
In-Reply-To: <CAH+w=7bb9BKUCvqCb=A-Qw36+HVn-NszP2DfQeXsYmKs-HVWFg@mail.gmail.com>

Bart Schaefer wrote:
> When adding this, I ran into a puzzling effect:
>
> % while :; do; echo ${|REPLY=x;break}; done
> x
> % while :; do; () { echo "$@" } ${|REPLY=x;break}; done
> %
>
> That is, breaking the loop skips the function call but does not skip
> the builtin.

My expectation would have been for either an error message saying
  break: not in while, until, select, or repeat loop`
or that because the break is run before the builtin that the builtin
would never get to run. But the implementation of break is just putting
a value in the breaks integer variable so I guess that variable isn't
checked until after the builtin is run. The anonymous function is
perhaps a two-stage process for defining and then running. Note:
  while :; do; () { echo hello } > ${|REPLY=x;break}; done
creates an empty file named x.

When suggesting the test, the exact behaviour was not something I cared
strongly about provided it wasn't seg fault, infinite loop or similar.

In the case of
  repeat 3 print c*(oe:'break':)
it might be a useful feature if break applied to the internal loop over
globbed files causing print to run but only with those files that were
matched so far. false works as a continue in that case.

If you're choosing which of the two cases in 52151 is wrong,
I'd say that with the purr() function is right because the break is run
before the print (or purr).
And possibly, it should be an error message for "not in a while, ..."

It also rather surprises me that the break here even works:

  br() { break }
  while : ; do
    br
  done

Oliver


  parent reply	other threads:[~2024-03-29 17:39 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-29  1:54 Bart Schaefer
2024-03-29  9:30 ` Mikael Magnusson
2024-03-29 16:28   ` Bart Schaefer
2024-03-29 16:56     ` Bart Schaefer
2024-03-29 17:38 ` Oliver Kiddle [this message]
2024-03-29 18:51   ` Bart Schaefer
2024-03-29 21:14     ` Mikael Magnusson
2024-03-29 22:02       ` 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=43539-1711733926.063834@011r.oEGd.QZp_ \
    --to=opk@zsh.org \
    --cc=schaefer@brasslantern.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).