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