Skip to content

Commit 21662be

Browse files
committed
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.
1 parent 98500fd commit 21662be

4 files changed

Lines changed: 42 additions & 24 deletions

File tree

src/if_cscope.c

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1178,12 +1178,12 @@ cs_find_common(
11781178
}
11791179

11801180
# ifdef FEAT_AUTOCMD
1181-
if (*qfpos != '0')
1181+
if (*qfpos != '0'
1182+
&& apply_autocmds(EVENT_QUICKFIXCMDPRE, (char_u *)"cscope",
1183+
curbuf->b_fname, TRUE, curbuf))
11821184
{
1183-
apply_autocmds(EVENT_QUICKFIXCMDPRE, (char_u *)"cscope",
1184-
curbuf->b_fname, TRUE, curbuf);
11851185
# ifdef FEAT_EVAL
1186-
if (did_throw || force_abort)
1186+
if (aborting())
11871187
return FALSE;
11881188
# endif
11891189
}

src/quickfix.c

Lines changed: 19 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3446,12 +3446,11 @@ ex_make(exarg_T *eap)
34463446
case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break;
34473447
default: break;
34483448
}
3449-
if (au_name != NULL)
3449+
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
3450+
curbuf->b_fname, TRUE, curbuf))
34503451
{
3451-
apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
3452-
curbuf->b_fname, TRUE, curbuf);
34533452
# ifdef FEAT_EVAL
3454-
if (did_throw || force_abort)
3453+
if (aborting())
34553454
return;
34563455
# endif
34573456
}
@@ -3970,12 +3969,13 @@ ex_vimgrep(exarg_T *eap)
39703969
case CMD_lgrepadd: au_name = (char_u *)"lgrepadd"; break;
39713970
default: break;
39723971
}
3973-
if (au_name != NULL)
3972+
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
3973+
curbuf->b_fname, TRUE, curbuf))
39743974
{
3975-
apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
3976-
curbuf->b_fname, TRUE, curbuf);
3977-
if (did_throw || force_abort)
3975+
# ifdef FEAT_EVAL
3976+
if (aborting())
39783977
return;
3978+
# endif
39793979
}
39803980
#endif
39813981

@@ -4875,12 +4875,11 @@ ex_cbuffer(exarg_T *eap)
48754875
case CMD_laddbuffer: au_name = (char_u *)"laddbuffer"; break;
48764876
default: break;
48774877
}
4878-
if (au_name != NULL)
4878+
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
4879+
curbuf->b_fname, TRUE, curbuf))
48794880
{
4880-
apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
4881-
curbuf->b_fname, TRUE, curbuf);
48824881
# ifdef FEAT_EVAL
4883-
if (did_throw || force_abort)
4882+
if (aborting())
48844883
return;
48854884
# endif
48864885
}
@@ -4966,12 +4965,11 @@ ex_cexpr(exarg_T *eap)
49664965
case CMD_laddexpr: au_name = (char_u *)"laddexpr"; break;
49674966
default: break;
49684967
}
4969-
if (au_name != NULL)
4968+
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
4969+
curbuf->b_fname, TRUE, curbuf))
49704970
{
4971-
apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
4972-
curbuf->b_fname, TRUE, curbuf);
49734971
# ifdef FEAT_EVAL
4974-
if (did_throw || force_abort)
4972+
if (aborting())
49754973
return;
49764974
# endif
49774975
}
@@ -5042,12 +5040,13 @@ ex_helpgrep(exarg_T *eap)
50425040
case CMD_lhelpgrep: au_name = (char_u *)"lhelpgrep"; break;
50435041
default: break;
50445042
}
5045-
if (au_name != NULL)
5043+
if (au_name != NULL && apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
5044+
curbuf->b_fname, TRUE, curbuf))
50465045
{
5047-
apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
5048-
curbuf->b_fname, TRUE, curbuf);
5049-
if (did_throw || force_abort)
5046+
# ifdef FEAT_EVAL
5047+
if (aborting())
50505048
return;
5049+
# endif
50515050
}
50525051
#endif
50535052

src/testdir/test_quickfix.vim

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1631,3 +1631,20 @@ function Test_Autocmd()
16311631
\ 'postcaddbuffer']
16321632
call assert_equal(l, g:acmds)
16331633
endfunction
1634+
1635+
function! Test_Autocmd_Exception()
1636+
set efm=%m
1637+
lgetexpr '?'
1638+
1639+
try
1640+
call DoesNotExit()
1641+
catch
1642+
lgetexpr '1'
1643+
finally
1644+
lgetexpr '1'
1645+
endtry
1646+
1647+
call assert_equal('1', getloclist(0)[0].text)
1648+
1649+
set efm&vim
1650+
endfunction

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -764,6 +764,8 @@ static char *(features[]) =
764764

765765
static int included_patches[] =
766766
{ /* Add new patch number below this line */
767+
/**/
768+
68,
767769
/**/
768770
67,
769771
/**/

0 commit comments

Comments
 (0)