patch 8.2.3064: Vim9: in script cannot set item in uninitialized list
Problem: Vim9: in script cannot set item in uninitialized list.
Solution: When a list is NULL allocate an empty one. (closes #8461)
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim
index 230ddc5..86f890e 100644
--- a/src/testdir/test_vim9_assign.vim
+++ b/src/testdir/test_vim9_assign.vim
@@ -1102,21 +1102,30 @@
enddef
def Test_assign_list()
- var l: list<string> = []
- l[0] = 'value'
- assert_equal('value', l[0])
+ var lines =<< trim END
+ var l: list<string> = []
+ l[0] = 'value'
+ assert_equal('value', l[0])
- l[1] = 'asdf'
- assert_equal('value', l[0])
- assert_equal('asdf', l[1])
- assert_equal('asdf', l[-1])
- assert_equal('value', l[-2])
+ l[1] = 'asdf'
+ assert_equal('value', l[0])
+ assert_equal('asdf', l[1])
+ assert_equal('asdf', l[-1])
+ assert_equal('value', l[-2])
- var nrl: list<number> = []
- for i in range(5)
- nrl[i] = i
- endfor
- assert_equal([0, 1, 2, 3, 4], nrl)
+ var nrl: list<number> = []
+ for i in range(5)
+ nrl[i] = i
+ endfor
+ assert_equal([0, 1, 2, 3, 4], nrl)
+
+ var ul: list<any>
+ ul[0] = 1
+ ul[1] = 2
+ ul[2] = 3
+ assert_equal([1, 2, 3], ul)
+ END
+ CheckDefAndScriptSuccess(lines)
CheckDefFailure(["var l: list<number> = ['', true]"], 'E1012: Type mismatch; expected list<number> but got list<any>', 1)
CheckDefFailure(["var l: list<list<number>> = [['', true]]"], 'E1012: Type mismatch; expected list<list<number>> but got list<list<any>>', 1)