summaryrefslogtreecommitdiff
path: root/src/if_lua.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2021-04-07 20:11:12 +0200
committerBram Moolenaar <Bram@vim.org>2021-04-07 20:11:12 +0200
commit125ed2745c0a0570c1f81f249aebb023b2deef1b (patch)
tree10d0d8af435712f4f74142ef9988fd007ef6717d /src/if_lua.c
parente5b0b98a90acf420bb611fc99534982c98d0645b (diff)
downloadvim-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.c23
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);