lua: if second argument is vim.empty_dict(), vim.tbl_extend uses empty_dict() instead of {}

This commit is contained in:
Hirokazu Hata 2020-02-13 15:02:30 +09:00
parent 417fc6ccf7
commit c230c7d1a6
No known key found for this signature in database
GPG Key ID: 9AA9860369AE0DE2
1 changed files with 11 additions and 1 deletions

View File

@ -21,7 +21,7 @@ vim.deepcopy = (function()
table = function(orig)
local copy = {}
if getmetatable(orig) == vim._empty_dict_mt then
if vim._empty_dict_mt ~= nil and getmetatable(orig) == vim._empty_dict_mt then
copy = vim.empty_dict()
end
@ -174,9 +174,19 @@ function vim.tbl_extend(behavior, ...)
if (behavior ~= 'error' and behavior ~= 'keep' and behavior ~= 'force') then
error('invalid "behavior": '..tostring(behavior))
end
if select('#', ...) < 2 then
error('wrong number of arguments (given '..tostring(1 + select('#', ...))..', expected at least 3)')
end
local ret = {}
if vim._empty_dict_mt ~= nil and getmetatable(select(1, ...)) == vim._empty_dict_mt then
ret = vim.empty_dict()
end
for i = 1, select('#', ...) do
local tbl = select(i, ...)
vim.validate{["after the second argument"] = {tbl,'t'}}
if tbl then
for k, v in pairs(tbl) do
if behavior ~= 'force' and ret[k] ~= nil then