================ @@ -126,3 +126,62 @@ bool DWARFIndex::GetFullyQualifiedTypeImpl( return callback(die); return true; } + +void DWARFIndex::GetNamespacesWithParents( + ConstString name, llvm::ArrayRef<llvm::StringRef> parent_names, + llvm::function_ref<bool(DWARFDIE die)> callback) { + GetNamespaces(name, [&](DWARFDIE die) { + return ProcessDieMatchParentNames(name, parent_names, die, callback); + }); +} + +void DWARFIndex::GetTypesWithParents( + ConstString name, llvm::ArrayRef<llvm::StringRef> parent_names, + llvm::function_ref<bool(DWARFDIE die)> callback) { + GetTypes(name, [&](DWARFDIE die) { + return ProcessDieMatchParentNames(name, parent_names, die, callback); + }); +} + +bool DWARFIndex::ProcessDieMatchParentNames( + ConstString name, llvm::ArrayRef<llvm::StringRef> query_parent_names, + DWARFDIE die, llvm::function_ref<bool(DWARFDIE die)> callback) { + std::vector<lldb_private::CompilerContext> type_context = + die.GetTypeLookupContext(); + if (type_context.empty()) { + // If both type_context and query_parent_names and empty we have a match. + // Otherwise, this one does not match and we keep on searching. + if (query_parent_names.empty()) + return callback(die); + return true; + } + + // Type lookup context includes the current DIE as the last element. + // so revert it for easy matching. + std::reverse(type_context.begin(), type_context.end()); + + // type_context includes the name of the current DIE while query_parent_names ---------------- jeffreytan81 wrote:
@Michael137 , @clayborg, yep, the algorithm is similar. I tried to reuse `TypeQuery::ContextMatches` from `DebugNamesDWARFIndex` before, but then find it hard because, as Greg pointed out, the `CompilerContext` is parsed out from .debug_names parent chain, which is lazily searched in the new algorithm. However, I should be able to reuse `TypeQuery::ContextMatches` in this base implementation. Let me give a try. 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