From: Bram Moolenaar Date: Sat, 29 Feb 2020 12:43:27 +0000 (+0100) Subject: patch 8.2.0331: internal error when using test_void() and test_unknown() X-Git-Tag: v8.2.0331 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=7c215c58936cbebd4132ad6112d04db54b7c153e;p=vim patch 8.2.0331: internal error when using test_void() and test_unknown() Problem: Internal error when using test_void() and test_unknown(). (Dominique Pelle) Solution: Give a normal error. --- diff --git a/src/evalfunc.c b/src/evalfunc.c index ff891eaa9..3fce946bf 100644 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -1890,7 +1890,10 @@ f_empty(typval_T *argvars, typval_T *rettv) #endif case VAR_UNKNOWN: case VAR_VOID: - internal_error("f_empty(UNKNOWN)"); + // Let's not use internal_error() here, otherwise + // empty(test_unknown()) with ABORT_ON_INTERNAL_ERROR defined makes + // Vim abort. + semsg(_(e_intern2), "f_empty(UNKNOWN)"); n = TRUE; break; } @@ -8275,7 +8278,10 @@ f_type(typval_T *argvars, typval_T *rettv) case VAR_BLOB: n = VAR_TYPE_BLOB; break; case VAR_UNKNOWN: case VAR_VOID: - internal_error("f_type(UNKNOWN)"); + // Let's not use internal_error() here, otherwise + // empty(test_unknown()) with ABORT_ON_INTERNAL_ERROR defined + // makes Vim abort. + semsg(_(e_intern2), "f_type(UNKNOWN)"); n = -1; break; } diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim index 327350be0..6f3b81a30 100644 --- a/src/testdir/test_functions.vim +++ b/src/testdir/test_functions.vim @@ -58,6 +58,9 @@ func Test_empty() call assert_equal(0, empty(function('Test_empty'))) call assert_equal(0, empty(function('Test_empty', [0]))) + + call assert_fails("call empty(test_void())", 'E685:') + call assert_fails("call empty(test_unknown())", 'E685:') endfunc func Test_len() diff --git a/src/testdir/test_vimscript.vim b/src/testdir/test_vimscript.vim index 7a49b5783..cac3be53a 100644 --- a/src/testdir/test_vimscript.vim +++ b/src/testdir/test_vimscript.vim @@ -1165,6 +1165,8 @@ func Test_type() call assert_equal(v:t_none, type(v:none)) call assert_equal(v:t_none, type(v:null)) + call assert_fails("call type(test_void())", 'E685:') + call assert_fails("call type(test_unknown())", 'E685:') call assert_equal(0, 0 + v:false) call assert_equal(1, 0 + v:true) diff --git a/src/version.c b/src/version.c index b883605c6..c553f20a3 100644 --- a/src/version.c +++ b/src/version.c @@ -738,6 +738,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 331, /**/ 330, /**/