diff --git a/include/library/lua-base.hpp b/include/library/lua-base.hpp index 0902bd12..8ccbdbaf 100644 --- a/include/library/lua-base.hpp +++ b/include/library/lua-base.hpp @@ -318,6 +318,20 @@ public: (stringfmt() << "argument #" << argindex << " to " << fname << " must be string").throwex(); return std::string(f, f + len); } +/** + * Read slot as string. + * + * Parameter argindex: The stack index. + * Returns: The string. + */ + std::string as_string(int argindex) + { + if(isnone(argindex)) return "(none)"; + size_t len; + const char* f = lua_tolstring(lua_handle, argindex, &len); + if(!f) return "(null)"; + return std::string(f, f + len); + } /** * Get a boolean argument. * diff --git a/src/lua/ibind.cpp b/src/lua/ibind.cpp index 7abe08e8..bdf5664f 100644 --- a/src/lua/ibind.cpp +++ b/src/lua/ibind.cpp @@ -37,7 +37,7 @@ public: int r = L.pcall(1, 0, 0); std::string err; if(r == LUA_ERRRUN) - err = L.get_string(-1, "Lua command callback"); + err = L.as_string(-1); else if(r == LUA_ERRMEM) err = "Out of memory"; else if(r == LUA_ERRERR) diff --git a/src/lua/lua.cpp b/src/lua/lua.cpp index 519beceb..71f5ed93 100644 --- a/src/lua/lua.cpp +++ b/src/lua/lua.cpp @@ -533,8 +533,7 @@ bool lua_state::run_lua_fragment() return false; int t = L.load(read_lua_fragment, &luareader_fragment, "run_lua_fragment", "t"); if(t == LUA_ERRSYNTAX) { - messages << "Can't run Lua: Internal syntax error: " << L.tostring(-1) - << std::endl; + messages << "Can't run Lua: Internal syntax error: " << L.as_string(-1) << std::endl; L.pop(1); return false; } @@ -547,7 +546,9 @@ bool lua_state::run_lua_fragment() int r = L.pcall(0, 0, 0); recursive_flag = false; if(r == LUA_ERRRUN) { - messages << "Error running Lua hunk: " << L.tostring(-1) << std::endl; + auto msgptr = L.tostring(-1); + if(!msgptr) msgptr = "(null)"; + messages << "Error running Lua hunk: " << L.as_string(-1) << std::endl; L.pop(1); result = false; } diff --git a/src/lua/memory.cpp b/src/lua/memory.cpp index c7b7b4fd..36615eb0 100644 --- a/src/lua/memory.cpp +++ b/src/lua/memory.cpp @@ -178,7 +178,7 @@ namespace if(!ret) return; switch(ret) { case LUA_ERRRUN: - messages << "Error in Lua memory callback: " << L.get_string(-1, "errhnd") << std::endl; + messages << "Error in Lua memory callback: " << L.as_string(-1) << std::endl; L.pop(1); return; case LUA_ERRMEM: