summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog11
-rw-r--r--NEWS9
-rw-r--r--Src/exec.c4
-rw-r--r--Src/loop.c12
-rw-r--r--Test/C03traps.ztst15
5 files changed, 19 insertions, 32 deletions
diff --git a/ChangeLog b/ChangeLog
index 33f3f90de..3b77f1023 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -31,20 +31,13 @@
2022-11-09 Bart Schaefer <schaefer@zsh.org>
- * 50929: Src/exec.c: fix handling of ERR_RETURN bent by 50928.
-
- * 50928: News, Src/exec.c, Test/C03traps.ztst: fix tests for 50897,
- mention behavior change in NEWS
+ * 50928: Test/C03traps.ztst: scoping of ERR_RETURN in test
+ (most of this patch was not retained)
* 50922: Src/exec.c, Src/jobs.c: fix additional cases of signals
for current shell jobs on the right of a pipeline. Backs out
part of 50874.
-2022-11-08 Bart Schaefer <schaefer@zsh.org>
-
- * 50897: Src/exec.c, Src/loop.c: nonzero status of complex
- commands should trigger ERR_EXIT
-
2022-11-08 Peter Stephenson <p.stephenson@samsung.com>
* users/28338: Src/lex.c, Test/D08cmdsubst.ztst: edge case of an
diff --git a/NEWS b/NEWS
index 9c28169bb..cdafd1ff5 100644
--- a/NEWS
+++ b/NEWS
@@ -4,15 +4,6 @@ CHANGES FROM PREVIOUS VERSIONS OF ZSH
Note also the list of incompatibilities in the README file.
-Changes since 5.9
------------------
-
-Handling of ERR_EXIT is corrected when the final status of a structured
-command (for, select, while, repeat, if, case, or a list in braces) is
-nonzero. To be compatible with other shells, "zsh -e" now exits in
-those circumstances, whereas previous versions did not. This does not
-affect the handling of nonzero status within conditional statements.
-
Changes since 5.8.1
-------------------
diff --git a/Src/exec.c b/Src/exec.c
index ce0c1f1ad..b0f42ae67 100644
--- a/Src/exec.c
+++ b/Src/exec.c
@@ -451,7 +451,7 @@ execcursh(Estate state, int do_exec)
cmdpop();
state->pc = end;
- this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END);
+ this_noerrexit = 1;
return lastval;
}
@@ -1442,8 +1442,6 @@ execlist(Estate state, int dont_change_job, int exiting)
execsimple(state);
else
execpline(state, code, ltype, (ltype & Z_END) && exiting);
- if (!locallevel || unset(ERRRETURN))
- this_noerrexit = noerrexit;
state->pc = next;
goto sublist_done;
break;
diff --git a/Src/loop.c b/Src/loop.c
index be5261369..db5b3e097 100644
--- a/Src/loop.c
+++ b/Src/loop.c
@@ -208,7 +208,7 @@ execfor(Estate state, int do_exec)
loops--;
simple_pline = old_simple_pline;
state->pc = end;
- this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END);
+ this_noerrexit = 1;
return lastval;
}
@@ -336,7 +336,7 @@ execselect(Estate state, UNUSED(int do_exec))
loops--;
simple_pline = old_simple_pline;
state->pc = end;
- this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END);
+ this_noerrexit = 1;
return lastval;
}
@@ -478,7 +478,7 @@ execwhile(Estate state, UNUSED(int do_exec))
popheap();
loops--;
state->pc = end;
- this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END);
+ this_noerrexit = 1;
return lastval;
}
@@ -532,7 +532,7 @@ execrepeat(Estate state, UNUSED(int do_exec))
loops--;
simple_pline = old_simple_pline;
state->pc = end;
- this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END);
+ this_noerrexit = 1;
return lastval;
}
@@ -587,7 +587,7 @@ execif(Estate state, int do_exec)
lastval = 0;
}
state->pc = end;
- this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END);
+ this_noerrexit = 1;
return lastval;
}
@@ -701,7 +701,7 @@ execcase(Estate state, int do_exec)
if (!anypatok)
lastval = 0;
- this_noerrexit = (WC_SUBLIST_TYPE(*end) != WC_SUBLIST_END);
+ this_noerrexit = 1;
return lastval;
}
diff --git a/Test/C03traps.ztst b/Test/C03traps.ztst
index 5cc45e2de..a7a040d70 100644
--- a/Test/C03traps.ztst
+++ b/Test/C03traps.ztst
@@ -726,7 +726,8 @@ F:Must be tested with a top-level script rather than source or function
done
print OK
)
-1:ERR_EXIT triggered by status 1 at end of for
+0:ERR_EXIT not triggered by status 1 at end of for
+>OK
(setopt err_exit
integer x=0
@@ -735,7 +736,8 @@ F:Must be tested with a top-level script rather than source or function
done
print OK
)
-1:ERR_EXIT triggered by status 1 at end of while
+0:ERR_EXIT not triggered by status 1 at end of while
+>OK
(setopt err_exit
repeat 1; do
@@ -743,7 +745,8 @@ F:Must be tested with a top-level script rather than source or function
done
print OK
)
-1:ERR_EXIT triggered by status 1 at end of repeat
+0:ERR_EXIT not triggered by status 1 at end of repeat
+>OK
(setopt err_exit
if true; then
@@ -751,7 +754,8 @@ F:Must be tested with a top-level script rather than source or function
fi
print OK
)
-1:ERR_EXIT triggered by status 1 at end of if
+0:ERR_EXIT not triggered by status 1 at end of if
+>OK
(setopt err_exit
{
@@ -759,7 +763,8 @@ F:Must be tested with a top-level script rather than source or function
}
print OK
)
-1:ERR_EXIT triggered by status 1 at end of { }
+0:ERR_EXIT not triggered by status 1 at end of { }
+>OK
unsetopt err_exit err_return
(setopt err_exit