""" LLDB Formatters for LLVM data types for use in the swift project. Load into LLDB with 'command script import /path/to/lldbDataFormatters.py' """ import sys def __lldb_init_module(debugger, internal_dict): tName = 'lldbSwiftDataFormatters.SmallBitVectorSummaryProvider' debugger.HandleCommand('type summary add -w llvm ' '-F %s -x "^llvm::SmallBitVector$"' % tName) def SmallBitVectorSummaryProvider(valobj, internal_dict): underlyingValue = valobj.GetChildMemberWithName('X').GetValueAsUnsigned() numBaseBits = 32 is64Bit = sys.maxsize > 2**32 if is64Bit: numBaseBits = 64 smallNumRawBits = numBaseBits - 1 smallNumSizeBits = None if numBaseBits == 32: smallNumSizeBits = 5 elif numBaseBits == 64: smallNumSizeBits = 6 else: smallNumSizeBits = smallNumRawBits smallNumDataBits = smallNumRawBits - smallNumSizeBits # If our underlying value is not small, print we can not dump large values. isSmallMask = 1 if (underlyingValue & isSmallMask) == 0: return '' smallRawBits = underlyingValue >> 1 smallSize = smallRawBits >> smallNumDataBits bits = smallRawBits & ((1 << (smallSize + 1)) - 1) res = "[" for i in reversed(range(0, smallSize)): if bool(bits & (1 << i)): res += '1' else: res += '0' res += "]" return res