patch 9.2.0294: if_lua: lua interface does not work with lua 5.5

Problem:  if_lua: lua interface does not work with lua 5.5
          (Lyderic Landry)
Solution: Use the new lua API `luaL_openselectedlibs()`
          (Yee Cheng Chin)

Lua 5.5 removed the API function `openlibs` with `openselectedlibs`,
with `luaL_openlibs` replaced by a macro that just calls the new
`luaL_openselectedlibs` in the headers (see lua/lua@d738c8d18). This
broke Vim's dynamic Lua build as we try to redefine `luaL_openlibs`
ourselves and also this function can no longer be loaded from the lib.
Update the code to use the new API call instead to fix the issue.

fixes:  #19814
closes: #19842
closes: #19909

Signed-off-by: Yee Cheng Chin <ychin.git@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
Yee Cheng Chin
2026-04-04 08:37:47 +00:00
committed by Christian Brabandt
parent bd8b6c6b05
commit 22db4a3c57
2 changed files with 19 additions and 1 deletions
+17 -1
View File
@@ -215,7 +215,11 @@ static void luaV_call_lua_func_free(void *state);
# define luaopen_os dll_luaopen_os
# define luaopen_package dll_luaopen_package
# define luaopen_debug dll_luaopen_debug
# define luaL_openlibs dll_luaL_openlibs
# if LUA_VERSION_NUM >= 505
# define luaL_openselectedlibs dll_luaL_openselectedlibs
# else
# define luaL_openlibs dll_luaL_openlibs
# endif
// lauxlib
# if LUA_VERSION_NUM <= 501
@@ -331,7 +335,11 @@ int (*dll_luaopen_io) (lua_State *L);
int (*dll_luaopen_os) (lua_State *L);
int (*dll_luaopen_package) (lua_State *L);
int (*dll_luaopen_debug) (lua_State *L);
# if LUA_VERSION_NUM >= 505
void (*dll_luaL_openselectedlibs) (lua_State *L, int load, int preload);
# else
void (*dll_luaL_openlibs) (lua_State *L);
# endif
typedef void **luaV_function;
typedef struct {
@@ -439,7 +447,11 @@ static const luaV_Reg luaV_dll[] = {
{"luaopen_os", (luaV_function) &dll_luaopen_os},
{"luaopen_package", (luaV_function) &dll_luaopen_package},
{"luaopen_debug", (luaV_function) &dll_luaopen_debug},
# if LUA_VERSION_NUM >= 505
{"luaL_openselectedlibs", (luaV_function) &dll_luaL_openselectedlibs},
# else
{"luaL_openlibs", (luaV_function) &dll_luaL_openlibs},
# endif
{NULL, NULL}
};
@@ -2570,7 +2582,11 @@ luaopen_vim(lua_State *L)
luaV_newstate(void)
{
lua_State *L = luaL_newstate();
# if LUA_VERSION_NUM >= 505
luaL_openselectedlibs(L, ~0, 0); // core libs
# else
luaL_openlibs(L); // core libs
# endif
lua_pushcfunction(L, luaopen_vim); // vim
lua_call(L, 0, 0);
return L;
+2
View File
@@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
294,
/**/
293,
/**/