diff options
author | Bram Moolenaar <Bram@vim.org> | 2021-04-07 20:11:12 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2021-04-07 20:11:12 +0200 |
commit | 125ed2745c0a0570c1f81f249aebb023b2deef1b (patch) | |
tree | 10d0d8af435712f4f74142ef9988fd007ef6717d /src/if_lua.c | |
parent | e5b0b98a90acf420bb611fc99534982c98d0645b (diff) | |
download | vim-git-125ed2745c0a0570c1f81f249aebb023b2deef1b.tar.gz |
patch 8.2.2733: detecting Lua version is not reliablev8.2.2733
Problem: Detecting Lua version is not reliable.
Solution: Add "vim.lua_version". (Ozaki Kiichi, closes #8080)
Diffstat (limited to 'src/if_lua.c')
-rw-r--r-- | src/if_lua.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/src/if_lua.c b/src/if_lua.c index abcd850b3..c19244fae 100644 --- a/src/if_lua.c +++ b/src/if_lua.c @@ -24,6 +24,12 @@ #define LUAVIM_EVALNAME "luaeval" #define LUAVIM_EVALHEADER "local _A=select(1,...) return " +#ifdef LUA_RELEASE +# define LUAVIM_VERSION LUA_RELEASE +#else +# define LUAVIM_VERSION LUA_VERSION +#endif + typedef buf_T *luaV_Buffer; typedef win_T *luaV_Window; typedef dict_T *luaV_Dict; @@ -2087,6 +2093,7 @@ static const luaL_Reg luaV_module[] = { {"open", luaV_open}, {"type", luaV_type}, {"call", luaV_call}, + {"lua_version", NULL}, {NULL, NULL} }; @@ -2168,6 +2175,20 @@ luaV_setref(lua_State *L) return 1; } + static int +luaV_pushversion(lua_State *L) +{ + int major = 0; + int minor = 0; + int patch = 0; + char s[16]; + + sscanf(LUAVIM_VERSION, "Lua %d.%d.%d", &major, &minor, &patch); + vim_snprintf(s, sizeof(s), "%d.%d.%d", major, minor, patch); + lua_pushstring(L, s); + return 0; +} + #define LUA_VIM_FN_CODE \ "vim.fn = setmetatable({}, {\n"\ " __index = function (t, key)\n"\ @@ -2298,6 +2319,8 @@ luaopen_vim(lua_State *L) lua_newtable(L); // vim table lua_pushvalue(L, 1); // cache table luaV_openlib(L, luaV_module, 1); + luaV_pushversion(L); + lua_setfield(L, -2, "lua_version"); lua_setglobal(L, LUAVIM_NAME); // custom code (void)luaL_dostring(L, LUA_VIM_FN_CODE); |