From ae23155b6b729100d1606a596d57ee354070c558 Mon Sep 17 00:00:00 2001 From: Petr G Date: Sat, 11 Jun 2016 03:25:32 +0300 Subject: [PATCH] Fix if getmetatable(table).__index type is a function. This will execute it and we dont want such behavor --- ViragDevTool.lua | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/ViragDevTool.lua b/ViragDevTool.lua index 11367b5..30078e1 100644 --- a/ViragDevTool.lua +++ b/ViragDevTool.lua @@ -412,13 +412,17 @@ function ViragDevTool:ExpandCell(info) if mt then nodeList[counter] = self.list:NewNode(mt.__index, self.METATABLE_NAME, padding, info) else - nodeList[counter] = self.list:NewNode(v, self.METATABLE_NAME .." not found for " ..tostring(k), padding, info) + nodeList[counter] = self.list:NewNode(v, self.METATABLE_NAME .. " not found for " .. tostring(k), padding, info) end end counter = counter + 1 end + if type(info.value) == "table" and getmetatable(info.value) then + nodeList[counter] = self.list:NewNode(getmetatable(info.value), self.METATABLE_NAME, padding, info) + end + table.sort(nodeList, self:SortFnForCells(nodeList)) self.list:AddNodesAfter(nodeList, info) @@ -496,6 +500,7 @@ function ViragDevTool:ForceUpdateMainTableUI() end function ViragDevTool:UpdateMainTableUI(force) + if not force then self:UpdateMainTableUIOptimized() return @@ -802,7 +807,7 @@ function ViragDevTool:ProcessCallFunctionData(ok, info, parent, args, results) local padding = info.padding + 1 --constract collored full function call name - local fnNameWitArgs = C.white .. info.name ..C.lightblue .. "(" .. self:argstostring(args) .. ")" .. C.white + local fnNameWitArgs = C.white .. info.name .. C.lightblue .. "(" .. self:argstostring(args) .. ")" .. C.white fnNameWitArgs = parent and C.gray .. parent.name .. ":" .. fnNameWitArgs or fnNameWitArgs local returnFormatedStr = "" @@ -1015,8 +1020,8 @@ function ViragDevTool:ActivateLogFunctionCalls(info) local result = { savedOldFn(...) } local args = { ... } - local fnNameWitArgs = ViragDevTool.colors.lightgreen .. fnName .. - ViragDevTool.colors.white.. "(" .. self:argstostring(args) .. ")".. + local fnNameWitArgs = ViragDevTool.colors.lightgreen .. fnName .. + ViragDevTool.colors.white .. "(" .. self:argstostring(args) .. ")" .. ViragDevTool.colors.lightblue ViragDevTool_AddData({ @@ -1246,29 +1251,35 @@ end function ViragDevTool:GetObjectTypeFromWoWAPI(value) - if ACP and value == ACP.L then return end --todo fix this later throws exception - - if type(value) == "table" and value.GetObjectType and value.IsForbidden then - local ok, forbidden = pcall(value.IsForbidden, value) - if ok and not forbidden then + if type(value) == "table" then + -- FIX if __index is function we dont want to execute it + -- Example in if ACP and value == ACP.L then return end + local mt = getmetatable(value) + if mt and type(mt.__index) == "function" then return end + + if value.GetObjectType and value.IsForbidden then + local ok, forbidden = pcall(value.IsForbidden, value) + if ok and not forbidden then - local ok, result = pcall(value.GetObjectType, value) + local ok, result = pcall(value.GetObjectType, value) - if ok and value.GetName then - local okName, resultName = pcall(value.GetName, value) + if ok and value.GetName then + local okName, resultName = pcall(value.GetName, value) - if okName and resultName then - return result, resultName + if okName and resultName then + return result, resultName + end end - end - if ok then - return result + if ok then + return result + end end end end end + function ViragDevTool:argstostring(args) local strArgs = "" local found = false -- 1.7.9.5