fix(lua): detect and print syntax errors

This commit is contained in:
maelstrom 2025-07-10 12:16:54 +02:00
parent f27e778f1c
commit a10b34dc94

View file

@ -27,6 +27,7 @@ void Script::Run() {
std::shared_ptr<ScriptContext> scriptContext = dataModel().value()->GetService<ScriptContext>(); std::shared_ptr<ScriptContext> scriptContext = dataModel().value()->GetService<ScriptContext>();
lua_State* L = scriptContext->state; lua_State* L = scriptContext->state;
int top = lua_gettop(L);
// Create thread // Create thread
this->thread = lua_newthread(L); this->thread = lua_newthread(L);
@ -54,13 +55,23 @@ void Script::Run() {
lua_pop(Lt, 1); // _G lua_pop(Lt, 1); // _G
// Load source and push onto thread stack as upvalue for wrapper closure // Load source code and push onto thread as upvalue for wrapper
luaL_loadbuffer(Lt, source.c_str(), source.size(), this->GetFullName().c_str()); int status = luaL_loadbuffer(Lt, source.c_str(), source.size(), this->GetFullName().c_str());
if (status != LUA_OK) {
// Failed to parse/load chunk
Logger::error(lua_tostring(Lt, -1));
lua_settop(L, top);
return;
}
// Push wrapper as thread function
lua_pushcclosure(Lt, script_wrapper, 1); lua_pushcclosure(Lt, script_wrapper, 1);
lua_resume(Lt, 0); lua_resume(Lt, 0);
lua_pop(L, 1); // Pop the thread lua_pop(L, 1); // Pop the thread
lua_settop(L, top);
} }
void Script::Stop() { void Script::Stop() {