From 236bcc6e10f59b9336603571f1683cbe4aa411a9 Mon Sep 17 00:00:00 2001 From: Li Jin Date: Fri, 22 Jan 2021 17:54:39 +0800 Subject: update included Lua. --- src/lua/lapi.c | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'src/lua/lapi.c') diff --git a/src/lua/lapi.c b/src/lua/lapi.c index 03e756d..3583e9c 100644 --- a/src/lua/lapi.c +++ b/src/lua/lapi.c @@ -187,9 +187,26 @@ LUA_API void lua_settop (lua_State *L, int idx) { api_check(L, -(idx+1) <= (L->top - (func + 1)), "invalid new top"); diff = idx + 1; /* will "subtract" index (as it is negative) */ } +#if defined(LUA_COMPAT_5_4_0) if (diff < 0 && hastocloseCfunc(ci->nresults)) - luaF_close(L, L->top + diff, LUA_OK); - L->top += diff; /* correct top only after closing any upvalue */ + luaF_close(L, L->top + diff, CLOSEKTOP, 0); +#endif + L->top += diff; + api_check(L, L->openupval == NULL || uplevel(L->openupval) < L->top, + "cannot pop an unclosed slot"); + lua_unlock(L); +} + + +LUA_API void lua_closeslot (lua_State *L, int idx) { + StkId level; + lua_lock(L); + level = index2stack(L, idx); + api_check(L, hastocloseCfunc(L->ci->nresults) && L->openupval != NULL && + uplevel(L->openupval) == level, + "no variable to close at given level"); + luaF_close(L, level, CLOSEKTOP, 0); + setnilvalue(s2v(level)); lua_unlock(L); } -- cgit v1.2.3-55-g6feb