Estoy usando lua 5.1 y estoy usando lua para cargar funciones que luego pueden invocarse desde C++.el mensaje de error de una función lua llamada con lua_pcall geting lost
int Error = luaL_loadfile(LuaState, "Test.lua");
if(!Error)
{
Error = lua_pcall(LuaState, 0, LUA_MULTRET, 0);
}
if(Error)
{
std::cerr << "-- " << lua_tostring(LuaState, -1) << std::endl;
lua_pop(LuaState, 1);
}
else
{
LuaStackBalancer LSB(LuaState); //Puts the Lua Stack back to the way it was found
lua_pushstring(LuaState, "Run");
lua_gettable(LuaState, LUA_GLOBALSINDEX);
if(lua_isfunction(LuaState, -1))
{
if(lua_pcall(LuaState, 0, 0, 0))
{
std::cerr << "-- " << lua_tostring(LuaState, -1) << std::endl;
}
}
}
El problema es que si la función Lua que llamo desde C++ llama a otra función que los errores a cabo entonces el retorno es el primer argumento de esta función en lugar del mensaje de error.
AlwaysErrorsOut define como:
int AlwaysErrorsOut(lua_State *LuaState)
{
return luaL_error(LuaState, "Error Test Successful");
}
Lua Prueba 1:
--Test.lua
AlwaysErrorsOut("Weirdness is happening")
de salida:
- test.lua: 1: Error de comprobación exitosa
Lua Prueba 2 :
--Test.lua
function Run()
AlwaysErrorsOut("Weirdness is happening")
end
de salida:
- Weirdness está sucediendo
Mi teoría actual es que después de que ocurre el error el mensaje de error se coloca en la parte superior de la pila y la pila se reduce entonces a 1.
¿Alguien sabe cómo evitar la pérdida del mensaje de error?
¿Puede mostrar el código de 'AlwaysErrorsOut'? –
int AlwaysErrorsOut (lua_State * LuaState) { \t return luaL_error (LuaState, "Error Test Successful"); } – khm