From 0aa7d2f4d546647e0d6b5c338bd5517675e9842c Mon Sep 17 00:00:00 2001 From: bfredl Date: Sun, 17 May 2026 16:25:22 +0200 Subject: feat(api): nvim_buf_call, win_call can has multiple return values #39801 from the "because we can and it is not much code" department. (diffcount excluding tests is actually negative) fixes https://github.com/neovim/neovim/issues/39636#issuecomment-4397141270 --- src/nvim/lua/executor.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/nvim/lua/executor.c') diff --git a/src/nvim/lua/executor.c b/src/nvim/lua/executor.c index c2b1887d60..b785ed0c64 100644 --- a/src/nvim/lua/executor.c +++ b/src/nvim/lua/executor.c @@ -1801,7 +1801,7 @@ Object nlua_call_ref(LuaRef ref, const char *name, Array args, LuaRetMode mode, static int mode_ret(LuaRetMode mode) { - return mode == kRetMulti ? LUA_MULTRET : 1; + return (mode == kRetMulti || mode == kRetMultiStack) ? LUA_MULTRET : 1; } /// Like nlua_call_ref, but with an option to run in fast (api-fast) context. @@ -1844,7 +1844,7 @@ Object nlua_call_ref_ctx(bool fast, LuaRef ref, const char *name, Array args, Lu static Object nlua_call_pop_retval(lua_State *lstate, LuaRetMode mode, Arena *arena, int pretop, Error *err) { - if (mode != kRetMulti && lua_isnil(lstate, -1)) { + if (mode != kRetMulti && mode != kRetMultiStack && lua_isnil(lstate, -1)) { lua_pop(lstate, 1); return NIL; } @@ -1878,6 +1878,9 @@ static Object nlua_call_pop_retval(lua_State *lstate, LuaRetMode mode, Arena *ar } res.size = (size_t)nres; return ARRAY_OBJ(res); + case kRetMultiStack: + ; + return NIL; } UNREACHABLE; } -- cgit