[Lldb-commits] [lldb] r226771 - Add an API to ValueObject that iterates over the entire parent chain via a callback, and rewrite GetRoot() in terms of this general iteration API. NFC
Enrico Granata
egranata at apple.com
Wed Jan 21 19:07:35 PST 2015
Author: enrico
Date: Wed Jan 21 21:07:34 2015
New Revision: 226771
URL: http://llvm.org/viewvc/llvm-project?rev=226771&view=rev
Log:
Add an API to ValueObject that iterates over the entire parent chain via a callback, and rewrite GetRoot() in terms of this general iteration API. NFC
Modified:
lldb/trunk/include/lldb/Core/ValueObject.h
lldb/trunk/source/Core/ValueObject.cpp
Modified: lldb/trunk/include/lldb/Core/ValueObject.h
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/ValueObject.h?rev=226771&r1=226770&r2=226771&view=diff
==============================================================================
--- lldb/trunk/include/lldb/Core/ValueObject.h (original)
+++ lldb/trunk/include/lldb/Core/ValueObject.h Wed Jan 21 21:07:34 2015
@@ -527,9 +527,14 @@ public:
virtual lldb::ModuleSP
GetModule();
- virtual ValueObject*
+ ValueObject*
GetRoot ();
+ // Given a ValueObject, loop over itself and its parent, and its parent's parent, ..
+ // until either the given callback returns false, or you end up at a null pointer
+ ValueObject*
+ FollowParentChain (std::function<bool(ValueObject*)>);
+
virtual bool
GetDeclaration (Declaration &decl);
Modified: lldb/trunk/source/Core/ValueObject.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/ValueObject.cpp?rev=226771&r1=226770&r2=226771&view=diff
==============================================================================
--- lldb/trunk/source/Core/ValueObject.cpp (original)
+++ lldb/trunk/source/Core/ValueObject.cpp Wed Jan 21 21:07:34 2015
@@ -4130,16 +4130,22 @@ ValueObject::GetRoot ()
{
if (m_root)
return m_root;
- ValueObject* parent = m_parent;
- if (!parent)
- return (m_root = this);
- while (parent->m_parent)
+ return (m_root = FollowParentChain( [] (ValueObject* vo) -> bool {
+ return (vo->m_parent != nullptr);
+ }));
+}
+
+ValueObject*
+ValueObject::FollowParentChain (std::function<bool(ValueObject*)> f)
+{
+ ValueObject* vo = this;
+ while (vo)
{
- if (parent->m_root)
- return (m_root = parent->m_root);
- parent = parent->m_parent;
+ if (f(vo) == false)
+ break;
+ vo = vo->m_parent;
}
- return (m_root = parent);
+ return vo;
}
AddressType
More information about the lldb-commits
mailing list