]> granicus.if.org Git - vim/commitdiff
patch 8.1.1660: assert_fails() does not fail inside try/catch v8.1.1660
authorBram Moolenaar <Bram@vim.org>
Wed, 10 Jul 2019 20:04:48 +0000 (22:04 +0200)
committerBram Moolenaar <Bram@vim.org>
Wed, 10 Jul 2019 20:04:48 +0000 (22:04 +0200)
Problem:    Assert_fails() does not fail inside try/catch.
Solution:   Set trylevel to zero. (Ozaki Kiichi, closes #4639)

src/eval.c
src/testdir/test_assert.vim
src/version.c

index 26fad0c5facc7d2c59aa7c72e923e09278a5ffa6..d89093cb33b1e5d0140535b050d0dd2490b1a82f 100644 (file)
@@ -9910,10 +9910,14 @@ assert_fails(typval_T *argvars)
     char_u     *cmd = tv_get_string_chk(&argvars[0]);
     garray_T   ga;
     int                ret = 0;
+    int                save_trylevel = trylevel;
 
+    // trylevel must be zero for a ":throw" command to be considered failed
+    trylevel = 0;
     called_emsg = FALSE;
     suppress_errthrow = TRUE;
     emsg_silent = TRUE;
+
     do_cmdline_cmd(cmd);
     if (!called_emsg)
     {
@@ -9939,10 +9943,11 @@ assert_fails(typval_T *argvars)
            assert_append_cmd_or_arg(&ga, argvars, cmd);
            assert_error(&ga);
            ga_clear(&ga);
-       ret = 1;
+           ret = 1;
        }
     }
 
+    trylevel = save_trylevel;
     called_emsg = FALSE;
     suppress_errthrow = FALSE;
     emsg_silent = FALSE;
index 0d59a43a2de0e89943f26b4880094d847edfa63c..900710b893fef11610c61e10a754b711c8ad870a 100644 (file)
@@ -166,6 +166,12 @@ func Test_assert_fail_fails()
   call remove(v:errors, 0)
 endfunc
 
+func Test_assert_fails_in_try_block()
+  try
+    call assert_equal(0, assert_fails('throw "error"'))
+  endtry
+endfunc
+
 func Test_assert_beeps()
   new
   call assert_equal(0, assert_beeps('normal h'))
index 5e83159edfbf34f207ee54bd3d8ab3845d296a96..6af9abaaab1776eb44128ee170f47a38b4659e48 100644 (file)
@@ -777,6 +777,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1660,
 /**/
     1659,
 /**/