From: John L. <jr...@us...> - 2007-11-28 00:20:57
|
Update of /cvsroot/wxlua/wxLua/modules/wxluadebug/src In directory sc8-pr-cvs9.sourceforge.net:/tmp/cvs-serv15269/wxLua/modules/wxluadebug/src Modified Files: wxldebug.cpp Log Message: Clarify that the "index" parameter really means stack_idx Don't crash if someone calls a wxLua userdata with something other than a string in our __index function Don't use lua_rawset(L, old_top), but -3 to make sure that everything is right and we're not hiding problems Index: wxldebug.cpp =================================================================== RCS file: /cvsroot/wxlua/wxLua/modules/wxluadebug/src/wxldebug.cpp,v retrieving revision 1.47 retrieving revision 1.48 diff -C2 -d -r1.47 -r1.48 *** wxldebug.cpp 17 Nov 2007 00:15:07 -0000 1.47 --- wxldebug.cpp 28 Nov 2007 00:20:50 -0000 1.48 *************** *** 22,30 **** wxLuaDebugData wxNullLuaDebugData(false); - #define lua_Debug_to_String(ld) \ - wxString::Format(wxT("%p event=%d name='%s' namewhat='%s' what='%s' source='%s' currentline=%d nups=%d linedefined=%d lastlinedefined=%d short_src='%s' i_ci=%d"), \ - &ld, ld.event, lua2wx(ld.name).c_str(), lua2wx(ld.namewhat).c_str(), lua2wx(ld.what).c_str(), lua2wx(ld.source).c_str(), ld.currentline, ld.nups, ld.linedefined, ld.lastlinedefined, lua2wx(ld.short_src).c_str(), ld.i_ci) - - // ---------------------------------------------------------------------------- // wxLuaDebugItem --- 22,25 ---- *************** *** 61,64 **** --- 56,60 ---- public: wxLuaDebugDataRefData() : m_dataArray(wxLuaDebugData::SortFunction) {} + virtual ~wxLuaDebugDataRefData() { *************** *** 162,166 **** if (lua_getinfo(L, "Sln", &luaDebug)) { ! //wxPrintf(wxString(lua_Debug_to_String(luaDebug) + wxT("\n")).c_str()); // skip stack frames that do not have line number, always add first --- 158,162 ---- if (lua_getinfo(L, "Sln", &luaDebug)) { ! //wxPrintf(wxString(lua_Debug_to_wxString(luaDebug) + wxT("\n")).c_str()); // skip stack frames that do not have line number, always add first *************** *** 206,210 **** while (!name.IsEmpty()) { ! //wxPrintf(wxString(lua_Debug_to_String(luaDebug) + wxT(" lua_getlocal :") + name + wxT("\n")).c_str()); int wxl_type = WXLUAARG_None; --- 202,206 ---- while (!name.IsEmpty()) { ! //wxPrintf(wxString(lua_Debug_to_wxString(luaDebug) + wxT(" lua_getlocal :") + name + wxT("\n")).c_str()); int wxl_type = WXLUAARG_None; *************** *** 227,230 **** --- 223,228 ---- references.Add(nRef); } + else + lua_pop(L, 1); } else *************** *** 318,327 **** } ! int wxLuaDebugData::GetTypeValue(const wxLuaState& wxlState, int index, int* wxl_type_, wxString& value) { wxCHECK_MSG(wxlState.Ok(), 0, wxT("Invalid wxLuaState")); lua_State* L = wxlState.GetLuaState(); ! int l_type = lua_type(L, index); int wxl_type = wxlua_getwxluatype(l_type); --- 316,325 ---- } ! int wxLuaDebugData::GetTypeValue(const wxLuaState& wxlState, int stack_idx, int* wxl_type_, wxString& value) { wxCHECK_MSG(wxlState.Ok(), 0, wxT("Invalid wxLuaState")); lua_State* L = wxlState.GetLuaState(); ! int l_type = lua_type(L, stack_idx); int wxl_type = wxlua_getwxluatype(l_type); *************** *** 337,377 **** case LUA_TBOOLEAN: ! value = MakeBoolean(lua_toboolean(L, index)); break; case LUA_TLIGHTUSERDATA: ! value = GetUserDataInfo(wxlState, index, false); break; case LUA_TNUMBER: ! value = MakeNumber(lua_tonumber(L, index)); break; case LUA_TSTRING: ! value = lua2wx(lua_tostring(L, index)); break; case LUA_TTABLE: ! value = GetTableInfo(wxlState, index); break; case LUA_TFUNCTION: ! if (lua_iscfunction(L, index)) { wxl_type = WXLUAARG_CFunction; ! value.Printf(wxT("%p"), lua_tocfunction(L, index)); } else { ! value.Printf(wxT("%p"), lua_topointer(L, index)); } break; case LUA_TUSERDATA: ! value = GetUserDataInfo(wxlState, index, true); break; case LUA_TTHREAD: ! value.Printf(wxT("%p"), lua_topointer(L, index)); break; --- 335,375 ---- case LUA_TBOOLEAN: ! value = MakeBoolean(lua_toboolean(L, stack_idx)); break; case LUA_TLIGHTUSERDATA: ! value = GetUserDataInfo(wxlState, stack_idx, false); break; case LUA_TNUMBER: ! value = MakeNumber(lua_tonumber(L, stack_idx)); break; case LUA_TSTRING: ! value = lua2wx(lua_tostring(L, stack_idx)); break; case LUA_TTABLE: ! value = GetTableInfo(wxlState, stack_idx); break; case LUA_TFUNCTION: ! if (lua_iscfunction(L, stack_idx)) { wxl_type = WXLUAARG_CFunction; ! value.Printf(wxT("%p"), lua_tocfunction(L, stack_idx)); } else { ! value.Printf(wxT("%p"), lua_topointer(L, stack_idx)); } break; case LUA_TUSERDATA: ! value = GetUserDataInfo(wxlState, stack_idx, true); break; case LUA_TTHREAD: ! value.Printf(wxT("%p"), lua_topointer(L, stack_idx)); break; *************** *** 400,411 **** } ! wxString wxLuaDebugData::GetTableInfo(const wxLuaState& wxlState, int index) { wxCHECK_MSG(wxlState.Ok(), wxEmptyString, wxT("Invalid wxLuaState")); lua_State* L = wxlState.GetLuaState(); ! int nTag = wxluaT_tag(L, index); ! int nItems = luaL_getn(L, index); ! const void *pItem = lua_topointer(L, index); wxString s = wxString::Format(wxT("%p"), pItem); --- 398,409 ---- } ! wxString wxLuaDebugData::GetTableInfo(const wxLuaState& wxlState, int stack_idx) { wxCHECK_MSG(wxlState.Ok(), wxEmptyString, wxT("Invalid wxLuaState")); lua_State* L = wxlState.GetLuaState(); ! int nTag = wxluaT_tag(L, stack_idx); ! int nItems = luaL_getn(L, stack_idx); ! const void *pItem = lua_topointer(L, stack_idx); wxString s = wxString::Format(wxT("%p"), pItem); *************** *** 420,424 **** } ! wxString wxLuaDebugData::GetUserDataInfo(const wxLuaState& wxlState_, int index, bool full) { wxCHECK_MSG(wxlState_.Ok(), wxEmptyString, wxT("Invalid wxLuaState")); --- 418,422 ---- } ! wxString wxLuaDebugData::GetUserDataInfo(const wxLuaState& wxlState_, int stack_idx, bool full) { wxCHECK_MSG(wxlState_.Ok(), wxEmptyString, wxT("Invalid wxLuaState")); *************** *** 426,434 **** lua_State* L = wxlState.GetLuaState(); ! wxString s = wxString::Format(wxT("%p"), lua_touserdata(L, index)); if (!full) { ! void* udata = lua_touserdata(L, index); // Convert our known keys to something more readable --- 424,432 ---- lua_State* L = wxlState.GetLuaState(); ! wxString s = wxString::Format(wxT("%p"), lua_touserdata(L, stack_idx)); if (!full) { ! void* udata = lua_touserdata(L, stack_idx); // Convert our known keys to something more readable *************** *** 453,457 **** else // is full userdata { ! int nTag = wxluaT_tag(L, index); if (nTag != WXLUA_NOTAG) --- 451,455 ---- else // is full userdata { ! int nTag = wxluaT_tag(L, stack_idx); if (nTag != WXLUA_NOTAG) |