diff options
Diffstat (limited to 'runtime/lua/_vim9script.lua')
-rw-r--r-- | runtime/lua/_vim9script.lua | 23 |
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 |