Home | History | Annotate | Download | only in interface
      1 //===-- SWIG Interface for SBValueList --------------------------*- C++ -*-===//
      2 //
      3 //                     The LLVM Compiler Infrastructure
      4 //
      5 // This file is distributed under the University of Illinois Open Source
      6 // License. See LICENSE.TXT for details.
      7 //
      8 //===----------------------------------------------------------------------===//
      9 
     10 namespace lldb {
     11 
     12 %feature("docstring",
     13 "Represents a collection of SBValues.  Both SBFrame's GetVariables() and
     14 GetRegisters() return a SBValueList.
     15 
     16 SBValueList supports SBValue iteration. For example (from test/lldbutil.py),
     17 
     18 def get_registers(frame, kind):
     19     '''Returns the registers given the frame and the kind of registers desired.
     20 
     21     Returns None if there's no such kind.
     22     '''
     23     registerSet = frame.GetRegisters() # Return type of SBValueList.
     24     for value in registerSet:
     25         if kind.lower() in value.GetName().lower():
     26             return value
     27 
     28     return None
     29 
     30 def get_GPRs(frame):
     31     '''Returns the general purpose registers of the frame as an SBValue.
     32 
     33     The returned SBValue object is iterable.  An example:
     34         ...
     35         from lldbutil import get_GPRs
     36         regs = get_GPRs(frame)
     37         for reg in regs:
     38             print '%s => %s' % (reg.GetName(), reg.GetValue())
     39         ...
     40     '''
     41     return get_registers(frame, 'general purpose')
     42 
     43 def get_FPRs(frame):
     44     '''Returns the floating point registers of the frame as an SBValue.
     45 
     46     The returned SBValue object is iterable.  An example:
     47         ...
     48         from lldbutil import get_FPRs
     49         regs = get_FPRs(frame)
     50         for reg in regs:
     51             print '%s => %s' % (reg.GetName(), reg.GetValue())
     52         ...
     53     '''
     54     return get_registers(frame, 'floating point')
     55 
     56 def get_ESRs(frame):
     57     '''Returns the exception state registers of the frame as an SBValue.
     58 
     59     The returned SBValue object is iterable.  An example:
     60         ...
     61         from lldbutil import get_ESRs
     62         regs = get_ESRs(frame)
     63         for reg in regs:
     64             print '%s => %s' % (reg.GetName(), reg.GetValue())
     65         ...
     66     '''
     67     return get_registers(frame, 'exception state')"
     68 ) SBValueList;
     69 class SBValueList
     70 {
     71 public:
     72 
     73     SBValueList ();
     74 
     75     SBValueList (const lldb::SBValueList &rhs);
     76 
     77     ~SBValueList();
     78 
     79     bool
     80     IsValid() const;
     81 
     82     void
     83     Clear();
     84 
     85     void
     86     Append (const lldb::SBValue &val_obj);
     87 
     88     void
     89     Append (const lldb::SBValueList& value_list);
     90 
     91     uint32_t
     92     GetSize() const;
     93 
     94     lldb::SBValue
     95     GetValueAtIndex (uint32_t idx) const;
     96 
     97     lldb::SBValue
     98     FindValueObjectByUID (lldb::user_id_t uid);
     99     %pythoncode %{
    100         def __len__(self):
    101             return int(self.GetSize())
    102 
    103         def __getitem__(self, key):
    104             count = len(self)
    105             #------------------------------------------------------------
    106             # Access with "int" to get Nth item in the list
    107             #------------------------------------------------------------
    108             if type(key) is int:
    109                 if key < count:
    110                     return self.GetValueAtIndex(key)
    111             #------------------------------------------------------------
    112             # Access with "str" to get values by name
    113             #------------------------------------------------------------
    114             elif type(key) is str:
    115                 matches = []
    116                 for idx in range(count):
    117                     value = self.GetValueAtIndex(idx)
    118                     if value.name == key:
    119                         matches.append(value)
    120                 return matches
    121             #------------------------------------------------------------
    122             # Match with regex
    123             #------------------------------------------------------------
    124             elif isinstance(key, type(re.compile('.'))):
    125                 matches = []
    126                 for idx in range(count):
    127                     value = self.GetValueAtIndex(idx)
    128                     re_match = key.search(value.name)
    129                     if re_match:
    130                         matches.append(value)
    131                 return matches
    132 
    133     %}
    134 
    135 
    136 };
    137 
    138 } // namespace lldb
    139