Generalize FindTypes with CompilerContext to support fuzzy lookup
This patch generalizes the FindTypes with CompilerContext interface to
support looking up a type of unknown kind by name, as well as looking
up a type inside an unspecified submodule. These features are
motivated by the Swift branch, but are fully tested via unit tests and
lldb-test on llvm.org. Specifically, this patch adds an AnyModule and
an AnyType CompilerContext kind.
Differential Revision: https://reviews.llvm.org/D66507
rdar://problem/54471165
llvm-svn: 369555
diff --git a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
index 17f9241..ba63b41 100644
--- a/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
+++ b/lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
@@ -2484,16 +2484,16 @@
return num_die_matches;
}
-size_t SymbolFileDWARF::FindTypes(const std::vector<CompilerContext> &context,
+size_t SymbolFileDWARF::FindTypes(llvm::ArrayRef<CompilerContext> pattern,
bool append, TypeMap &types) {
std::lock_guard<std::recursive_mutex> guard(GetModuleMutex());
if (!append)
types.Clear();
- if (context.empty())
+ if (pattern.empty())
return 0;
- ConstString name = context.back().name;
+ ConstString name = pattern.back().name;
if (!name)
return 0;
@@ -2508,9 +2508,9 @@
DWARFDIE die = GetDIE(die_ref);
if (die) {
- std::vector<CompilerContext> die_context;
+ llvm::SmallVector<CompilerContext, 4> die_context;
die.GetDeclContext(die_context);
- if (die_context != context)
+ if (!contextMatches(die_context, pattern))
continue;
Type *matching_type = ResolveType(die, true, true);