diff --git a/lldb/bindings/interface/SBAddressExtensions.i b/lldb/bindings/interface/SBAddressExtensions.i index 9aeba3ab45ac..b94ceaddd6af 100644 --- a/lldb/bindings/interface/SBAddressExtensions.i +++ b/lldb/bindings/interface/SBAddressExtensions.i @@ -2,9 +2,9 @@ STRING_EXTENSION_OUTSIDE(SBAddress) %extend lldb::SBAddress { #ifdef SWIGPYTHON - // operator== is a free function, which swig does not handle, so we inject - // our own equality operator here %pythoncode%{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here def __eq__(self, other): return not self.__ne__(other) %} diff --git a/lldb/bindings/interface/SBBreakpointListExtensions.i b/lldb/bindings/interface/SBBreakpointListExtensions.i new file mode 100644 index 000000000000..adde0c678f49 --- /dev/null +++ b/lldb/bindings/interface/SBBreakpointListExtensions.i @@ -0,0 +1,13 @@ +%extend lldb::SBBreakpointList { +#ifdef SWIGPYTHON + %pythoncode%{ + def __len__(self): + '''Return the number of breakpoints in a lldb.SBBreakpointList object.''' + return self.GetSize() + + def __iter__(self): + '''Iterate over all breakpoints in a lldb.SBBreakpointList object.''' + return lldb_iter(self, 'GetSize', 'GetBreakpointAtIndex') + %} +#endif +} diff --git a/lldb/bindings/interface/SBBreakpointLocationExtensions.i b/lldb/bindings/interface/SBBreakpointLocationExtensions.i index e076499fad64..40027790a5e8 100644 --- a/lldb/bindings/interface/SBBreakpointLocationExtensions.i +++ b/lldb/bindings/interface/SBBreakpointLocationExtensions.i @@ -1 +1,12 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBBreakpointLocation, lldb::eDescriptionLevelFull) + +%extend lldb::SBBreakpointLocation { +#ifdef SWIGPYTHON + %pythoncode%{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + %} +#endif +} diff --git a/lldb/bindings/interface/SBBreakpointNameExtensions.i b/lldb/bindings/interface/SBBreakpointNameExtensions.i index 19ecb7e818b8..2cd47a4a3223 100644 --- a/lldb/bindings/interface/SBBreakpointNameExtensions.i +++ b/lldb/bindings/interface/SBBreakpointNameExtensions.i @@ -1 +1,12 @@ STRING_EXTENSION_OUTSIDE(SBBreakpointName) + +%extend lldb::SBBreakpointName { +#ifdef SWIGPYTHON + %pythoncode%{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + %} +#endif +} diff --git a/lldb/bindings/interface/SBBroadcastExtensions.i b/lldb/bindings/interface/SBBroadcastExtensions.i new file mode 100644 index 000000000000..3a7916ee9e2a --- /dev/null +++ b/lldb/bindings/interface/SBBroadcastExtensions.i @@ -0,0 +1,10 @@ +%extend lldb::SBBroadcaster { +#ifdef SWIGPYTHON + %pythoncode%{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + %} +#endif +} diff --git a/lldb/bindings/interface/SBCompileUnitExtensions.i b/lldb/bindings/interface/SBCompileUnitExtensions.i index c602e9c65501..de6c54cbaf3b 100644 --- a/lldb/bindings/interface/SBCompileUnitExtensions.i +++ b/lldb/bindings/interface/SBCompileUnitExtensions.i @@ -3,6 +3,11 @@ STRING_EXTENSION_OUTSIDE(SBCompileUnit) %extend lldb::SBCompileUnit { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + def __iter__(self): '''Iterate over all line entries in a lldb.SBCompileUnit object.''' return lldb_iter(self, 'GetNumLineEntries', 'GetLineEntryAtIndex') diff --git a/lldb/bindings/interface/SBDataExtensions.i b/lldb/bindings/interface/SBDataExtensions.i index cf6f40a83fa6..d980e79221c6 100644 --- a/lldb/bindings/interface/SBDataExtensions.i +++ b/lldb/bindings/interface/SBDataExtensions.i @@ -3,6 +3,8 @@ STRING_EXTENSION_OUTSIDE(SBData) %extend lldb::SBData { #ifdef SWIGPYTHON %pythoncode %{ + def __len__(self): + return self.GetByteSize() class read_data_helper: def __init__(self, sbdata, readerfunc, item_size): diff --git a/lldb/bindings/interface/SBDeclarationExtensions.i b/lldb/bindings/interface/SBDeclarationExtensions.i index 9e69dc9ccb58..79d25c16c63d 100644 --- a/lldb/bindings/interface/SBDeclarationExtensions.i +++ b/lldb/bindings/interface/SBDeclarationExtensions.i @@ -3,6 +3,11 @@ STRING_EXTENSION_OUTSIDE(SBDeclaration) %extend lldb::SBDeclaration { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + file = property(GetFileSpec, None, doc='''A read only property that returns an lldb object that represents the file (lldb.SBFileSpec) for this line entry.''') line = property(GetLine, None, doc='''A read only property that returns the 1 based line number for this line entry, a return value of zero indicates that no line information is available.''') column = property(GetColumn, None, doc='''A read only property that returns the 1 based column number for this line entry, a return value of zero indicates that no column information is available.''') diff --git a/lldb/bindings/interface/SBErrorExtensions.i b/lldb/bindings/interface/SBErrorExtensions.i index bf7764da5b8c..d2bdc40b9938 100644 --- a/lldb/bindings/interface/SBErrorExtensions.i +++ b/lldb/bindings/interface/SBErrorExtensions.i @@ -3,6 +3,9 @@ STRING_EXTENSION_OUTSIDE(SBError) %extend lldb::SBError { #ifdef SWIGPYTHON %pythoncode %{ + def __int__(self): + return self.GetError() + value = property(GetError, None, doc='''A read only property that returns the same result as GetError().''') fail = property(Fail, None, doc='''A read only property that returns the same result as Fail().''') success = property(Success, None, doc='''A read only property that returns the same result as Success().''') diff --git a/lldb/bindings/interface/SBFileSpecExtensions.i b/lldb/bindings/interface/SBFileSpecExtensions.i index 446e900054a1..e2c81e6b0f8b 100644 --- a/lldb/bindings/interface/SBFileSpecExtensions.i +++ b/lldb/bindings/interface/SBFileSpecExtensions.i @@ -3,6 +3,11 @@ STRING_EXTENSION_OUTSIDE(SBFileSpec) %extend lldb::SBFileSpec { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + fullpath = property(str, None, doc='''A read only property that returns the fullpath as a python string.''') basename = property(GetFilename, None, doc='''A read only property that returns the path basename as a python string.''') dirname = property(GetDirectory, None, doc='''A read only property that returns the path directory name as a python string.''') diff --git a/lldb/bindings/interface/SBFileSpecListExtensions.i b/lldb/bindings/interface/SBFileSpecListExtensions.i new file mode 100644 index 000000000000..1e7b897a08d9 --- /dev/null +++ b/lldb/bindings/interface/SBFileSpecListExtensions.i @@ -0,0 +1,15 @@ +STRING_EXTENSION_OUTSIDE(SBFileSpecList) + +%extend lldb::SBFileSpecList { +#ifdef SWIGPYTHON + %pythoncode%{ + def __len__(self): + '''Return the number of FileSpec in a lldb.SBFileSpecList object.''' + return self.GetSize() + + def __iter__(self): + '''Iterate over all FileSpecs in a lldb.SBFileSpecList object.''' + return lldb_iter(self, 'GetSize', 'GetFileSpecAtIndex') + %} +#endif +} diff --git a/lldb/bindings/interface/SBFrameExtensions.i b/lldb/bindings/interface/SBFrameExtensions.i index e89e207ddb1e..43b22ed7a6b3 100644 --- a/lldb/bindings/interface/SBFrameExtensions.i +++ b/lldb/bindings/interface/SBFrameExtensions.i @@ -3,6 +3,17 @@ STRING_EXTENSION_OUTSIDE(SBFrame) %extend lldb::SBFrame { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + + def __int__(self): + return self.GetFrameID() + + def __hex__(self): + return self.GetPC() + def get_all_variables(self): return self.GetVariables(True,True,True,True) diff --git a/lldb/bindings/interface/SBFunctionExtensions.i b/lldb/bindings/interface/SBFunctionExtensions.i index 4efe9cf20946..c64363c9f649 100644 --- a/lldb/bindings/interface/SBFunctionExtensions.i +++ b/lldb/bindings/interface/SBFunctionExtensions.i @@ -3,6 +3,11 @@ STRING_EXTENSION_OUTSIDE(SBFunction) %extend lldb::SBFunction { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + def get_instructions_from_current_target (self): return self.GetInstructions (target) diff --git a/lldb/bindings/interface/SBInstructionExtensions.i b/lldb/bindings/interface/SBInstructionExtensions.i index bbbf1a726f71..6ab064503017 100644 --- a/lldb/bindings/interface/SBInstructionExtensions.i +++ b/lldb/bindings/interface/SBInstructionExtensions.i @@ -3,6 +3,14 @@ STRING_EXTENSION_OUTSIDE(SBInstruction) %extend lldb::SBInstruction { #ifdef SWIGPYTHON %pythoncode %{ + def __hex__(self): + """ Returns the address of the instruction. """ + return self.GetAddress() + + def __len__(self): + """ Returns the size of the instruction. """ + return self.GetByteSize() + def __mnemonic_property__ (self): return self.GetMnemonic (target) def __operands_property__ (self): diff --git a/lldb/bindings/interface/SBLineEntryExtensions.i b/lldb/bindings/interface/SBLineEntryExtensions.i index f2d02dea144b..347406382b8f 100644 --- a/lldb/bindings/interface/SBLineEntryExtensions.i +++ b/lldb/bindings/interface/SBLineEntryExtensions.i @@ -3,6 +3,16 @@ STRING_EXTENSION_OUTSIDE(SBLineEntry) %extend lldb::SBLineEntry { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + + def __int__(self): + return self.GetLine() + + def __hex__(self): + return self.GetStartAddress() file = property(GetFileSpec, None, doc='''A read only property that returns an lldb object that represents the file (lldb.SBFileSpec) for this line entry.''') line = property(GetLine, None, doc='''A read only property that returns the 1 based line number for this line entry, a return value of zero indicates that no line information is available.''') column = property(GetColumn, None, doc='''A read only property that returns the 1 based column number for this line entry, a return value of zero indicates that no column information is available.''') diff --git a/lldb/bindings/interface/SBMemoryRegionInfoExtensions.i b/lldb/bindings/interface/SBMemoryRegionInfoExtensions.i index 64a12187557f..717622ade808 100644 --- a/lldb/bindings/interface/SBMemoryRegionInfoExtensions.i +++ b/lldb/bindings/interface/SBMemoryRegionInfoExtensions.i @@ -1 +1,18 @@ STRING_EXTENSION_OUTSIDE(SBMemoryRegionInfo) + +%extend lldb::SBMemoryRegionInfo { +#ifdef SWIGPYTHON + %pythoncode%{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + + def __hex__(self): + return self.GetRegionBase() + + def __len__(self): + return self.GetRegionEnd() - self.GetRegionBase() + %} +#endif +} diff --git a/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i b/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i new file mode 100644 index 000000000000..49d49110de7f --- /dev/null +++ b/lldb/bindings/interface/SBMemoryRegionInfoListExtensions.i @@ -0,0 +1,13 @@ +%extend lldb::SBMemoryRegionInfoList { +#ifdef SWIGPYTHON + %pythoncode%{ + def __len__(self): + '''Return the number of memory region info in a lldb.SBMemoryRegionInfoList object.''' + return self.GetSize() + + def __iter__(self): + '''Iterate over all the memory regions in a lldb.SBMemoryRegionInfoList object.''' + return lldb_iter(self, 'GetSize', 'GetMemoryRegionAtIndex') + %} +#endif +} diff --git a/lldb/bindings/interface/SBModuleExtensions.i b/lldb/bindings/interface/SBModuleExtensions.i index 4f35e433bf92..ded1adae3e6a 100644 --- a/lldb/bindings/interface/SBModuleExtensions.i +++ b/lldb/bindings/interface/SBModuleExtensions.i @@ -28,6 +28,11 @@ STRING_EXTENSION_OUTSIDE(SBModule) %extend lldb::SBModule { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + def __len__(self): '''Return the number of symbols in a lldb.SBModule object.''' return self.GetNumSymbols() diff --git a/lldb/bindings/interface/SBModuleSpecListExtensions.i b/lldb/bindings/interface/SBModuleSpecListExtensions.i new file mode 100644 index 000000000000..ab51dc4498ad --- /dev/null +++ b/lldb/bindings/interface/SBModuleSpecListExtensions.i @@ -0,0 +1,16 @@ +STRING_EXTENSION_OUTSIDE(SBModuleSpecList) + +%extend lldb::SBModuleSpecList { +#ifdef SWIGPYTHON + %pythoncode%{ + def __len__(self): + '''Return the number of ModuleSpec in a lldb.SBModuleSpecList object.''' + return self.GetSize() + + def __iter__(self): + '''Iterate over all ModuleSpecs in a lldb.SBModuleSpecList object.''' + return lldb_iter(self, 'GetSize', 'GetSpecAtIndex') + %} +#endif +} + diff --git a/lldb/bindings/interface/SBProcessDocstrings.i b/lldb/bindings/interface/SBProcessDocstrings.i index dba7465c8060..3ee17e0c7f2f 100644 --- a/lldb/bindings/interface/SBProcessDocstrings.i +++ b/lldb/bindings/interface/SBProcessDocstrings.i @@ -209,6 +209,10 @@ SBProcess supports thread iteration. For example (from test/lldbutil.py), :: lldb.LLDB_INVALID_ADDRESS if the allocation failed." ) lldb::SBProcess::AllocateMemory; +%feature("autodoc", "Get default process broadcaster class name (lldb.process)." +) lldb::SBProcess::GetBroadcasterClass; + + %feature("autodoc", " Deallocates the block of memory (previously allocated using AllocateMemory) given in the argument." diff --git a/lldb/bindings/interface/SBProcessExtensions.i b/lldb/bindings/interface/SBProcessExtensions.i index fe9e6415b618..5fa939f6aacf 100644 --- a/lldb/bindings/interface/SBProcessExtensions.i +++ b/lldb/bindings/interface/SBProcessExtensions.i @@ -79,6 +79,8 @@ STRING_EXTENSION_OUTSIDE(SBProcess) '''Return the number of threads in a lldb.SBProcess object.''' return self.GetNumThreads() + def __int__(self): + return self.GetProcessID() threads = property(get_process_thread_list, None, doc='''A read only property that returns a list() of lldb.SBThread objects for this process.''') thread = property(get_threads_access_object, None, doc='''A read only property that returns an object that can access threads by thread index (thread = lldb.process.thread[12]).''') diff --git a/lldb/bindings/interface/SBQueueItemExtensions.i b/lldb/bindings/interface/SBQueueItemExtensions.i new file mode 100644 index 000000000000..277bba278fcb --- /dev/null +++ b/lldb/bindings/interface/SBQueueItemExtensions.i @@ -0,0 +1,8 @@ +%extend lldb::SBQueueItem { +#ifdef SWIGPYTHON + %pythoncode%{ + def __hex__(self): + return self.GetAddress() + %} +#endif +} diff --git a/lldb/bindings/interface/SBScriptObjectExtensions.i b/lldb/bindings/interface/SBScriptObjectExtensions.i index 279854c3d73c..507c11a91d34 100644 --- a/lldb/bindings/interface/SBScriptObjectExtensions.i +++ b/lldb/bindings/interface/SBScriptObjectExtensions.i @@ -1,6 +1,11 @@ %extend lldb::SBScriptObject { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + ptr = property(GetPointer, None, doc='''A read only property that returns the underlying script object.''') lang = property(GetLanguage, None, doc='''A read only property that returns the script language associated with with this script object.''') %} diff --git a/lldb/bindings/interface/SBSectionExtensions.i b/lldb/bindings/interface/SBSectionExtensions.i index 47b63c520d0f..369a635d76ab 100644 --- a/lldb/bindings/interface/SBSectionExtensions.i +++ b/lldb/bindings/interface/SBSectionExtensions.i @@ -3,6 +3,11 @@ STRING_EXTENSION_OUTSIDE(SBSection) %extend lldb::SBSection { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + def __iter__(self): '''Iterate over all subsections in a lldb.SBSection object.''' return lldb_iter(self, 'GetNumSubSections', 'GetSubSectionAtIndex') diff --git a/lldb/bindings/interface/SBStreamExtensions.i b/lldb/bindings/interface/SBStreamExtensions.i index e52b2dd8d76b..6f1dfa5e8fdd 100644 --- a/lldb/bindings/interface/SBStreamExtensions.i +++ b/lldb/bindings/interface/SBStreamExtensions.i @@ -1,4 +1,11 @@ %extend lldb::SBStream { +#ifdef SWIGPYTHON + %pythoncode%{ + def __len__(self): + return self.GetSize() + %} +#endif + %feature("autodoc", "DEPRECATED, use RedirectToFile") RedirectToFileHandle; void RedirectToFileHandle (lldb::FileSP file, bool transfer_fh_ownership) { diff --git a/lldb/bindings/interface/SBStructuredDataExtensions.i b/lldb/bindings/interface/SBStructuredDataExtensions.i new file mode 100644 index 000000000000..ca3d0966f9fc --- /dev/null +++ b/lldb/bindings/interface/SBStructuredDataExtensions.i @@ -0,0 +1,18 @@ +STRING_EXTENSION_OUTSIDE(SBStructuredData) + +%extend lldb::SBStructuredData { +#ifdef SWIGPYTHON + %pythoncode%{ + def __int__(self): + return self.GetSignedInteger() + + def __len__(self): + '''Return the number of element in a lldb.SBStructuredData object.''' + return self.GetSize() + + def __iter__(self): + '''Iterate over all the elements in a lldb.SBStructuredData object.''' + return lldb_iter(self, 'GetSize', 'GetItemAtIndex') + %} +#endif +} diff --git a/lldb/bindings/interface/SBSymbolExtensions.i b/lldb/bindings/interface/SBSymbolExtensions.i index 249f3577bc76..47f17ff6a4a7 100644 --- a/lldb/bindings/interface/SBSymbolExtensions.i +++ b/lldb/bindings/interface/SBSymbolExtensions.i @@ -3,6 +3,14 @@ STRING_EXTENSION_OUTSIDE(SBSymbol) %extend lldb::SBSymbol { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + + def __hex__(self): + return self.GetStartAddress() + def get_instructions_from_current_target (self): return self.GetInstructions (target) diff --git a/lldb/bindings/interface/SBTargetExtensions.i b/lldb/bindings/interface/SBTargetExtensions.i index 02c40b09c857..c80dadfc0c5c 100644 --- a/lldb/bindings/interface/SBTargetExtensions.i +++ b/lldb/bindings/interface/SBTargetExtensions.i @@ -32,6 +32,11 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTarget, lldb::eDescriptionLevelBrief) %extend lldb::SBTarget { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + class modules_access(object): '''A helper object that will lazily hand out lldb.SBModule objects for a target when supplied an index, or by full or partial path.''' def __init__(self, sbtarget): diff --git a/lldb/bindings/interface/SBThreadCollectionExtensions.i b/lldb/bindings/interface/SBThreadCollectionExtensions.i new file mode 100644 index 000000000000..39a45a6f1bb2 --- /dev/null +++ b/lldb/bindings/interface/SBThreadCollectionExtensions.i @@ -0,0 +1,14 @@ +%extend lldb::SBThreadCollection { +#ifdef SWIGPYTHON + %pythoncode%{ + + def __iter__(self): + '''Iterate over all threads in a lldb.SBThreadCollection object.''' + return lldb_iter(self, 'GetSize', 'GetThreadAtIndex') + + def __len__(self): + '''Return the number of threads in a lldb.SBThreadCollection object.''' + return self.GetSize() + %} +#endif +} diff --git a/lldb/bindings/interface/SBThreadExtensions.i b/lldb/bindings/interface/SBThreadExtensions.i index 54bc10551351..bfcc4d17e8f8 100644 --- a/lldb/bindings/interface/SBThreadExtensions.i +++ b/lldb/bindings/interface/SBThreadExtensions.i @@ -3,6 +3,11 @@ STRING_EXTENSION_OUTSIDE(SBThread) %extend lldb::SBThread { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + def __iter__(self): '''Iterate over all frames in a lldb.SBThread object.''' return lldb_iter(self, 'GetNumFrames', 'GetFrameAtIndex') diff --git a/lldb/bindings/interface/SBTypeCategoryExtensions.i b/lldb/bindings/interface/SBTypeCategoryExtensions.i index fb93af5c0ded..fdd4825e3457 100644 --- a/lldb/bindings/interface/SBTypeCategoryExtensions.i +++ b/lldb/bindings/interface/SBTypeCategoryExtensions.i @@ -3,6 +3,11 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeCategory, lldb::eDescriptionLevelBrief) %extend lldb::SBTypeCategory { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + class formatters_access_class(object): '''A helper object that will lazily hand out formatters for a specific category.''' diff --git a/lldb/bindings/interface/SBTypeEnumMemberExtensions.i b/lldb/bindings/interface/SBTypeEnumMemberExtensions.i index 3b0154f40727..9f0e16afcfd8 100644 --- a/lldb/bindings/interface/SBTypeEnumMemberExtensions.i +++ b/lldb/bindings/interface/SBTypeEnumMemberExtensions.i @@ -2,6 +2,14 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeEnumMember, lldb::eDescriptionLevelBrief) %extend lldb::SBTypeEnumMember { #ifdef SWIGPYTHON %pythoncode %{ + def __iter__(self): + '''Iterate over all members in a lldb.SBTypeEnumMemberList object.''' + return lldb_iter(self, 'GetSize', 'GetTypeEnumMemberAtIndex') + + def __len__(self): + '''Return the number of members in a lldb.SBTypeEnumMemberList object.''' + return self.GetSize() + name = property(GetName, None, doc='''A read only property that returns the name for this enum member as a string.''') type = property(GetType, None, doc='''A read only property that returns an lldb object that represents the type (lldb.SBType) for this enum member.''') signed = property(GetValueAsSigned, None, doc='''A read only property that returns the value of this enum member as a signed integer.''') diff --git a/lldb/bindings/interface/SBTypeExtensions.i b/lldb/bindings/interface/SBTypeExtensions.i index f40ca80e58c0..9c7d61497951 100644 --- a/lldb/bindings/interface/SBTypeExtensions.i +++ b/lldb/bindings/interface/SBTypeExtensions.i @@ -2,6 +2,11 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeMember, lldb::eDescriptionLevelBrief) %extend lldb::SBTypeMember { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + name = property(GetName, None, doc='''A read only property that returns the name for this member as a string.''') type = property(GetType, None, doc='''A read only property that returns an lldb object that represents the type (lldb.SBType) for this member.''') byte_offset = property(GetOffsetInBytes, None, doc='''A read only property that returns offset in bytes for this member as an integer.''') @@ -14,6 +19,18 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeMember, lldb::eDescriptionLevelBrief) STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeMemberFunction, lldb::eDescriptionLevelBrief) +%extend lldb::SBTypeMemberFunction { +#ifdef SWIGPYTHON + %pythoncode%{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + + %} +#endif +} + STRING_EXTENSION_LEVEL_OUTSIDE(SBType, lldb::eDescriptionLevelBrief) %extend lldb::SBType { @@ -28,6 +45,14 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBType, lldb::eDescriptionLevelBrief) return template_args return None + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + + def __len__(self): + return self.GetByteSize() + module = property(GetModule, None, doc='''A read only property that returns the module in which type is defined.''') name = property(GetName, None, doc='''A read only property that returns the name for this type as a string.''') size = property(GetByteSize, None, doc='''A read only property that returns size in bytes for this type as an integer.''') @@ -121,6 +146,11 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBType, lldb::eDescriptionLevelBrief) %extend lldb::SBTypeList { #ifdef SWIGPYTHON %pythoncode%{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + def __iter__(self): '''Iterate over all types in a lldb.SBTypeList object.''' return lldb_iter(self, 'GetSize', 'GetTypeAtIndex') diff --git a/lldb/bindings/interface/SBTypeFilterExtensions.i b/lldb/bindings/interface/SBTypeFilterExtensions.i index d218ff90f920..c1d1bc19db0e 100644 --- a/lldb/bindings/interface/SBTypeFilterExtensions.i +++ b/lldb/bindings/interface/SBTypeFilterExtensions.i @@ -2,6 +2,11 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeFilter, lldb::eDescriptionLevelBrief) %extend lldb::SBTypeFilter { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + options = property(GetOptions, SetOptions) count = property(GetNumberOfExpressionPaths) %} diff --git a/lldb/bindings/interface/SBTypeFormatExtensions.i b/lldb/bindings/interface/SBTypeFormatExtensions.i index 0ea8492f8b0e..cde1d72a1ffc 100644 --- a/lldb/bindings/interface/SBTypeFormatExtensions.i +++ b/lldb/bindings/interface/SBTypeFormatExtensions.i @@ -2,6 +2,11 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeFormat, lldb::eDescriptionLevelBrief) %extend lldb::SBTypeFormat { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + format = property(GetFormat, SetFormat) options = property(GetOptions, SetOptions) %} diff --git a/lldb/bindings/interface/SBTypeNameSpecifierExtensions.i b/lldb/bindings/interface/SBTypeNameSpecifierExtensions.i index f73ac05436de..1aeb08cf0291 100644 --- a/lldb/bindings/interface/SBTypeNameSpecifierExtensions.i +++ b/lldb/bindings/interface/SBTypeNameSpecifierExtensions.i @@ -2,6 +2,11 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeNameSpecifier, lldb::eDescriptionLevelBrief %extend lldb::SBTypeNameSpecifier { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + name = property(GetName) is_regex = property(IsRegex) %} diff --git a/lldb/bindings/interface/SBTypeSummaryExtensions.i b/lldb/bindings/interface/SBTypeSummaryExtensions.i index c2abd91b0b23..e8da4c5022ef 100644 --- a/lldb/bindings/interface/SBTypeSummaryExtensions.i +++ b/lldb/bindings/interface/SBTypeSummaryExtensions.i @@ -2,6 +2,11 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeSummary, lldb::eDescriptionLevelBrief) %extend lldb::SBTypeSummary { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + options = property(GetOptions, SetOptions) is_summary_string = property(IsSummaryString) is_function_name = property(IsFunctionName) diff --git a/lldb/bindings/interface/SBTypeSyntheticExtensions.i b/lldb/bindings/interface/SBTypeSyntheticExtensions.i index f86572f9c807..cf7ab167f41c 100644 --- a/lldb/bindings/interface/SBTypeSyntheticExtensions.i +++ b/lldb/bindings/interface/SBTypeSyntheticExtensions.i @@ -2,6 +2,11 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBTypeSynthetic, lldb::eDescriptionLevelBrief) %extend lldb::SBTypeSynthetic { #ifdef SWIGPYTHON %pythoncode %{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + options = property(GetOptions, SetOptions) contains_code = property(IsClassCode, None) synthetic_data = property(GetData, None) diff --git a/lldb/bindings/interface/SBUnixSignalsExtensions.i b/lldb/bindings/interface/SBUnixSignalsExtensions.i index b8a26a3481e5..31c7351f1b5d 100644 --- a/lldb/bindings/interface/SBUnixSignalsExtensions.i +++ b/lldb/bindings/interface/SBUnixSignalsExtensions.i @@ -1,6 +1,13 @@ %extend lldb::SBUnixSignals { #ifdef SWIGPYTHON %pythoncode %{ + def __iter__(self): + '''Iterate over all signals in a lldb.SBUnixSignals object.''' + return lldb_iter(self, 'GetNumSignals', 'GetSignalAtIndex') + + def __len__(self): + return self.GetNumSignals() + def get_unix_signals_list(self): signals = [] for idx in range(0, self.GetNumSignals()): diff --git a/lldb/bindings/interface/SBValueExtensions.i b/lldb/bindings/interface/SBValueExtensions.i index 21b09ec1c8ec..bee9c27775d4 100644 --- a/lldb/bindings/interface/SBValueExtensions.i +++ b/lldb/bindings/interface/SBValueExtensions.i @@ -37,6 +37,9 @@ STRING_EXTENSION_OUTSIDE(SBValue) children.append(accessor[idx]) return children + def __hex__(self): + return self.GetAddress() + def __iter__(self): '''Iterate over all child values of a lldb.SBValue object.''' return lldb_iter(self, 'GetNumChildren', 'GetChildAtIndex') diff --git a/lldb/bindings/interface/SBWatchpointExtensions.i b/lldb/bindings/interface/SBWatchpointExtensions.i index b1154122fb6e..c18f011e3187 100644 --- a/lldb/bindings/interface/SBWatchpointExtensions.i +++ b/lldb/bindings/interface/SBWatchpointExtensions.i @@ -1 +1,18 @@ STRING_EXTENSION_LEVEL_OUTSIDE(SBWatchpoint, lldb::eDescriptionLevelVerbose) + +%extend lldb::SBWatchpoint { +#ifdef SWIGPYTHON + %pythoncode%{ + # operator== is a free function, which swig does not handle, so we inject + # our own equality operator here + def __eq__(self, other): + return not self.__ne__(other) + + def __hex__(self): + return self.GetWatchAddress() + + def __len__(self): + return self.GetWatchSize() + %} +#endif +} diff --git a/lldb/bindings/interfaces.swig b/lldb/bindings/interfaces.swig index db8eda06464c..53f8fcc8145a 100644 --- a/lldb/bindings/interfaces.swig +++ b/lldb/bindings/interfaces.swig @@ -157,8 +157,10 @@ %include "./interface/SBAddressExtensions.i" %include "./interface/SBBlockExtensions.i" %include "./interface/SBBreakpointExtensions.i" +%include "./interface/SBBreakpointListExtensions.i" %include "./interface/SBBreakpointLocationExtensions.i" %include "./interface/SBBreakpointNameExtensions.i" +%include "./interface/SBBroadcastExtensions.i" %include "./interface/SBCommandReturnObjectExtensions.i" %include "./interface/SBCompileUnitExtensions.i" %include "./interface/SBDataExtensions.i" @@ -168,27 +170,33 @@ %include "./interface/SBExecutionContextExtensions.i" %include "./interface/SBFileExtensions.i" %include "./interface/SBFileSpecExtensions.i" +%include "./interface/SBFileSpecListExtensions.i" %include "./interface/SBFrameExtensions.i" %include "./interface/SBFunctionExtensions.i" %include "./interface/SBInstructionExtensions.i" %include "./interface/SBInstructionListExtensions.i" %include "./interface/SBLineEntryExtensions.i" %include "./interface/SBMemoryRegionInfoExtensions.i" +%include "./interface/SBMemoryRegionInfoListExtensions.i" %include "./interface/SBModuleExtensions.i" %include "./interface/SBModuleSpecExtensions.i" +%include "./interface/SBModuleSpecListExtensions.i" %include "./interface/SBProcessExtensions.i" +%include "./interface/SBQueueItemExtensions.i" %include "./interface/SBScriptObjectExtensions.i" %include "./interface/SBSectionExtensions.i" %include "./interface/SBStreamExtensions.i" %include "./interface/SBStringListExtensions.i" -%include "./interface/SBSymbolExtensions.i" +%include "./interface/SBStructuredDataExtensions.i" %include "./interface/SBSymbolContextExtensions.i" %include "./interface/SBSymbolContextListExtensions.i" +%include "./interface/SBSymbolExtensions.i" %include "./interface/SBTargetExtensions.i" +%include "./interface/SBThreadCollectionExtensions.i" %include "./interface/SBThreadExtensions.i" -%include "./interface/SBTypeExtensions.i" %include "./interface/SBTypeCategoryExtensions.i" %include "./interface/SBTypeEnumMemberExtensions.i" +%include "./interface/SBTypeExtensions.i" %include "./interface/SBTypeFilterExtensions.i" %include "./interface/SBTypeFormatExtensions.i" %include "./interface/SBTypeNameSpecifierExtensions.i" diff --git a/lldb/bindings/python/python-extensions.swig b/lldb/bindings/python/python-extensions.swig index cb841af070ad..4ba1607c7090 100644 --- a/lldb/bindings/python/python-extensions.swig +++ b/lldb/bindings/python/python-extensions.swig @@ -304,8 +304,15 @@ class value_iter(object): def next(self): return self.__next__() + def __eq__(self, other): + return not self.__ne__(other) + + def __len__(self): + return self.length + def __init__(self,value): self.index = 0 + self.length = 0 self.sbvalue = value if type(self.sbvalue) is value: self.sbvalue = self.sbvalue.sbvalue @@ -546,6 +553,12 @@ class SBSyntheticValueProvider(object): def has_children(self): return False + def __len__(self): + return self.num_children() + + def __iter__(self): + '''Iterate over all children in a lldb.SBSyntheticValueProvider object.''' + return lldb_iter(self, 'num_children', 'get_child_at_index') %} diff --git a/lldb/docs/conf.py b/lldb/docs/conf.py index c5b89d6880c7..730a8608b5ba 100644 --- a/lldb/docs/conf.py +++ b/lldb/docs/conf.py @@ -43,7 +43,7 @@ automodapi_toctreedirnm = "python_api" extensions = ["sphinx.ext.todo", "sphinx.ext.mathjax", "sphinx.ext.intersphinx"] autodoc_default_options = { - "special-members": "__int__, __len__, __hex__, __oct__, __iter__", + "special-members": True } # Unless we only generate the basic manpage we need the plugin for generating @@ -170,7 +170,7 @@ html_title = "🐛 LLDB" # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -html_static_path = ["_static"] +# html_static_path = ["_static"] html_extra_path = [".htaccess"] diff --git a/lldb/docs/python_api.rst b/lldb/docs/python_api.rst index 5e465e1eae68..6a95b36161b0 100644 --- a/lldb/docs/python_api.rst +++ b/lldb/docs/python_api.rst @@ -5,94 +5,10 @@ LLDB Python API The long list of "skip" filters out several global functions that are generated by SWIG (but which are not useful as they are only the backend for their respective static functions in the classes). - Without this list .. automodapi:: lldb :no-inheritance-diagram: - :skip: SBBreakpoint_EventIsBreakpointEvent - :skip: SBBreakpoint_GetBreakpointEventTypeFromEvent - :skip: SBBreakpoint_GetBreakpointFromEvent - :skip: SBBreakpoint_GetBreakpointLocationAtIndexFromEvent - :skip: SBBreakpoint_GetNumBreakpointLocationsFromEvent - :skip: SBCommandInterpreter_EventIsCommandInterpreterEvent - :skip: SBCommandInterpreter_GetArgumentDescriptionAsCString - :skip: SBCommandInterpreter_GetArgumentTypeAsCString - :skip: SBCommandInterpreter_GetBroadcasterClass - :skip: SBCommunication_GetBroadcasterClass - :skip: SBData_CreateDataFromCString - :skip: SBData_CreateDataFromDoubleArray - :skip: SBData_CreateDataFromSInt32Array - :skip: SBData_CreateDataFromSInt64Array - :skip: SBData_CreateDataFromUInt32Array - :skip: SBData_CreateDataFromUInt64Array - :skip: SBDebugger_Create - :skip: SBDebugger_Create - :skip: SBDebugger_Destroy - :skip: SBDebugger_FindDebuggerWithID - :skip: SBDebugger_GetBuildConfiguration - :skip: SBDebugger_GetDefaultArchitecture - :skip: SBDebugger_GetInternalVariableValue - :skip: SBDebugger_GetVersionString - :skip: SBDebugger_Initialize - :skip: SBDebugger_InitializeWithErrorHandling - :skip: SBDebugger_MemoryPressureDetected - :skip: SBDebugger_SetDefaultArchitecture - :skip: SBDebugger_SetInternalVariable - :skip: SBDebugger_StateAsCString - :skip: SBDebugger_StateIsRunningState - :skip: SBDebugger_StateIsStoppedState - :skip: SBDebugger_Terminate - :skip: SBEvent_GetCStringFromEvent - :skip: SBFileSpec_ResolvePath - :skip: SBFile_MakeBorrowed - :skip: SBFile_MakeBorrowedForcingIOMethods - :skip: SBFile_MakeForcingIOMethods - :skip: SBHostOS_GetLLDBPath - :skip: SBHostOS_GetLLDBPythonPath - :skip: SBHostOS_GetProgramFileSpec - :skip: SBHostOS_GetUserHomeDirectory - :skip: SBHostOS_ThreadCancel - :skip: SBHostOS_ThreadCreate - :skip: SBHostOS_ThreadCreated - :skip: SBHostOS_ThreadDetach - :skip: SBHostOS_ThreadJoin - :skip: SBLanguageRuntime_GetLanguageTypeFromString - :skip: SBLanguageRuntime_GetNameForLanguageType - :skip: SBModuleSpecList_GetModuleSpecifications - :skip: SBModule_GarbageCollectAllocatedModules - :skip: SBModule_GetNumberAllocatedModules - :skip: SBPlatform_GetHostPlatform - :skip: SBProcess_EventIsProcessEvent - :skip: SBProcess_EventIsStructuredDataEvent - :skip: SBProcess_GetBroadcasterClassName - :skip: SBProcess_GetInterruptedFromEvent - :skip: SBProcess_GetNumRestartedReasonsFromEvent - :skip: SBProcess_GetProcessFromEvent - :skip: SBProcess_GetRestartedFromEvent - :skip: SBProcess_GetRestartedReasonAtIndexFromEvent - :skip: SBProcess_GetStateFromEvent - :skip: SBProcess_GetStructuredDataFromEvent - :skip: SBReproducer_Capture - :skip: SBReproducer_PassiveReplay - :skip: SBReproducer_SetAutoGenerate - :skip: SBReproducer_SetWorkingDirectory - :skip: SBTarget_EventIsTargetEvent - :skip: SBTarget_GetBroadcasterClassName - :skip: SBTarget_GetModuleAtIndexFromEvent - :skip: SBTarget_GetNumModulesFromEvent - :skip: SBTarget_GetTargetFromEvent - :skip: SBThread_EventIsThreadEvent - :skip: SBThread_GetBroadcasterClassName - :skip: SBThread_GetStackFrameFromEvent - :skip: SBThread_GetThreadFromEvent - :skip: SBTypeSummary_CreateWithFunctionName - :skip: SBTypeSummary_CreateWithScriptCode - :skip: SBTypeSummary_CreateWithSummaryString - :skip: SBTypeSynthetic_CreateWithClassName - :skip: SBTypeSynthetic_CreateWithScriptCode - :skip: SBWatchpoint_EventIsWatchpointEvent - :skip: SBWatchpoint_GetWatchpointEventTypeFromEvent - :skip: SBWatchpoint_GetWatchpointFromEvent :skip: command + :skip: declaration :skip: in_range :skip: is_numeric_type :skip: lldb_iter