zturner created this revision. zturner added reviewers: clayborg, labath, jingham. Herald added subscribers: JDevlieghere, aprantl.
Previously the Module would parse a type name into scope and base name during a lookup and only give the SymbolFile plugin the base name, then it would filter the results down into the match set based on whether it was supposed to be an exact match. However, if this is supposed to be an exact match, a SymbolFile can do this lookup in O(1) time by using its internal accelerator tables, but it can't do this unless it actually receives the full name as well as the information that it is supposed to be an exact match. Rather than being too smart, we should just let the symbol file plugin be the arbiter to decide how it wants to do lookups, so we should pass it the full name. I'm trying to keep this as NFC for the DWARF plugin, so I took the code that was in Module.cpp and tried to rewrite it to be equivalent at the top of `SymbolFileDWARF::FindTypes` https://reviews.llvm.org/D53662 Files: lldb/include/lldb/Core/Module.h lldb/include/lldb/Symbol/SymbolFile.h lldb/include/lldb/Symbol/SymbolVendor.h lldb/lit/SymbolFile/NativePDB/Inputs/tag-types.lldbinit lldb/lit/SymbolFile/NativePDB/tag-types.cpp lldb/source/Core/Module.cpp lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h lldb/source/Symbol/SymbolFile.cpp lldb/source/Symbol/SymbolVendor.cpp lldb/tools/lldb-test/lldb-test.cpp
Index: lldb/tools/lldb-test/lldb-test.cpp =================================================================== --- lldb/tools/lldb-test/lldb-test.cpp +++ lldb/tools/lldb-test/lldb-test.cpp @@ -456,8 +456,8 @@ SymbolContext SC; DenseSet<SymbolFile *> SearchedFiles; TypeMap Map; - Vendor.FindTypes(SC, ConstString(Name), ContextPtr, true, UINT32_MAX, - SearchedFiles, Map); + Vendor.FindTypes(SC, Name, ContextPtr, false, true, UINT32_MAX, SearchedFiles, + Map); outs() << formatv("Found {0} types:\n", Map.GetSize()); StreamString Stream; Index: lldb/source/Symbol/SymbolVendor.cpp =================================================================== --- lldb/source/Symbol/SymbolVendor.cpp +++ lldb/source/Symbol/SymbolVendor.cpp @@ -315,17 +315,18 @@ } size_t SymbolVendor::FindTypes( - const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, size_t max_matches, + const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, bool exact_match, bool append, + size_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, TypeMap &types) { ModuleSP module_sp(GetModule()); if (module_sp) { std::lock_guard<std::recursive_mutex> guard(module_sp->GetMutex()); if (m_sym_file_ap.get()) - return m_sym_file_ap->FindTypes(sc, name, parent_decl_ctx, append, - max_matches, searched_symbol_files, - types); + return m_sym_file_ap->FindTypes(sc, name, parent_decl_ctx, exact_match, + append, max_matches, + searched_symbol_files, types); } if (!append) types.Clear(); Index: lldb/source/Symbol/SymbolFile.cpp =================================================================== --- lldb/source/Symbol/SymbolFile.cpp +++ lldb/source/Symbol/SymbolFile.cpp @@ -140,8 +140,8 @@ } uint32_t SymbolFile::FindTypes( - const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, + const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, bool exact_match, bool append, uint32_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, TypeMap &types) { Index: lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h =================================================================== --- lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h +++ lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.h @@ -134,10 +134,9 @@ std::vector<lldb_private::ConstString> &mangled_names) override; uint32_t - FindTypes(const lldb_private::SymbolContext &sc, - const lldb_private::ConstString &name, + FindTypes(const lldb_private::SymbolContext &sc, llvm::StringRef name, const lldb_private::CompilerDeclContext *parent_decl_ctx, - bool append, uint32_t max_matches, + bool exact_match, bool append, uint32_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, lldb_private::TypeMap &types) override; @@ -187,7 +186,7 @@ const llvm::pdb::PDBSymbolCompiland &pdb_compiland, llvm::DenseMap<uint32_t, uint32_t> &index_map) const; - void FindTypesByName(const std::string &name, + void FindTypesByName(llvm::StringRef name, const lldb_private::CompilerDeclContext *parent_decl_ctx, uint32_t max_matches, lldb_private::TypeMap &types); Index: lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp +++ lldb/source/Plugins/SymbolFile/PDB/SymbolFilePDB.cpp @@ -1332,26 +1332,23 @@ std::vector<lldb_private::ConstString> &mangled_names) {} uint32_t SymbolFilePDB::FindTypes( - const lldb_private::SymbolContext &sc, - const lldb_private::ConstString &name, - const lldb_private::CompilerDeclContext *parent_decl_ctx, bool append, - uint32_t max_matches, + const lldb_private::SymbolContext &sc, llvm::StringRef name, + const lldb_private::CompilerDeclContext *parent_decl_ctx, bool exact_match, + bool append, uint32_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, lldb_private::TypeMap &types) { if (!append) types.Clear(); - if (!name) + if (name.empty()) return 0; if (!DeclContextMatchesThisSymbolFile(parent_decl_ctx)) return 0; searched_symbol_files.clear(); searched_symbol_files.insert(this); - std::string name_str = name.AsCString(); - // There is an assumption 'name' is not a regex - FindTypesByName(name_str, parent_decl_ctx, max_matches, types); + FindTypesByName(name, parent_decl_ctx, max_matches, types); return types.GetSize(); } @@ -1412,7 +1409,7 @@ } void SymbolFilePDB::FindTypesByName( - const std::string &name, + llvm::StringRef name, const lldb_private::CompilerDeclContext *parent_decl_ctx, uint32_t max_matches, lldb_private::TypeMap &types) { if (!parent_decl_ctx) Index: lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h =================================================================== --- lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h +++ lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.h @@ -125,9 +125,9 @@ uint32_t FindFunctions(const RegularExpression ®ex, bool include_inlines, bool append, SymbolContextList &sc_list) override; - uint32_t FindTypes(const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, - uint32_t max_matches, + uint32_t FindTypes(const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, + bool exact_match, bool append, uint32_t max_matches, llvm::DenseSet<SymbolFile *> &searched_symbol_files, TypeMap &types) override; Index: lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp +++ lldb/source/Plugins/SymbolFile/NativePDB/SymbolFileNativePDB.cpp @@ -691,8 +691,7 @@ return nullptr; // Ignore unnamed-tag UDTs. - name = DropNameScope(name); - if (name.empty()) + if (DropNameScope(name).empty()) return nullptr; clang::DeclContext *decl_context = m_clang->GetTranslationUnitDecl(); @@ -1189,20 +1188,20 @@ } uint32_t SymbolFileNativePDB::FindTypes( - const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, + const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, bool exact_match, bool append, uint32_t max_matches, llvm::DenseSet<SymbolFile *> &searched_symbol_files, TypeMap &types) { if (!append) types.Clear(); - if (!name) + if (name.empty()) return 0; searched_symbol_files.clear(); searched_symbol_files.insert(this); // There is an assumption 'name' is not a regex - size_t match_count = FindTypesByName(name.GetStringRef(), max_matches, types); + size_t match_count = FindTypesByName(name, max_matches, types); return match_count; } Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.h @@ -110,10 +110,9 @@ bool include_inlines, bool append, lldb_private::SymbolContextList &sc_list) override; uint32_t - FindTypes(const lldb_private::SymbolContext &sc, - const lldb_private::ConstString &name, + FindTypes(const lldb_private::SymbolContext &sc, llvm::StringRef name, const lldb_private::CompilerDeclContext *parent_decl_ctx, - bool append, uint32_t max_matches, + bool exact_match, bool append, uint32_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, lldb_private::TypeMap &types) override; lldb_private::CompilerDeclContext FindNamespace( Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARFDebugMap.cpp @@ -1162,8 +1162,8 @@ } uint32_t SymbolFileDWARFDebugMap::FindTypes( - const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, + const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, bool exact_match, bool append, uint32_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, TypeMap &types) { @@ -1176,12 +1176,13 @@ if (sc.comp_unit) { oso_dwarf = GetSymbolFile(sc); if (oso_dwarf) - return oso_dwarf->FindTypes(sc, name, parent_decl_ctx, append, - max_matches, searched_symbol_files, types); + return oso_dwarf->FindTypes(sc, name, parent_decl_ctx, exact_match, + append, max_matches, searched_symbol_files, + types); } else { ForEachSymbolFile([&](SymbolFileDWARF *oso_dwarf) -> bool { - oso_dwarf->FindTypes(sc, name, parent_decl_ctx, append, max_matches, - searched_symbol_files, types); + oso_dwarf->FindTypes(sc, name, parent_decl_ctx, exact_match, append, + max_matches, searched_symbol_files, types); if (types.GetSize() >= max_matches) return true; else Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.h @@ -203,10 +203,9 @@ std::vector<lldb_private::ConstString> &mangled_names) override; uint32_t - FindTypes(const lldb_private::SymbolContext &sc, - const lldb_private::ConstString &name, + FindTypes(const lldb_private::SymbolContext &sc, llvm::StringRef name, const lldb_private::CompilerDeclContext *parent_decl_ctx, - bool append, uint32_t max_matches, + bool exact_match, bool append, uint32_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, lldb_private::TypeMap &types) override; Index: lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp =================================================================== --- lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp +++ lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp @@ -2434,11 +2434,22 @@ } uint32_t SymbolFileDWARF::FindTypes( - const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, + const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, bool exact_match, bool append, uint32_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, TypeMap &types) { + + // FIXME: When exact_match is true, we should do an optimized O(1) lookup. + llvm::StringRef scope; + llvm::StringRef base; + TypeClass type_class; + bool has_namespace_separator = + Type::GetTypeScopeAndBasename(name, scope, base, type_class); + if (has_namespace_separator || + ((type_class != eTypeClassAny && !base.empty()))) + name = base; + // If we aren't appending the results to this list, then clear the list if (!append) types.Clear(); @@ -2458,22 +2469,24 @@ if (log) { if (parent_decl_ctx) GetObjectFile()->GetModule()->LogMessage( - log, "SymbolFileDWARF::FindTypes (sc, name=\"%s\", parent_decl_ctx = " - "%p (\"%s\"), append=%u, max_matches=%u, type_list)", - name.GetCString(), static_cast<const void *>(parent_decl_ctx), + log, + "SymbolFileDWARF::FindTypes (sc, name=\"%s\", parent_decl_ctx = " + "%p (\"%s\"), append=%u, max_matches=%u, type_list)", + name.str().c_str(), static_cast<const void *>(parent_decl_ctx), parent_decl_ctx->GetName().AsCString("<NULL>"), append, max_matches); else GetObjectFile()->GetModule()->LogMessage( - log, "SymbolFileDWARF::FindTypes (sc, name=\"%s\", parent_decl_ctx = " - "NULL, append=%u, max_matches=%u, type_list)", - name.GetCString(), append, max_matches); + log, + "SymbolFileDWARF::FindTypes (sc, name=\"%s\", parent_decl_ctx = " + "NULL, append=%u, max_matches=%u, type_list)", + name.str().c_str(), append, max_matches); } if (!DeclContextMatchesThisSymbolFile(parent_decl_ctx)) return 0; DIEArray die_offsets; - m_index->GetTypes(name, die_offsets); + m_index->GetTypes(ConstString(name), die_offsets); const size_t num_die_matches = die_offsets.size(); if (num_die_matches) { @@ -2495,24 +2508,25 @@ break; } } else { - m_index->ReportInvalidDIEOffset(die_ref.die_offset, - name.GetStringRef()); + m_index->ReportInvalidDIEOffset(die_ref.die_offset, name); } } const uint32_t num_matches = types.GetSize() - initial_types_size; if (log && num_matches) { if (parent_decl_ctx) { GetObjectFile()->GetModule()->LogMessage( - log, "SymbolFileDWARF::FindTypes (sc, name=\"%s\", parent_decl_ctx " - "= %p (\"%s\"), append=%u, max_matches=%u, type_list) => %u", - name.GetCString(), static_cast<const void *>(parent_decl_ctx), + log, + "SymbolFileDWARF::FindTypes (sc, name=\"%s\", parent_decl_ctx " + "= %p (\"%s\"), append=%u, max_matches=%u, type_list) => %u", + name.str().c_str(), static_cast<const void *>(parent_decl_ctx), parent_decl_ctx->GetName().AsCString("<NULL>"), append, max_matches, num_matches); } else { GetObjectFile()->GetModule()->LogMessage( - log, "SymbolFileDWARF::FindTypes (sc, name=\"%s\", parent_decl_ctx " - "= NULL, append=%u, max_matches=%u, type_list) => %u", - name.GetCString(), append, max_matches, num_matches); + log, + "SymbolFileDWARF::FindTypes (sc, name=\"%s\", parent_decl_ctx " + "= NULL, append=%u, max_matches=%u, type_list) => %u", + name.str().c_str(), append, max_matches, num_matches); } } return num_matches; @@ -2524,9 +2538,9 @@ if (external_module_sp) { SymbolVendor *sym_vendor = external_module_sp->GetSymbolVendor(); if (sym_vendor) { - const uint32_t num_external_matches = - sym_vendor->FindTypes(sc, name, parent_decl_ctx, append, - max_matches, searched_symbol_files, types); + const uint32_t num_external_matches = sym_vendor->FindTypes( + sc, name, parent_decl_ctx, exact_match, append, max_matches, + searched_symbol_files, types); if (num_external_matches) return num_external_matches; } Index: lldb/source/Core/Module.cpp =================================================================== --- lldb/source/Core/Module.cpp +++ lldb/source/Core/Module.cpp @@ -943,17 +943,18 @@ } size_t Module::FindTypes_Impl( - const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, size_t max_matches, + const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, bool exact_match, bool append, + size_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, TypeMap &types) { static Timer::Category func_cat(LLVM_PRETTY_FUNCTION); Timer scoped_timer(func_cat, LLVM_PRETTY_FUNCTION); if (!sc.module_sp || sc.module_sp.get() == this) { SymbolVendor *symbols = GetSymbolVendor(); if (symbols) - return symbols->FindTypes(sc, name, parent_decl_ctx, append, max_matches, - searched_symbol_files, types); + return symbols->FindTypes(sc, name, parent_decl_ctx, exact_match, append, + max_matches, searched_symbol_files, types); } return 0; } @@ -966,8 +967,8 @@ TypeMap types_map; llvm::DenseSet<lldb_private::SymbolFile *> searched_symbol_files; size_t num_types = - FindTypes_Impl(sc, type_name, parent_decl_ctx, append, max_matches, - searched_symbol_files, types_map); + FindTypes_Impl(sc, type_name.GetStringRef(), parent_decl_ctx, false, + append, max_matches, searched_symbol_files, types_map); if (num_types > 0) sc.SortTypeList(types_map, type_list); return num_types; @@ -989,53 +990,34 @@ size_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, TypeList &types) { - size_t num_matches = 0; - const char *type_name_cstr = name.GetCString(); - llvm::StringRef type_scope; - llvm::StringRef type_basename; - const bool append = true; - TypeClass type_class = eTypeClassAny; TypeMap typesmap; - if (Type::GetTypeScopeAndBasename(type_name_cstr, type_scope, type_basename, - type_class)) { - // Check if "name" starts with "::" which means the qualified type starts - // from the root namespace and implies and exact match. The typenames we - // get back from clang do not start with "::" so we need to strip this off - // in order to get the qualified names to match - exact_match = type_scope.consume_front("::"); - - ConstString type_basename_const_str(type_basename); - if (FindTypes_Impl(sc, type_basename_const_str, nullptr, append, - max_matches, searched_symbol_files, typesmap)) { - typesmap.RemoveMismatchedTypes(type_scope, type_basename, type_class, - exact_match); - num_matches = typesmap.GetSize(); - } - } else { - // The type is not in a namespace/class scope, just search for it by - // basename - if (type_class != eTypeClassAny && !type_basename.empty()) { - // The "type_name_cstr" will have been modified if we have a valid type - // class prefix (like "struct", "class", "union", "typedef" etc). - FindTypes_Impl(sc, ConstString(type_basename), nullptr, append, - UINT_MAX, searched_symbol_files, typesmap); - typesmap.RemoveMismatchedTypes(type_scope, type_basename, type_class, - exact_match); - num_matches = typesmap.GetSize(); - } else { - num_matches = FindTypes_Impl(sc, name, nullptr, append, UINT_MAX, - searched_symbol_files, typesmap); - if (exact_match) { - std::string name_str(name.AsCString("")); - typesmap.RemoveMismatchedTypes(type_scope, name_str, type_class, - exact_match); - num_matches = typesmap.GetSize(); - } - } + // Debug info is optimized for doing O(1) lookups on types when we know we're + // looking for an exact match. But the only way for this to be possible is if + // we can pass this knowledge through to the SymbolFile plugin. + llvm::StringRef search_name = name.GetStringRef(); + if (search_name.consume_front("::")) + exact_match = true; + + bool success = FindTypes_Impl(sc, search_name, nullptr, exact_match, true, + max_matches, searched_symbol_files, typesmap); + + size_t num_matches = 0; + if (success && !exact_match) { + + llvm::StringRef type_name = name.GetStringRef(); + llvm::StringRef type_scope; + llvm::StringRef type_basename; + TypeClass type_class = eTypeClassAny; + Type::GetTypeScopeAndBasename(type_name, type_scope, type_basename, + type_class); + + typesmap.RemoveMismatchedTypes(type_scope, type_basename, type_class, + exact_match); } - if (num_matches > 0) - sc.SortTypeList(typesmap, types); + + num_matches = typesmap.GetSize(); + sc.SortTypeList(typesmap, types); return num_matches; } Index: lldb/lit/SymbolFile/NativePDB/tag-types.cpp =================================================================== --- lldb/lit/SymbolFile/NativePDB/tag-types.cpp +++ lldb/lit/SymbolFile/NativePDB/tag-types.cpp @@ -128,14 +128,25 @@ ES_B = 3 }; +namespace NS { + struct Struct { + int X; + struct Local { + int Y; + }; + }; +} + int main(int argc, char **argv) { Struct S; Class C; Union U; Derived D; Derived2 D2; EnumInt EI; EnumShort ES; + NS::Struct NSS; + NS::Struct::Local NSSL; return 0; } @@ -232,5 +243,13 @@ // CHECK-NEXT: ES_A, // CHECK-NEXT: ES_B // CHECK-NEXT: } +// CHECK-NEXT: (lldb) type lookup -- NS::Struct +// CHECK-NEXT: struct NS::Struct { +// CHECK-NEXT: int X; +// CHECK-NEXT: } +// CHECK-NEXT: (lldb) type lookup -- NS::Struct::Local +// CHECK-NEXT: struct NS::Struct::Local { +// CHECK-NEXT: int Y; +// CHECK-NEXT: } // CHECK-NEXT: (lldb) type lookup -- InvalidType // CHECK-NEXT: no type was found matching 'InvalidType' Index: lldb/lit/SymbolFile/NativePDB/Inputs/tag-types.lldbinit =================================================================== --- lldb/lit/SymbolFile/NativePDB/Inputs/tag-types.lldbinit +++ lldb/lit/SymbolFile/NativePDB/Inputs/tag-types.lldbinit @@ -5,4 +5,6 @@ type lookup -- Derived2 type lookup -- EnumInt type lookup -- EnumShort +type lookup -- NS::Struct +type lookup -- NS::Struct::Local type lookup -- InvalidType Index: lldb/include/lldb/Symbol/SymbolVendor.h =================================================================== --- lldb/include/lldb/Symbol/SymbolVendor.h +++ lldb/include/lldb/Symbol/SymbolVendor.h @@ -99,9 +99,9 @@ SymbolContextList &sc_list); virtual size_t - FindTypes(const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, - size_t max_matches, + FindTypes(const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, bool exact_match, + bool append, size_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, TypeMap &types); Index: lldb/include/lldb/Symbol/SymbolFile.h =================================================================== --- lldb/include/lldb/Symbol/SymbolFile.h +++ lldb/include/lldb/Symbol/SymbolFile.h @@ -177,9 +177,9 @@ bool include_inlines, bool append, SymbolContextList &sc_list); virtual uint32_t - FindTypes(const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, - uint32_t max_matches, + FindTypes(const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, bool exact_match, + bool append, uint32_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, TypeMap &types); virtual size_t FindTypes(const std::vector<CompilerContext> &context, Index: lldb/include/lldb/Core/Module.h =================================================================== --- lldb/include/lldb/Core/Module.h +++ lldb/include/lldb/Core/Module.h @@ -1181,8 +1181,8 @@ Module(); // Only used internally by CreateJITModule () size_t FindTypes_Impl( - const SymbolContext &sc, const ConstString &name, - const CompilerDeclContext *parent_decl_ctx, bool append, + const SymbolContext &sc, llvm::StringRef name, + const CompilerDeclContext *parent_decl_ctx, bool exact_match, bool append, size_t max_matches, llvm::DenseSet<lldb_private::SymbolFile *> &searched_symbol_files, TypeMap &types);
_______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits