aboutsummaryrefslogtreecommitdiff
path: root/runtime/lua/_vim9script.lua
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/lua/_vim9script.lua')
-rw-r--r--runtime/lua/_vim9script.lua23
1 files changed, 23 insertions, 0 deletions
diff --git a/runtime/lua/_vim9script.lua b/runtime/lua/_vim9script.lua
index b7bde332f5..363d061451 100644
--- a/runtime/lua/_vim9script.lua
+++ b/runtime/lua/_vim9script.lua
@@ -27,6 +27,29 @@ local vim9 = (function()
end
end
+ M.fn_ref = function(module, name, copied, ...)
+ for _, val in ipairs({ ... }) do
+ table.insert(copied, val)
+ end
+
+ local funcref = name
+ if type(funcref) == 'function' then
+ return funcref(unpack(copied))
+ elseif type(funcref) == 'string' then
+ if vim.fn.exists('*' .. funcref) == 1 then
+ return vim.fn[funcref](unpack(copied))
+ end
+
+ if module[funcref] then
+ module[funcref](unpack(copied))
+ end
+
+ error('unknown function: ' .. funcref)
+ else
+ error(string.format('unable to call funcref: %s', funcref))
+ end
+ end
+
M.fn_mut = function(name, args, info)
local result = vim.fn._Vim9ScriptFn(name, args)
for idx, val in pairs(result[2]) do