mirror of
https://github.com/neovim/neovim.git
synced 2025-09-08 12:28:18 +00:00
perf: pre-compile embedded Lua source into bytecode (#16631)
The Lua modules that make up vim.lua are embedded as raw source files into the nvim binary. These sources are loaded by the Lua runtime on startuptime. We can pre-compile these sources into Lua bytecode before embedding them into the binary, which minimizes the size of the binary and improves startuptime.
This commit is contained in:
@@ -404,9 +404,9 @@ static int nlua_state_init(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL
|
||||
|
||||
{
|
||||
const char *code = (char *)&shared_module[0];
|
||||
if (luaL_loadbuffer(lstate, code, strlen(code), "@vim/shared.lua")
|
||||
if (luaL_loadbuffer(lstate, code, sizeof(shared_module) - 1, "@vim/shared.lua")
|
||||
|| nlua_pcall(lstate, 0, 0)) {
|
||||
nlua_error(lstate, _("E5106: Error while creating shared module: %.*s"));
|
||||
nlua_error(lstate, _("E5106: Error while creating shared module: %.*s\n"));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -416,18 +416,18 @@ static int nlua_state_init(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL
|
||||
lua_getfield(lstate, -1, "loaded"); // [package, loaded]
|
||||
|
||||
const char *code = (char *)&inspect_module[0];
|
||||
if (luaL_loadbuffer(lstate, code, strlen(code), "@vim/inspect.lua")
|
||||
if (luaL_loadbuffer(lstate, code, sizeof(inspect_module) - 1, "@vim/inspect.lua")
|
||||
|| nlua_pcall(lstate, 0, 1)) {
|
||||
nlua_error(lstate, _("E5106: Error while creating inspect module: %.*s"));
|
||||
nlua_error(lstate, _("E5106: Error while creating inspect module: %.*s\n"));
|
||||
return 1;
|
||||
}
|
||||
// [package, loaded, inspect]
|
||||
lua_setfield(lstate, -2, "vim.inspect"); // [package, loaded]
|
||||
|
||||
code = (char *)&lua_F_module[0];
|
||||
if (luaL_loadbuffer(lstate, code, strlen(code), "@vim/F.lua")
|
||||
if (luaL_loadbuffer(lstate, code, sizeof(lua_F_module) - 1, "@vim/F.lua")
|
||||
|| nlua_pcall(lstate, 0, 1)) {
|
||||
nlua_error(lstate, _("E5106: Error while creating vim.F module: %.*s"));
|
||||
nlua_error(lstate, _("E5106: Error while creating vim.F module: %.*s\n"));
|
||||
return 1;
|
||||
}
|
||||
// [package, loaded, module]
|
||||
@@ -438,9 +438,9 @@ static int nlua_state_init(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL
|
||||
|
||||
{
|
||||
const char *code = (char *)&vim_module[0];
|
||||
if (luaL_loadbuffer(lstate, code, strlen(code), "@vim.lua")
|
||||
if (luaL_loadbuffer(lstate, code, sizeof(vim_module) - 1, "@vim.lua")
|
||||
|| nlua_pcall(lstate, 0, 0)) {
|
||||
nlua_error(lstate, _("E5106: Error while creating vim module: %.*s"));
|
||||
nlua_error(lstate, _("E5106: Error while creating vim module: %.*s\n"));
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -450,9 +450,9 @@ static int nlua_state_init(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL
|
||||
lua_getfield(lstate, -1, "loaded"); // [package, loaded]
|
||||
|
||||
const char *code = (char *)&lua_meta_module[0];
|
||||
if (luaL_loadbuffer(lstate, code, strlen(code), "@vim/_meta.lua")
|
||||
if (luaL_loadbuffer(lstate, code, sizeof(lua_meta_module) - 1, "@vim/_meta.lua")
|
||||
|| nlua_pcall(lstate, 0, 1)) {
|
||||
nlua_error(lstate, _("E5106: Error while creating vim._meta module: %.*s"));
|
||||
nlua_error(lstate, _("E5106: Error while creating vim._meta module: %.*s\n"));
|
||||
return 1;
|
||||
}
|
||||
// [package, loaded, module]
|
||||
|
Reference in New Issue
Block a user