Skip to content

Commit cc77d76

Browse files
authored
[lldb][DeclVendor] Remove ClangDeclVendor (#164380)
The `ClangDeclVendor` used to contain more Clang-specific code than it does nowadays. But at this point, all it does is wrap the `DeclVendor::FindDecls` call and copy the resulting decls into `std::vector<clang::NamedDecl*>`. I.e., it converts the generic `CompilerDecl`s to `clang::NamedDecl*`s. In my opinion at this point it doesn't do enough to justify making it part of the `DeclVendor` hierarchy. This patch removes the `ClangDeclVendor` and instead does the conversion at callsite.
1 parent e45b72d commit cc77d76

File tree

11 files changed

+28
-104
lines changed

11 files changed

+28
-104
lines changed

lldb/include/lldb/Symbol/DeclVendor.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ namespace lldb_private {
2020
class DeclVendor {
2121
public:
2222
enum DeclVendorKind {
23-
eClangDeclVendor,
2423
eClangModuleDeclVendor,
2524
eAppleObjCDeclVendor,
2625
eLastClangDeclVendor,

lldb/source/Plugins/ExpressionParser/Clang/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ add_lldb_library(lldbPluginExpressionParserClang
55
ClangASTImporter.cpp
66
ClangASTMetadata.cpp
77
ClangASTSource.cpp
8-
ClangDeclVendor.cpp
98
ClangExpressionDeclMap.cpp
109
ClangExpressionHelper.cpp
1110
ClangExpressionParser.cpp

lldb/source/Plugins/ExpressionParser/Clang/ClangASTSource.cpp

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88

99
#include "ClangASTSource.h"
1010

11-
#include "ClangDeclVendor.h"
1211
#include "ClangModulesDeclVendor.h"
1312

1413
#include "lldb/Core/Module.h"
@@ -799,15 +798,16 @@ void ClangASTSource::FindDeclInModules(NameSearchContext &context,
799798

800799
bool append = false;
801800
uint32_t max_matches = 1;
802-
std::vector<clang::NamedDecl *> decls;
801+
std::vector<CompilerDecl> decls;
803802

804803
if (!modules_decl_vendor->FindDecls(name, append, max_matches, decls))
805804
return;
806805

807806
LLDB_LOG(log, " CAS::FEVD Matching entity found for \"{0}\" in the modules",
808807
name);
809808

810-
clang::NamedDecl *const decl_from_modules = decls[0];
809+
auto *const decl_from_modules =
810+
llvm::cast<NamedDecl>(ClangUtil::GetDecl(decls[0]));
811811

812812
if (llvm::isa<clang::TypeDecl>(decl_from_modules) ||
813813
llvm::isa<clang::ObjCContainerDecl>(decl_from_modules) ||
@@ -849,16 +849,16 @@ void ClangASTSource::FindDeclInObjCRuntime(NameSearchContext &context,
849849

850850
bool append = false;
851851
uint32_t max_matches = 1;
852-
std::vector<clang::NamedDecl *> decls;
852+
std::vector<CompilerDecl> decls;
853853

854-
auto *clang_decl_vendor = llvm::cast<ClangDeclVendor>(decl_vendor);
854+
auto *clang_decl_vendor = llvm::cast<DeclVendor>(decl_vendor);
855855
if (!clang_decl_vendor->FindDecls(name, append, max_matches, decls))
856856
return;
857857

858858
LLDB_LOG(log, " CAS::FEVD Matching type found for \"{0}\" in the runtime",
859859
name);
860860

861-
clang::Decl *copied_decl = CopyDecl(decls[0]);
861+
clang::Decl *copied_decl = CopyDecl(ClangUtil::GetDecl(decls[0]));
862862
clang::NamedDecl *copied_named_decl =
863863
copied_decl ? dyn_cast<clang::NamedDecl>(copied_decl) : nullptr;
864864

@@ -1081,14 +1081,14 @@ void ClangASTSource::FindObjCMethodDecls(NameSearchContext &context) {
10811081
ConstString interface_name(interface_decl->getNameAsString().c_str());
10821082
bool append = false;
10831083
uint32_t max_matches = 1;
1084-
std::vector<clang::NamedDecl *> decls;
1084+
std::vector<CompilerDecl> decls;
10851085

10861086
if (!modules_decl_vendor->FindDecls(interface_name, append, max_matches,
10871087
decls))
10881088
break;
10891089

10901090
ObjCInterfaceDecl *interface_decl_from_modules =
1091-
dyn_cast<ObjCInterfaceDecl>(decls[0]);
1091+
dyn_cast<ObjCInterfaceDecl>(ClangUtil::GetDecl(decls[0]));
10921092

10931093
if (!interface_decl_from_modules)
10941094
break;
@@ -1121,15 +1121,15 @@ void ClangASTSource::FindObjCMethodDecls(NameSearchContext &context) {
11211121
ConstString interface_name(interface_decl->getNameAsString().c_str());
11221122
bool append = false;
11231123
uint32_t max_matches = 1;
1124-
std::vector<clang::NamedDecl *> decls;
1124+
std::vector<CompilerDecl> decls;
11251125

1126-
auto *clang_decl_vendor = llvm::cast<ClangDeclVendor>(decl_vendor);
1126+
auto *clang_decl_vendor = llvm::cast<DeclVendor>(decl_vendor);
11271127
if (!clang_decl_vendor->FindDecls(interface_name, append, max_matches,
11281128
decls))
11291129
break;
11301130

11311131
ObjCInterfaceDecl *runtime_interface_decl =
1132-
dyn_cast<ObjCInterfaceDecl>(decls[0]);
1132+
dyn_cast<ObjCInterfaceDecl>(ClangUtil::GetDecl(decls[0]));
11331133

11341134
if (!runtime_interface_decl)
11351135
break;
@@ -1254,13 +1254,13 @@ void ClangASTSource::FindObjCPropertyAndIvarDecls(NameSearchContext &context) {
12541254

12551255
bool append = false;
12561256
uint32_t max_matches = 1;
1257-
std::vector<clang::NamedDecl *> decls;
1257+
std::vector<CompilerDecl> decls;
12581258

12591259
if (!modules_decl_vendor->FindDecls(class_name, append, max_matches, decls))
12601260
break;
12611261

12621262
DeclFromUser<const ObjCInterfaceDecl> interface_decl_from_modules(
1263-
dyn_cast<ObjCInterfaceDecl>(decls[0]));
1263+
dyn_cast<ObjCInterfaceDecl>(ClangUtil::GetDecl(decls[0])));
12641264

12651265
if (!interface_decl_from_modules.IsValid())
12661266
break;
@@ -1297,14 +1297,14 @@ void ClangASTSource::FindObjCPropertyAndIvarDecls(NameSearchContext &context) {
12971297

12981298
bool append = false;
12991299
uint32_t max_matches = 1;
1300-
std::vector<clang::NamedDecl *> decls;
1300+
std::vector<CompilerDecl> decls;
13011301

1302-
auto *clang_decl_vendor = llvm::cast<ClangDeclVendor>(decl_vendor);
1302+
auto *clang_decl_vendor = llvm::cast<DeclVendor>(decl_vendor);
13031303
if (!clang_decl_vendor->FindDecls(class_name, append, max_matches, decls))
13041304
break;
13051305

13061306
DeclFromUser<const ObjCInterfaceDecl> interface_decl_from_runtime(
1307-
dyn_cast<ObjCInterfaceDecl>(decls[0]));
1307+
dyn_cast<ObjCInterfaceDecl>(ClangUtil::GetDecl(decls[0])));
13081308

13091309
if (!interface_decl_from_runtime.IsValid())
13101310
break;

lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.cpp

Lines changed: 0 additions & 31 deletions
This file was deleted.

lldb/source/Plugins/ExpressionParser/Clang/ClangDeclVendor.h

Lines changed: 0 additions & 43 deletions
This file was deleted.

lldb/source/Plugins/ExpressionParser/Clang/ClangExpressionDeclMap.cpp

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1023,13 +1023,14 @@ void ClangExpressionDeclMap::LookupInModulesDeclVendor(
10231023

10241024
bool append = false;
10251025
uint32_t max_matches = 1;
1026-
std::vector<clang::NamedDecl *> decls;
1026+
std::vector<CompilerDecl> decls;
10271027

10281028
if (!modules_decl_vendor->FindDecls(name, append, max_matches, decls))
10291029
return;
10301030

10311031
assert(!decls.empty() && "FindDecls returned true but no decls?");
1032-
clang::NamedDecl *const decl_from_modules = decls[0];
1032+
auto *const decl_from_modules =
1033+
llvm::cast<NamedDecl>(ClangUtil::GetDecl(decls[0]));
10331034

10341035
LLDB_LOG(log,
10351036
" CAS::FEVD Matching decl found for "
@@ -1223,7 +1224,7 @@ bool ClangExpressionDeclMap::LookupFunction(
12231224

12241225
Target *target = m_parser_vars->m_exe_ctx.GetTargetPtr();
12251226

1226-
std::vector<clang::NamedDecl *> decls_from_modules;
1227+
std::vector<CompilerDecl> decls_from_modules;
12271228

12281229
if (target) {
12291230
if (std::shared_ptr<ClangModulesDeclVendor> decl_vendor =
@@ -1314,7 +1315,8 @@ bool ClangExpressionDeclMap::LookupFunction(
13141315
}
13151316

13161317
if (!found_function_with_type_info) {
1317-
for (clang::NamedDecl *decl : decls_from_modules) {
1318+
for (const CompilerDecl &compiler_decl : decls_from_modules) {
1319+
clang::Decl *decl = ClangUtil::GetDecl(compiler_decl);
13181320
if (llvm::isa<clang::FunctionDecl>(decl)) {
13191321
clang::NamedDecl *copied_decl =
13201322
llvm::cast_or_null<FunctionDecl>(CopyDecl(decl));

lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -226,7 +226,7 @@ void StoringDiagnosticConsumer::SetCurrentModuleProgress(
226226
}
227227

228228
ClangModulesDeclVendor::ClangModulesDeclVendor()
229-
: ClangDeclVendor(eClangModuleDeclVendor) {}
229+
: DeclVendor(eClangModuleDeclVendor) {}
230230

231231
ClangModulesDeclVendor::~ClangModulesDeclVendor() = default;
232232

lldb/source/Plugins/ExpressionParser/Clang/ClangModulesDeclVendor.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,17 +9,16 @@
99
#ifndef LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_CLANGMODULESDECLVENDOR_H
1010
#define LLDB_SOURCE_PLUGINS_EXPRESSIONPARSER_CLANG_CLANGMODULESDECLVENDOR_H
1111

12+
#include "lldb/Symbol/DeclVendor.h"
1213
#include "lldb/Symbol/SourceModule.h"
1314
#include "lldb/Target/Platform.h"
1415

15-
#include "Plugins/ExpressionParser/Clang/ClangDeclVendor.h"
16-
1716
#include <set>
1817
#include <vector>
1918

2019
namespace lldb_private {
2120

22-
class ClangModulesDeclVendor : public ClangDeclVendor {
21+
class ClangModulesDeclVendor : public DeclVendor {
2322
public:
2423
// Constructors and Destructors
2524
ClangModulesDeclVendor();

lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ class lldb_private::AppleObjCExternalASTSource
131131
};
132132

133133
AppleObjCDeclVendor::AppleObjCDeclVendor(ObjCLanguageRuntime &runtime)
134-
: ClangDeclVendor(eAppleObjCDeclVendor), m_runtime(runtime),
134+
: DeclVendor(eAppleObjCDeclVendor), m_runtime(runtime),
135135
m_type_realizer_sp(m_runtime.GetEncodingToType()) {
136136
m_ast_ctx = std::make_shared<TypeSystemClang>(
137137
"AppleObjCDeclVendor AST",

lldb/source/Plugins/LanguageRuntime/ObjC/AppleObjCRuntime/AppleObjCDeclVendor.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,15 +11,15 @@
1111

1212
#include "lldb/lldb-private.h"
1313

14-
#include "Plugins/ExpressionParser/Clang/ClangDeclVendor.h"
1514
#include "Plugins/LanguageRuntime/ObjC/ObjCLanguageRuntime.h"
1615
#include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
16+
#include "lldb/Symbol/DeclVendor.h"
1717

1818
namespace lldb_private {
1919

2020
class AppleObjCExternalASTSource;
2121

22-
class AppleObjCDeclVendor : public ClangDeclVendor {
22+
class AppleObjCDeclVendor : public DeclVendor {
2323
public:
2424
AppleObjCDeclVendor(ObjCLanguageRuntime &runtime);
2525

0 commit comments

Comments
 (0)