================ @@ -444,6 +492,98 @@ void DebugNamesDWARFIndex::GetNamespaces( m_fallback.GetNamespaces(name, callback); } +void DebugNamesDWARFIndex::GetNamespacesWithParents( + ConstString name, llvm::ArrayRef<llvm::StringRef> parent_names, + llvm::function_ref<bool(DWARFDIE die)> callback) { + Progress progress("Get namespace from index for %s", name.GetCString()); + for (const DebugNames::Entry &entry : + m_debug_names_up->equal_range(name.GetStringRef())) { + lldb_private::dwarf::Tag entry_tag = entry.tag(); + if (entry_tag == DW_TAG_namespace || + entry_tag == DW_TAG_imported_declaration) { + std::optional<llvm::SmallVector<Entry, 4>> parent_chain = + getParentChain(entry); + if (!parent_chain) { + // Fallback: use the base class implementation. + if (!ProcessEntry(entry, [&](DWARFDIE die) { + return ProcessDieMatchParentNames(name, parent_names, die, callback); + })) + return; + continue; + } + + if (parent_chain->size() < parent_names.size()) + continue; + else if (parent_chain->size() == parent_names.size()) { ---------------- jeffreytan81 wrote:
Sounds good. To make sure I understand, are you suggesting we always call `WithinParentChain()` from here, and `WithinParentChain()`'s implementation should dispatch to `SameParentChain()` if the entries are of same size? https://github.com/llvm/llvm-project/pull/108907 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits