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