From: Bram Moolenaar Date: Sun, 6 Nov 2016 13:46:44 +0000 (+0100) Subject: patch 8.0.0068 X-Git-Tag: v8.0.0068 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=21662be2211675824df1771c7f169948ede40c41;p=vim patch 8.0.0068 Problem: Checking did_throw after executing autocommands is wrong. (Daniel Hahler) Solution: Call aborting() instead, and only when autocommands were executed. --- diff --git a/src/if_cscope.c b/src/if_cscope.c index 086c82963..9e7a362b2 100644 --- a/src/if_cscope.c +++ b/src/if_cscope.c @@ -1178,12 +1178,12 @@ cs_find_common( } # ifdef FEAT_AUTOCMD - if (*qfpos != '0') + if (*qfpos != '0' + && apply_autocmds(EVENT_QUICKFIXCMDPRE, (char_u *)"cscope", + curbuf->b_fname, TRUE, curbuf)) { - apply_autocmds(EVENT_QUICKFIXCMDPRE, (char_u *)"cscope", - curbuf->b_fname, TRUE, curbuf); # ifdef FEAT_EVAL - if (did_throw || force_abort) + if (aborting()) return FALSE; # endif } diff --git a/src/quickfix.c b/src/quickfix.c index 5bd125720..c3def1bc0 100644 --- a/src/quickfix.c +++ b/src/quickfix.c @@ -3446,12 +3446,11 @@ ex_make(exarg_T *eap) case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break; default: break; } - if (au_name != NULL) + if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, + curbuf->b_fname, TRUE, curbuf)) { - apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, - curbuf->b_fname, TRUE, curbuf); # ifdef FEAT_EVAL - if (did_throw || force_abort) + if (aborting()) return; # endif } @@ -3970,12 +3969,13 @@ ex_vimgrep(exarg_T *eap) case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break; default: break; } - if (au_name != NULL) + if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, + curbuf->b_fname, TRUE, curbuf)) { - apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, - curbuf->b_fname, TRUE, curbuf); - if (did_throw || force_abort) +# ifdef FEAT_EVAL + if (aborting()) return; +# endif } #endif @@ -4875,12 +4875,11 @@ ex_cbuffer(exarg_T *eap) case CMD_laddbuffer: au_name = (char_u *)"laddbuffer"; break; default: break; } - if (au_name != NULL) + if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, + curbuf->b_fname, TRUE, curbuf)) { - apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, - curbuf->b_fname, TRUE, curbuf); # ifdef FEAT_EVAL - if (did_throw || force_abort) + if (aborting()) return; # endif } @@ -4966,12 +4965,11 @@ ex_cexpr(exarg_T *eap) case CMD_laddexpr: au_name = (char_u *)"laddexpr"; break; default: break; } - if (au_name != NULL) + if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, + curbuf->b_fname, TRUE, curbuf)) { - apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, - curbuf->b_fname, TRUE, curbuf); # ifdef FEAT_EVAL - if (did_throw || force_abort) + if (aborting()) return; # endif } @@ -5042,12 +5040,13 @@ ex_helpgrep(exarg_T *eap) case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break; default: break; } - if (au_name != NULL) + if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, + curbuf->b_fname, TRUE, curbuf)) { - apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name, - curbuf->b_fname, TRUE, curbuf); - if (did_throw || force_abort) +# ifdef FEAT_EVAL + if (aborting()) return; +# endif } #endif diff --git a/src/testdir/test_quickfix.vim b/src/testdir/test_quickfix.vim index 022c12a29..118a015cb 100644 --- a/src/testdir/test_quickfix.vim +++ b/src/testdir/test_quickfix.vim @@ -1631,3 +1631,20 @@ function Test_Autocmd() \ 'postcaddbuffer'] call assert_equal(l, g:acmds) endfunction + +function! Test_Autocmd_Exception() + set efm=%m + lgetexpr '?' + + try + call DoesNotExit() + catch + lgetexpr '1' + finally + lgetexpr '1' + endtry + + call assert_equal('1', getloclist(0)[0].text) + + set efm&vim +endfunction diff --git a/src/version.c b/src/version.c index 548d578ef..4a0725bb3 100644 --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 68, /**/ 67, /**/