diff options
author | Alex Langford <apl@fb.com> | 2019-07-02 19:53:07 +0000 |
---|---|---|
committer | Alex Langford <apl@fb.com> | 2019-07-02 19:53:07 +0000 |
commit | 8055cbc4490932e617e5dd0278a38e498adee98c (patch) | |
tree | 291371f3046f1de046491e091254af0ed3d8e312 /lldb/source/Plugins/Language/ObjC | |
parent | 99316043bbce99081d977a276e8a4c879cfa9de2 (diff) | |
download | bcm5719-llvm-8055cbc4490932e617e5dd0278a38e498adee98c.tar.gz bcm5719-llvm-8055cbc4490932e617e5dd0278a38e498adee98c.zip |
[Symbol] Add DeclVendor::FindTypes
Summary:
Following up on the plan I outlined in D63622, we can remove the
dependence on clang in all the places where we only want to find the
types from the DeclVendor. This means that currently DeclVendor depends
on clang, but centralizing the dependency makes it easier to refactor
cleanly.
Differential Revision: https://reviews.llvm.org/D63853
llvm-svn: 364962
Diffstat (limited to 'lldb/source/Plugins/Language/ObjC')
-rw-r--r-- | lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp | 44 |
1 files changed, 15 insertions, 29 deletions
diff --git a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp index bce7e93ad3a..fc0c933e13f 100644 --- a/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp +++ b/lldb/source/Plugins/Language/ObjC/ObjCLanguage.cpp @@ -932,25 +932,16 @@ std::unique_ptr<Language::TypeScavenger> ObjCLanguage::GetTypeScavenger() { ResultSet &results) override { bool result = false; - Process *process = exe_scope->CalculateProcess().get(); - if (process) { - auto objc_runtime = ObjCLanguageRuntime::Get(*process); - if (objc_runtime) { - auto decl_vendor = objc_runtime->GetDeclVendor(); - if (decl_vendor) { - std::vector<clang::NamedDecl *> decls; + if (auto *process = exe_scope->CalculateProcess().get()) { + if (auto *objc_runtime = ObjCLanguageRuntime::Get(*process)) { + if (auto *decl_vendor = objc_runtime->GetDeclVendor()) { ConstString name(key); - decl_vendor->FindDecls(name, true, UINT32_MAX, decls); - for (auto decl : decls) { - if (decl) { - if (CompilerType candidate = - ClangASTContext::GetTypeForDecl(decl)) { - result = true; - std::unique_ptr<Language::TypeScavenger::Result> result( - new ObjCScavengerResult(candidate)); - results.insert(std::move(result)); - } - } + for (const CompilerType &type : + decl_vendor->FindTypes(name, /*max_matches*/ UINT32_MAX)) { + result = true; + std::unique_ptr<Language::TypeScavenger::Result> result( + new ObjCScavengerResult(type)); + results.insert(std::move(result)); } } } @@ -968,21 +959,16 @@ std::unique_ptr<Language::TypeScavenger> ObjCLanguage::GetTypeScavenger() { ResultSet &results) override { bool result = false; - Target *target = exe_scope->CalculateTarget().get(); - if (target) { - if (auto clang_modules_decl_vendor = + if (auto *target = exe_scope->CalculateTarget().get()) { + if (auto *clang_modules_decl_vendor = target->GetClangModulesDeclVendor()) { - std::vector<clang::NamedDecl *> decls; ConstString key_cs(key); - - if (clang_modules_decl_vendor->FindDecls(key_cs, false, UINT32_MAX, - decls) > 0 && - !decls.empty()) { - CompilerType module_type = - ClangASTContext::GetTypeForDecl(decls.front()); + auto types = clang_modules_decl_vendor->FindTypes( + key_cs, /*max_matches*/ UINT32_MAX); + if (!types.empty()) { result = true; std::unique_ptr<Language::TypeScavenger::Result> result( - new ObjCScavengerResult(module_type)); + new ObjCScavengerResult(types.front())); results.insert(std::move(result)); } } |