Permalink
Browse files

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.
  • Loading branch information...
1 parent 98500fd commit 21662be2211675824df1771c7f169948ede40c41 @brammool brammool committed Nov 6, 2016
Showing with 42 additions and 24 deletions.
  1. +4 −4 src/if_cscope.c
  2. +19 −20 src/quickfix.c
  3. +17 −0 src/testdir/test_quickfix.vim
  4. +2 −0 src/version.c
View
@@ -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
}
View
@@ -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
@@ -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
View
@@ -765,6 +765,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 68,
+/**/
67,
/**/
66,

0 comments on commit 21662be

Please sign in to comment.