aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/geneval.lua29
-rw-r--r--scripts/genvimvim.lua9
2 files changed, 27 insertions, 11 deletions
diff --git a/scripts/geneval.lua b/scripts/geneval.lua
index 396e7b81db..75a8bdfab3 100644
--- a/scripts/geneval.lua
+++ b/scripts/geneval.lua
@@ -3,6 +3,7 @@ mpack = require('mpack')
local nvimsrcdir = arg[1]
local autodir = arg[2]
local metadata_file = arg[3]
+local funcs_file = arg[4]
if nvimsrcdir == '--help' then
print([[
@@ -19,20 +20,34 @@ package.path = nvimsrcdir .. '/?.lua;' .. package.path
local funcsfname = autodir .. '/funcs.generated.h'
-local funcspipe = io.open(funcsfname .. '.hsh', 'w')
+local gperfpipe = io.open(funcsfname .. '.gperf', 'wb')
local funcs = require('eval').funcs
-
local metadata = mpack.unpack(io.open(arg[3], 'rb'):read("*all"))
-
for i,fun in ipairs(metadata) do
funcs['api_'..fun.name] = {
args=#fun.parameters,
func='api_wrapper',
- data='handle_'..fun.name,
+ data='&handle_'..fun.name,
}
end
+local funcsdata = io.open(funcs_file, 'w')
+funcsdata:write(mpack.pack(funcs))
+funcsdata:close()
+
+gperfpipe:write([[
+%language=ANSI-C
+%global-table
+%define initializer-suffix ,0,0,NULL,NULL
+%define word-array-name functions
+%define hash-function-name hash_internal_func_gperf
+%define lookup-function-name find_internal_func_gperf
+%omit-struct-type
+%struct-type
+VimLFuncDef;
+%%
+]])
for name, def in pairs(funcs) do
args = def.args or 0
@@ -43,7 +58,7 @@ for name, def in pairs(funcs) do
end
func = def.func or ('f_' .. name)
data = def.data or "NULL"
- local val = ('{ %s, %s, &%s, %s }'):format(args[1], args[2], func, data)
- funcspipe:write(name .. '\n' .. val .. '\n')
+ gperfpipe:write(('%s, %s, %s, &%s, (FunPtr)%s\n')
+ :format(name, args[1], args[2], func, data))
end
-funcspipe:close()
+gperfpipe:close()
diff --git a/scripts/genvimvim.lua b/scripts/genvimvim.lua
index 729749a52f..24c147b811 100644
--- a/scripts/genvimvim.lua
+++ b/scripts/genvimvim.lua
@@ -1,3 +1,5 @@
+mpack = require('mpack')
+
if arg[1] == '--help' then
print('Usage: lua genvimvim.lua src/nvim runtime/syntax/vim/generated.vim')
os.exit(0)
@@ -5,6 +7,7 @@ end
local nvimsrcdir = arg[1]
local syntax_file = arg[2]
+local funcs_file = arg[3]
package.path = nvimsrcdir .. '/?.lua;' .. package.path
@@ -23,7 +26,6 @@ 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
@@ -112,9 +114,9 @@ end
w('\n\nsyn case match')
local vimfun_start = 'syn keyword vimFuncName contained '
w('\n\n' .. vimfun_start)
-eval_fd = io.open(nvimsrcdir .. '/eval.c', 'r')
+funcs = mpack.unpack(io.open(funcs_file):read("*all"))
local started = 0
-for name, def in pairs(eval.funcs) do
+for name, def in pairs(funcs) do
if name then
if lld.line_length > 850 then
w('\n' .. vimfun_start)
@@ -122,7 +124,6 @@ for name, def in pairs(eval.funcs) do
w(' ' .. name)
end
end
-eval_fd:close()
w('\n')
syn_fd:close()