Added LuaInstance::DumpStack

Former-commit-id: 89c3cca3debae881007df83106bb86886a6c26de
This commit is contained in:
Lynix 2014-03-26 21:24:06 +01:00
parent b07812d310
commit 11c2f82835
2 changed files with 62 additions and 0 deletions

View File

@ -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);

View File

@ -10,6 +10,7 @@
#include <Nazara/Core/Error.hpp>
#include <Nazara/Core/File.hpp>
#include <Nazara/Core/MemoryStream.hpp>
#include <Nazara/Core/StringStream.hpp>
#include <cstdlib>
#include <stdexcept>
#include <unordered_map>
@ -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);