From 23dc19f005b6a9ac0740b46155f14dbcfa697421 Mon Sep 17 00:00:00 2001 From: Philippe Altherr Date: Sat, 3 Dec 2022 20:31:42 -0800 Subject: 51001: Reverts 8839e969b, most of 1ba8714a, and d873ed60. Also correct ChangeLog --- ChangeLog | 11 ++--------- NEWS | 9 --------- Src/exec.c | 4 +--- Src/loop.c | 12 ++++++------ Test/C03traps.ztst | 15 ++++++++++----- 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 - * 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 - - * 50897: Src/exec.c, Src/loop.c: nonzero status of complex - commands should trigger ERR_EXIT - 2022-11-08 Peter Stephenson * 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 -- cgit 1.4.1