# HG changeset patch # User Bram Moolenaar # Date 1606853703 -3600 # Node ID 77f1819753815f4dd2a16851c6a89496bb46322c # Parent 35ba3a465deb72b0cf5b0e0b7af35afee35928ee patch 8.2.2075: error for const argument to mapnew() Commit: https://github.com/vim/vim/commit/57cf4973a283941c92744554474b2c52ce892fd1 Author: Bram Moolenaar 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) diff --git a/src/list.c b/src/list.c --- 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; diff --git a/src/testdir/test_filter_map.vim b/src/testdir/test_filter_map.vim --- 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() diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -751,6 +751,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2075, +/**/ 2074, /**/ 2073,