I am not crazy about the reinterpret_cast although if we look inside CompilerDecl impl we can see that basically it is always assuming it is a Decl* and just C-style casts it as such. So why not just make it a Decl*
Also operator<(…) is super sketchy doing a < on void* > On Dec 28, 2019, at 6:52 AM, Raphael Isemann via lldb-commits > <lldb-commits@lists.llvm.org> wrote: > > > Author: Raphael Isemann > Date: 2019-12-28T15:20:19+01:00 > New Revision: 8612e92ed590e615f9f56e4fb86a1fdaf3a39e15 > > URL: > https://github.com/llvm/llvm-project/commit/8612e92ed590e615f9f56e4fb86a1fdaf3a39e15 > DIFF: > https://github.com/llvm/llvm-project/commit/8612e92ed590e615f9f56e4fb86a1fdaf3a39e15.diff > > LOG: [lldb][NFC] Remove GetASTContext call in ClangDeclVendor > > Instead of returning NamedDecls and then calling GetASTContext > to find back the ClangASTContext we used can just implement the > FindDecl variant that returns CompilerDecls (and implement the > other function by throwing away the ClangASTContext part of the > compiler decl). > > Added: > > > Modified: > lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp > lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.h > lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp > > lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp > > lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.h > > Removed: > > > > ################################################################################ > diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp > b/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp > index c59722b7b4f8..0c5796650d45 100644 > --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp > +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp > @@ -15,16 +15,17 @@ using namespace lldb_private; > > uint32_t ClangDeclVendor::FindDecls(ConstString name, bool append, > uint32_t max_matches, > - std::vector<CompilerDecl> &decls) { > + std::vector<clang::NamedDecl *> &decls) { > if (!append) > decls.clear(); > > - std::vector<clang::NamedDecl *> named_decls; > - uint32_t ret = FindDecls(name, /*append*/ false, max_matches, named_decls); > - for (auto *named_decl : named_decls) { > - decls.push_back(CompilerDecl( > - ClangASTContext::GetASTContext(&named_decl->getASTContext()), > - named_decl)); > + std::vector<CompilerDecl> compiler_decls; > + uint32_t ret = FindDecls(name, /*append*/ false, max_matches, > compiler_decls); > + for (CompilerDecl compiler_decl : compiler_decls) { > + clang::Decl *d = > + reinterpret_cast<clang::Decl *>(compiler_decl.GetOpaqueDecl()); > + clang::NamedDecl *nd = llvm::cast<clang::NamedDecl>(d); > + decls.push_back(nd); > } > return ret; > } > > diff --git a/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.h > b/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.h > index 85a10400a201..0c888de08841 100644 > --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.h > +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.h > @@ -21,12 +21,10 @@ class ClangDeclVendor : public DeclVendor { > > virtual ~ClangDeclVendor() {} > > - uint32_t FindDecls(ConstString name, bool append, uint32_t max_matches, > - std::vector<CompilerDecl> &decls) override; > + using DeclVendor::FindDecls; > > - virtual uint32_t FindDecls(ConstString name, bool append, > - uint32_t max_matches, > - std::vector<clang::NamedDecl *> &decls) = 0; > + uint32_t FindDecls(ConstString name, bool append, uint32_t max_matches, > + std::vector<clang::NamedDecl *> &decls); > > static bool classof(const DeclVendor *vendor) { > return vendor->GetKind() >= eClangDeclVendor && > > diff --git > a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp > b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp > index ff0905dda4ef..0696c669f2e2 100644 > --- a/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp > +++ b/lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp > @@ -80,7 +80,7 @@ class ClangModulesDeclVendorImpl : public > ClangModulesDeclVendor { > Stream &error_stream) override; > > uint32_t FindDecls(ConstString name, bool append, uint32_t max_matches, > - std::vector<clang::NamedDecl *> &decls) override; > + std::vector<CompilerDecl> &decls) override; > > void ForEachMacro(const ModuleVector &modules, > std::function<bool(const std::string &)> handler) > override; > @@ -356,7 +356,7 @@ bool ClangModulesDeclVendorImpl::AddModulesForCompileUnit( > uint32_t > ClangModulesDeclVendorImpl::FindDecls(ConstString name, bool append, > uint32_t max_matches, > - std::vector<clang::NamedDecl *> > &decls) { > + std::vector<CompilerDecl> &decls) { > if (!m_enabled) { > return 0; > } > @@ -382,7 +382,7 @@ ClangModulesDeclVendorImpl::FindDecls(ConstString name, > bool append, > if (num_matches >= max_matches) > return num_matches; > > - decls.push_back(named_decl); > + decls.push_back(CompilerDecl(m_ast_context.get(), named_decl)); > ++num_matches; > } > > > diff --git > a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp > > b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp > index 54f8397e1dad..29930c303b07 100644 > --- > a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp > +++ > b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp > @@ -537,10 +537,9 @@ bool > AppleObjCDeclVendor::FinishDecl(clang::ObjCInterfaceDecl *interface_decl) { > return true; > } > > -uint32_t > -AppleObjCDeclVendor::FindDecls(ConstString name, bool append, > - uint32_t max_matches, > - std::vector<clang::NamedDecl *> &decls) { > +uint32_t AppleObjCDeclVendor::FindDecls(ConstString name, bool append, > + uint32_t max_matches, > + std::vector<CompilerDecl> &decls) { > static unsigned int invocation_id = 0; > unsigned int current_id = invocation_id++; > > @@ -587,7 +586,7 @@ AppleObjCDeclVendor::FindDecls(ConstString name, bool > append, > current_id, result_iface_type.getAsString(), isa_value); > } > > - decls.push_back(result_iface_decl); > + decls.push_back(CompilerDecl(&m_ast_ctx, result_iface_decl)); > ret++; > break; > } else { > @@ -630,7 +629,7 @@ AppleObjCDeclVendor::FindDecls(ConstString name, bool > append, > new_iface_type.getAsString(), (uint64_t)isa); > } > > - decls.push_back(iface_decl); > + decls.push_back(CompilerDecl(&m_ast_ctx, iface_decl)); > ret++; > break; > } while (false); > > diff --git > a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.h > > b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.h > index 311113a27735..f49ca3540c2c 100644 > --- > a/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.h > +++ > b/lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.h > @@ -28,7 +28,7 @@ class AppleObjCDeclVendor : public ClangDeclVendor { > } > > uint32_t FindDecls(ConstString name, bool append, uint32_t max_matches, > - std::vector<clang::NamedDecl *> &decls) override; > + std::vector<CompilerDecl> &decls) override; > > friend class AppleObjCExternalASTSource; > > > > > _______________________________________________ > lldb-commits mailing list > lldb-commits@lists.llvm.org > https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits