aboutsummaryrefslogtreecommitdiff
path: root/scripts/geneval.lua
diff options
context:
space:
mode:
authorZyX <kp-pav@yandex.ru>2016-01-01 12:17:22 +0300
committerBjörn Linse <bjorn.linse@gmail.com>2016-08-31 21:40:20 +0200
commit8fb7273ac0b981eeb9afdc82675b908c1600d34f (patch)
treef59ff8bf7226a85817e29dac7d564a54662e71b1 /scripts/geneval.lua
parent0ade1bb7067d0cdb9b059fb66a8c4b868408be9c (diff)
downloadrneovim-8fb7273ac0b981eeb9afdc82675b908c1600d34f.tar.gz
rneovim-8fb7273ac0b981eeb9afdc82675b908c1600d34f.tar.bz2
rneovim-8fb7273ac0b981eeb9afdc82675b908c1600d34f.zip
eval: Move VimL functions list to a lua file
Removes all kinds of problems with sorting, provides a ready-to-use function list representation for genvimvim.lua, does not require specifying function name twice (VimL function name (string) + f_ function name).
Diffstat (limited to 'scripts/geneval.lua')
-rw-r--r--scripts/geneval.lua42
1 files changed, 42 insertions, 0 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')