aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/nvim/eval/typval.c2
-rw-r--r--test/unit/eval/typval_spec.lua16
2 files changed, 17 insertions, 1 deletions
diff --git a/src/nvim/eval/typval.c b/src/nvim/eval/typval.c
index ef64467ee5..4adc31d10a 100644
--- a/src/nvim/eval/typval.c
+++ b/src/nvim/eval/typval.c
@@ -774,7 +774,7 @@ long tv_list_idx_of_item(const list_T *const l, const listitem_T *const item)
return -1;
}
long idx = 0;
- listitem_T *li;
+ const listitem_T *li;
for (li = l->lv_first; li != NULL && li != item; li = li->li_next) {
idx++;
}
diff --git a/test/unit/eval/typval_spec.lua b/test/unit/eval/typval_spec.lua
index 94ee394009..d308ee5794 100644
--- a/test/unit/eval/typval_spec.lua
+++ b/test/unit/eval/typval_spec.lua
@@ -1324,5 +1324,21 @@ describe('typval.c', function()
end)
end)
end)
+ describe('idx_of_item()', function()
+ it('works', function()
+ local l = list(1, 2, 3, 4, 5)
+ local l2 = list(42, empty_list)
+ local lis = list_items(l)
+ local lis2 = list_items(l2)
+
+ for i, li in ipairs(lis) do
+ eq(i - 1, lib.tv_list_idx_of_item(l, li))
+ end
+ eq(-1, lib.tv_list_idx_of_item(l, lis2[1]))
+ eq(-1, lib.tv_list_idx_of_item(l, nil))
+ eq(-1, lib.tv_list_idx_of_item(nil, nil))
+ eq(-1, lib.tv_list_idx_of_item(nil, lis[1]))
+ end)
+ end)
end)
end)