# HG changeset patch # User Bram Moolenaar # Date 1582980304 -3600 # Node ID 9a9ca0e622c88c658251270dc94e6f7f93005bf4 # Parent 2d657ba32b8368f2c2a071ed0f764a6ba14ab676 patch 8.2.0331: internal error when using test_void() and test_unknown() Commit: https://github.com/vim/vim/commit/7c215c58936cbebd4132ad6112d04db54b7c153e Author: Bram Moolenaar Date: Sat Feb 29 13:43:27 2020 +0100 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 --- a/src/evalfunc.c +++ b/src/evalfunc.c @@ -1890,7 +1890,10 @@ f_empty(typval_T *argvars, typval_T *ret #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 *rett 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 --- 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 --- 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 --- a/src/version.c +++ b/src/version.c @@ -739,6 +739,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 331, +/**/ 330, /**/ 329,