Skip to content

Commit

Permalink
eval: Move VimL functions list to a lua file
Browse files Browse the repository at this point in the history
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).
  • Loading branch information
ZyX-I authored and bfredl committed Aug 31, 2016
1 parent 0ade1bb commit 8fb7273
Show file tree
Hide file tree
Showing 5 changed files with 379 additions and 341 deletions.
42 changes: 42 additions & 0 deletions 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')
22 changes: 6 additions & 16 deletions scripts/genvimvim.lua
Expand Up @@ -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
Expand Down Expand Up @@ -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()
Expand Down
10 changes: 10 additions & 0 deletions src/nvim/CMakeLists.txt
Expand Up @@ -19,14 +19,17 @@ set(HEADER_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/gendeclarations.lua)
set(GENERATED_INCLUDES_DIR ${PROJECT_BINARY_DIR}/include)
set(GENERATED_EX_CMDS_ENUM ${GENERATED_INCLUDES_DIR}/ex_cmds_enum.generated.h)
set(GENERATED_EX_CMDS_DEFS ${GENERATED_DIR}/ex_cmds_defs.generated.h)
set(GENERATED_FUNCS ${GENERATED_DIR}/funcs.generated.h)
set(GENERATED_EVENTS_ENUM ${GENERATED_INCLUDES_DIR}/auevents_enum.generated.h)
set(GENERATED_EVENTS_NAMES_MAP ${GENERATED_DIR}/auevents_name_map.generated.h)
set(GENERATED_OPTIONS ${GENERATED_DIR}/options.generated.h)
set(EX_CMDS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genex_cmds.lua)
set(FUNCS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/geneval.lua)
set(EVENTS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/gen_events.lua)
set(OPTIONS_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genoptions.lua)
set(EVENTS_LIST_FILE ${PROJECT_SOURCE_DIR}/src/nvim/auevents.lua)
set(EX_CMDS_DEFS_FILE ${PROJECT_SOURCE_DIR}/src/nvim/ex_cmds.lua)
set(EVAL_DEFS_FILE ${PROJECT_SOURCE_DIR}/src/nvim/eval.lua)
set(OPTIONS_LIST_FILE ${PROJECT_SOURCE_DIR}/src/nvim/options.lua)
set(UNICODE_TABLES_GENERATOR ${PROJECT_SOURCE_DIR}/scripts/genunicodetables.lua)
set(UNICODE_DIR ${PROJECT_SOURCE_DIR}/unicode)
Expand Down Expand Up @@ -200,6 +203,7 @@ list(APPEND NEOVIM_GENERATED_SOURCES
"${GENERATED_EVENTS_NAMES_MAP}"
"${GENERATED_OPTIONS}"
"${GENERATED_UNICODE_TABLES}"
"${GENERATED_FUNCS}"
)

add_custom_command(OUTPUT ${GENERATED_EX_CMDS_ENUM} ${GENERATED_EX_CMDS_DEFS}
Expand All @@ -208,6 +212,12 @@ add_custom_command(OUTPUT ${GENERATED_EX_CMDS_ENUM} ${GENERATED_EX_CMDS_DEFS}
DEPENDS ${EX_CMDS_GENERATOR} ${EX_CMDS_DEFS_FILE}
)

add_custom_command(OUTPUT ${GENERATED_FUNCS}
COMMAND ${LUA_PRG} ${FUNCS_GENERATOR}
${PROJECT_SOURCE_DIR}/src/nvim ${GENERATED_DIR}
DEPENDS ${FUNCS_GENERATOR} ${EVAL_DEFS_FILE}
)

add_custom_command(OUTPUT ${GENERATED_EVENTS_ENUM} ${GENERATED_EVENTS_NAMES_MAP}
COMMAND ${LUA_PRG} ${EVENTS_GENERATOR}
${PROJECT_SOURCE_DIR}/src/nvim ${GENERATED_EVENTS_ENUM} ${GENERATED_EVENTS_NAMES_MAP}
Expand Down

0 comments on commit 8fb7273

Please sign in to comment.