Beispiel #1
0
static int luaB_coresume (lua_State *L) {
  lua_State *co = lua_tothread(L, 1);
  int r;
  luaL_argcheck(L, co, 1, "coroutine expected");
  r = auxresume(L, co, lua_gettop(L) - 1);
  if (r < 0) {
    lua_pushboolean(L, 0);
    lua_insert(L, -2);
    return 2;  /* return false + error message */
  }
  else {
    lua_pushboolean(L, 1);
    lua_insert(L, -(r + 1));
    return r + 1;  /* return true + `resume' returns */
  }
}
Beispiel #2
0
static int luaB_auxwrap(lua_State* L)
{
	lua_State* co = lua_tothread(L, lua_upvalueindex(1));
	int r = auxresume(L, co, lua_gettop(L));
	if (r < 0)
	{
		if (lua_isstring(L, -1))  	/* error object is a string? */
		{
			luaL_where(L, 1);	 /* add extra info */
			lua_insert(L, -2);
			lua_concat(L, 2);
		}
		lua_error(L);  /* propagate error */
	}
	return r;
}