From c230c7d1a6b744efb673f516f0c6cc2a17c2305b Mon Sep 17 00:00:00 2001 From: Hirokazu Hata Date: Thu, 13 Feb 2020 15:02:30 +0900 Subject: [PATCH] lua: if second argument is vim.empty_dict(), vim.tbl_extend uses empty_dict() instead of {} --- runtime/lua/vim/shared.lua | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/runtime/lua/vim/shared.lua b/runtime/lua/vim/shared.lua index 36df24d0c1..6eb7a970e4 100644 --- a/runtime/lua/vim/shared.lua +++ b/runtime/lua/vim/shared.lua @@ -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