0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.1081: Lua: cannot use table.insert() and table.remove()

Problem:    Lua: cannot use table.insert() and table.remove().
Solution:   Add the list functions. (Prabir Shrestha, closes #6353)
This commit is contained in:
Bram Moolenaar
2020-06-28 22:41:26 +02:00
parent b7a78f7a67
commit a1f9f8666e
4 changed files with 64 additions and 11 deletions

View File

@@ -913,19 +913,32 @@ luaV_list_newindex(lua_State *L)
if (l->lv_lock)
luaL_error(L, "list is locked");
li = list_find(l, n);
if (li == NULL) return 0;
if (lua_isnil(L, 3)) // remove?
if (li == NULL)
{
vimlist_remove(l, li, li);
listitem_free(l, li);
if (!lua_isnil(L, 3))
{
typval_T v;
luaV_checktypval(L, 3, &v, "inserting list item");
if (list_insert_tv(l, &v, li) == FAIL)
luaL_error(L, "failed to add item to list");
clear_tv(&v);
}
}
else
{
typval_T v;
luaV_checktypval(L, 3, &v, "setting list item");
clear_tv(&li->li_tv);
copy_tv(&v, &li->li_tv);
clear_tv(&v);
if (lua_isnil(L, 3)) // remove?
{
vimlist_remove(l, li, li);
listitem_free(l, li);
}
else
{
typval_T v;
luaV_checktypval(L, 3, &v, "setting list item");
clear_tv(&li->li_tv);
copy_tv(&v, &li->li_tv);
clear_tv(&v);
}
}
return 0;
}