Multiple errors in '__toclose' report the first one

When there are multiple errors when closing objects, the error
reported by the protected call is the first one, for two reasons:
First, other errors may be caused by this one;
second, the first error is handled in the original execution context,
and therefore has the full traceback.
This commit is contained in:
Roberto Ierusalimschy
2019-06-05 13:16:25 -03:00
parent 14edd364c3
commit b4d5dff8ec
5 changed files with 56 additions and 28 deletions

View File

@@ -75,11 +75,8 @@ static int luaB_auxwrap (lua_State *L) {
int r = auxresume(L, co, lua_gettop(L));
if (r < 0) {
int stat = lua_status(co);
if (stat != LUA_OK && stat != LUA_YIELD) {
stat = lua_resetthread(co); /* close variables in case of errors */
if (stat != LUA_OK) /* error closing variables? */
lua_xmove(co, L, 1); /* get new error object */
}
if (stat != LUA_OK && stat != LUA_YIELD)
lua_resetthread(co); /* close variables in case of errors */
if (lua_type(L, -1) == LUA_TSTRING) { /* error object is a string? */
luaL_where(L, 1); /* add extra info, if available */
lua_insert(L, -2);