aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/eval/funcs.c6
-rw-r--r--src/nvim/testdir/test_blob.vim1
-rw-r--r--src/nvim/testdir/test_listdict.vim6
3 files changed, 12 insertions, 1 deletions
diff --git a/src/nvim/eval/funcs.c b/src/nvim/eval/funcs.c
index 8070dacc48..13d8f52768 100644
--- a/src/nvim/eval/funcs.c
+++ b/src/nvim/eval/funcs.c
@@ -3505,6 +3505,7 @@ static varnumber_T indexof_eval_expr(typval_T *expr)
bool error = false;
varnumber_T found = tv_get_bool_chk(&newtv, &error);
+ tv_clear(&newtv);
return error ? false : found;
}
@@ -3566,7 +3567,10 @@ static varnumber_T indexof_list(list_T *l, varnumber_T startidx, typval_T *expr)
set_vim_var_nr(VV_KEY, idx);
tv_copy(TV_LIST_ITEM_TV(item), get_vim_var_tv(VV_VAL));
- if (indexof_eval_expr(expr)) {
+ bool found = indexof_eval_expr(expr);
+ tv_clear(get_vim_var_tv(VV_VAL));
+
+ if (found) {
return idx;
}
}
diff --git a/src/nvim/testdir/test_blob.vim b/src/nvim/testdir/test_blob.vim
index 4c5632c81f..cf03d2011c 100644
--- a/src/nvim/testdir/test_blob.vim
+++ b/src/nvim/testdir/test_blob.vim
@@ -372,6 +372,7 @@ func Test_indexof()
call assert_equal(-1, indexof(b, {i, v -> v == 0x1}))
call assert_equal(1, indexof(b, "v:val == 0xad"))
call assert_equal(-1, indexof(b, "v:val == 0xff"))
+ call assert_equal(-1, indexof(b, {_, v -> "v == 0xad"}))
call assert_equal(-1, indexof(0z, "v:val == 0x0"))
call assert_equal(-1, indexof(v:_null_blob, "v:val == 0xde"))
diff --git a/src/nvim/testdir/test_listdict.vim b/src/nvim/testdir/test_listdict.vim
index 4c51119d16..37c1ee8307 100644
--- a/src/nvim/testdir/test_listdict.vim
+++ b/src/nvim/testdir/test_listdict.vim
@@ -1083,7 +1083,13 @@ func Test_indexof()
call assert_equal(-1, indexof(l, "v:val.n == 10", #{startidx: -4}))
call assert_equal(0, indexof(l, "v:val.n == 10", v:_null_dict))
+ let s = ["a", "b", "c"]
+ call assert_equal(2, indexof(s, {_, v -> v == 'c'}))
+ call assert_equal(-1, indexof(s, {_, v -> v == 'd'}))
+ call assert_equal(-1, indexof(s, {_, v -> "v == 'd'"}))
+
call assert_equal(-1, indexof([], {i, v -> v == 'a'}))
+ call assert_equal(-1, indexof([1, 2, 3], {_, v -> "v == 2"}))
call assert_equal(-1, indexof(v:_null_list, {i, v -> v == 'a'}))
call assert_equal(-1, indexof(l, v:_null_string))
" Nvim doesn't have null functions