zsh-workers
 help / color / mirror / code / Atom feed
From: Peter Stephenson <p.w.stephenson@ntlworld.com>
To: zsh workers <zsh-workers@zsh.org>
Subject: Re: Bug with continue?
Date: Tue, 28 Mar 2023 12:56:54 +0100 (BST)	[thread overview]
Message-ID: <1273093793.3626093.1680004615002@mail.virginmedia.com> (raw)
In-Reply-To: <805138511.3622784.1680002886460@mail.virginmedia.com>

> On 28/03/2023 12:28 Peter Stephenson <p.w.stephenson@ntlworld.com> wrote:
> > On 28/03/2023 11:17 Peter Stephenson <p.w.stephenson@ntlworld.com> wrote:
> > > On 28/03/2023 10:32 Felipe Contreras <felipe.contreras@gmail.com> wrote:
> > > I notice this works differently in zsh than in other shells:
> > > 
> > >   for x in 1 2 3 4; do
> > >     continue &&
> > >     list="$list$x " &&
> > >     echo "x: $x"
> > >   done
> > >   echo "list: $list"
> > > 
> > > Why did the statement after `continue` gets evaluated?
>...
> The bug I'm thinking of is zsh-workers/51125, though it looks like I
> committed the fix under zsh-workers/51134.  That was about wheter
> "! return" should invert the status of the return given it's already
> returned by the time that would happen.  This is similar, but looks
> like it's not the same.
> 
> This one is a little weird as if the immediately next statement is a
> print it doesn't get executed.  I'm suspecting some subtlety with handling
> retflag.
> 
> pws

(I meant "breaks", of course.)  Redirected to zsh-workers as previously
advertised.

"breaks" means multiple things, but I think they all have the same
implication for a successful "continue".  If I can think of some
further useful tests I'll add them.

Added the corresponding test for return for safety.

pws

diff --git a/Src/exec.c b/Src/exec.c
index 3330bbce8..6454e4ccf 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -1491,7 +1491,7 @@ execlist(Estate state, int dont_change_job, int exiting)
 		 * we find a sublist followed by ORNEXT.                   */
 		if ((ret = ((WC_SUBLIST_FLAGS(code) & WC_SUBLIST_SIMPLE) ?
 			    execsimple(state) :
-			    execpline(state, code, Z_SYNC, 0)))) {
+			    execpline(state, code, Z_SYNC, 0))) || breaks) {
 		    state->pc = next;
 		    code = *state->pc++;
 		    next = state->pc + WC_SUBLIST_SKIP(code);
diff --git a/Test/A01grammar.ztst b/Test/A01grammar.ztst
index b3aea1055..88928980f 100644
--- a/Test/A01grammar.ztst
+++ b/Test/A01grammar.ztst
@@ -982,3 +982,21 @@ F:its expectations.
  }
  fn
 1:! does not affect return status of explicit return
+
+  msg=unset
+  for x in 1 2 3 4 5; do
+    continue && msg=set && print Not executed
+    print Not executed, neither.
+  done
+  print $msg
+0:continue causes immediate continuation
+>unset
+
+  msg=unset
+  () {
+    return && msg=set && print Not executed
+    print Not executed, not nor neither.
+  }
+  print $msg
+0:return causes immediate return
+>unset


  parent reply	other threads:[~2023-03-28 11:57 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <CAMP44s3NCDJU9TcSuSgy5oH=-iK3zpP3Vc1+95d3n16uydHhFA@mail.gmail.com>
     [not found] ` <16795430.3614208.1679998628194@mail.virginmedia.com>
2023-03-28 11:19   ` Mikael Magnusson
2023-03-28 13:16     ` Peter Stephenson
2023-03-30  8:08       ` Felipe Contreras
     [not found]   ` <805138511.3622784.1680002886460@mail.virginmedia.com>
2023-03-28 11:56     ` Peter Stephenson [this message]
2023-03-29 10:02     ` 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=1273093793.3626093.1680004615002@mail.virginmedia.com \
    --to=p.w.stephenson@ntlworld.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).