• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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