diff options
author | Peter Stephenson <pws@users.sourceforge.net> | 2007-01-09 21:59:31 +0000 |
---|---|---|
committer | Peter Stephenson <pws@users.sourceforge.net> | 2007-01-09 21:59:31 +0000 |
commit | e8b56578db3d971b18d59a5c579ae19b70ec50a1 (patch) | |
tree | 746613cf3c5d42d24ebe65cad8bca1b0566f042a /Src/exec.c | |
parent | de815e3d22be721c09d6f0bc1896207cc3e3827b (diff) | |
download | zsh-e8b56578db3d971b18d59a5c579ae19b70ec50a1.tar.gz zsh-e8b56578db3d971b18d59a5c579ae19b70ec50a1.tar.xz zsh-e8b56578db3d971b18d59a5c579ae19b70ec50a1.zip |
users/11111: add DEBUG_BEFORE_CMD option
Diffstat (limited to 'Src/exec.c')
-rw-r--r-- | Src/exec.c | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/Src/exec.c b/Src/exec.c index d65c0a91e..487838a25 100644 --- a/Src/exec.c +++ b/Src/exec.c @@ -865,6 +865,22 @@ execlist(Estate state, int dont_change_job, int exiting) * semi-colon or ampersand (`sublists'). */ code = *state->pc++; while (wc_code(code) == WC_LIST && !breaks && !retflag) { + int donedebug; + if (sigtrapped[SIGDEBUG] && isset(DEBUGBEFORECMD)) { + exiting = donetrap; + ret = lastval; + dotrap(SIGDEBUG); + lastval = ret; + donetrap = exiting; + noerrexit = oldnoerrexit; + /* + * Only execute the trap once per sublist, even + * if the DEBUGBEFORECMD option changes. + */ + donedebug = 1; + } else + donedebug = 0; + ltype = WC_LIST_TYPE(code); csp = cmdsp; @@ -969,7 +985,7 @@ sublist_done: noerrexit = oldnoerrexit; - if (sigtrapped[SIGDEBUG]) { + if (sigtrapped[SIGDEBUG] && !isset(DEBUGBEFORECMD) && !donedebug) { exiting = donetrap; ret = lastval; dotrap(SIGDEBUG); |