//===-- 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); %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