diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/geneval.lua | 42 | ||||
-rw-r--r-- | scripts/genvimvim.lua | 22 |
2 files changed, 48 insertions, 16 deletions
diff --git a/scripts/geneval.lua b/scripts/geneval.lua new file mode 100644 index 0000000000..1f8a14d27b --- /dev/null +++ b/scripts/geneval.lua @@ -0,0 +1,42 @@ +local nvimsrcdir = arg[1] +local autodir = arg[2] + +if nvimsrcdir == '--help' then + print([[ +Usage: + lua geneval.lua src/nvim build/src/nvim/auto + +Will generate build/src/nvim/auto/funcs.generated.h with definition of functions +static const array. +]]) + os.exit(0) +end + +package.path = nvimsrcdir .. '/?.lua;' .. package.path + +local funcsfname = autodir .. '/funcs.generated.h' +local funcsfile = io.open(funcsfname, 'w') + +local funcs = require('eval') + +local sorted_funcs = {} +for name, def in pairs(funcs.funcs) do + def.name = name + def.args = def.args or 0 + if type(def.args) == 'number' then + def.args = {def.args, def.args} + elseif #def.args == 1 then + def.args[2] = 'MAX_FUNC_ARGS' + end + def.func = def.func or ('f_' .. def.name) + sorted_funcs[#sorted_funcs + 1] = def +end +table.sort(sorted_funcs, function(a, b) return a.name < b.name end) + +funcsfile:write('static const VimLFuncDef functions[] = {\n') +for _, def in ipairs(sorted_funcs) do + funcsfile:write((' { "%s", %s, %s, &%s },\n'):format( + def.name, def.args[1], def.args[2], def.func + )) +end +funcsfile:write('};\n') diff --git a/scripts/genvimvim.lua b/scripts/genvimvim.lua index 667af7be6c..729749a52f 100644 --- a/scripts/genvimvim.lua +++ b/scripts/genvimvim.lua @@ -23,6 +23,7 @@ end local options = require('options') local auevents = require('auevents') local ex_cmds = require('ex_cmds') +local eval = require('eval') local cmd_kw = function(prev_cmd, cmd) if not prev_cmd then @@ -113,23 +114,12 @@ local vimfun_start = 'syn keyword vimFuncName contained ' w('\n\n' .. vimfun_start) eval_fd = io.open(nvimsrcdir .. '/eval.c', 'r') local started = 0 -for line in eval_fd:lines() do - if line == '} functions[] =' then - started = 1 - elseif started == 1 then - assert (line == '{') - started = 2 - elseif started == 2 then - if line == '};' then - break - end - local func_name = line:match('^ { "([%w_]+)",') - if func_name then - if lld.line_length > 850 then - w('\n' .. vimfun_start) - end - w(' ' .. func_name) +for name, def in pairs(eval.funcs) do + if name then + if lld.line_length > 850 then + w('\n' .. vimfun_start) end + w(' ' .. name) end end eval_fd:close() |