Mercurial > vim
changeset 27531:4ca0ee7b4f86 v8.2.4293
patch 8.2.4293: Vim9: when copying a list it gets type list<any>
Commit: https://github.com/vim/vim/commit/7676c158798a7c90f500cab2c12af0d47bad6026
Author: Bram Moolenaar <Bram@vim.org>
Date: Thu Feb 3 21:47:34 2022 +0000
patch 8.2.4293: Vim9: when copying a list it gets type list<any>
Problem: Vim9: when copying a list it gets type list<any> even when the
original list did not have a type.
Solution: Only set the type when the original list has a type. (closes #9692)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Thu, 03 Feb 2022 23:00:05 +0100 |
parents | 763d0c455b72 |
children | 8b8232782467 |
files | src/list.c src/testdir/test_vim9_expr.vim src/version.c |
diffstat | 3 files changed, 10 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/list.c +++ b/src/list.c @@ -1216,7 +1216,11 @@ list_copy(list_T *orig, int deep, int to copy = list_alloc(); if (copy != NULL) { - copy->lv_type = alloc_type(top || deep ? &t_list_any: orig->lv_type); + if (orig->lv_type == NULL) + copy->lv_type = NULL; + else + copy->lv_type = alloc_type(top || deep + ? &t_list_any: orig->lv_type); if (copyID != 0) { // Do this before adding the items, because one of the items may
--- a/src/testdir/test_vim9_expr.vim +++ b/src/testdir/test_vim9_expr.vim @@ -1495,6 +1495,9 @@ def Test_expr5_list_add() # result of glob() is "any", runtime type check var sl: list<string> = glob('*.txt', false, true) + [''] + + var lln: list<list<number>> = [[1] + [2]] + assert_equal([[1, 2]], lln) END v9.CheckDefAndScriptSuccess(lines) enddef