diff --git a/nse_debug.cc b/nse_debug.cc index 1874ad0f53..72aeb8be81 100644 --- a/nse_debug.cc +++ b/nse_debug.cc @@ -1,64 +1,35 @@ #include "nse_debug.h" #include "output.h" -void l_dumpStack(lua_State *L) { - int stack_height = lua_gettop(L); - int i; - - log_write(LOG_PLAIN, "-== Stack Dump Begin ==-\n"); - for(i = -1; i >= 0 - stack_height; i--) { - log_write(LOG_PLAIN, "%d: ", i); - l_dumpValue(L, i); +void stack_dump (lua_State *L) +{ + int i, top = lua_gettop(L); + for (i = 1; i <= top; i++) + { /* repeat for each level */ + int t = lua_type(L, i); + printf("[%d, %d] = ", i, (-top + i - 1)); + switch (t) + { + case LUA_TSTRING: /* strings */ + printf("'%s'", lua_tostring(L, i)); + break; + case LUA_TBOOLEAN: /* booleans */ + printf(lua_toboolean(L, i) ? "true" : "false"); + break; + case LUA_TNUMBER: /* numbers */ + printf("%g", lua_tonumber(L, i)); + break; + case LUA_TTABLE: + case LUA_TTHREAD: + case LUA_TFUNCTION: + case LUA_TUSERDATA: + case LUA_TLIGHTUSERDATA: + printf("%s: %p", lua_typename(L, t), lua_topointer(L, i)); + break; + default: /* other values */ + printf("%s", lua_typename(L, t)); + break; + } + printf("\n"); } - - log_write(LOG_PLAIN, "-== Stack Dump End ==-\n"); -} - -void l_dumpValue(lua_State *L, int i) { - switch (lua_type(L, i)) - { - case LUA_TTABLE: - l_dumpTable(L, i); - break; - case LUA_TFUNCTION: - l_dumpFunction(L, i); - break; - case LUA_TSTRING: - log_write(LOG_PLAIN, "string '%s'\n", lua_tostring(L, i)); - break; - case LUA_TBOOLEAN: - log_write(LOG_PLAIN, "boolean: %s\n", - lua_toboolean(L, i) ? "true" : "false"); - break; - case LUA_TNUMBER: - log_write(LOG_PLAIN, "number: %g\n", lua_tonumber(L, i)); - break; - default: - log_write(LOG_PLAIN, "%s\n", lua_typename(L, lua_type(L, i))); - } -} - -void l_dumpTable(lua_State *L, int index) { - log_write(LOG_PLAIN, "table\n"); - lua_pushnil(L); - - if (index<0) --index; - while(lua_next(L, index) != 0) - { - l_dumpValue(L, -2); - l_dumpValue(L, -1); - lua_pop(L, 1); - } -} - -void l_dumpFunction(lua_State *L, int index) { - // lua_Debug ar; - - log_write(LOG_PLAIN, "function\n"); - - // lua_pushvalue(L, index); - // lua_getinfo(L, ">n", &ar); - // - // log_write(LOG_PLAIN, "\tname: %s %s\n", ar.namewhat, ar.name); - fflush(stdout); } diff --git a/nse_debug.h b/nse_debug.h index 653c9bd43d..9e35818524 100644 --- a/nse_debug.h +++ b/nse_debug.h @@ -7,10 +7,7 @@ extern "C" { #include "lauxlib.h" } -void l_dumpStack(lua_State* l); -void l_dumpValue(lua_State* l, int index); -void l_dumpTable(lua_State *l, int index); -void l_dumpFunction(lua_State* l, int index); +void stack_dump(lua_State *L); #endif diff --git a/nse_main.cc b/nse_main.cc index a56e951f42..e62503465a 100644 --- a/nse_main.cc +++ b/nse_main.cc @@ -557,9 +557,8 @@ int process_getScriptId(lua_State* L, ScriptResult *sr) { lua_getfield(L, 1, FILENAME); filename = lua_tostring(L, -1); if (filename == NULL) { - error("%s: The script's 'filename' entry was changed to:", - SCRIPT_ENGINE); - l_dumpValue(L, -1); + error("%s: The script's 'filename' entry was changed to: %s", + SCRIPT_ENGINE, luaL_typename(L, -1)); return SCRIPT_ENGINE_ERROR; } lua_pop(L, 1);