diff options
-rw-r--r-- | src/nvim/lua/converter.c | 6 | ||||
-rw-r--r-- | test/functional/lua/api_spec.lua | 4 |
2 files changed, 5 insertions, 5 deletions
diff --git a/src/nvim/lua/converter.c b/src/nvim/lua/converter.c index fd2bdbd677..ca0be28fac 100644 --- a/src/nvim/lua/converter.c +++ b/src/nvim/lua/converter.c @@ -148,7 +148,7 @@ static LuaTableProps nlua_traverse_table(lua_State *const lstate) } } else { if (tsize == 0 - || (tsize == ret.maxidx + || (tsize <= ret.maxidx && other_keys_num == 0 && ret.string_keys_num == 0)) { ret.type = kObjectTypeArray; @@ -1129,10 +1129,6 @@ Object nlua_pop_Object(lua_State *const lstate, bool ref, Error *const err) } const size_t idx = cur.obj->data.array.size++; lua_rawgeti(lstate, -1, (int)idx + 1); - if (lua_isnil(lstate, -1)) { - lua_pop(lstate, 2); - continue; - } kvi_push(stack, cur); cur = (ObjPopStackItem) { .obj = &cur.obj->data.array.items[idx], diff --git a/test/functional/lua/api_spec.lua b/test/functional/lua/api_spec.lua index d808693a9e..8c03eb60ec 100644 --- a/test/functional/lua/api_spec.lua +++ b/test/functional/lua/api_spec.lua @@ -245,4 +245,8 @@ describe('luaeval(vim.api.…)', function() eq('', funcs.luaeval('vim.api.nvim_replace_termcodes("", 0, 1.5, "test")')) eq('', funcs.luaeval('vim.api.nvim_replace_termcodes("", true, {}, {[vim.type_idx]=vim.types.array})')) end) + + it('serializes sparse arrays in Lua', function() + eq({ [1] = vim.NIL, [2] = 2 }, exec_lua [[ return { [2] = 2 } ]]) + end) end) |