From 9a67405a0983a779fec7328a0767c4d7561c08ea Mon Sep 17 00:00:00 2001 From: ame Date: Wed, 14 Jan 2026 00:01:14 -0600 Subject: fix closures when cloned --- src/lua.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'src/lua.c') diff --git a/src/lua.c b/src/lua.c index a1ae4cd..27547d3 100644 --- a/src/lua.c +++ b/src/lua.c @@ -257,8 +257,15 @@ void luaI_deepcopy(lua_State* src, lua_State* dest, enum deep_copy_flags flags){ lua_dump(src, writer, (void*)awa, 0); luaL_loadbuffer(dest, awa->c, awa->len, "fun"); - if(!(flags & SKIP_LOCALS)) lua_assign_upvalues(dest, lua_gettop(dest)); - //lua_remove(dest, -2); + //if(!(flags & SKIP_LOCALS)) lua_assign_upvalues(dest, lua_gettop(dest)); + + int f = lua_gettop(dest); + for(int i = 1; lua_getupvalue(src, -1, i) != NULL; i++){ + luaI_deepcopy(src, dest, flags); + lua_setupvalue(dest, f, i); + lua_pop(src, 1); + } + str_free(awa); break; case LUA_TUSERDATA: -- cgit v1.2.3