mirror of
git://git.code.sf.net/p/zsh/code
synced 2024-06-01 04:46:08 +02:00
Fix problem with ERR_RETURN.
It wasn't suppressed properly in the code following an if in some circumstances, in particular in initialsation scripts and also in a nested function where the caller had suppressed it.
This commit is contained in:
parent
73514c40f6
commit
ebcea98eca
|
@ -1,3 +1,9 @@
|
|||
2017-08-31 Peter Stephenson <p.stephenson@samsung.com>
|
||||
|
||||
* 41627: Src/loop.c, Test/C03traps.ztst: fix problem with
|
||||
ERR_RETURN in initialisation scripts and also on nested
|
||||
function involving ERR_RETURN suppression in the caller.
|
||||
|
||||
2017-08-30 Daniel Shahaf <d.s@daniel.shahaf.name>
|
||||
|
||||
* 41567: Completion/Unix/Command/_tmux: Complete detached
|
||||
|
|
|
@ -541,8 +541,7 @@ execif(Estate state, int do_exec)
|
|||
olderrexit = noerrexit;
|
||||
end = state->pc + WC_IF_SKIP(code);
|
||||
|
||||
if (!noerrexit)
|
||||
noerrexit = NOERREXIT_EXIT | NOERREXIT_RETURN;
|
||||
noerrexit |= NOERREXIT_EXIT | NOERREXIT_RETURN;
|
||||
while (state->pc < end) {
|
||||
code = *state->pc++;
|
||||
if (wc_code(code) != WC_IF ||
|
||||
|
@ -570,9 +569,9 @@ execif(Estate state, int do_exec)
|
|||
if (olderrexit)
|
||||
noerrexit = olderrexit;
|
||||
else if (lastval)
|
||||
noerrexit = NOERREXIT_EXIT | NOERREXIT_RETURN | NOERREXIT_UNTIL_EXEC;
|
||||
noerrexit |= NOERREXIT_EXIT | NOERREXIT_RETURN | NOERREXIT_UNTIL_EXEC;
|
||||
else
|
||||
noerrexit = 0;
|
||||
noerrexit &= ~ (NOERREXIT_EXIT | NOERREXIT_RETURN);
|
||||
cmdpush(run == 2 ? CS_ELSE : (s ? CS_ELIFTHEN : CS_IFTHEN));
|
||||
execlist(state, 1, do_exec);
|
||||
cmdpop();
|
||||
|
|
|
@ -661,6 +661,40 @@ F:Must be tested with a top-level script rather than source or function
|
|||
>before-out
|
||||
>before-in
|
||||
|
||||
mkdir -p zdotdir
|
||||
print >zdotdir/.zshenv '
|
||||
setopt norcs errreturn
|
||||
fn() {
|
||||
if false; then
|
||||
print Bad
|
||||
else
|
||||
print Good
|
||||
fi
|
||||
print Better
|
||||
}
|
||||
fn
|
||||
print In .zshenv'
|
||||
ZDOTDIR=$PWD/zdotdir $ZTST_testdir/../Src/zsh -c 'true'
|
||||
0:ERR_RETURN within initialisation code with special flags
|
||||
>Good
|
||||
>Better
|
||||
>In .zshenv
|
||||
|
||||
fn2() {
|
||||
if false; then
|
||||
print Bad
|
||||
else
|
||||
print Good
|
||||
fi
|
||||
}
|
||||
fn() {
|
||||
setopt err_return
|
||||
fn2 || true
|
||||
}
|
||||
fn
|
||||
0:ERR_RETURN in "else" branch in nested function
|
||||
>Good
|
||||
|
||||
(setopt err_exit
|
||||
for x in y; do
|
||||
false && true
|
||||
|
|
Loading…
Reference in New Issue