patch 8.2.3897: Vim9: second argument of map() and filter() not checked
Problem: Vim9: the second argument of map() and filter() is not checked at
compile time.
Solution: Add more specific type check for the second argument.
diff --git a/src/testdir/test_vim9_expr.vim b/src/testdir/test_vim9_expr.vim
index 9cf035a..01b4538 100644
--- a/src/testdir/test_vim9_expr.vim
+++ b/src/testdir/test_vim9_expr.vim
@@ -2077,7 +2077,7 @@
)
assert_equal([111, 222, 111], ll)
- var dl = [{key: 0}, {key: 22}]->filter(( _, v) => v['key'] )
+ var dl = [{key: 0}, {key: 22}]->filter(( _, v) => !!v['key'] )
assert_equal([{key: 22}], dl)
dl = [{key: 12}, {['foo']: 34}]
@@ -2236,7 +2236,7 @@
)
assert_equal([111, 222, 111], ll)
- var dl = [{key: 0}, {key: 22}]->filter(( _, v) => v['key'] )
+ var dl = [{key: 0}, {key: 22}]->filter(( _, v) => !!v['key'] )
assert_equal([{key: 22}], dl)
dl = [{key: 12}, {['foo']: 34}]
@@ -2308,7 +2308,7 @@
lines =<< trim END
search('"', 'cW', 0, 0, () =>
synstack('.', col('.'))
- ->map((_, v) => synIDattr(v, 'name'))->len())
+ ->mapnew((_, v) => synIDattr(v, 'name'))->len())
END
CheckDefAndScriptSuccess(lines)
enddef