diff options
author | Yegappan Lakshmanan <yegappan@yahoo.com> | 2023-11-05 10:07:03 +0100 |
---|---|---|
committer | Christian Brabandt <cb@256bit.org> | 2023-11-05 10:07:03 +0100 |
commit | 6709816f7807c3ebb062a3124e660def184b739b (patch) | |
tree | 10a73857988fb8f8a799e3fdf318576c7e1405be /src/testdir | |
parent | 4f174f0de90b52937ddaf1e6db98e9731930ff7c (diff) |
patch 9.0.2091: Vim9: cannot convert list to string using +=v9.0.2091
Problem: Vim9: cannot convert list to string using +=
(after 9.0.2072)
Solution: convert dict index to string later in compile_member()
fixes: #13485
closes: #13486
Signed-off-by: Yegappan Lakshmanan <yegappan@yahoo.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
Diffstat (limited to 'src/testdir')
-rw-r--r-- | src/testdir/test_vim9_assign.vim | 62 | ||||
-rw-r--r-- | src/testdir/test_vim9_disassemble.vim | 1 |
2 files changed, 58 insertions, 5 deletions
diff --git a/src/testdir/test_vim9_assign.vim b/src/testdir/test_vim9_assign.vim index 91d302c4c5..3b4c78be07 100644 --- a/src/testdir/test_vim9_assign.vim +++ b/src/testdir/test_vim9_assign.vim @@ -2992,15 +2992,69 @@ def Test_list_item_assign() vim9script def Foo() - var l: list<list<string>> = [['x', 'x', 'x'], ['y', 'y', 'y']] - var z: number = 1 + var l: list<list<string>> = [['x', 'x', 'x'], ['y', 'y', 'y']] + var z: number = 1 - [l[1][2], z] = ['a', 20] - assert_equal([['x', 'x', 'x'], ['y', 'y', 'a']], l) + [l[1][2], z] = ['a', 20] + assert_equal([['x', 'x', 'x'], ['y', 'y', 'a']], l) enddef Foo() END v9.CheckSourceSuccess(lines) + + lines =<< trim END + vim9script + + var l: list<list<string>> = [['x', 'x', 'x'], ['y', 'y', 'y']] + var z: number = 1 + + [l[1][2], z] = ['a', 20] + assert_equal([['x', 'x', 'x'], ['y', 'y', 'a']], l) + END + v9.CheckSourceSuccess(lines) +enddef + +" Test for assigning to a multi-dimensional dict item. +def Test_dict_item_assign() + # This used to fail with the error "E1105: Cannot convert list to string" + # (Github issue #13485) + var lines =<< trim END + vim9script + def F() + var d: dict<dict<number>> = {a: {b: 0}} + + for group in keys(d) + d['a']['b'] += 1 + endfor + assert_equal({a: {b: 1}}, d) + enddef + F() + END + v9.CheckSourceSuccess(lines) + + # This used to crash Vim + lines =<< trim END + vim9script + def F() + var d: dict<dict<number>> = {a: {b: 0}} + d['a']['b'] += 1 + assert_equal({a: {b: 1}}, d) + enddef + F() + END + v9.CheckSourceSuccess(lines) + + # Assignment at script level + lines =<< trim END + vim9script + var d: dict<dict<number>> = {a: {b: 0}} + + for group in keys(d) + d['a']['b'] += 1 + endfor + assert_equal({a: {b: 1}}, d) + END + v9.CheckSourceSuccess(lines) enddef " vim: ts=8 sw=2 sts=2 expandtab tw=80 fdm=marker diff --git a/src/testdir/test_vim9_disassemble.vim b/src/testdir/test_vim9_disassemble.vim index 9d78ad0aae..521f75fb17 100644 --- a/src/testdir/test_vim9_disassemble.vim +++ b/src/testdir/test_vim9_disassemble.vim @@ -560,7 +560,6 @@ def Test_disassemble_store_index() '\d LOAD $0\_s*' .. '\d MEMBER dd\_s*' .. '\d\+ USEDICT\_s*' .. - '\d\+ 2STRING stack\[-2\]\_s*' .. '\d\+ STOREINDEX any\_s*' .. '\d\+ RETURN void', res) |