summaryrefslogtreecommitdiff
path: root/scripts/interface/SBValueList.i
diff options
context:
space:
mode:
authorDimitry Andric <dim@FreeBSD.org>2016-01-06 20:12:03 +0000
committerDimitry Andric <dim@FreeBSD.org>2016-01-06 20:12:03 +0000
commit9e6d35490a6542f9c97607f93c2ef8ca8e03cbcc (patch)
treedd2a1ddf0476664c2b823409c36cbccd52662ca7 /scripts/interface/SBValueList.i
parent3bd2e91faeb9eeec1aae82c64a3253afff551cfd (diff)
Notes
Diffstat (limited to 'scripts/interface/SBValueList.i')
-rw-r--r--scripts/interface/SBValueList.i142
1 files changed, 142 insertions, 0 deletions
diff --git a/scripts/interface/SBValueList.i b/scripts/interface/SBValueList.i
new file mode 100644
index 0000000000000..80e8f0ec999ea
--- /dev/null
+++ b/scripts/interface/SBValueList.i
@@ -0,0 +1,142 @@
+//===-- 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