summaryrefslogtreecommitdiffstats
path: root/src/if_lua.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-06-28 22:41:26 +0200
committerBram Moolenaar <Bram@vim.org>2020-06-28 22:41:26 +0200
commita1f9f8666ed3a462eb8a518e78418c57dc41bbd4 (patch)
treede92931b3cc7d3a9399c872447789c753f005d33 /src/if_lua.c
parentb7a78f7a6713f07d2fcad0b27dea22925c7b1cdf (diff)
patch 8.2.1081: Lua: cannot use table.insert() and table.remove()v8.2.1081
Problem: Lua: cannot use table.insert() and table.remove(). Solution: Add the list functions. (Prabir Shrestha, closes #6353)
Diffstat (limited to 'src/if_lua.c')
-rw-r--r--src/if_lua.c31
1 files changed, 22 insertions, 9 deletions
diff --git a/src/if_lua.c b/src/if_lua.c
index 2d02f7c58d..c5fc683212 100644
--- a/src/if_lua.c
+++ b/src/if_lua.c
@@ -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;
}