changeset 33886:cd7acb9bc4fd v9.0.2152

patch 9.0.2152: Using type unknown for List/Dict containers Commit: https://github.com/vim/vim/commit/668971958c126d5e105fd44b60a4efcaf2c4b55c Author: Yegappan Lakshmanan <yegappan@yahoo.com> Date: Tue Dec 5 15:51:50 2023 +0100 patch 9.0.2152: Using type unknown for List/Dict containers Problem: Using type unknown for List/Dict containers Solution: Use 'any' instead fixes: #13582 closes: #13625 Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
author Christian Brabandt <cb@256bit.org>
date Sun, 10 Dec 2023 15:16:23 +0100
parents a8a44f90e584
children d85d11962b82
files src/testdir/test_listdict.vim src/testdir/test_vim9_assign.vim src/testdir/test_vim9_builtin.vim src/testdir/test_vim9_class.vim src/testdir/test_vim9_disassemble.vim src/testdir/test_vim9_expr.vim src/testdir/test_vim9_func.vim src/version.c src/vim9type.c
diffstat 9 files changed, 123 insertions(+), 117 deletions(-) [+]
line wrap: on
line diff
--- a/src/testdir/test_listdict.vim
+++ b/src/testdir/test_listdict.vim
@@ -516,7 +516,7 @@ func Test_dict_func_remove()
       var d = {1: 'a', 3: 'c'}
       call remove(d, [])
   END
-  call v9.CheckDefExecFailure(lines, 'E1013: Argument 2: type mismatch, expected string but got list<unknown>')
+  call v9.CheckDefExecFailure(lines, 'E1013: Argument 2: type mismatch, expected string but got list<any>')
 endfunc
 
 " Nasty: remove func from Dict that's being called (works)
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -620,7 +620,7 @@ def Test_assign_index()
       l3[0] = []
       l3[0][0] = []
   END
-  v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got list<unknown>', 3)
+  v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got list<any>', 3)
 
   # dict of dict
   var d1: dict<number>
@@ -663,7 +663,7 @@ def Test_assign_index()
       d3.one = {}
       d3.one.two = {}
   END
-  v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got dict<unknown>', 3)
+  v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected number but got dict<any>', 3)
 
   lines =<< trim END
     var lines: list<string>
@@ -687,7 +687,7 @@ def Test_assign_index()
       var ld: list<dict<number>>
       ld[0] = []
   END
-  v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected dict<number> but got list<unknown>', 2)
+  v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected dict<number> but got list<any>', 2)
 
   # dict of list
   var dl: dict<list<number>>
@@ -699,7 +699,7 @@ def Test_assign_index()
       var dl: dict<list<number>>
       dl.one = {}
   END
-  v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected list<number> but got dict<unknown>', 2)
+  v9.CheckDefFailure(lines, 'E1012: Type mismatch; expected list<number> but got dict<any>', 2)
 
   lines =<< trim END
       g:l = [1, 2]
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -73,7 +73,7 @@ def Test_abs()
 enddef
 
 def Test_add()
-  v9.CheckDefAndScriptFailure(['add({}, 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1226: List or Blob required for argument 1'])
+  v9.CheckDefAndScriptFailure(['add({}, 1)'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<any>', 'E1226: List or Blob required for argument 1'])
   v9.CheckDefAndScriptFailure(['add([])'], 'E119:')
   v9.CheckDefExecFailure([
         'var ln: list<number> = [1]',
@@ -284,12 +284,12 @@ def Test_assert_equalfile()
 enddef
 
 def Test_assert_exception()
-  v9.CheckDefAndScriptFailure(['assert_exception({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['assert_exception({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', 'E1174: String required for argument 1'])
   v9.CheckDefAndScriptFailure(['assert_exception("E1:", v:null)'], ['E1013: Argument 2: type mismatch, expected string but got special', 'E1174: String required for argument 2'])
 enddef
 
 def Test_assert_fails()
-  v9.CheckDefAndScriptFailure(['assert_fails([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['assert_fails([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
   v9.CheckDefAndScriptFailure(['assert_fails("a", true)'], ['E1013: Argument 2: type mismatch, expected string but got bool', 'E1222: String or List required for argument 2'])
   v9.CheckDefAndScriptFailure(['assert_fails("a", "b", "c", "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
   v9.CheckDefAndScriptFailure(['assert_fails("a", "b", "c", 4, 5)'], ['E1013: Argument 5: type mismatch, expected string but got number', 'E1174: String required for argument 5'])
@@ -303,7 +303,7 @@ def Test_assert_inrange()
 enddef
 
 def Test_assert_match()
-  v9.CheckDefAndScriptFailure(['assert_match({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', ''])
+  v9.CheckDefAndScriptFailure(['assert_match({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', ''])
   v9.CheckDefAndScriptFailure(['assert_match("a", 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', ''])
   v9.CheckDefAndScriptFailure(['assert_match("a", "b", null)'], ['E1013: Argument 3: type mismatch, expected string but got special', ''])
 enddef
@@ -313,7 +313,7 @@ def Test_assert_nobeep()
 enddef
 
 def Test_assert_notmatch()
-  v9.CheckDefAndScriptFailure(['assert_notmatch({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', ''])
+  v9.CheckDefAndScriptFailure(['assert_notmatch({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', ''])
   v9.CheckDefAndScriptFailure(['assert_notmatch("a", 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', ''])
   v9.CheckDefAndScriptFailure(['assert_notmatch("a", "b", null)'], ['E1013: Argument 3: type mismatch, expected string but got special', ''])
 enddef
@@ -323,11 +323,11 @@ def Test_assert_report()
 enddef
 
 def Test_autocmd_add()
-  v9.CheckDefAndScriptFailure(['autocmd_add({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
+  v9.CheckDefAndScriptFailure(['autocmd_add({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<any>', 'E1211: List required for argument 1'])
 enddef
 
 def Test_autocmd_delete()
-  v9.CheckDefAndScriptFailure(['autocmd_delete({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
+  v9.CheckDefAndScriptFailure(['autocmd_delete({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<any>', 'E1211: List required for argument 1'])
 enddef
 
 def Test_autocmd_get()
@@ -368,8 +368,8 @@ enddef
 
 def Test_browsedir()
   if has('browse')
-    v9.CheckDefAndScriptFailure(['browsedir({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
-    v9.CheckDefAndScriptFailure(['browsedir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
+    v9.CheckDefAndScriptFailure(['browsedir({}, "b")'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', 'E1174: String required for argument 1'])
+    v9.CheckDefAndScriptFailure(['browsedir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1174: String required for argument 2'])
   endif
 enddef
 
@@ -453,7 +453,7 @@ enddef
 
 def Test_byte2line()
   v9.CheckDefAndScriptFailure(['byte2line("1")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['byte2line([])'], ['E1013: Argument 1: type mismatch, expected number but got list<unknown>', 'E1210: Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['byte2line([])'], ['E1013: Argument 1: type mismatch, expected number but got list<any>', 'E1210: Number required for argument 1'])
   byte2line(0)->assert_equal(-1)
 enddef
 
@@ -526,7 +526,7 @@ def Test_ch_evalexpr()
     CheckFeature channel
   else
     v9.CheckDefAndScriptFailure(['ch_evalexpr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
-    v9.CheckDefAndScriptFailure(['ch_evalexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+    v9.CheckDefAndScriptFailure(['ch_evalexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
   endif
 enddef
 
@@ -536,7 +536,7 @@ def Test_ch_evalraw()
   else
     v9.CheckDefAndScriptFailure(['ch_evalraw(1, "")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
     v9.CheckDefAndScriptFailure(['ch_evalraw(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2'])
-    v9.CheckDefAndScriptFailure(['ch_evalraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+    v9.CheckDefAndScriptFailure(['ch_evalraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
   endif
 enddef
 
@@ -609,7 +609,7 @@ def Test_ch_read()
     CheckFeature channel
   else
     v9.CheckDefAndScriptFailure(['ch_read(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
-    v9.CheckDefAndScriptFailure(['ch_read(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+    v9.CheckDefAndScriptFailure(['ch_read(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
   endif
 enddef
 
@@ -618,7 +618,7 @@ def Test_ch_readblob()
     CheckFeature channel
   else
     v9.CheckDefAndScriptFailure(['ch_readblob(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
-    v9.CheckDefAndScriptFailure(['ch_readblob(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+    v9.CheckDefAndScriptFailure(['ch_readblob(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
   endif
 enddef
 
@@ -627,7 +627,7 @@ def Test_ch_readraw()
     CheckFeature channel
   else
     v9.CheckDefAndScriptFailure(['ch_readraw(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
-    v9.CheckDefAndScriptFailure(['ch_readraw(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+    v9.CheckDefAndScriptFailure(['ch_readraw(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
   endif
 enddef
 
@@ -636,7 +636,7 @@ def Test_ch_sendexpr()
     CheckFeature channel
   else
     v9.CheckDefAndScriptFailure(['ch_sendexpr(1, "a")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
-    v9.CheckDefAndScriptFailure(['ch_sendexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+    v9.CheckDefAndScriptFailure(['ch_sendexpr(test_null_channel(), 1, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
   endif
 enddef
 
@@ -646,7 +646,7 @@ def Test_ch_sendraw()
   else
     v9.CheckDefAndScriptFailure(['ch_sendraw(1, "")'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
     v9.CheckDefAndScriptFailure(['ch_sendraw(test_null_channel(), 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1221: String or Blob required for argument 2'])
-    v9.CheckDefAndScriptFailure(['ch_sendraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+    v9.CheckDefAndScriptFailure(['ch_sendraw(test_null_channel(), "", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
   endif
 enddef
 
@@ -655,7 +655,7 @@ def Test_ch_setoptions()
     CheckFeature channel
   else
     v9.CheckDefAndScriptFailure(['ch_setoptions(1, {})'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
-    v9.CheckDefAndScriptFailure(['ch_setoptions(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+    v9.CheckDefAndScriptFailure(['ch_setoptions(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
   endif
 enddef
 
@@ -664,7 +664,7 @@ def Test_ch_status()
     CheckFeature channel
   else
     v9.CheckDefAndScriptFailure(['ch_status(1)'], ['E1013: Argument 1: type mismatch, expected channel but got number', 'E1217: Channel or Job required for argument 1'])
-    v9.CheckDefAndScriptFailure(['ch_status(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+    v9.CheckDefAndScriptFailure(['ch_status(test_null_channel(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
   endif
 enddef
 
@@ -689,7 +689,7 @@ enddef
 def Test_charcol()
   v9.CheckDefAndScriptFailure(['charcol(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1'])
   v9.CheckDefAndScriptFailure(['charcol({a: 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1'])
-  v9.CheckDefAndScriptFailure(['charcol(".", [])'], ['E1013: Argument 2: type mismatch, expected number but got list<unknown>', 'E1210: Number required for argument 2'])
+  v9.CheckDefAndScriptFailure(['charcol(".", [])'], ['E1013: Argument 2: type mismatch, expected number but got list<any>', 'E1210: Number required for argument 2'])
   v9.CheckDefExecAndScriptFailure(['charcol("")'], 'E1209: Invalid value for a line number')
   new
   setline(1, ['abcdefgh'])
@@ -714,7 +714,7 @@ def Test_chdir()
 enddef
 
 def Test_cindent()
-  v9.CheckDefAndScriptFailure(['cindent([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['cindent([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
   v9.CheckDefAndScriptFailure(['cindent(null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1220: String or Number required for argument 1'])
   v9.CheckDefExecAndScriptFailure(['cindent("")'], 'E1209: Invalid value for a line number')
   assert_equal(-1, cindent(0))
@@ -738,23 +738,23 @@ def Test_col()
   v9.CheckDefAndScriptFailure(['col(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1222: String or List required for argument 1'])
   v9.CheckDefAndScriptFailure(['col({a: 10})'], ['E1013: Argument 1: type mismatch, expected string but got dict<number>', 'E1222: String or List required for argument 1'])
   v9.CheckDefAndScriptFailure(['col(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1222: String or List required for argument 1'])
-  v9.CheckDefAndScriptFailure(['col(".", [])'], ['E1013: Argument 2: type mismatch, expected number but got list<unknown>', 'E1210: Number required for argument 2'])
+  v9.CheckDefAndScriptFailure(['col(".", [])'], ['E1013: Argument 2: type mismatch, expected number but got list<any>', 'E1210: Number required for argument 2'])
   v9.CheckDefExecAndScriptFailure(['col("")'], 'E1209: Invalid value for a line number')
   bw!
 enddef
 
 def Test_complete()
   v9.CheckDefAndScriptFailure(['complete("1", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['complete(1, {})'], ['E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2'])
+  v9.CheckDefAndScriptFailure(['complete(1, {})'], ['E1013: Argument 2: type mismatch, expected list<any> but got dict<any>', 'E1211: List required for argument 2'])
 enddef
 
 def Test_complete_add()
-  v9.CheckDefAndScriptFailure(['complete_add([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1223: String or Dictionary required for argument 1'])
+  v9.CheckDefAndScriptFailure(['complete_add([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1223: String or Dictionary required for argument 1'])
 enddef
 
 def Test_complete_info()
   v9.CheckDefAndScriptFailure(['complete_info("")'], ['E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1211: List required for argument 1'])
-  v9.CheckDefAndScriptFailure(['complete_info({})'], ['E1013: Argument 1: type mismatch, expected list<string> but got dict<unknown>', 'E1211: List required for argument 1'])
+  v9.CheckDefAndScriptFailure(['complete_info({})'], ['E1013: Argument 1: type mismatch, expected list<string> but got dict<any>', 'E1211: List required for argument 1'])
   assert_equal({'pum_visible': 0, 'mode': '', 'selected': -1, 'items': []}, complete_info())
   assert_equal({'mode': '', 'items': []}, complete_info(['mode', 'items']))
 enddef
@@ -877,8 +877,8 @@ def Test_delete()
 enddef
 
 def Test_deletebufline()
-  v9.CheckDefAndScriptFailure(['deletebufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['deletebufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 2'])
+  v9.CheckDefAndScriptFailure(['deletebufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['deletebufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 2'])
   v9.CheckDefAndScriptFailure(['deletebufline("a", 2, 0z10)'], ['E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3'])
   new
   setline(1, ['one', 'two'])
@@ -892,7 +892,7 @@ def Test_deletebufline()
 enddef
 
 def Test_diff_filler()
-  v9.CheckDefAndScriptFailure(['diff_filler([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['diff_filler([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
   v9.CheckDefAndScriptFailure(['diff_filler(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1220: String or Number required for argument 1'])
   v9.CheckDefExecAndScriptFailure(['diff_filler("")'], 'E1209: Invalid value for a line number')
   assert_equal(0, diff_filler(1))
@@ -923,7 +923,7 @@ enddef
 
 def Test_digraph_setlist()
   v9.CheckDefAndScriptFailure(['digraph_setlist("a")'], ['E1013: Argument 1: type mismatch, expected list<string> but got string', 'E1216: digraph_setlist() argument must be a list of lists with two items'])
-  v9.CheckDefAndScriptFailure(['digraph_setlist({})'], ['E1013: Argument 1: type mismatch, expected list<string> but got dict<unknown>', 'E1216: digraph_setlist() argument must be a list of lists with two items'])
+  v9.CheckDefAndScriptFailure(['digraph_setlist({})'], ['E1013: Argument 1: type mismatch, expected list<string> but got dict<any>', 'E1216: digraph_setlist() argument must be a list of lists with two items'])
 enddef
 
 def Test_echoraw()
@@ -1066,7 +1066,7 @@ def Test_expandcmd()
   expandcmd('')->assert_equal('')
 
   v9.CheckDefAndScriptFailure(['expandcmd([1])'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
-  v9.CheckDefAndScriptFailure(['expandcmd("abc", [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+  v9.CheckDefAndScriptFailure(['expandcmd("abc", [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
 enddef
 
 def Test_extend_arg_types()
@@ -1249,7 +1249,7 @@ enddef
 def Test_feedkeys()
   v9.CheckDefAndScriptFailure(['feedkeys(10)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
   v9.CheckDefAndScriptFailure(['feedkeys("x", 10)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
-  v9.CheckDefAndScriptFailure(['feedkeys([], {})'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['feedkeys([], {})'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1174: String required for argument 1'])
   g:TestVar = 1
   feedkeys(":g:TestVar = 789\n", 'xt')
   assert_equal(789, g:TestVar)
@@ -1284,7 +1284,7 @@ def Test_finddir()
   v9.CheckDefAndScriptFailure(['finddir(true)'], ['E1013: Argument 1: type mismatch, expected string but got bool', 'E1174: String required for argument 1'])
   v9.CheckDefAndScriptFailure(['finddir(v:null)'], ['E1013: Argument 1: type mismatch, expected string but got special', 'E1174: String required for argument 1'])
   v9.CheckDefExecFailure(['echo finddir("")'], 'E1175:')
-  v9.CheckDefAndScriptFailure(['finddir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
+  v9.CheckDefAndScriptFailure(['finddir("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1174: String required for argument 2'])
   v9.CheckDefAndScriptFailure(['finddir("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
   finddir('abc', '')->assert_equal('')
 
@@ -1304,7 +1304,7 @@ def Test_findfile()
   v9.CheckDefExecFailure(['findfile(true)'], 'E1013: Argument 1: type mismatch, expected string but got bool')
   v9.CheckDefExecFailure(['findfile(v:null)'], 'E1013: Argument 1: type mismatch, expected string but got special')
   v9.CheckDefExecFailure(['findfile("")'], 'E1175:')
-  v9.CheckDefAndScriptFailure(['findfile("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
+  v9.CheckDefAndScriptFailure(['findfile("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1174: String required for argument 2'])
   v9.CheckDefAndScriptFailure(['findfile("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
   findfile('abc', '')->assert_equal('')
 enddef
@@ -1330,7 +1330,7 @@ def Test_flattennew()
   END
   v9.CheckDefAndScriptSuccess(lines)
 
-  v9.CheckDefAndScriptFailure(['flattennew({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
+  v9.CheckDefAndScriptFailure(['flattennew({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<any>', 'E1211: List required for argument 1'])
   v9.CheckDefAndScriptFailure(['flattennew([], "1")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
 enddef
 
@@ -1738,12 +1738,12 @@ def Test_getbufline()
   assert_fails('getbufoneline("", "$a")', ['E1030: Using a String as a Number: "$a"', 'E1030: Using a String as a Number: "$a"'])
   bwipe!
 
-  v9.CheckDefAndScriptFailure(['getbufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['getbufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 2'])
+  v9.CheckDefAndScriptFailure(['getbufline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['getbufline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 2'])
   v9.CheckDefAndScriptFailure(['getbufline("a", 2, 0z10)'], ['E1013: Argument 3: type mismatch, expected string but got blob', 'E1220: String or Number required for argument 3'])
 
-  v9.CheckDefAndScriptFailure(['getbufoneline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['getbufoneline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 2'])
+  v9.CheckDefAndScriptFailure(['getbufoneline([], 2)'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['getbufoneline("a", [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 2'])
 enddef
 
 def Test_getbufvar()
@@ -1895,7 +1895,7 @@ enddef
 
 def Test_getloclist()
   v9.CheckDefAndScriptFailure(['getloclist("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['getloclist(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+  v9.CheckDefAndScriptFailure(['getloclist(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
 enddef
 
 def Test_getloclist_return_type()
@@ -1907,7 +1907,7 @@ def Test_getloclist_return_type()
 enddef
 
 def Test_getmarklist()
-  v9.CheckDefAndScriptFailure(['getmarklist([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['getmarklist([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
   assert_equal([], getmarklist(10000))
   assert_fails('getmarklist("a%b@#")', 'E94:')
 enddef
@@ -1926,7 +1926,7 @@ def Test_getpos()
 enddef
 
 def Test_getqflist()
-  v9.CheckDefAndScriptFailure(['getqflist([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
+  v9.CheckDefAndScriptFailure(['getqflist([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 1'])
   call assert_equal({}, getqflist({}))
 enddef
 
@@ -2150,13 +2150,13 @@ def Test_hlID()
 enddef
 
 def Test_hlexists()
-  v9.CheckDefAndScriptFailure(['hlexists([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['hlexists([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1174: String required for argument 1'])
   assert_equal(0, hlexists('NonExistingHighlight'))
   hlexists('')->assert_equal(0)
 enddef
 
 def Test_hlget()
-  v9.CheckDefAndScriptFailure(['hlget([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['hlget([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1174: String required for argument 1'])
   hlget('')->assert_equal([])
 enddef
 
@@ -2421,7 +2421,7 @@ def Test_job_setoptions()
     CheckFeature job
   else
     v9.CheckDefAndScriptFailure(['job_setoptions(test_null_channel(), {})'], ['E1013: Argument 1: type mismatch, expected job but got channel', 'E1218: Job required for argument 1'])
-    v9.CheckDefAndScriptFailure(['job_setoptions(test_null_job(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+    v9.CheckDefAndScriptFailure(['job_setoptions(test_null_job(), [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
     assert_equal('fail', job_status(test_null_job()))
   endif
 enddef
@@ -2465,7 +2465,7 @@ enddef
 def Test_keys()
   assert_equal([7, 7], keys({a: 1, b: 2})->map((_, _) => 7))
 
-  v9.CheckDefAndScriptFailure(['keys([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
+  v9.CheckDefAndScriptFailure(['keys([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 1'])
   assert_equal(['a'], {a: 'v'}->keys())
   assert_equal([], {}->keys())
 enddef
@@ -2513,7 +2513,7 @@ def Test_line2byte()
 enddef
 
 def Test_lispindent()
-  v9.CheckDefAndScriptFailure(['lispindent({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['lispindent({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', 'E1220: String or Number required for argument 1'])
   v9.CheckDefExecAndScriptFailure(['lispindent("")'], 'E1209: Invalid value for a line number')
   v9.CheckDefExecAndScriptFailure(['lispindent(-1)'], 'E966: Invalid line number: -1')
   assert_equal(0, lispindent(1))
@@ -2690,19 +2690,19 @@ def Test_map_item_type()
     var l: list<number> = [0]
     echo map(l, (_, v) => [])
   END
-  v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(any, any): list<unknown>', 'E1012: Type mismatch; expected number but got list<unknown>'], 2)
+  v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(any, any): list<any>', 'E1012: Type mismatch; expected number but got list<any>'], 2)
 
   lines =<< trim END
     var l: list<number> = range(2)
     echo map(l, (_, v) => [])
   END
-  v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(any, any): list<unknown>', 'E1012: Type mismatch; expected number but got list<unknown>'], 2)
+  v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?number, ?number): number but got func(any, any): list<any>', 'E1012: Type mismatch; expected number but got list<any>'], 2)
 
   lines =<< trim END
     var d: dict<number> = {key: 0}
     echo map(d, (_, v) => [])
   END
-  v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?string, ?number): number but got func(any, any): list<unknown>', 'E1012: Type mismatch; expected number but got list<unknown>'], 2)
+  v9.CheckDefAndScriptFailure(lines, ['E1013: Argument 2: type mismatch, expected func(?string, ?number): number but got func(any, any): list<any>', 'E1012: Type mismatch; expected number but got list<any>'], 2)
 enddef
 
 def Test_maparg()
@@ -2807,7 +2807,7 @@ enddef
 def Test_mapset()
   v9.CheckDefAndScriptFailure(['mapset(1, true, {})'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1223: String or Dictionary required for argument 1'])
   v9.CheckDefAndScriptFailure(['mapset("a", 2, {})'], ['E1013: Argument 2: type mismatch, expected bool but got number', 'E1212: Bool required for argument 2'])
-  v9.CheckDefAndScriptFailure(['mapset("a", false, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+  v9.CheckDefAndScriptFailure(['mapset("a", false, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
 enddef
 
 def Test_match()
@@ -2833,7 +2833,7 @@ def Test_matchadd()
   v9.CheckDefAndScriptFailure(['matchadd("a", 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
   v9.CheckDefAndScriptFailure(['matchadd("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
   v9.CheckDefAndScriptFailure(['matchadd("a", "b", 1, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
-  v9.CheckDefAndScriptFailure(['matchadd("a", "b", 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 5'])
+  v9.CheckDefAndScriptFailure(['matchadd("a", "b", 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 5'])
   matchadd('', 'a')->assert_equal(-1)
   matchadd('Search', '')->assert_equal(-1)
 enddef
@@ -2843,7 +2843,7 @@ def Test_matchaddpos()
   v9.CheckDefAndScriptFailure(['matchaddpos("a", "b")'], ['E1013: Argument 2: type mismatch, expected list<any> but got string', 'E1211: List required for argument 2'])
   v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
   v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], 1, "d")'], ['E1013: Argument 4: type mismatch, expected number but got string', 'E1210: Number required for argument 4'])
-  v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 5'])
+  v9.CheckDefAndScriptFailure(['matchaddpos("a", [1], 1, 1, [])'], ['E1013: Argument 5: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 5'])
   matchaddpos('', [1])->assert_equal(-1)
 enddef
 
@@ -2876,9 +2876,9 @@ def Test_matchend()
 enddef
 
 def Test_matchfuzzy()
-  v9.CheckDefAndScriptFailure(['matchfuzzy({}, "p")'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
+  v9.CheckDefAndScriptFailure(['matchfuzzy({}, "p")'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<any>', 'E1211: List required for argument 1'])
   v9.CheckDefAndScriptFailure(['matchfuzzy([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
-  v9.CheckDefAndScriptFailure(['matchfuzzy([], "a", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+  v9.CheckDefAndScriptFailure(['matchfuzzy([], "a", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
   matchfuzzy(['abc', 'xyz'], '')->assert_equal([])
   var lines =<< trim END
     var items = [{name: 'xyz', id: 1}, {name: 'def', id: 2},
@@ -2892,9 +2892,9 @@ def Test_matchfuzzy()
 enddef
 
 def Test_matchfuzzypos()
-  v9.CheckDefAndScriptFailure(['matchfuzzypos({}, "p")'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
+  v9.CheckDefAndScriptFailure(['matchfuzzypos({}, "p")'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<any>', 'E1211: List required for argument 1'])
   v9.CheckDefAndScriptFailure(['matchfuzzypos([], 1)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
-  v9.CheckDefAndScriptFailure(['matchfuzzypos([], "a", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+  v9.CheckDefAndScriptFailure(['matchfuzzypos([], "a", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
   matchfuzzypos(['abc', 'xyz'], '')->assert_equal([[], [], []])
   var lines =<< trim END
     var items = [{name: 'xyz', id: 1}, {name: 'def', id: 2},
@@ -3005,7 +3005,7 @@ enddef
 
 def Test_mkdir()
   v9.CheckDefAndScriptFailure(['mkdir(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
-  v9.CheckDefAndScriptFailure(['mkdir("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2'])
+  v9.CheckDefAndScriptFailure(['mkdir("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<any>', 'E1174: String required for argument 2'])
   v9.CheckDefAndScriptFailure(['mkdir("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
   v9.CheckDefExecAndScriptFailure(['mkdir("")'], 'E1175: Non-empty string required for argument 1')
   delete('a', 'rf')
@@ -3131,7 +3131,7 @@ enddef
 
 def Test_popup_move()
   v9.CheckDefAndScriptFailure(['popup_move("x", {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['popup_move(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+  v9.CheckDefAndScriptFailure(['popup_move(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
 enddef
 
 def Test_popup_notification()
@@ -3141,7 +3141,7 @@ enddef
 
 def Test_popup_setoptions()
   v9.CheckDefAndScriptFailure(['popup_setoptions("x", {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['popup_setoptions(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+  v9.CheckDefAndScriptFailure(['popup_setoptions(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
 enddef
 
 def Test_popup_settext()
@@ -3170,7 +3170,7 @@ def Test_prompt_getprompt()
   if !has('channel')
     CheckFeature channel
   else
-    v9.CheckDefAndScriptFailure(['prompt_getprompt([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
+    v9.CheckDefAndScriptFailure(['prompt_getprompt([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
     assert_equal('', prompt_getprompt('NonExistingBuf'))
   endif
 enddef
@@ -3195,26 +3195,26 @@ def Test_prompt_setprompt()
   if !has('channel')
     CheckFeature channel
   else
-    v9.CheckDefAndScriptFailure(['prompt_setprompt([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
-    v9.CheckDefAndScriptFailure(['prompt_setprompt(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
+    v9.CheckDefAndScriptFailure(['prompt_setprompt([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
+    v9.CheckDefAndScriptFailure(['prompt_setprompt(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1174: String required for argument 2'])
   endif
 enddef
 
 def Test_prop_add()
   v9.CheckDefAndScriptFailure(['prop_add("a", 2, {})'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
   v9.CheckDefAndScriptFailure(['prop_add(1, "b", {})'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
-  v9.CheckDefAndScriptFailure(['prop_add(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+  v9.CheckDefAndScriptFailure(['prop_add(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
 enddef
 
 def Test_prop_add_list()
-  v9.CheckDefAndScriptFailure(['prop_add_list([], [])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
-  v9.CheckDefAndScriptFailure(['prop_add_list({}, {})'], ['E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2'])
+  v9.CheckDefAndScriptFailure(['prop_add_list([], [])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 1'])
+  v9.CheckDefAndScriptFailure(['prop_add_list({}, {})'], ['E1013: Argument 2: type mismatch, expected list<any> but got dict<any>', 'E1211: List required for argument 2'])
 enddef
 
 def Test_prop_clear()
   v9.CheckDefAndScriptFailure(['prop_clear("a")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
   v9.CheckDefAndScriptFailure(['prop_clear(1, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
-  v9.CheckDefAndScriptFailure(['prop_clear(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+  v9.CheckDefAndScriptFailure(['prop_clear(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
 enddef
 
 def Test_prop_find()
@@ -3226,11 +3226,11 @@ enddef
 
 def Test_prop_list()
   v9.CheckDefAndScriptFailure(['prop_list("x")'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['prop_list(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+  v9.CheckDefAndScriptFailure(['prop_list(1, [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
 enddef
 
 def Test_prop_remove()
-  v9.CheckDefAndScriptFailure(['prop_remove([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
+  v9.CheckDefAndScriptFailure(['prop_remove([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 1'])
   v9.CheckDefAndScriptFailure(['prop_remove({}, "a")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
   v9.CheckDefAndScriptFailure(['prop_remove({}, 1, "b")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
 enddef
@@ -3444,7 +3444,7 @@ enddef
 def Test_remote_startserver()
   CheckFeature clientserver
   CheckEnv DISPLAY
-  v9.CheckDefAndScriptFailure(['remote_startserver({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['remote_startserver({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', 'E1174: String required for argument 1'])
 enddef
 
 def Test_remove_literal_list()
@@ -3533,7 +3533,7 @@ def Test_repeat()
 enddef
 
 def Test_resolve()
-  v9.CheckDefAndScriptFailure(['resolve([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['resolve([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1174: String required for argument 1'])
   assert_equal('SomeFile', resolve('SomeFile'))
   resolve('')->assert_equal('')
 enddef
@@ -3902,7 +3902,7 @@ enddef
 
 def Test_setcharsearch()
   v9.CheckDefAndScriptFailure(['setcharsearch("x")'], ['E1013: Argument 1: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 1'])
-  v9.CheckDefAndScriptFailure(['setcharsearch([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
+  v9.CheckDefAndScriptFailure(['setcharsearch([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 1'])
   var d: dict<any> = {char: 'x', forward: 1, until: 1}
   setcharsearch(d)
   assert_equal(d, getcharsearch())
@@ -3964,11 +3964,11 @@ def Test_setloclist()
   v9.CheckDefAndScriptFailure(['setloclist("1", [])'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
   v9.CheckDefAndScriptFailure(['setloclist(1, 2)'], ['E1013: Argument 2: type mismatch, expected list<any> but got number', 'E1211: List required for argument 2'])
   v9.CheckDefAndScriptFailure(['setloclist(1, [], 3)'], ['E1013: Argument 3: type mismatch, expected string but got number', 'E1174: String required for argument 3'])
-  v9.CheckDefAndScriptFailure(['setloclist(1, [], "a", [])'], ['E1013: Argument 4: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 4'])
+  v9.CheckDefAndScriptFailure(['setloclist(1, [], "a", [])'], ['E1013: Argument 4: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 4'])
 enddef
 
 def Test_setmatches()
-  v9.CheckDefAndScriptFailure(['setmatches({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 1'])
+  v9.CheckDefAndScriptFailure(['setmatches({})'], ['E1013: Argument 1: type mismatch, expected list<any> but got dict<any>', 'E1211: List required for argument 1'])
   v9.CheckDefAndScriptFailure(['setmatches([], "1")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
 enddef
 
@@ -3982,7 +3982,7 @@ enddef
 def Test_setqflist()
   v9.CheckDefAndScriptFailure(['setqflist(1, "")'], ['E1013: Argument 1: type mismatch, expected list<any> but got number', 'E1211: List required for argument 1'])
   v9.CheckDefAndScriptFailure(['setqflist([], 2)'], ['E1013: Argument 2: type mismatch, expected string but got number', 'E1174: String required for argument 2'])
-  v9.CheckDefAndScriptFailure(['setqflist([], "", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+  v9.CheckDefAndScriptFailure(['setqflist([], "", [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
 enddef
 
 def Test_setreg()
@@ -4079,7 +4079,7 @@ def Test_sign_placelist()
 enddef
 
 def Test_sign_undefine()
-  v9.CheckDefAndScriptFailure(['sign_undefine({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1222: String or List required for argument 1'])
+  v9.CheckDefAndScriptFailure(['sign_undefine({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', 'E1222: String or List required for argument 1'])
   v9.CheckDefAndScriptFailure(['sign_undefine([1])'], ['E1013: Argument 1: type mismatch, expected list<string> but got list<number>', 'E155: Unknown sign:'])
 enddef
 
@@ -4260,7 +4260,7 @@ def Test_srand()
 enddef
 
 def Test_state()
-  v9.CheckDefAndScriptFailure(['state({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['state({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', 'E1174: String required for argument 1'])
   assert_equal('', state('a'))
 enddef
 
@@ -4339,7 +4339,7 @@ enddef
 
 def Test_stridx()
   v9.CheckDefAndScriptFailure(['stridx([1], "b")'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
-  v9.CheckDefAndScriptFailure(['stridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2'])
+  v9.CheckDefAndScriptFailure(['stridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<any>', 'E1174: String required for argument 2'])
   v9.CheckDefAndScriptFailure(['stridx("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
   stridx('', '')->assert_equal(0)
   stridx('', 'a')->assert_equal(-1)
@@ -4347,7 +4347,7 @@ def Test_stridx()
 enddef
 
 def Test_strlen()
-  v9.CheckDefAndScriptFailure(['strlen([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['strlen([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
   "abc"->strlen()->assert_equal(3)
   strlen(99)->assert_equal(2)
 enddef
@@ -4375,7 +4375,7 @@ enddef
 
 def Test_strridx()
   v9.CheckDefAndScriptFailure(['strridx([1], "b")'], ['E1013: Argument 1: type mismatch, expected string but got list<number>', 'E1174: String required for argument 1'])
-  v9.CheckDefAndScriptFailure(['strridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 2'])
+  v9.CheckDefAndScriptFailure(['strridx("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<any>', 'E1174: String required for argument 2'])
   v9.CheckDefAndScriptFailure(['strridx("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
   strridx('', '')->assert_equal(0)
   strridx('', 'a')->assert_equal(-1)
@@ -4389,7 +4389,7 @@ def Test_strtrans()
 enddef
 
 def Test_strutf16len()
-  v9.CheckDefAndScriptFailure(['strutf16len([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['strutf16len([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1174: String required for argument 1'])
   v9.CheckDefAndScriptFailure(['strutf16len("a", "")'], ['E1013: Argument 2: type mismatch, expected bool but got string', 'E1212: Bool required for argument 2'])
   ""->strutf16len()->assert_equal(0)
   '-ą́-ą́'->strutf16len(true)->assert_equal(8)
@@ -4437,13 +4437,13 @@ def Test_substitute()
 enddef
 
 def Test_swapinfo()
-  v9.CheckDefAndScriptFailure(['swapinfo({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['swapinfo({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', 'E1174: String required for argument 1'])
   call swapinfo('x')->assert_equal({error: 'Cannot open file'})
   call swapinfo('')->assert_equal({error: 'Cannot open file'})
 enddef
 
 def Test_swapname()
-  v9.CheckDefAndScriptFailure(['swapname([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['swapname([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
   assert_fails('swapname("NonExistingBuf")', 'E94:')
 enddef
 
@@ -4485,13 +4485,13 @@ enddef
 
 def Test_system()
   v9.CheckDefAndScriptFailure(['system(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
-  v9.CheckDefAndScriptFailure(['system("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String, Number or List required for argument 2'])
+  v9.CheckDefAndScriptFailure(['system("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<any>', 'E1224: String, Number or List required for argument 2'])
   assert_equal("123\n", system('echo 123'))
 enddef
 
 def Test_systemlist()
   v9.CheckDefAndScriptFailure(['systemlist(1)'], ['E1013: Argument 1: type mismatch, expected string but got number', 'E1174: String required for argument 1'])
-  v9.CheckDefAndScriptFailure(['systemlist("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<unknown>', 'E1224: String, Number or List required for argument 2'])
+  v9.CheckDefAndScriptFailure(['systemlist("a", {})'], ['E1013: Argument 2: type mismatch, expected string but got dict<any>', 'E1224: String, Number or List required for argument 2'])
   if has('win32')
     call assert_equal(["123\r"], systemlist('echo 123'))
   else
@@ -4622,16 +4622,16 @@ enddef
 
 def Test_term_sendkeys()
   CheckRunVimInTerminal
-  v9.CheckDefAndScriptFailure(['term_sendkeys([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['term_sendkeys(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
+  v9.CheckDefAndScriptFailure(['term_sendkeys([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['term_sendkeys(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1174: String required for argument 2'])
 enddef
 
 def Test_term_setansicolors()
   CheckRunVimInTerminal
 
   if has('termguicolors') || has('gui')
-    v9.CheckDefAndScriptFailure(['term_setansicolors([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
-    v9.CheckDefAndScriptFailure(['term_setansicolors(10, {})'], ['E1013: Argument 2: type mismatch, expected list<any> but got dict<unknown>', 'E1211: List required for argument 2'])
+    v9.CheckDefAndScriptFailure(['term_setansicolors([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
+    v9.CheckDefAndScriptFailure(['term_setansicolors(10, {})'], ['E1013: Argument 2: type mismatch, expected list<any> but got dict<any>', 'E1211: List required for argument 2'])
   else
     throw 'Skipped: Only works with termguicolors or gui feature'
   endif
@@ -4639,20 +4639,20 @@ enddef
 
 def Test_term_setapi()
   CheckRunVimInTerminal
-  v9.CheckDefAndScriptFailure(['term_setapi([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['term_setapi(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
+  v9.CheckDefAndScriptFailure(['term_setapi([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['term_setapi(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1174: String required for argument 2'])
 enddef
 
 def Test_term_setkill()
   CheckRunVimInTerminal
-  v9.CheckDefAndScriptFailure(['term_setkill([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['term_setkill(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
+  v9.CheckDefAndScriptFailure(['term_setkill([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['term_setkill(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1174: String required for argument 2'])
 enddef
 
 def Test_term_setrestore()
   CheckRunVimInTerminal
-  v9.CheckDefAndScriptFailure(['term_setrestore([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1220: String or Number required for argument 1'])
-  v9.CheckDefAndScriptFailure(['term_setrestore(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 2'])
+  v9.CheckDefAndScriptFailure(['term_setrestore([], "p")'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1220: String or Number required for argument 1'])
+  v9.CheckDefAndScriptFailure(['term_setrestore(1, [])'], ['E1013: Argument 2: type mismatch, expected string but got list<any>', 'E1174: String required for argument 2'])
 enddef
 
 def Test_term_setsize()
@@ -4672,8 +4672,8 @@ def Test_term_start()
     winnr()->assert_equal(winnr)
     bwipe!
   endif
-  v9.CheckDefAndScriptFailure(['term_start({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<unknown>', 'E1222: String or List required for argument 1'])
-  v9.CheckDefAndScriptFailure(['term_start([], [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 2'])
+  v9.CheckDefAndScriptFailure(['term_start({})'], ['E1013: Argument 1: type mismatch, expected string but got dict<any>', 'E1222: String or List required for argument 1'])
+  v9.CheckDefAndScriptFailure(['term_start([], [])'], ['E1013: Argument 2: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 2'])
   v9.CheckDefAndScriptFailure(['term_start("", "")'], ['E1013: Argument 2: type mismatch, expected dict<any> but got string', 'E1206: Dictionary required for argument 2'])
   v9.CheckDefExecAndScriptFailure(['term_start("")'], 'E474: Invalid argument')
 enddef
@@ -4701,17 +4701,17 @@ enddef
 
 def Test_test_gui_event()
   CheckGui
-  v9.CheckDefAndScriptFailure(['test_gui_event([], {})'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['test_gui_event([], {})'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1174: String required for argument 1'])
   v9.CheckDefAndScriptFailure(['test_gui_event("abc", 1)'], ['E1013: Argument 2: type mismatch, expected dict<any> but got number', 'E1206: Dictionary required for argument 2'])
 enddef
 
 def Test_test_ignore_error()
-  v9.CheckDefAndScriptFailure(['test_ignore_error([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['test_ignore_error([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1174: String required for argument 1'])
   test_ignore_error('RESET')
 enddef
 
 def Test_test_option_not_set()
-  v9.CheckDefAndScriptFailure(['test_option_not_set([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['test_option_not_set([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1174: String required for argument 1'])
 enddef
 
 def Test_test_override()
@@ -4795,8 +4795,8 @@ enddef
 def Test_typename()
   assert_equal('func([unknown], [unknown]): float', typename(function('pow')))
   assert_equal('func(...): unknown', test_null_partial()->typename())
-  assert_equal('list<unknown>', test_null_list()->typename())
-  assert_equal('dict<unknown>', test_null_dict()->typename())
+  assert_equal('list<any>', test_null_list()->typename())
+  assert_equal('dict<any>', test_null_dict()->typename())
   if has('job')
     assert_equal('job', test_null_job()->typename())
   endif
@@ -4836,7 +4836,7 @@ def Test_uniq_const()
 enddef
 
 def Test_values()
-  v9.CheckDefAndScriptFailure(['values([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
+  v9.CheckDefAndScriptFailure(['values([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 1'])
   assert_equal([], {}->values())
   assert_equal(['sun'], {star: 'sun'}->values())
 
@@ -4987,7 +4987,7 @@ def Test_win_splitmove()
   close
   v9.CheckDefAndScriptFailure(['win_splitmove("a", 2)'], ['E1013: Argument 1: type mismatch, expected number but got string', 'E1210: Number required for argument 1'])
   v9.CheckDefAndScriptFailure(['win_splitmove(1, "b")'], ['E1013: Argument 2: type mismatch, expected number but got string', 'E1210: Number required for argument 2'])
-  v9.CheckDefAndScriptFailure(['win_splitmove(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 3'])
+  v9.CheckDefAndScriptFailure(['win_splitmove(1, 2, [])'], ['E1013: Argument 3: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 3'])
 enddef
 
 def Test_winbufnr()
@@ -5003,7 +5003,7 @@ def Test_winlayout()
 enddef
 
 def Test_winnr()
-  v9.CheckDefAndScriptFailure(['winnr([])'], ['E1013: Argument 1: type mismatch, expected string but got list<unknown>', 'E1174: String required for argument 1'])
+  v9.CheckDefAndScriptFailure(['winnr([])'], ['E1013: Argument 1: type mismatch, expected string but got list<any>', 'E1174: String required for argument 1'])
   v9.CheckDefExecAndScriptFailure(['winnr("")'], 'E15: Invalid expression')
   assert_equal(1, winnr())
   assert_equal(1, winnr('$'))
@@ -5019,7 +5019,7 @@ def Test_winrestcmd()
 enddef
 
 def Test_winrestview()
-  v9.CheckDefAndScriptFailure(['winrestview([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<unknown>', 'E1206: Dictionary required for argument 1'])
+  v9.CheckDefAndScriptFailure(['winrestview([])'], ['E1013: Argument 1: type mismatch, expected dict<any> but got list<any>', 'E1206: Dictionary required for argument 1'])
   :%d _
   setline(1, 'Hello World')
   winrestview({lnum: 1, col: 6})
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -8561,7 +8561,7 @@ def Test_dict_member_key_type_check()
     var a = A.new()
     a.Foo()
   END
-  v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected string but got dict<unknown>', 2)
+  v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected string but got dict<any>', 2)
 
   lines =<< trim END
     vim9script
@@ -8582,7 +8582,7 @@ def Test_dict_member_key_type_check()
     var a = A.new()
     a.Foo()
   END
-  v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected number but got dict<unknown>', 3)
+  v9.CheckSourceFailure(lines, 'E1012: Type mismatch; expected number but got dict<any>', 3)
 enddef
 
 def Test_compile_many_def_functions_in_funcref_instr()
--- a/src/testdir/test_vim9_disassemble.vim
+++ b/src/testdir/test_vim9_disassemble.vim
@@ -552,7 +552,7 @@ def Test_disassemble_store_index()
         '\d PUSHS "dd"\_s*' ..
         '\d NEWDICT size 0\_s*' ..
         '\d NEWDICT size 1\_s*' ..
-        '\d SETTYPE dict<dict<unknown>>\_s*' ..
+        '\d SETTYPE dict<dict<any>>\_s*' ..
         '\d STORE $0\_s*' ..
         'd.dd\[0\] = 0\_s*' ..
         '\d PUSHNR 0\_s*' ..
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -387,7 +387,7 @@ def Test_expr2_fails()
   v9.CheckDefAndScriptFailure(["if 3"], 'E1023:', 1)
   v9.CheckDefExecAndScriptFailure(['var x = 3', 'if x', 'endif'], 'E1023:', 2)
 
-  v9.CheckDefAndScriptFailure(["var x = [] || false"], ['E1012: Type mismatch; expected bool but got list<unknown>', 'E745:'], 1)
+  v9.CheckDefAndScriptFailure(["var x = [] || false"], ['E1012: Type mismatch; expected bool but got list<any>', 'E745:'], 1)
 
   var lines =<< trim END
     vim9script
@@ -2795,7 +2795,7 @@ def Test_expr9_dict()
       var ds = {k: null_string}
       assert_equal('dict<string>', typename(ds))
       var dl = {a: null_list}
-      assert_equal('dict<list<unknown>>', typename(dl))
+      assert_equal('dict<list<any>>', typename(dl))
   END
   v9.CheckDefAndScriptSuccess(lines)
 
@@ -3038,7 +3038,7 @@ def Test_expr_member()
 
   v9.CheckDefAndScriptFailure(["var x = g:dict_one.#$!"], ['E1002:', 'E15:'], 1)
   v9.CheckDefExecAndScriptFailure(["var d: dict<any>", "echo d['a']"], 'E716:', 2)
-  v9.CheckDefExecAndScriptFailure(["var d: dict<number>", "d = g:list_empty"], 'E1012: Type mismatch; expected dict<number> but got list<unknown>', 2)
+  v9.CheckDefExecAndScriptFailure(["var d: dict<number>", "d = g:list_empty"], 'E1012: Type mismatch; expected dict<number> but got list<any>', 2)
 enddef
 
 def Test_expr9_any_index_slice()
index cbbd5726403016459946e79a4c320dd082df6392..47b23e85e5a309a35404ea8ca4f9fd8e42d2eeb7
GIT binary patch
literal 106635
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
XVT8@%`q`77IGfI&&BN>xj<f#*vIc?O
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2152,
+/**/
     2151,
 /**/
     2150,
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -1706,7 +1706,11 @@ type_name(type_T *type, char **tofree)
     if (type->tt_type == VAR_LIST || type->tt_type == VAR_DICT)
     {
 	char *member_free;
-	char *member_name = type_name(type->tt_member, &member_free);
+	char *member_name;
+	if (type->tt_member->tt_type == VAR_UNKNOWN)
+	    member_name = type_name(&t_any, &member_free);
+	else
+	    member_name = type_name(type->tt_member, &member_free);
 	size_t len = STRLEN(name) + STRLEN(member_name) + 3;
 	*tofree = alloc(len);
 	if (*tofree != NULL)