143 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			C++
		
	
	
	
| //===-- SWIG Interface for SBValueList --------------------------*- C++ -*-===//
 | |
| //
 | |
| //                     The LLVM Compiler Infrastructure
 | |
| //
 | |
| // This file is distributed under the University of Illinois Open Source
 | |
| // License. See LICENSE.TXT for details.
 | |
| //
 | |
| //===----------------------------------------------------------------------===//
 | |
| 
 | |
| namespace lldb {
 | |
| 
 | |
| %feature("docstring",
 | |
| "Represents a collection of SBValues.  Both SBFrame's GetVariables() and
 | |
| GetRegisters() return a SBValueList.
 | |
| 
 | |
| SBValueList supports SBValue iteration. For example (from test/lldbutil.py),
 | |
| 
 | |
| def get_registers(frame, kind):
 | |
|     '''Returns the registers given the frame and the kind of registers desired.
 | |
| 
 | |
|     Returns None if there's no such kind.
 | |
|     '''
 | |
|     registerSet = frame.GetRegisters() # Return type of SBValueList.
 | |
|     for value in registerSet:
 | |
|         if kind.lower() in value.GetName().lower():
 | |
|             return value
 | |
| 
 | |
|     return None
 | |
| 
 | |
| def get_GPRs(frame):
 | |
|     '''Returns the general purpose registers of the frame as an SBValue.
 | |
| 
 | |
|     The returned SBValue object is iterable.  An example:
 | |
|         ...
 | |
|         from lldbutil import get_GPRs
 | |
|         regs = get_GPRs(frame)
 | |
|         for reg in regs:
 | |
|             print('%s => %s' % (reg.GetName(), reg.GetValue()))
 | |
|         ...
 | |
|     '''
 | |
|     return get_registers(frame, 'general purpose')
 | |
| 
 | |
| def get_FPRs(frame):
 | |
|     '''Returns the floating point registers of the frame as an SBValue.
 | |
| 
 | |
|     The returned SBValue object is iterable.  An example:
 | |
|         ...
 | |
|         from lldbutil import get_FPRs
 | |
|         regs = get_FPRs(frame)
 | |
|         for reg in regs:
 | |
|             print('%s => %s' % (reg.GetName(), reg.GetValue()))
 | |
|         ...
 | |
|     '''
 | |
|     return get_registers(frame, 'floating point')
 | |
| 
 | |
| def get_ESRs(frame):
 | |
|     '''Returns the exception state registers of the frame as an SBValue.
 | |
| 
 | |
|     The returned SBValue object is iterable.  An example:
 | |
|         ...
 | |
|         from lldbutil import get_ESRs
 | |
|         regs = get_ESRs(frame)
 | |
|         for reg in regs:
 | |
|             print('%s => %s' % (reg.GetName(), reg.GetValue()))
 | |
|         ...
 | |
|     '''
 | |
|     return get_registers(frame, 'exception state')"
 | |
| ) SBValueList;
 | |
| class SBValueList
 | |
| {
 | |
| public:
 | |
| 
 | |
|     SBValueList ();
 | |
| 
 | |
|     SBValueList (const lldb::SBValueList &rhs);
 | |
| 
 | |
|     ~SBValueList();
 | |
| 
 | |
|     bool
 | |
|     IsValid() const;
 | |
|     
 | |
|     void 
 | |
|     Clear();
 | |
| 
 | |
|     void
 | |
|     Append (const lldb::SBValue &val_obj);
 | |
| 
 | |
|     void
 | |
|     Append (const lldb::SBValueList& value_list);
 | |
| 
 | |
|     uint32_t
 | |
|     GetSize() const;
 | |
| 
 | |
|     lldb::SBValue
 | |
|     GetValueAtIndex (uint32_t idx) const;
 | |
| 
 | |
|     lldb::SBValue
 | |
|     FindValueObjectByUID (lldb::user_id_t uid);
 | |
|     
 | |
|     lldb::SBValue
 | |
|     GetFirstValueByName (const char* name) const;
 | |
|     
 | |
|     %pythoncode %{
 | |
|         def __len__(self):
 | |
|             return int(self.GetSize())
 | |
| 
 | |
|         def __getitem__(self, key):
 | |
|             count = len(self)
 | |
|             #------------------------------------------------------------
 | |
|             # Access with "int" to get Nth item in the list
 | |
|             #------------------------------------------------------------
 | |
|             if type(key) is int:
 | |
|                 if key < count:
 | |
|                     return self.GetValueAtIndex(key)
 | |
|             #------------------------------------------------------------
 | |
|             # Access with "str" to get values by name
 | |
|             #------------------------------------------------------------
 | |
|             elif type(key) is str:
 | |
|                 matches = []
 | |
|                 for idx in range(count):
 | |
|                     value = self.GetValueAtIndex(idx)
 | |
|                     if value.name == key:
 | |
|                         matches.append(value)
 | |
|                 return matches
 | |
|             #------------------------------------------------------------
 | |
|             # Match with regex
 | |
|             #------------------------------------------------------------
 | |
|             elif isinstance(key, type(re.compile('.'))):
 | |
|                 matches = []
 | |
|                 for idx in range(count):
 | |
|                     value = self.GetValueAtIndex(idx)
 | |
|                     re_match = key.search(value.name)
 | |
|                     if re_match:
 | |
|                         matches.append(value)
 | |
|                 return matches
 | |
| 
 | |
|     %}
 | |
| 
 | |
| 
 | |
| };
 | |
| 
 | |
| } // namespace lldb
 |