Mercurial > vim
changeset 23058:77f181975381 v8.2.2075
patch 8.2.2075: error for const argument to mapnew()
Commit: https://github.com/vim/vim/commit/57cf4973a283941c92744554474b2c52ce892fd1
Author: Bram Moolenaar <Bram@vim.org>
Date: Tue Dec 1 21:08:05 2020 +0100
patch 8.2.2075: error for const argument to mapnew()
Problem: Error for const argument to mapnew().
Solution: Don't give an error. (closes https://github.com/vim/vim/issues/7400)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Tue, 01 Dec 2020 21:15:03 +0100 |
parents | 35ba3a465deb |
children | 6a5d5797613f |
files | src/list.c src/testdir/test_filter_map.vim src/version.c |
diffstat | 3 files changed, 11 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/list.c +++ b/src/list.c @@ -2065,7 +2065,7 @@ filter_map(typval_T *argvars, typval_T * --todo; di = HI2DI(hi); - if (filtermap != FILTERMAP_FILTER + if (filtermap == FILTERMAP_MAP && (value_check_lock(di->di_tv.v_lock, arg_errmsg, TRUE) || var_check_ro(di->di_flags, @@ -2225,12 +2225,12 @@ filter_map(typval_T *argvars, typval_T * } else { - // Materialized list from range(): loop over the items + // Materialized list: loop over the items for (li = l->lv_first; li != NULL; li = nli) { typval_T newtv; - if (filtermap != FILTERMAP_FILTER && value_check_lock( + if (filtermap == FILTERMAP_MAP && value_check_lock( li->li_tv.v_lock, arg_errmsg, TRUE)) break; nli = li->li_next;
--- a/src/testdir/test_filter_map.vim +++ b/src/testdir/test_filter_map.vim @@ -123,6 +123,9 @@ func Test_mapnew_dict() let dout = mapnew(din, {k, v -> string(v)}) call assert_equal(#{one: 1, two: 2}, din) call assert_equal(#{one: '1', two: '2'}, dout) + + const dconst = #{one: 1, two: 2, three: 3} + call assert_equal(#{one: 2, two: 3, three: 4}, mapnew(dconst, {_, v -> v + 1})) endfunc func Test_mapnew_list() @@ -130,6 +133,9 @@ func Test_mapnew_list() let lout = mapnew(lin, {k, v -> string(v)}) call assert_equal([1, 2, 3], lin) call assert_equal(['1', '2', '3'], lout) + + const lconst = [1, 2, 3] + call assert_equal([2, 3, 4], mapnew(lconst, {_, v -> v + 1})) endfunc func Test_mapnew_blob()