Add error-check for yield-in-pcall to traceback_pcall
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "traceback.hpp"
|
||||
|
||||
#include <cstring>
|
||||
#include <cassert>
|
||||
|
||||
#define TRACEBACK_LEVELS1 12
|
||||
#define TRACEBACK_LEVELS2 10
|
||||
@@ -88,7 +89,9 @@ eng::string traceback_pcall(lua_State *L, int narg, int nret) {
|
||||
if ((msg == NULL) || (msg[0] == 0)) {
|
||||
msg = "unknown error";
|
||||
}
|
||||
return msg;
|
||||
eng::string result = msg;
|
||||
assert(result != "attempt to yield from outside a coroutine");
|
||||
return result;
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
@@ -25,7 +25,8 @@ int traceback_coroutine(lua_State *L);
|
||||
// Similar to lua_pcall, except that it automatically supplies
|
||||
// traceback_coroutine as a message handler. It also automatically
|
||||
// returns any error message. Returns empty string if there's
|
||||
// no error.
|
||||
// no error. Also checks for a yield inside a pcall, which is
|
||||
// not allowed, and does an assert-fail in that case.
|
||||
//
|
||||
eng::string traceback_pcall(lua_State *L, int narg, int nret);
|
||||
|
||||
|
||||
@@ -304,7 +304,6 @@ eng::string World::probe_lua(int64_t actor_id, const eng::string &lua) {
|
||||
(*ostream) << std::endl;
|
||||
}
|
||||
} else {
|
||||
assert(msg != "attempt to yield from outside a coroutine");
|
||||
(*ostream) << msg << std::endl;
|
||||
}
|
||||
|
||||
@@ -366,7 +365,6 @@ void World::update_gui(int64_t actor_id, int64_t place_id, Gui *gui) {
|
||||
Gui::store_global_pointer(L, nullptr);
|
||||
if (!msg.empty()) {
|
||||
gui->clear(0);
|
||||
assert(msg != "attempt to yield from outside a coroutine");
|
||||
std::cerr << msg << std::endl;
|
||||
LS.result();
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user