| //===-- 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 |