summaryrefslogtreecommitdiffstats
path: root/lldb/source/Core/Module.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lldb/source/Core/Module.cpp')
-rw-r--r--lldb/source/Core/Module.cpp18
1 files changed, 15 insertions, 3 deletions
diff --git a/lldb/source/Core/Module.cpp b/lldb/source/Core/Module.cpp
index 14d2e42ac50..08f826ee42b 100644
--- a/lldb/source/Core/Module.cpp
+++ b/lldb/source/Core/Module.cpp
@@ -696,7 +696,8 @@ Module::FindTypes (const SymbolContext& sc,
std::string type_scope;
std::string type_basename;
const bool append = true;
- if (Type::GetTypeScopeAndBasename (type_name_cstr, type_scope, type_basename))
+ TypeClass type_class = eTypeClassAny;
+ 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
@@ -711,14 +712,25 @@ Module::FindTypes (const SymbolContext& sc,
ConstString type_basename_const_str (type_basename.c_str());
if (FindTypes_Impl(sc, type_basename_const_str, NULL, append, max_matches, types))
{
- types.RemoveMismatchedTypes (type_scope, type_basename, exact_match);
+ types.RemoveMismatchedTypes (type_scope, type_basename, type_class, exact_match);
num_matches = types.GetSize();
}
}
else
{
// The type is not in a namespace/class scope, just search for it by basename
- num_matches = FindTypes_Impl(sc, name, NULL, append, max_matches, types);
+ if (type_class != eTypeClassAny)
+ {
+ // The "type_name_cstr" will have been modified if we have a valid type class
+ // prefix (like "struct", "class", "union", "typedef" etc).
+ num_matches = FindTypes_Impl(sc, ConstString(type_name_cstr), NULL, append, max_matches, types);
+ types.RemoveMismatchedTypes (type_class);
+ num_matches = types.GetSize();
+ }
+ else
+ {
+ num_matches = FindTypes_Impl(sc, name, NULL, append, max_matches, types);
+ }
}
return num_matches;
OpenPOWER on IntegriCloud