diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/eval.c | 8 | ||||
-rw-r--r-- | src/nvim/testdir/test_filter_map.vim | 4 | ||||
-rw-r--r-- | src/nvim/version.c | 2 |
3 files changed, 12 insertions, 2 deletions
diff --git a/src/nvim/eval.c b/src/nvim/eval.c index e4afa18d10..017bb92c75 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -9414,7 +9414,8 @@ static void filter_map(typval_T *argvars, typval_T *rettv, int map) static int filter_map_one(typval_T *tv, typval_T *expr, int map, int *remp) { typval_T rettv; - typeval_T argv[3]; + typval_T argv[3]; + char_u buf[NUMBUFLEN]; char_u *s; int retval = FAIL; int dummy; @@ -9424,6 +9425,7 @@ static int filter_map_one(typval_T *tv, typval_T *expr, int map, int *remp) argv[1] = vimvars[VV_VAL].vv_tv; s = expr->vval.v_string; if (expr->v_type == VAR_FUNC) { + s = expr->vval.v_string; if (call_func(s, (int)STRLEN(s), &rettv, 2, argv, 0L, 0L, &dummy, true, NULL, NULL) == FAIL) { goto theend; @@ -9437,6 +9439,10 @@ static int filter_map_one(typval_T *tv, typval_T *expr, int map, int *remp) goto theend; } } else { + s = get_tv_string_buf_chk(expr, buf); + if (s == NULL) { + goto theend; + } s = skipwhite(s); if (eval1(&s, &rettv, true) == FAIL) { goto theend; diff --git a/src/nvim/testdir/test_filter_map.vim b/src/nvim/testdir/test_filter_map.vim index 6bb063c76d..c8d64ce0a4 100644 --- a/src/nvim/testdir/test_filter_map.vim +++ b/src/nvim/testdir/test_filter_map.vim @@ -5,10 +5,12 @@ func Test_filter_map_list_expr_string() " filter() call assert_equal([2, 3, 4], filter([1, 2, 3, 4], 'v:val > 1')) call assert_equal([3, 4], filter([1, 2, 3, 4], 'v:key > 1')) + call assert_equal([], filter([1, 2, 3, 4], 0)) " map() call assert_equal([2, 4, 6, 8], map([1, 2, 3, 4], 'v:val * 2')) call assert_equal([0, 2, 4, 6], map([1, 2, 3, 4], 'v:key * 2')) + call assert_equal([9, 9, 9, 9], map([1, 2, 3, 4], 9)) endfunc " dict with expression string @@ -18,10 +20,12 @@ func Test_filter_map_dict_expr_string() " filter() call assert_equal({"bar": 2, "baz": 3}, filter(copy(dict), 'v:val > 1')) call assert_equal({"foo": 1, "baz": 3}, filter(copy(dict), 'v:key > "bar"')) + call assert_equal({}, filter(copy(dict), 0)) " map() call assert_equal({"foo": 2, "bar": 4, "baz": 6}, map(copy(dict), 'v:val * 2')) call assert_equal({"foo": "f", "bar": "b", "baz": "b"}, map(copy(dict), 'v:key[0]')) + call assert_equal({"foo": 9, "bar": 9, "baz": 9}, map(copy(dict), 9)) endfunc " list with funcref diff --git a/src/nvim/version.c b/src/nvim/version.c index 96dce2ca46..31f6c41ffc 100644 --- a/src/nvim/version.c +++ b/src/nvim/version.c @@ -438,7 +438,7 @@ static int included_patches[] = { 2005, // 2004 NA // 2003 NA - // 2002, + 2002, // 2001 NA 2000, 1999, |