patch 8.2.3871: list.c contains code for dict and blob
Problem: List.c contains code for dict and blob.
Solution: Refactor to put code where it belongs. (Yegappan Lakshmanan,
closes #9386)
diff --git a/src/testdir/test_filter_map.vim b/src/testdir/test_filter_map.vim
index ab7e196..1767a99 100644
--- a/src/testdir/test_filter_map.vim
+++ b/src/testdir/test_filter_map.vim
@@ -182,6 +182,7 @@
call assert_equal('', map('abc', LSTART i, x LMIDDLE '' LEND))
call assert_equal('', map('', "v:val == 'a'"))
call assert_equal('', map(test_null_string(), "v:val == 'a'"))
+ call assert_fails('echo map("abc", "10")', 'E928:')
END
call CheckLegacyAndVim9Success(lines)
diff --git a/src/testdir/test_listdict.vim b/src/testdir/test_listdict.vim
index 2fea643..e7b6588 100644
--- a/src/testdir/test_listdict.vim
+++ b/src/testdir/test_listdict.vim
@@ -783,6 +783,32 @@
call CheckScriptFailure(lines, 'E741:')
endfunc
+" Lock one item in a list
+func Test_list_item_lock_map()
+ let lines =<< trim END
+ VAR l = [99, 100, 101]
+ lockvar l[1]
+ call assert_fails("echo map(l, 'v:val + 200')", 'E741:')
+ call assert_equal([299, 100, 101], l)
+ END
+ " This won't work in a :def function
+ call CheckTransLegacySuccess(lines)
+ call CheckTransVim9Success(lines)
+endfunc
+
+" Lock one item in a dict
+func Test_dict_item_lock_map()
+ let lines =<< trim END
+ VAR d = {'a': 99, 'b': 100, 'c': 101}
+ lockvar d.b
+ call assert_fails("echo map(d, 'v:val + 200')", 'E741:')
+ call assert_equal({'a': 299, 'b': 100, 'c': 101}, d)
+ END
+ " This won't work in a :def function
+ call CheckTransLegacySuccess(lines)
+ call CheckTransVim9Success(lines)
+endfunc
+
" No extend() after lock on dict item
func Test_dict_lock_extend()
let d = {'a': 99, 'b': 100}
diff --git a/src/testdir/test_sort.vim b/src/testdir/test_sort.vim
index 82f70ff..783ca9e 100644
--- a/src/testdir/test_sort.vim
+++ b/src/testdir/test_sort.vim
@@ -1548,4 +1548,20 @@
close!
endfunc
+" Test for sort() using a dict function
+func Test_sort_using_dict_func()
+ func DictSort(a, b) dict
+ if self.order == 'reverse'
+ return a:b - a:a
+ else
+ return a:a - a:b
+ endif
+ endfunc
+ let d = #{order: ''}
+ call assert_equal([1, 2, 3], sort([2, 1, 3], 'DictSort', d))
+ let d = #{order: 'reverse'}
+ call assert_equal([3, 2, 1], sort([2, 1, 3], 'DictSort', d))
+ delfunc DictSort
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab