summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2022-02-06 18:36:53 +0000
committerBram Moolenaar <Bram@vim.org>2022-02-06 18:36:53 +0000
commit5f4ef5f5e5529c147c2274cd0f6416e2546d6fc7 (patch)
treedbcf399d3abbf0c263598de89be4f49ff463c1ff
parent107f7325f615a1ffa5b49521e316b44e117b0a04 (diff)
downloadvim-git-5f4ef5f5e5529c147c2274cd0f6416e2546d6fc7.tar.gz
patch 8.2.4313: Vim9: cannot change type of list after making a slicev8.2.4313
Problem: Vim9: cannot change type of list after making a slice. Solution: Adjust the declared member type. (closes #9696)
-rw-r--r--src/testdir/test_vim9_builtin.vim1
-rw-r--r--src/version.c2
-rw-r--r--src/vim9expr.c3
3 files changed, 6 insertions, 0 deletions
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index ee32b3989..3ad6e0e62 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -3626,6 +3626,7 @@ def Test_slice()
var lds: list<dict<string>> = [{key: 'value'}]
assert_equal(['val'], lds->slice(0, 1)->map((_, v) => 'val'))
+ assert_equal(['val'], lds[ : ]->map((_, v) => 'val'))
assert_equal(0z1122334455, slice(0z001122334455, 1))
assert_equal(0z112233, slice(0z001122334455, 1, 4))
diff --git a/src/version.c b/src/version.c
index 825f12da3..7dbefa49f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 4313,
+/**/
4312,
/**/
4311,
diff --git a/src/vim9expr.c b/src/vim9expr.c
index 146e136bd..402803768 100644
--- a/src/vim9expr.c
+++ b/src/vim9expr.c
@@ -182,6 +182,9 @@ compile_member(int is_slice, int *keeping_dict, cctx_T *cctx)
vartype == VAR_LIST ? ISN_LISTSLICE : ISN_ANYSLICE,
2) == FAIL)
return FAIL;
+ // a copy is made so the member type is no longer declared
+ if (typep->type_decl->tt_type == VAR_LIST)
+ typep->type_decl = &t_list_any;
}
else
{