Logging for data formatters.

llvm-svn: 153878
This commit is contained in:
Enrico Granata
2012-04-02 16:39:29 +00:00
parent 73223bbd0a
commit 247bd419ce
17 changed files with 352 additions and 3 deletions

View File

@@ -10,20 +10,25 @@ import lldb
import ctypes
import objc_runtime
import metrics
import Logger
# first define some utility functions
def byte_index(abs_pos):
logger = Logger.Logger()
return abs_pos/8
def bit_index(abs_pos):
logger = Logger.Logger()
return abs_pos & 7
def get_bit(byte,index):
logger = Logger.Logger()
if index < 0 or index > 7:
return None
return (byte >> (7-index)) & 1
def grab_array_item_data(pointer,index):
logger = Logger.Logger()
return pointer.GetPointeeData(index,1)
statistics = metrics.Metrics()
@@ -37,10 +42,12 @@ statistics.add_metric('code_notrun')
# obey the interface specification for synthetic children providers
class CFBitVectorKnown_SummaryProvider:
def adjust_for_architecture(self):
logger = Logger.Logger()
self.uiint_size = self.sys_params.types_cache.NSUInteger.GetByteSize()
pass
def __init__(self, valobj, params):
logger = Logger.Logger()
self.valobj = valobj;
self.sys_params = params
if not(self.sys_params.types_cache.NSUInteger):
@@ -53,6 +60,7 @@ class CFBitVectorKnown_SummaryProvider:
self.update();
def update(self):
logger = Logger.Logger()
self.adjust_for_architecture();
# we skip the CFRuntimeBase
@@ -61,6 +69,7 @@ class CFBitVectorKnown_SummaryProvider:
# that wraps the individual bits
def contents(self):
logger = Logger.Logger()
count_vo = self.valobj.CreateChildAtOffset("count",self.sys_params.cfruntime_size,
self.sys_params.types_cache.NSUInteger)
count = count_vo.GetValueAsUnsigned(0)
@@ -100,18 +109,22 @@ class CFBitVectorUnknown_SummaryProvider:
pass
def __init__(self, valobj, params):
logger = Logger.Logger()
self.valobj = valobj;
self.sys_params = params
self.update();
def update(self):
logger = Logger.Logger()
self.adjust_for_architecture();
def contents(self):
logger = Logger.Logger()
return '<unable to summarize this CFBitVector>'
def GetSummary_Impl(valobj):
logger = Logger.Logger()
global statistics
class_data,wrapper = objc_runtime.Utilities.prepare_class_detection(valobj,statistics)
if wrapper:
@@ -119,6 +132,9 @@ def GetSummary_Impl(valobj):
name_string = class_data.class_name()
actual_name = name_string
logger >> "name string got was " + str(name_string) + " but actual name is " + str(actual_name)
if class_data.is_cftype():
# CFBitVectorRef does not expose an actual NSWrapper type, so we have to check that this is
# an NSCFType and then check we are a pointer-to CFBitVectorRef
@@ -140,6 +156,7 @@ def GetSummary_Impl(valobj):
return wrapper;
def CFBitVector_SummaryProvider (valobj,dict):
logger = Logger.Logger()
provider = GetSummary_Impl(valobj);
if provider != None:
if isinstance(provider,objc_runtime.SpecialSituation_Description):
@@ -148,6 +165,7 @@ def CFBitVector_SummaryProvider (valobj,dict):
summary = provider.contents();
except:
summary = None
logger >> "summary got from provider: " + str(summary)
if summary == None or summary == '':
summary = '<variable is not CFBitVector>'
return summary