diff options
author | Bart Schaefer <barts@users.sourceforge.net> | 2005-12-15 04:24:04 +0000 |
---|---|---|
committer | Bart Schaefer <barts@users.sourceforge.net> | 2005-12-15 04:24:04 +0000 |
commit | 174ad4a80fa13a843a319c516e703ae74858ad39 (patch) | |
tree | 1423c7b97cf838be9f0d8af3913475d4914c700d /Src/loop.c | |
parent | c3e8aec7592bc9957c86a8be7883fdb6ae738095 (diff) | |
download | zsh-174ad4a80fa13a843a319c516e703ae74858ad39.tar.gz zsh-174ad4a80fa13a843a319c516e703ae74858ad39.tar.xz zsh-174ad4a80fa13a843a319c516e703ae74858ad39.zip |
21814: error handling for traps in "always" constructs.
Diffstat (limited to 'Src/loop.c')
-rw-r--r-- | Src/loop.c | 11 |
1 files changed, 10 insertions, 1 deletions
diff --git a/Src/loop.c b/Src/loop.c index 56c76b4bb..a29ac1982 100644 --- a/Src/loop.c +++ b/Src/loop.c @@ -627,13 +627,17 @@ zlong try_errflag = -1; /**/ +zlong +try_tryflag = 0; + +/**/ int exectry(Estate state, int do_exec) { Wordcode end, always; int endval; int save_retflag, save_breaks, save_loops, save_contflag; - zlong save_try_errflag; + zlong save_try_errflag, save_try_tryflag; end = state->pc + WC_TRY_SKIP(state->pc[-1]); always = state->pc + 1 + WC_TRY_SKIP(*state->pc); @@ -642,8 +646,13 @@ exectry(Estate state, int do_exec) cmdpush(CS_CURSH); /* The :try clause */ + save_try_tryflag = try_tryflag; + try_tryflag = 1; + execlist(state, 1, do_exec); + try_tryflag = save_try_tryflag; + /* Don't record errflag here, may be reset. */ endval = lastval; |