summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp
diff options
context:
space:
mode:
authorEnrico Granata <egranata@apple.com>2015-10-02 01:23:11 +0000
committerEnrico Granata <egranata@apple.com>2015-10-02 01:23:11 +0000
commit72d8a722410dfd775dc8bc13477c26aac244837b (patch)
tree5ce8181031298fac0d45a0aae05626564523602e /lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp
parent7e9fd56b267c5bf001888dc010b729d7553bcaa4 (diff)
downloadbcm5719-llvm-72d8a722410dfd775dc8bc13477c26aac244837b.tar.gz
bcm5719-llvm-72d8a722410dfd775dc8bc13477c26aac244837b.zip
Teach 'type lookup' to pull types from clang modules; also add a test case
llvm-svn: 249117
Diffstat (limited to 'lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp')
-rw-r--r--lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp55
1 files changed, 39 insertions, 16 deletions
diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp
index fa46ba2a08c..6a67e371340 100644
--- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp
+++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp
@@ -708,34 +708,57 @@ ObjCLanguage::GetTypeScavenger ()
{
bool result = false;
- Process* process = exe_scope->CalculateProcess().get();
- if (process)
+ Target* target = exe_scope->CalculateTarget().get();
+ if (target)
{
- const bool create_on_demand = false;
- auto objc_runtime = process->GetObjCLanguageRuntime(create_on_demand);
- if (objc_runtime)
+ if (auto clang_modules_decl_vendor = target->GetClangModulesDeclVendor())
{
- auto decl_vendor = objc_runtime->GetDeclVendor();
- if (decl_vendor)
+ std::vector <clang::NamedDecl*> decls;
+ ConstString key_cs(key);
+
+ if (clang_modules_decl_vendor->FindDecls(key_cs, false, UINT32_MAX, decls) > 0 &&
+ decls.size() > 0)
{
- std::vector<clang::NamedDecl *> decls;
- ConstString name(key);
- decl_vendor->FindDecls(name, true, UINT32_MAX, decls);
- for (auto decl : decls)
+ CompilerType module_type = ClangASTContext::GetTypeForDecl(decls.front());
+ result = true;
+ std::unique_ptr<Language::TypeScavenger::Result> result(new ObjCScavengerResult(module_type));
+ results.insert(std::move(result));
+ }
+ }
+ }
+
+ if (!result)
+ {
+ Process* process = exe_scope->CalculateProcess().get();
+ if (process)
+ {
+ const bool create_on_demand = false;
+ auto objc_runtime = process->GetObjCLanguageRuntime(create_on_demand);
+ if (objc_runtime)
+ {
+ auto decl_vendor = objc_runtime->GetDeclVendor();
+ if (decl_vendor)
{
- if (decl)
+ std::vector<clang::NamedDecl *> decls;
+ ConstString name(key);
+ decl_vendor->FindDecls(name, true, UINT32_MAX, decls);
+ for (auto decl : decls)
{
- if (CompilerType candidate = ClangASTContext::GetTypeForDecl(decl))
+ if (decl)
{
- result = true;
- std::unique_ptr<Language::TypeScavenger::Result> result(new ObjCScavengerResult(candidate));
- results.insert(std::move(result));
+ if (CompilerType candidate = ClangASTContext::GetTypeForDecl(decl))
+ {
+ result = true;
+ std::unique_ptr<Language::TypeScavenger::Result> result(new ObjCScavengerResult(candidate));
+ results.insert(std::move(result));
+ }
}
}
}
}
}
}
+
return result;
}
OpenPOWER on IntegriCloud