diff --git a/include/Nazara/Lua/LuaInstance.hpp b/include/Nazara/Lua/LuaInstance.hpp index 573f135cf..26d4d0e41 100644 --- a/include/Nazara/Lua/LuaInstance.hpp +++ b/include/Nazara/Lua/LuaInstance.hpp @@ -51,6 +51,8 @@ class NAZARA_API NzLuaInstance : NzNonCopyable void Concatenate(int count); + NzString DumpStack() const; + void Error(const char* message); void Error(const NzString& message); diff --git a/src/Nazara/Lua/LuaInstance.cpp b/src/Nazara/Lua/LuaInstance.cpp index eb0aa9c7b..e32436253 100644 --- a/src/Nazara/Lua/LuaInstance.cpp +++ b/src/Nazara/Lua/LuaInstance.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -221,6 +222,65 @@ void NzLuaInstance::Concatenate(int count) lua_concat(m_state, count); } +NzString NzLuaInstance::DumpStack() const +{ + NzStringStream stream; + unsigned int stackTop = GetStackTop(); + stream << stackTop << " entries\n"; + + for (unsigned int i = 1; i <= stackTop; ++i) + { + stream << i << ": "; + switch (GetType(i)) + { + case nzLuaType_Boolean: + stream << "Boolean(" << ToBoolean(i) << ')'; + break; + + case nzLuaType_Function: + stream << "Function"; + break; + + case nzLuaType_LightUserdata: + case nzLuaType_Userdata: + stream << "Userdata(" << ToUserdata(i) << ')'; + break; + + case nzLuaType_Nil: + stream << "Nil"; + break; + + case nzLuaType_None: + stream << "None"; + break; + + case nzLuaType_Number: + stream << "Number(" << ToNumber(i) << ')'; + break; + + case nzLuaType_String: + stream << "String(" << ToString(i) << ')'; + break; + + case nzLuaType_Table: + stream << "Table"; + break; + + case nzLuaType_Thread: + stream << "Thread"; + break; + + default: + stream << "Unknown"; + break; + } + + stream << '\n'; + } + + return stream.ToString(); +} + void NzLuaInstance::Error(const char* message) { luaL_error(m_state, message);