To further clarify all the member functions of CompilerDecl e.g.: GetMangledName(…) GetDeclContext(…)
End up passing m_opaque_decl as an argument to a member function of m_type_system and in these member functions they unconditionally cast the argument to Decl* so why not make m_opaque_decl a Decl* > On Jan 2, 2020, at 4:20 PM, Shafik Yaghmour via lldb-commits > <lldb-commits@lists.llvm.org> wrote: > > Apologies, m_opaque_decl member of CompilerDecl and operator < in > CompilerDecl.h > >> On Jan 2, 2020, at 3:54 PM, Raphael “Teemperor” Isemann >> <teempe...@gmail.com> wrote: >> >> Not sure if I can follow. What variable should just be a Decl* and what >> operator<? >> >> (Also yeah that reinterpret_cast could also be a static_cast) >> >>> On Jan 3, 2020, at 12:38 AM, Shafik Yaghmour <syaghm...@apple.com> wrote: >>> >>> 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 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits