diff options
| author | Peter Stephenson <pws@zsh.org> | 2017-08-31 16:54:19 +0100 |
|---|---|---|
| committer | Peter Stephenson <pws@zsh.org> | 2017-08-31 16:54:19 +0100 |
| commit | ebcea98eca33b8894d29545f1a46331d03f3913a (patch) | |
| tree | 6b834b6b2ddc7ed63f947154c52d99bf648943a4 /Src | |
| parent | 41567: _tmux: Complete detached sessions first for attach-session. (diff) | |
| download | zsh-ebcea98eca33b8894d29545f1a46331d03f3913a.tar zsh-ebcea98eca33b8894d29545f1a46331d03f3913a.tar.gz zsh-ebcea98eca33b8894d29545f1a46331d03f3913a.tar.bz2 zsh-ebcea98eca33b8894d29545f1a46331d03f3913a.tar.lz zsh-ebcea98eca33b8894d29545f1a46331d03f3913a.tar.xz zsh-ebcea98eca33b8894d29545f1a46331d03f3913a.tar.zst zsh-ebcea98eca33b8894d29545f1a46331d03f3913a.zip | |
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.
Diffstat (limited to 'Src')
| -rw-r--r-- | Src/loop.c | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/Src/loop.c b/Src/loop.c index 4859c976b..40e3bcb34 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -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(); |
