forked from OSchip/llvm-project
[lldb] Move ClangModulesDeclVendor ownership to ClangPersistentVariables from Target
More decoupling of plugins and non-plugins. Target doesn't need to manage ClangModulesDeclVendor and ClangPersistentVariables is always available in situations where you need ClangModulesDeclVendor. Differential Revision: https://reviews.llvm.org/D102811
This commit is contained in:
parent
97a71ae625
commit
4c0b0de904
|
@ -37,8 +37,6 @@
|
|||
|
||||
namespace lldb_private {
|
||||
|
||||
class ClangModulesDeclVendor;
|
||||
|
||||
OptionEnumValues GetDynamicValueTypes();
|
||||
|
||||
enum InlineStrategy {
|
||||
|
@ -1336,8 +1334,6 @@ public:
|
|||
|
||||
SourceManager &GetSourceManager();
|
||||
|
||||
ClangModulesDeclVendor *GetClangModulesDeclVendor();
|
||||
|
||||
// Methods.
|
||||
lldb::SearchFilterSP
|
||||
GetSearchFilterForModule(const FileSpec *containingModule);
|
||||
|
@ -1421,8 +1417,6 @@ protected:
|
|||
typedef std::map<lldb::LanguageType, lldb::REPLSP> REPLMap;
|
||||
REPLMap m_repl_map;
|
||||
|
||||
std::unique_ptr<ClangModulesDeclVendor> m_clang_modules_decl_vendor_up;
|
||||
|
||||
lldb::SourceManagerUP m_source_manager_up;
|
||||
|
||||
typedef std::map<lldb::user_id_t, StopHookSP> StopHookCollection;
|
||||
|
|
|
@ -850,8 +850,8 @@ void ClangASTSource::FindDeclInModules(NameSearchContext &context,
|
|||
ConstString name) {
|
||||
Log *log(lldb_private::GetLogIfAllCategoriesSet(LIBLLDB_LOG_EXPRESSIONS));
|
||||
|
||||
ClangModulesDeclVendor *modules_decl_vendor =
|
||||
m_target->GetClangModulesDeclVendor();
|
||||
std::shared_ptr<ClangModulesDeclVendor> modules_decl_vendor =
|
||||
GetClangModulesDeclVendor();
|
||||
if (!modules_decl_vendor)
|
||||
return;
|
||||
|
||||
|
@ -1143,8 +1143,8 @@ void ClangASTSource::FindObjCMethodDecls(NameSearchContext &context) {
|
|||
// Check the modules only if the debug information didn't have a complete
|
||||
// interface.
|
||||
|
||||
if (ClangModulesDeclVendor *modules_decl_vendor =
|
||||
m_target->GetClangModulesDeclVendor()) {
|
||||
if (std::shared_ptr<ClangModulesDeclVendor> modules_decl_vendor =
|
||||
GetClangModulesDeclVendor()) {
|
||||
ConstString interface_name(interface_decl->getNameAsString().c_str());
|
||||
bool append = false;
|
||||
uint32_t max_matches = 1;
|
||||
|
@ -1313,8 +1313,8 @@ void ClangASTSource::FindObjCPropertyAndIvarDecls(NameSearchContext &context) {
|
|||
// Check the modules only if the debug information didn't have a complete
|
||||
// interface.
|
||||
|
||||
ClangModulesDeclVendor *modules_decl_vendor =
|
||||
m_target->GetClangModulesDeclVendor();
|
||||
std::shared_ptr<ClangModulesDeclVendor> modules_decl_vendor =
|
||||
GetClangModulesDeclVendor();
|
||||
|
||||
if (!modules_decl_vendor)
|
||||
break;
|
||||
|
@ -1750,3 +1750,10 @@ CompilerType ClangASTSource::GuardedCopyType(const CompilerType &src_type) {
|
|||
|
||||
return m_clang_ast_context->GetType(copied_qual_type);
|
||||
}
|
||||
|
||||
std::shared_ptr<ClangModulesDeclVendor>
|
||||
ClangASTSource::GetClangModulesDeclVendor() {
|
||||
auto persistent_vars = llvm::cast<ClangPersistentVariables>(
|
||||
m_target->GetPersistentExpressionStateForLanguage(lldb::eLanguageTypeC));
|
||||
return persistent_vars->GetClangModulesDeclVendor();
|
||||
}
|
||||
|
|
|
@ -314,6 +314,8 @@ protected:
|
|||
/// The imported type.
|
||||
CompilerType GuardedCopyType(const CompilerType &src_type);
|
||||
|
||||
std::shared_ptr<ClangModulesDeclVendor> GetClangModulesDeclVendor();
|
||||
|
||||
public:
|
||||
/// Returns true if a name should be ignored by name lookup.
|
||||
///
|
||||
|
|
|
@ -1021,7 +1021,8 @@ void ClangExpressionDeclMap::LookupInModulesDeclVendor(
|
|||
if (!m_target)
|
||||
return;
|
||||
|
||||
auto *modules_decl_vendor = m_target->GetClangModulesDeclVendor();
|
||||
std::shared_ptr<ClangModulesDeclVendor> modules_decl_vendor =
|
||||
GetClangModulesDeclVendor();
|
||||
if (!modules_decl_vendor)
|
||||
return;
|
||||
|
||||
|
@ -1213,8 +1214,8 @@ void ClangExpressionDeclMap::LookupFunction(
|
|||
std::vector<clang::NamedDecl *> decls_from_modules;
|
||||
|
||||
if (target) {
|
||||
if (ClangModulesDeclVendor *decl_vendor =
|
||||
target->GetClangModulesDeclVendor()) {
|
||||
if (std::shared_ptr<ClangModulesDeclVendor> decl_vendor =
|
||||
GetClangModulesDeclVendor()) {
|
||||
decl_vendor->FindDecls(name, false, UINT32_MAX, decls_from_modules);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -687,11 +687,11 @@ ClangExpressionParser::ClangExpressionParser(
|
|||
break;
|
||||
}
|
||||
|
||||
if (ClangModulesDeclVendor *decl_vendor =
|
||||
target_sp->GetClangModulesDeclVendor()) {
|
||||
if (auto *clang_persistent_vars = llvm::cast<ClangPersistentVariables>(
|
||||
target_sp->GetPersistentExpressionStateForLanguage(
|
||||
lldb::eLanguageTypeC))) {
|
||||
if (auto *clang_persistent_vars = llvm::cast<ClangPersistentVariables>(
|
||||
target_sp->GetPersistentExpressionStateForLanguage(
|
||||
lldb::eLanguageTypeC))) {
|
||||
if (std::shared_ptr<ClangModulesDeclVendor> decl_vendor =
|
||||
clang_persistent_vars->GetClangModulesDeclVendor()) {
|
||||
std::unique_ptr<PPCallbacks> pp_callbacks(
|
||||
new LLDBPreprocessorCallbacks(*decl_vendor, *clang_persistent_vars,
|
||||
m_compiler->getSourceManager()));
|
||||
|
|
|
@ -318,10 +318,11 @@ bool ClangExpressionSourceCode::GetText(
|
|||
}
|
||||
}
|
||||
|
||||
ClangModulesDeclVendor *decl_vendor = target->GetClangModulesDeclVendor();
|
||||
auto *persistent_vars = llvm::cast<ClangPersistentVariables>(
|
||||
target->GetPersistentExpressionStateForLanguage(lldb::eLanguageTypeC));
|
||||
if (decl_vendor && persistent_vars) {
|
||||
std::shared_ptr<ClangModulesDeclVendor> decl_vendor =
|
||||
persistent_vars->GetClangModulesDeclVendor();
|
||||
if (decl_vendor) {
|
||||
const ClangModulesDeclVendor::ModuleVector &hand_imported_modules =
|
||||
persistent_vars->GetHandLoadedClangModules();
|
||||
ClangModulesDeclVendor::ModuleVector modules_for_macros;
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
|
||||
#include "ClangPersistentVariables.h"
|
||||
#include "ClangASTImporter.h"
|
||||
#include "ClangModulesDeclVendor.h"
|
||||
|
||||
#include "Plugins/TypeSystem/Clang/TypeSystemClang.h"
|
||||
#include "lldb/Core/Value.h"
|
||||
|
@ -23,8 +24,10 @@
|
|||
using namespace lldb;
|
||||
using namespace lldb_private;
|
||||
|
||||
ClangPersistentVariables::ClangPersistentVariables()
|
||||
: lldb_private::PersistentExpressionState(LLVMCastKind::eKindClang) {}
|
||||
ClangPersistentVariables::ClangPersistentVariables(
|
||||
std::shared_ptr<Target> target_sp)
|
||||
: lldb_private::PersistentExpressionState(LLVMCastKind::eKindClang),
|
||||
m_target_sp(target_sp) {}
|
||||
|
||||
ExpressionVariableSP ClangPersistentVariables::CreatePersistentVariable(
|
||||
const lldb::ValueObjectSP &valobj_sp) {
|
||||
|
@ -109,6 +112,15 @@ ClangPersistentVariables::GetClangASTImporter() {
|
|||
return m_ast_importer_sp;
|
||||
}
|
||||
|
||||
std::shared_ptr<ClangModulesDeclVendor>
|
||||
ClangPersistentVariables::GetClangModulesDeclVendor() {
|
||||
if (!m_modules_decl_vendor_sp) {
|
||||
m_modules_decl_vendor_sp.reset(
|
||||
ClangModulesDeclVendor::Create(*m_target_sp.get()));
|
||||
}
|
||||
return m_modules_decl_vendor_sp;
|
||||
}
|
||||
|
||||
ConstString
|
||||
ClangPersistentVariables::GetNextPersistentVariableName(bool is_error) {
|
||||
llvm::SmallString<64> name;
|
||||
|
|
|
@ -19,6 +19,8 @@
|
|||
namespace lldb_private {
|
||||
|
||||
class ClangASTImporter;
|
||||
class ClangModulesDeclVendor;
|
||||
class Target;
|
||||
class TypeSystemClang;
|
||||
|
||||
/// \class ClangPersistentVariables ClangPersistentVariables.h
|
||||
|
@ -30,7 +32,7 @@ class TypeSystemClang;
|
|||
/// 0-based counter for naming result variables.
|
||||
class ClangPersistentVariables : public PersistentExpressionState {
|
||||
public:
|
||||
ClangPersistentVariables();
|
||||
ClangPersistentVariables(std::shared_ptr<Target> target_sp);
|
||||
|
||||
~ClangPersistentVariables() override = default;
|
||||
|
||||
|
@ -40,6 +42,7 @@ public:
|
|||
}
|
||||
|
||||
std::shared_ptr<ClangASTImporter> GetClangASTImporter();
|
||||
std::shared_ptr<ClangModulesDeclVendor> GetClangModulesDeclVendor();
|
||||
|
||||
lldb::ExpressionVariableSP
|
||||
CreatePersistentVariable(const lldb::ValueObjectSP &valobj_sp) override;
|
||||
|
@ -106,6 +109,8 @@ private:
|
|||
///these are the highest-
|
||||
///< priority source for macros.
|
||||
std::shared_ptr<ClangASTImporter> m_ast_importer_sp;
|
||||
std::shared_ptr<ClangModulesDeclVendor> m_modules_decl_vendor_sp;
|
||||
std::shared_ptr<Target> m_target_sp;
|
||||
};
|
||||
|
||||
} // namespace lldb_private
|
||||
|
|
|
@ -352,10 +352,6 @@ bool ClangUserExpression::SetupPersistentState(DiagnosticManager &diagnostic_man
|
|||
|
||||
static void SetupDeclVendor(ExecutionContext &exe_ctx, Target *target,
|
||||
DiagnosticManager &diagnostic_manager) {
|
||||
ClangModulesDeclVendor *decl_vendor = target->GetClangModulesDeclVendor();
|
||||
if (!decl_vendor)
|
||||
return;
|
||||
|
||||
if (!target->GetEnableAutoImportClangModules())
|
||||
return;
|
||||
|
||||
|
@ -364,6 +360,11 @@ static void SetupDeclVendor(ExecutionContext &exe_ctx, Target *target,
|
|||
if (!persistent_state)
|
||||
return;
|
||||
|
||||
std::shared_ptr<ClangModulesDeclVendor> decl_vendor =
|
||||
persistent_state->GetClangModulesDeclVendor();
|
||||
if (!decl_vendor)
|
||||
return;
|
||||
|
||||
StackFrame *frame = exe_ctx.GetFramePtr();
|
||||
if (!frame)
|
||||
return;
|
||||
|
|
|
@ -990,8 +990,11 @@ std::unique_ptr<Language::TypeScavenger> ObjCLanguage::GetTypeScavenger() {
|
|||
bool result = false;
|
||||
|
||||
if (auto *target = exe_scope->CalculateTarget().get()) {
|
||||
if (auto *clang_modules_decl_vendor =
|
||||
target->GetClangModulesDeclVendor()) {
|
||||
auto *persistent_vars = llvm::cast<ClangPersistentVariables>(
|
||||
target->GetPersistentExpressionStateForLanguage(
|
||||
lldb::eLanguageTypeC));
|
||||
if (std::shared_ptr<ClangModulesDeclVendor> clang_modules_decl_vendor =
|
||||
persistent_vars->GetClangModulesDeclVendor()) {
|
||||
ConstString key_cs(key);
|
||||
auto types = clang_modules_decl_vendor->FindTypes(
|
||||
key_cs, /*max_matches*/ UINT32_MAX);
|
||||
|
|
|
@ -9653,7 +9653,8 @@ ScratchTypeSystemClang::ScratchTypeSystemClang(Target &target,
|
|||
llvm::Triple triple)
|
||||
: TypeSystemClang("scratch ASTContext", triple), m_triple(triple),
|
||||
m_target_wp(target.shared_from_this()),
|
||||
m_persistent_variables(new ClangPersistentVariables) {
|
||||
m_persistent_variables(
|
||||
new ClangPersistentVariables(target.shared_from_this())) {
|
||||
m_scratch_ast_source_up = CreateASTSource();
|
||||
m_scratch_ast_source_up->InstallASTContext(*this);
|
||||
llvm::IntrusiveRefCntPtr<clang::ExternalASTSource> proxy_ast_source(
|
||||
|
|
|
@ -81,7 +81,6 @@ add_lldb_library(lldbTarget
|
|||
lldbInterpreter
|
||||
lldbSymbol
|
||||
lldbUtility
|
||||
lldbPluginExpressionParserClang
|
||||
lldbPluginProcessUtility
|
||||
|
||||
LINK_COMPONENTS
|
||||
|
|
|
@ -2546,23 +2546,6 @@ SourceManager &Target::GetSourceManager() {
|
|||
return *m_source_manager_up;
|
||||
}
|
||||
|
||||
ClangModulesDeclVendor *Target::GetClangModulesDeclVendor() {
|
||||
static std::mutex s_clang_modules_decl_vendor_mutex; // If this is contended
|
||||
// we can make it
|
||||
// per-target
|
||||
|
||||
{
|
||||
std::lock_guard<std::mutex> guard(s_clang_modules_decl_vendor_mutex);
|
||||
|
||||
if (!m_clang_modules_decl_vendor_up) {
|
||||
m_clang_modules_decl_vendor_up.reset(
|
||||
ClangModulesDeclVendor::Create(*this));
|
||||
}
|
||||
}
|
||||
|
||||
return m_clang_modules_decl_vendor_up.get();
|
||||
}
|
||||
|
||||
Target::StopHookSP Target::CreateStopHook(StopHook::StopHookKind kind) {
|
||||
lldb::user_id_t new_uid = ++m_stop_hook_next_id;
|
||||
Target::StopHookSP stop_hook_sp;
|
||||
|
|
Loading…
Reference in New Issue