1
0
Fork 0
mirror of git://git.code.sf.net/p/zsh/code synced 2025-09-11 13:01:28 +02:00

25532: problem skipping assignments etc. with setopt ERREXIT

This commit is contained in:
Peter Stephenson 2008-08-25 17:28:13 +00:00
parent 9d7298bac8
commit b8ae885ab8
3 changed files with 24 additions and 3 deletions

View file

@ -1,3 +1,9 @@
2008-08-25 Peter Stephenson <p.w.stephenson@ntlworld.com>
* 25532, Src/exec.c, Test/C03traps.ztst: skipping next command
didn't work if it was an assignment or other form tagged as
"simple".
2008-08-24 Clint Adams <clint@zsh.org> 2008-08-24 Clint Adams <clint@zsh.org>
* 25521: Completion/Unix/Command/_git: get merge strategies from * 25521: Completion/Unix/Command/_git: get merge strategies from

View file

@ -1068,7 +1068,7 @@ execlist(Estate state, int dont_change_job, int exiting)
lineno = lnp1 - 1; lineno = lnp1 - 1;
} }
if (sigtrapped[SIGDEBUG] && isset(DEBUGBEFORECMD)) { if (sigtrapped[SIGDEBUG] && isset(DEBUGBEFORECMD) && !intrap) {
int oerrexit_opt = opts[ERREXIT]; int oerrexit_opt = opts[ERREXIT];
opts[ERREXIT] = 0; opts[ERREXIT] = 0;
noerrexit = 1; noerrexit = 1;
@ -1086,11 +1086,12 @@ execlist(Estate state, int dont_change_job, int exiting)
donedebug = isset(ERREXIT) ? 2 : 1; donedebug = isset(ERREXIT) ? 2 : 1;
opts[ERREXIT] = oerrexit_opt; opts[ERREXIT] = oerrexit_opt;
} else } else
donedebug = 0; donedebug = intrap ? 1 : 0;
if (ltype & Z_SIMPLE) { if (ltype & Z_SIMPLE) {
next = state->pc + WC_LIST_SKIP(code); next = state->pc + WC_LIST_SKIP(code);
execsimple(state); if (donedebug != 2)
execsimple(state);
state->pc = next; state->pc = next;
goto sublist_done; goto sublist_done;
} }

View file

@ -415,6 +415,20 @@
>3 three >3 three
>5 five >5 five
# Assignments are a special case, since they use a simpler
# wordcode type, so we need to test skipping them separately.
fn() {
setopt localtraps localoptions debugbeforecmd
trap '(( LINENO == 4 )) && setopt errexit' DEBUG
x=three
x=four
print $LINENO $x
[[ -o errexit ]] && print "Hey, ERREXIT is set!"
}
fn
1:Skip assignment from DEBUG trap
>5 three
%clean %clean
rm -f TRAPEXIT rm -f TRAPEXIT