mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 03:48:18 +00:00
feat(lua): add proper support of luv threads
This commit is contained in:
@@ -471,43 +471,49 @@ static int nlua_stricmp(lua_State *const lstate) FUNC_ATTR_NONNULL_ALL
|
||||
}
|
||||
|
||||
|
||||
void nlua_state_add_stdlib(lua_State *const lstate)
|
||||
void nlua_state_add_stdlib(lua_State *const lstate, bool is_thread)
|
||||
{
|
||||
// stricmp
|
||||
lua_pushcfunction(lstate, &nlua_stricmp);
|
||||
lua_setfield(lstate, -2, "stricmp");
|
||||
// str_utfindex
|
||||
lua_pushcfunction(lstate, &nlua_str_utfindex);
|
||||
lua_setfield(lstate, -2, "str_utfindex");
|
||||
// str_byteindex
|
||||
lua_pushcfunction(lstate, &nlua_str_byteindex);
|
||||
lua_setfield(lstate, -2, "str_byteindex");
|
||||
// str_utf_pos
|
||||
lua_pushcfunction(lstate, &nlua_str_utf_pos);
|
||||
lua_setfield(lstate, -2, "str_utf_pos");
|
||||
// str_utf_start
|
||||
lua_pushcfunction(lstate, &nlua_str_utf_start);
|
||||
lua_setfield(lstate, -2, "str_utf_start");
|
||||
// str_utf_end
|
||||
lua_pushcfunction(lstate, &nlua_str_utf_end);
|
||||
lua_setfield(lstate, -2, "str_utf_end");
|
||||
// regex
|
||||
lua_pushcfunction(lstate, &nlua_regex);
|
||||
lua_setfield(lstate, -2, "regex");
|
||||
luaL_newmetatable(lstate, "nvim_regex");
|
||||
luaL_register(lstate, NULL, regex_meta);
|
||||
if (!is_thread) {
|
||||
// stricmp
|
||||
lua_pushcfunction(lstate, &nlua_stricmp);
|
||||
lua_setfield(lstate, -2, "stricmp");
|
||||
// str_utfindex
|
||||
lua_pushcfunction(lstate, &nlua_str_utfindex);
|
||||
lua_setfield(lstate, -2, "str_utfindex");
|
||||
// str_byteindex
|
||||
lua_pushcfunction(lstate, &nlua_str_byteindex);
|
||||
lua_setfield(lstate, -2, "str_byteindex");
|
||||
// str_utf_pos
|
||||
lua_pushcfunction(lstate, &nlua_str_utf_pos);
|
||||
lua_setfield(lstate, -2, "str_utf_pos");
|
||||
// str_utf_start
|
||||
lua_pushcfunction(lstate, &nlua_str_utf_start);
|
||||
lua_setfield(lstate, -2, "str_utf_start");
|
||||
// str_utf_end
|
||||
lua_pushcfunction(lstate, &nlua_str_utf_end);
|
||||
lua_setfield(lstate, -2, "str_utf_end");
|
||||
// regex
|
||||
lua_pushcfunction(lstate, &nlua_regex);
|
||||
lua_setfield(lstate, -2, "regex");
|
||||
luaL_newmetatable(lstate, "nvim_regex");
|
||||
luaL_register(lstate, NULL, regex_meta);
|
||||
|
||||
lua_pushvalue(lstate, -1); // [meta, meta]
|
||||
lua_setfield(lstate, -2, "__index"); // [meta]
|
||||
lua_pop(lstate, 1); // don't use metatable now
|
||||
lua_pushvalue(lstate, -1); // [meta, meta]
|
||||
lua_setfield(lstate, -2, "__index"); // [meta]
|
||||
lua_pop(lstate, 1); // don't use metatable now
|
||||
|
||||
// _getvar
|
||||
lua_pushcfunction(lstate, &nlua_getvar);
|
||||
lua_setfield(lstate, -2, "_getvar");
|
||||
// _getvar
|
||||
lua_pushcfunction(lstate, &nlua_getvar);
|
||||
lua_setfield(lstate, -2, "_getvar");
|
||||
|
||||
// _setvar
|
||||
lua_pushcfunction(lstate, &nlua_setvar);
|
||||
lua_setfield(lstate, -2, "_setvar");
|
||||
// _setvar
|
||||
lua_pushcfunction(lstate, &nlua_setvar);
|
||||
lua_setfield(lstate, -2, "_setvar");
|
||||
|
||||
// vim.spell
|
||||
luaopen_spell(lstate);
|
||||
lua_setfield(lstate, -2, "spell");
|
||||
}
|
||||
|
||||
// vim.mpack
|
||||
luaopen_mpack(lstate);
|
||||
@@ -526,10 +532,7 @@ void nlua_state_add_stdlib(lua_State *const lstate)
|
||||
lua_pushcfunction(lstate, &nlua_xdl_diff);
|
||||
lua_setfield(lstate, -2, "diff");
|
||||
|
||||
// vim.spell
|
||||
luaopen_spell(lstate);
|
||||
lua_setfield(lstate, -2, "spell");
|
||||
|
||||
// vim.json
|
||||
lua_cjson_new(lstate);
|
||||
lua_setfield(lstate, -2, "json");
|
||||
}
|
||||
|
Reference in New Issue
Block a user