mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 8.2.2733: detecting Lua version is not reliable
Problem: Detecting Lua version is not reliable. Solution: Add "vim.lua_version". (Ozaki Kiichi, closes #8080)
This commit is contained in:
parent
e5b0b98a90
commit
125ed2745c
@ -6,7 +6,7 @@ if 1
|
|||||||
echo "*** Interface versions ***\n"
|
echo "*** Interface versions ***\n"
|
||||||
|
|
||||||
echo 'Lua:'
|
echo 'Lua:'
|
||||||
PrintVer lua print(_VERSION)
|
PrintVer lua print(vim.lua_version, jit and "(LuaJIT)" or "")
|
||||||
|
|
||||||
echo 'MzScheme:'
|
echo 'MzScheme:'
|
||||||
PrintVer mzscheme (display (version))
|
PrintVer mzscheme (display (version))
|
||||||
|
@ -208,6 +208,8 @@ Vim evaluation and command execution, and others.
|
|||||||
created on demand. Example: >
|
created on demand. Example: >
|
||||||
:lua print(vim.fn.has('timers'))
|
:lua print(vim.fn.has('timers'))
|
||||||
<
|
<
|
||||||
|
vim.lua_version The Lua version Vim was compiled with, in the
|
||||||
|
form {major}.{minor}.{patch}, e.g. "5.1.4".
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
3. List userdata *lua-list*
|
3. List userdata *lua-list*
|
||||||
|
23
src/if_lua.c
23
src/if_lua.c
@ -24,6 +24,12 @@
|
|||||||
#define LUAVIM_EVALNAME "luaeval"
|
#define LUAVIM_EVALNAME "luaeval"
|
||||||
#define LUAVIM_EVALHEADER "local _A=select(1,...) return "
|
#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 buf_T *luaV_Buffer;
|
||||||
typedef win_T *luaV_Window;
|
typedef win_T *luaV_Window;
|
||||||
typedef dict_T *luaV_Dict;
|
typedef dict_T *luaV_Dict;
|
||||||
@ -2087,6 +2093,7 @@ static const luaL_Reg luaV_module[] = {
|
|||||||
{"open", luaV_open},
|
{"open", luaV_open},
|
||||||
{"type", luaV_type},
|
{"type", luaV_type},
|
||||||
{"call", luaV_call},
|
{"call", luaV_call},
|
||||||
|
{"lua_version", NULL},
|
||||||
{NULL, NULL}
|
{NULL, NULL}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2168,6 +2175,20 @@ luaV_setref(lua_State *L)
|
|||||||
return 1;
|
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 \
|
#define LUA_VIM_FN_CODE \
|
||||||
"vim.fn = setmetatable({}, {\n"\
|
"vim.fn = setmetatable({}, {\n"\
|
||||||
" __index = function (t, key)\n"\
|
" __index = function (t, key)\n"\
|
||||||
@ -2298,6 +2319,8 @@ luaopen_vim(lua_State *L)
|
|||||||
lua_newtable(L); // vim table
|
lua_newtable(L); // vim table
|
||||||
lua_pushvalue(L, 1); // cache table
|
lua_pushvalue(L, 1); // cache table
|
||||||
luaV_openlib(L, luaV_module, 1);
|
luaV_openlib(L, luaV_module, 1);
|
||||||
|
luaV_pushversion(L);
|
||||||
|
lua_setfield(L, -2, "lua_version");
|
||||||
lua_setglobal(L, LUAVIM_NAME);
|
lua_setglobal(L, LUAVIM_NAME);
|
||||||
// custom code
|
// custom code
|
||||||
(void)luaL_dostring(L, LUA_VIM_FN_CODE);
|
(void)luaL_dostring(L, LUA_VIM_FN_CODE);
|
||||||
|
@ -13,18 +13,7 @@ CheckFeature lua
|
|||||||
CheckFeature float
|
CheckFeature float
|
||||||
|
|
||||||
" Depending on the lua version, the error messages are different.
|
" Depending on the lua version, the error messages are different.
|
||||||
let s:luaver = split(split(systemlist('lua -v')[0], ' ')[1], '\.')
|
let [s:major, s:minor, s:patch] = luaeval('vim.lua_version')->split('\.')->map({-> str2nr(v:val)})
|
||||||
if len(s:luaver) < 3
|
|
||||||
" Didn't get something that looks like a version, use _VERSION.
|
|
||||||
let s:luaver = split(split(luaeval('_VERSION'), ' ')[1], '\.')
|
|
||||||
endif
|
|
||||||
let s:major = str2nr(s:luaver[0])
|
|
||||||
let s:minor = str2nr(s:luaver[1])
|
|
||||||
if len(s:luaver) >= 3
|
|
||||||
let s:patch = str2nr(s:luaver[2])
|
|
||||||
else
|
|
||||||
let s:patch = 0
|
|
||||||
endif
|
|
||||||
let s:lua_53_or_later = 0
|
let s:lua_53_or_later = 0
|
||||||
let s:lua_543_or_later = 0
|
let s:lua_543_or_later = 0
|
||||||
if (s:major == 5 && s:minor >= 3) || s:major > 5
|
if (s:major == 5 && s:minor >= 3) || s:major > 5
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
2733,
|
||||||
/**/
|
/**/
|
||||||
2732,
|
2732,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user