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);
{
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