================ @@ -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 ---------------- clayborg wrote:
The .debug_names search is what returns results to `TypeQuery::ContextMatches`, but we should have functions that can do the same matching. The difference here in .debug_names is we are trying to live off only the contents of .debug_names without using and DIEs. `TypeQuery::ContextMatches` uses DIEs. So we might be able to unify some of the context matching once the context has been extracted from the .debug_names or from the DWARF, but that is about as far as we should go. 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