/* Unrolls a coroutine in protected mode while there are recoverable errors, that is, errors inside a protected call. (Any error interrupts 'unroll', and this loop protects it again so it can continue.) Stops with a normal end (status == LUA_OK), an yield (status == LUA_YIELD), or an unprotected error ('findpcall' doesn't find a recover point).  */
static int precover(lua_State *L, int status)
/* Unrolls a coroutine in protected mode while there are recoverable errors, that is, errors inside a protected call. (Any error interrupts 'unroll', and this loop protects it again so it can continue.) Stops with a normal end (status == LUA_OK), an yield (status == LUA_YIELD), or an unprotected error ('findpcall' doesn't find a recover point).  */
static int precover(lua_State *L, int status)
{
    L->ci = ci;
    setcistrecst(ci, status);
    status = luaD_rawrunprotected(L, unroll, NULL);
  }
  return status;
}