[Lldb-commits] [lldb] 81a537e - [lldb] Use range-based for loops over plugins (#184837)
via lldb-commits
lldb-commits at lists.llvm.org
Fri Mar 6 14:48:38 PST 2026
Author: Jonas Devlieghere
Date: 2026-03-06T22:48:33Z
New Revision: 81a537e7081b76d41aa0422924d334a713fdd779
URL: https://github.com/llvm/llvm-project/commit/81a537e7081b76d41aa0422924d334a713fdd779
DIFF: https://github.com/llvm/llvm-project/commit/81a537e7081b76d41aa0422924d334a713fdd779.diff
LOG: [lldb] Use range-based for loops over plugins (#184837)
This PR replaces the Get*CallbackAtIndex pattern in the PluginManager
with returning a snapshot of callbacks that the caller can iterate over
using a range-based for loop. This is a continuation of #184452 which
added thread safety by using snapshots. However, that introduced a bunch
of unnecessary copies which are largely eliminated again by getting the
snapshot once when gather all the callbacks, rather than doing that on
each iteration when querying a plugin for a given index. It also
eliminates the possibility of the snapshot changing underneath you when
iterating over the plugins.
This change was largely mechanical and I used Claude to do the menial
work of updating the signatures and call sites.
Added:
Modified:
lldb/include/lldb/Core/PluginManager.h
lldb/source/Commands/CommandObjectThread.cpp
lldb/source/Core/Disassembler.cpp
lldb/source/Core/DynamicLoader.cpp
lldb/source/Core/EmulateInstruction.cpp
lldb/source/Core/Highlighter.cpp
lldb/source/Core/PluginManager.cpp
lldb/source/Expression/REPL.cpp
lldb/source/Symbol/ObjectContainer.cpp
lldb/source/Symbol/ObjectFile.cpp
lldb/source/Symbol/SymbolFile.cpp
lldb/source/Symbol/SymbolVendor.cpp
lldb/source/Symbol/TypeSystem.cpp
lldb/source/Target/ABI.cpp
lldb/source/Target/InstrumentationRuntime.cpp
lldb/source/Target/JITLoader.cpp
lldb/source/Target/Language.cpp
lldb/source/Target/LanguageRuntime.cpp
lldb/source/Target/MemoryHistory.cpp
lldb/source/Target/OperatingSystem.cpp
lldb/source/Target/Platform.cpp
lldb/source/Target/Process.cpp
lldb/source/Target/SyntheticFrameProvider.cpp
lldb/source/Target/SystemRuntime.cpp
lldb/source/Target/UnwindAssembly.cpp
lldb/unittests/Core/PluginManagerTest.cpp
Removed:
################################################################################
diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h
index 26680bf95fae6..e8d46d129bff7 100644
--- a/lldb/include/lldb/Core/PluginManager.h
+++ b/lldb/include/lldb/Core/PluginManager.h
@@ -82,6 +82,46 @@ struct PluginNamespace {
SetPluginEnabled set_enabled;
};
+struct InstrumentationRuntimeCallbacks {
+ InstrumentationRuntimeCreateInstance create_callback;
+ InstrumentationRuntimeGetType get_type_callback;
+};
+
+struct LanguageRuntimeCallbacks {
+ LanguageRuntimeCreateInstance create_callback;
+ LanguageRuntimeGetCommandObject command_callback;
+ LanguageRuntimeGetExceptionPrecondition precondition_callback;
+};
+
+struct ObjectFileCallbacks {
+ ObjectFileCreateInstance create_callback;
+ ObjectFileCreateMemoryInstance create_memory_callback;
+ ObjectFileGetModuleSpecifications get_module_specifications;
+ ObjectFileSaveCore save_core;
+};
+
+struct ObjectContainerCallbacks {
+ ObjectContainerCreateInstance create_callback;
+ ObjectContainerCreateMemoryInstance create_memory_callback;
+ ObjectFileGetModuleSpecifications get_module_specifications;
+};
+
+struct StructuredDataPluginCallbacks {
+ StructuredDataPluginCreateInstance create_callback;
+ StructuredDataFilterLaunchInfo filter_callback;
+};
+
+struct REPLCallbacks {
+ REPLCreateInstance create_callback;
+ LanguageSet supported_languages;
+};
+
+struct TraceExporterCallbacks {
+ llvm::StringRef name;
+ TraceExporterCreateInstance create_callback;
+ ThreadTraceExportCommandCreator create_thread_trace_export_command;
+};
+
class PluginManager {
public:
static void Initialize();
@@ -130,7 +170,7 @@ class PluginManager {
static bool UnregisterPlugin(ABICreateInstance create_callback);
- static ABICreateInstance GetABICreateCallbackAtIndex(uint32_t idx);
+ static std::vector<ABICreateInstance> GetABICreateCallbacks();
// Architecture
static void RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
@@ -147,8 +187,8 @@ class PluginManager {
static bool UnregisterPlugin(DisassemblerCreateInstance create_callback);
- static DisassemblerCreateInstance
- GetDisassemblerCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<DisassemblerCreateInstance>
+ GetDisassemblerCreateCallbacks();
static DisassemblerCreateInstance
GetDisassemblerCreateCallbackForPluginName(llvm::StringRef name);
@@ -161,8 +201,8 @@ class PluginManager {
static bool UnregisterPlugin(DynamicLoaderCreateInstance create_callback);
- static DynamicLoaderCreateInstance
- GetDynamicLoaderCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<DynamicLoaderCreateInstance>
+ GetDynamicLoaderCreateCallbacks();
static DynamicLoaderCreateInstance
GetDynamicLoaderCreateCallbackForPluginName(llvm::StringRef name);
@@ -175,8 +215,7 @@ class PluginManager {
static bool UnregisterPlugin(JITLoaderCreateInstance create_callback);
- static JITLoaderCreateInstance
- GetJITLoaderCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<JITLoaderCreateInstance> GetJITLoaderCreateCallbacks();
// EmulateInstruction
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
@@ -185,8 +224,8 @@ class PluginManager {
static bool
UnregisterPlugin(EmulateInstructionCreateInstance create_callback);
- static EmulateInstructionCreateInstance
- GetEmulateInstructionCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<EmulateInstructionCreateInstance>
+ GetEmulateInstructionCreateCallbacks();
static EmulateInstructionCreateInstance
GetEmulateInstructionCreateCallbackForPluginName(llvm::StringRef name);
@@ -198,8 +237,8 @@ class PluginManager {
static bool UnregisterPlugin(OperatingSystemCreateInstance create_callback);
- static OperatingSystemCreateInstance
- GetOperatingSystemCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<OperatingSystemCreateInstance>
+ GetOperatingSystemCreateCallbacks();
static OperatingSystemCreateInstance
GetOperatingSystemCreateCallbackForPluginName(llvm::StringRef name);
@@ -212,7 +251,7 @@ class PluginManager {
static bool UnregisterPlugin(LanguageCreateInstance create_callback);
- static LanguageCreateInstance GetLanguageCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<LanguageCreateInstance> GetLanguageCreateCallbacks();
// LanguageRuntime
static bool RegisterPlugin(
@@ -223,14 +262,7 @@ class PluginManager {
static bool UnregisterPlugin(LanguageRuntimeCreateInstance create_callback);
- static LanguageRuntimeCreateInstance
- GetLanguageRuntimeCreateCallbackAtIndex(uint32_t idx);
-
- static LanguageRuntimeGetCommandObject
- GetLanguageRuntimeGetCommandObjectAtIndex(uint32_t idx);
-
- static LanguageRuntimeGetExceptionPrecondition
- GetLanguageRuntimeGetExceptionPreconditionAtIndex(uint32_t idx);
+ static std::vector<LanguageRuntimeCallbacks> GetLanguageRuntimeCallbacks();
// SystemRuntime
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
@@ -238,8 +270,8 @@ class PluginManager {
static bool UnregisterPlugin(SystemRuntimeCreateInstance create_callback);
- static SystemRuntimeCreateInstance
- GetSystemRuntimeCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<SystemRuntimeCreateInstance>
+ GetSystemRuntimeCreateCallbacks();
// ObjectFile
static bool
@@ -254,14 +286,7 @@ class PluginManager {
static bool IsRegisteredObjectFilePluginName(llvm::StringRef name);
- static ObjectFileCreateInstance
- GetObjectFileCreateCallbackAtIndex(uint32_t idx);
-
- static ObjectFileCreateMemoryInstance
- GetObjectFileCreateMemoryCallbackAtIndex(uint32_t idx);
-
- static ObjectFileGetModuleSpecifications
- GetObjectFileGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
+ static std::vector<ObjectFileCallbacks> GetObjectFileCallbacks();
static ObjectFileCreateMemoryInstance
GetObjectFileCreateMemoryCallbackForPluginName(llvm::StringRef name);
@@ -279,14 +304,7 @@ class PluginManager {
static bool UnregisterPlugin(ObjectContainerCreateInstance create_callback);
- static ObjectContainerCreateInstance
- GetObjectContainerCreateCallbackAtIndex(uint32_t idx);
-
- static ObjectContainerCreateMemoryInstance
- GetObjectContainerCreateMemoryCallbackAtIndex(uint32_t idx);
-
- static ObjectFileGetModuleSpecifications
- GetObjectContainerGetModuleSpecificationsCallbackAtIndex(uint32_t idx);
+ static std::vector<ObjectContainerCallbacks> GetObjectContainerCallbacks();
// Platform
static bool
@@ -296,7 +314,7 @@ class PluginManager {
static bool UnregisterPlugin(PlatformCreateInstance create_callback);
- static PlatformCreateInstance GetPlatformCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<PlatformCreateInstance> GetPlatformCreateCallbacks();
static PlatformCreateInstance
GetPlatformCreateCallbackForPluginName(llvm::StringRef name);
@@ -315,7 +333,7 @@ class PluginManager {
static bool UnregisterPlugin(ProcessCreateInstance create_callback);
- static ProcessCreateInstance GetProcessCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<ProcessCreateInstance> GetProcessCreateCallbacks();
static ProcessCreateInstance
GetProcessCreateCallbackForPluginName(llvm::StringRef name);
@@ -356,8 +374,8 @@ class PluginManager {
static bool UnregisterPlugin(ScriptInterpreterCreateInstance create_callback);
- static ScriptInterpreterCreateInstance
- GetScriptInterpreterCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<ScriptInterpreterCreateInstance>
+ GetScriptInterpreterCreateCallbacks();
static lldb::ScriptInterpreterSP
GetScriptInterpreterForLanguage(lldb::ScriptLanguage script_lang,
@@ -381,8 +399,8 @@ class PluginManager {
static SyntheticFrameProviderCreateInstance
GetSyntheticFrameProviderCreateCallbackForPluginName(llvm::StringRef name);
- static ScriptedFrameProviderCreateInstance
- GetScriptedFrameProviderCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<ScriptedFrameProviderCreateInstance>
+ GetScriptedFrameProviderCreateCallbacks();
// StructuredDataPlugin
@@ -427,12 +445,8 @@ class PluginManager {
static bool
UnregisterPlugin(StructuredDataPluginCreateInstance create_callback);
- static StructuredDataPluginCreateInstance
- GetStructuredDataPluginCreateCallbackAtIndex(uint32_t idx);
-
- static StructuredDataFilterLaunchInfo
- GetStructuredDataFilterCallbackAtIndex(uint32_t idx,
- bool &iteration_complete);
+ static std::vector<StructuredDataPluginCallbacks>
+ GetStructuredDataPluginCallbacks();
// SymbolFile
static bool
@@ -442,8 +456,7 @@ class PluginManager {
static bool UnregisterPlugin(SymbolFileCreateInstance create_callback);
- static SymbolFileCreateInstance
- GetSymbolFileCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<SymbolFileCreateInstance> GetSymbolFileCreateCallbacks();
// SymbolVendor
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
@@ -451,8 +464,8 @@ class PluginManager {
static bool UnregisterPlugin(SymbolVendorCreateInstance create_callback);
- static SymbolVendorCreateInstance
- GetSymbolVendorCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<SymbolVendorCreateInstance>
+ GetSymbolVendorCreateCallbacks();
// SymbolLocator
static bool RegisterPlugin(
@@ -469,8 +482,8 @@ class PluginManager {
static bool UnregisterPlugin(SymbolLocatorCreateInstance create_callback);
- static SymbolLocatorCreateInstance
- GetSymbolLocatorCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<SymbolLocatorCreateInstance>
+ GetSymbolLocatorCreateCallbacks();
static ModuleSpec LocateExecutableObjectFile(const ModuleSpec &module_spec,
StatisticsMap &map);
@@ -542,12 +555,7 @@ class PluginManager {
static bool UnregisterPlugin(TraceExporterCreateInstance create_callback);
- static llvm::StringRef GetTraceExporterPluginNameAtIndex(uint32_t index);
-
- /// Return the callback used to create the CommandObject that will be listed
- /// under "thread trace export". Can be \b null.
- static ThreadTraceExportCommandCreator
- GetThreadTraceExportCommandCreatorAtIndex(uint32_t index);
+ static std::vector<TraceExporterCallbacks> GetTraceExporterCallbacks();
// UnwindAssembly
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
@@ -555,8 +563,8 @@ class PluginManager {
static bool UnregisterPlugin(UnwindAssemblyCreateInstance create_callback);
- static UnwindAssemblyCreateInstance
- GetUnwindAssemblyCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<UnwindAssemblyCreateInstance>
+ GetUnwindAssemblyCreateCallbacks();
// MemoryHistory
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
@@ -564,8 +572,8 @@ class PluginManager {
static bool UnregisterPlugin(MemoryHistoryCreateInstance create_callback);
- static MemoryHistoryCreateInstance
- GetMemoryHistoryCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<MemoryHistoryCreateInstance>
+ GetMemoryHistoryCreateCallbacks();
// InstrumentationRuntime
static bool
@@ -576,11 +584,8 @@ class PluginManager {
static bool
UnregisterPlugin(InstrumentationRuntimeCreateInstance create_callback);
- static InstrumentationRuntimeGetType
- GetInstrumentationRuntimeGetTypeCallbackAtIndex(uint32_t idx);
-
- static InstrumentationRuntimeCreateInstance
- GetInstrumentationRuntimeCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<InstrumentationRuntimeCallbacks>
+ GetInstrumentationRuntimeCallbacks();
// TypeSystem
static bool RegisterPlugin(llvm::StringRef name, llvm::StringRef description,
@@ -590,8 +595,7 @@ class PluginManager {
static bool UnregisterPlugin(TypeSystemCreateInstance create_callback);
- static TypeSystemCreateInstance
- GetTypeSystemCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<TypeSystemCreateInstance> GetTypeSystemCreateCallbacks();
static LanguageSet GetAllTypeSystemSupportedLanguagesForTypes();
@@ -623,9 +627,7 @@ class PluginManager {
static bool UnregisterPlugin(REPLCreateInstance create_callback);
- static REPLCreateInstance GetREPLCreateCallbackAtIndex(uint32_t idx);
-
- static LanguageSet GetREPLSupportedLanguagesAtIndex(uint32_t idx);
+ static std::vector<REPLCallbacks> GetREPLCallbacks();
static LanguageSet GetREPLAllTypeSystemSupportedLanguages();
@@ -635,8 +637,7 @@ class PluginManager {
static bool UnregisterPlugin(HighlighterCreateInstance create_callback);
- static HighlighterCreateInstance
- GetHighlighterCreateCallbackAtIndex(uint32_t idx);
+ static std::vector<HighlighterCreateInstance> GetHighlighterCreateCallbacks();
// Some plug-ins might register a DebuggerInitializeCallback callback when
// registering the plug-in. After a new Debugger instance is created, this
diff --git a/lldb/source/Commands/CommandObjectThread.cpp b/lldb/source/Commands/CommandObjectThread.cpp
index bbec714642ec9..e870b86bc0a33 100644
--- a/lldb/source/Commands/CommandObjectThread.cpp
+++ b/lldb/source/Commands/CommandObjectThread.cpp
@@ -2031,15 +2031,10 @@ class CommandObjectTraceExport : public CommandObjectMultiword {
"process to
diff erent formats.",
"thread trace export <export-plugin> [<subcommand objects>]") {
- unsigned i = 0;
- for (llvm::StringRef plugin_name =
- PluginManager::GetTraceExporterPluginNameAtIndex(i);
- !plugin_name.empty();
- plugin_name = PluginManager::GetTraceExporterPluginNameAtIndex(i++)) {
- if (ThreadTraceExportCommandCreator command_creator =
- PluginManager::GetThreadTraceExportCommandCreatorAtIndex(i)) {
- LoadSubCommand(plugin_name, command_creator(interpreter));
- }
+ for (auto &cbs : PluginManager::GetTraceExporterCallbacks()) {
+ if (cbs.create_thread_trace_export_command)
+ LoadSubCommand(cbs.name,
+ cbs.create_thread_trace_export_command(interpreter));
}
}
};
diff --git a/lldb/source/Core/Disassembler.cpp b/lldb/source/Core/Disassembler.cpp
index c41863ff99a8a..3011b6aede3d2 100644
--- a/lldb/source/Core/Disassembler.cpp
+++ b/lldb/source/Core/Disassembler.cpp
@@ -78,10 +78,8 @@ DisassemblerSP Disassembler::FindPlugin(const ArchSpec &arch,
return disasm_sp;
}
} else {
- for (uint32_t idx = 0;
- (create_callback = PluginManager::GetDisassemblerCreateCallbackAtIndex(
- idx)) != nullptr;
- ++idx) {
+ for (auto create_callback :
+ PluginManager::GetDisassemblerCreateCallbacks()) {
if (auto disasm_sp = create_callback(arch, flavor, cpu, features))
return disasm_sp;
}
diff --git a/lldb/source/Core/DynamicLoader.cpp b/lldb/source/Core/DynamicLoader.cpp
index 8426d35cf4bff..0259e7e63a161 100644
--- a/lldb/source/Core/DynamicLoader.cpp
+++ b/lldb/source/Core/DynamicLoader.cpp
@@ -47,11 +47,8 @@ DynamicLoader *DynamicLoader::FindPlugin(Process *process,
return instance_up.release();
}
} else {
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetDynamicLoaderCreateCallbackAtIndex(idx)) !=
- nullptr;
- ++idx) {
+ for (auto create_callback :
+ PluginManager::GetDynamicLoaderCreateCallbacks()) {
std::unique_ptr<DynamicLoader> instance_up(
create_callback(process, false));
if (instance_up)
diff --git a/lldb/source/Core/EmulateInstruction.cpp b/lldb/source/Core/EmulateInstruction.cpp
index 634ce1075d54b..79ada4eef50a1 100644
--- a/lldb/source/Core/EmulateInstruction.cpp
+++ b/lldb/source/Core/EmulateInstruction.cpp
@@ -57,11 +57,8 @@ EmulateInstruction::FindPlugin(const ArchSpec &arch,
return emulate_insn_ptr;
}
} else {
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetEmulateInstructionCreateCallbackAtIndex(idx)) !=
- nullptr;
- ++idx) {
+ for (auto create_callback :
+ PluginManager::GetEmulateInstructionCreateCallbacks()) {
EmulateInstruction *emulate_insn_ptr =
create_callback(arch, supported_inst_type);
if (emulate_insn_ptr)
diff --git a/lldb/source/Core/Highlighter.cpp b/lldb/source/Core/Highlighter.cpp
index abb6d3fa024c5..371ae5c2eed03 100644
--- a/lldb/source/Core/Highlighter.cpp
+++ b/lldb/source/Core/Highlighter.cpp
@@ -51,9 +51,7 @@ HighlighterManager::getHighlighterFor(lldb::LanguageType language_type,
if (it != m_highlighters.end())
return *it->second;
- uint32_t idx = 0;
- while (HighlighterCreateInstance create_instance =
- PluginManager::GetHighlighterCreateCallbackAtIndex(idx++)) {
+ for (auto create_instance : PluginManager::GetHighlighterCreateCallbacks()) {
if (Highlighter *highlighter = create_instance(language_type))
m_highlighters.try_emplace(language_type,
std::unique_ptr<Highlighter>(highlighter));
diff --git a/lldb/source/Core/PluginManager.cpp b/lldb/source/Core/PluginManager.cpp
index 430c9131ee6be..da7cb1f999d7f 100644
--- a/lldb/source/Core/PluginManager.cpp
+++ b/lldb/source/Core/PluginManager.cpp
@@ -514,12 +514,6 @@ template <typename Instance> class PluginInstances {
return false;
}
- typename Instance::CallbackType GetCallbackAtIndex(uint32_t idx) {
- if (auto instance = GetInstanceAtIndex(idx))
- return instance->create_callback;
- return nullptr;
- }
-
llvm::StringRef GetDescriptionAtIndex(uint32_t idx) {
if (auto instance = GetInstanceAtIndex(idx))
return instance->description;
@@ -538,6 +532,15 @@ template <typename Instance> class PluginInstances {
return nullptr;
}
+ std::vector<typename Instance::CallbackType> GetCreateCallbacks() {
+ std::vector<Instance> snapshot = GetSnapshot();
+ std::vector<typename Instance::CallbackType> result;
+ result.reserve(snapshot.size());
+ for (const auto &instance : snapshot)
+ result.push_back(instance.create_callback);
+ return result;
+ }
+
void PerformDebuggerCallback(Debugger &debugger) {
for (const auto &instance : GetSnapshot()) {
if (instance.debugger_init_callback)
@@ -641,8 +644,8 @@ bool PluginManager::UnregisterPlugin(ABICreateInstance create_callback) {
return GetABIInstances().UnregisterPlugin(create_callback);
}
-ABICreateInstance PluginManager::GetABICreateCallbackAtIndex(uint32_t idx) {
- return GetABIInstances().GetCallbackAtIndex(idx);
+std::vector<ABICreateInstance> PluginManager::GetABICreateCallbacks() {
+ return GetABIInstances().GetCreateCallbacks();
}
#pragma mark Architecture
@@ -698,9 +701,9 @@ bool PluginManager::UnregisterPlugin(
return GetDisassemblerInstances().UnregisterPlugin(create_callback);
}
-DisassemblerCreateInstance
-PluginManager::GetDisassemblerCreateCallbackAtIndex(uint32_t idx) {
- return GetDisassemblerInstances().GetCallbackAtIndex(idx);
+std::vector<DisassemblerCreateInstance>
+PluginManager::GetDisassemblerCreateCallbacks() {
+ return GetDisassemblerInstances().GetCreateCallbacks();
}
DisassemblerCreateInstance
@@ -732,9 +735,9 @@ bool PluginManager::UnregisterPlugin(
return GetDynamicLoaderInstances().UnregisterPlugin(create_callback);
}
-DynamicLoaderCreateInstance
-PluginManager::GetDynamicLoaderCreateCallbackAtIndex(uint32_t idx) {
- return GetDynamicLoaderInstances().GetCallbackAtIndex(idx);
+std::vector<DynamicLoaderCreateInstance>
+PluginManager::GetDynamicLoaderCreateCallbacks() {
+ return GetDynamicLoaderInstances().GetCreateCallbacks();
}
DynamicLoaderCreateInstance
@@ -765,9 +768,9 @@ bool PluginManager::UnregisterPlugin(JITLoaderCreateInstance create_callback) {
return GetJITLoaderInstances().UnregisterPlugin(create_callback);
}
-JITLoaderCreateInstance
-PluginManager::GetJITLoaderCreateCallbackAtIndex(uint32_t idx) {
- return GetJITLoaderInstances().GetCallbackAtIndex(idx);
+std::vector<JITLoaderCreateInstance>
+PluginManager::GetJITLoaderCreateCallbacks() {
+ return GetJITLoaderInstances().GetCreateCallbacks();
}
#pragma mark EmulateInstruction
@@ -793,9 +796,9 @@ bool PluginManager::UnregisterPlugin(
return GetEmulateInstructionInstances().UnregisterPlugin(create_callback);
}
-EmulateInstructionCreateInstance
-PluginManager::GetEmulateInstructionCreateCallbackAtIndex(uint32_t idx) {
- return GetEmulateInstructionInstances().GetCallbackAtIndex(idx);
+std::vector<EmulateInstructionCreateInstance>
+PluginManager::GetEmulateInstructionCreateCallbacks() {
+ return GetEmulateInstructionInstances().GetCreateCallbacks();
}
EmulateInstructionCreateInstance
@@ -827,9 +830,9 @@ bool PluginManager::UnregisterPlugin(
return GetOperatingSystemInstances().UnregisterPlugin(create_callback);
}
-OperatingSystemCreateInstance
-PluginManager::GetOperatingSystemCreateCallbackAtIndex(uint32_t idx) {
- return GetOperatingSystemInstances().GetCallbackAtIndex(idx);
+std::vector<OperatingSystemCreateInstance>
+PluginManager::GetOperatingSystemCreateCallbacks() {
+ return GetOperatingSystemInstances().GetCreateCallbacks();
}
OperatingSystemCreateInstance
@@ -860,9 +863,9 @@ bool PluginManager::UnregisterPlugin(LanguageCreateInstance create_callback) {
return GetLanguageInstances().UnregisterPlugin(create_callback);
}
-LanguageCreateInstance
-PluginManager::GetLanguageCreateCallbackAtIndex(uint32_t idx) {
- return GetLanguageInstances().GetCallbackAtIndex(idx);
+std::vector<LanguageCreateInstance>
+PluginManager::GetLanguageCreateCallbacks() {
+ return GetLanguageInstances().GetCreateCallbacks();
}
#pragma mark LanguageRuntime
@@ -906,23 +909,15 @@ bool PluginManager::UnregisterPlugin(
return GetLanguageRuntimeInstances().UnregisterPlugin(create_callback);
}
-LanguageRuntimeCreateInstance
-PluginManager::GetLanguageRuntimeCreateCallbackAtIndex(uint32_t idx) {
- return GetLanguageRuntimeInstances().GetCallbackAtIndex(idx);
-}
-
-LanguageRuntimeGetCommandObject
-PluginManager::GetLanguageRuntimeGetCommandObjectAtIndex(uint32_t idx) {
- if (auto instance = GetLanguageRuntimeInstances().GetInstanceAtIndex(idx))
- return instance->command_callback;
- return nullptr;
-}
-
-LanguageRuntimeGetExceptionPrecondition
-PluginManager::GetLanguageRuntimeGetExceptionPreconditionAtIndex(uint32_t idx) {
- if (auto instance = GetLanguageRuntimeInstances().GetInstanceAtIndex(idx))
- return instance->precondition_callback;
- return nullptr;
+std::vector<LanguageRuntimeCallbacks>
+PluginManager::GetLanguageRuntimeCallbacks() {
+ auto instances = GetLanguageRuntimeInstances().GetSnapshot();
+ std::vector<LanguageRuntimeCallbacks> result;
+ result.reserve(instances.size());
+ for (auto &instance : instances)
+ result.push_back({instance.create_callback, instance.command_callback,
+ instance.precondition_callback});
+ return result;
}
#pragma mark SystemRuntime
@@ -947,9 +942,9 @@ bool PluginManager::UnregisterPlugin(
return GetSystemRuntimeInstances().UnregisterPlugin(create_callback);
}
-SystemRuntimeCreateInstance
-PluginManager::GetSystemRuntimeCreateCallbackAtIndex(uint32_t idx) {
- return GetSystemRuntimeInstances().GetCallbackAtIndex(idx);
+std::vector<SystemRuntimeCreateInstance>
+PluginManager::GetSystemRuntimeCreateCallbacks() {
+ return GetSystemRuntimeInstances().GetCreateCallbacks();
}
#pragma mark ObjectFile
@@ -1002,24 +997,14 @@ bool PluginManager::UnregisterPlugin(ObjectFileCreateInstance create_callback) {
return GetObjectFileInstances().UnregisterPlugin(create_callback);
}
-ObjectFileCreateInstance
-PluginManager::GetObjectFileCreateCallbackAtIndex(uint32_t idx) {
- return GetObjectFileInstances().GetCallbackAtIndex(idx);
-}
-
-ObjectFileCreateMemoryInstance
-PluginManager::GetObjectFileCreateMemoryCallbackAtIndex(uint32_t idx) {
- if (auto instance = GetObjectFileInstances().GetInstanceAtIndex(idx))
- return instance->create_memory_callback;
- return nullptr;
-}
-
-ObjectFileGetModuleSpecifications
-PluginManager::GetObjectFileGetModuleSpecificationsCallbackAtIndex(
- uint32_t idx) {
- if (auto instance = GetObjectFileInstances().GetInstanceAtIndex(idx))
- return instance->get_module_specifications;
- return nullptr;
+std::vector<ObjectFileCallbacks> PluginManager::GetObjectFileCallbacks() {
+ auto instances = GetObjectFileInstances().GetSnapshot();
+ std::vector<ObjectFileCallbacks> result;
+ result.reserve(instances.size());
+ for (auto &instance : instances)
+ result.push_back({instance.create_callback, instance.create_memory_callback,
+ instance.get_module_specifications, instance.save_core});
+ return result;
}
ObjectFileCreateMemoryInstance
@@ -1133,24 +1118,15 @@ bool PluginManager::UnregisterPlugin(
return GetObjectContainerInstances().UnregisterPlugin(create_callback);
}
-ObjectContainerCreateInstance
-PluginManager::GetObjectContainerCreateCallbackAtIndex(uint32_t idx) {
- return GetObjectContainerInstances().GetCallbackAtIndex(idx);
-}
-
-ObjectContainerCreateMemoryInstance
-PluginManager::GetObjectContainerCreateMemoryCallbackAtIndex(uint32_t idx) {
- if (auto instance = GetObjectContainerInstances().GetInstanceAtIndex(idx))
- return instance->create_memory_callback;
- return nullptr;
-}
-
-ObjectFileGetModuleSpecifications
-PluginManager::GetObjectContainerGetModuleSpecificationsCallbackAtIndex(
- uint32_t idx) {
- if (auto instance = GetObjectContainerInstances().GetInstanceAtIndex(idx))
- return instance->get_module_specifications;
- return nullptr;
+std::vector<ObjectContainerCallbacks>
+PluginManager::GetObjectContainerCallbacks() {
+ auto instances = GetObjectContainerInstances().GetSnapshot();
+ std::vector<ObjectContainerCallbacks> result;
+ result.reserve(instances.size());
+ for (auto &instance : instances)
+ result.push_back({instance.create_callback, instance.create_memory_callback,
+ instance.get_module_specifications});
+ return result;
}
#pragma mark Platform
@@ -1184,16 +1160,16 @@ PluginManager::GetPlatformPluginDescriptionAtIndex(uint32_t idx) {
return GetPlatformInstances().GetDescriptionAtIndex(idx);
}
-PlatformCreateInstance
-PluginManager::GetPlatformCreateCallbackAtIndex(uint32_t idx) {
- return GetPlatformInstances().GetCallbackAtIndex(idx);
-}
-
PlatformCreateInstance
PluginManager::GetPlatformCreateCallbackForPluginName(llvm::StringRef name) {
return GetPlatformInstances().GetCallbackForName(name);
}
+std::vector<PlatformCreateInstance>
+PluginManager::GetPlatformCreateCallbacks() {
+ return GetPlatformInstances().GetCreateCallbacks();
+}
+
void PluginManager::AutoCompletePlatformName(llvm::StringRef name,
CompletionRequest &request) {
for (const auto &instance : GetPlatformInstances().GetSnapshot()) {
@@ -1233,16 +1209,15 @@ PluginManager::GetProcessPluginDescriptionAtIndex(uint32_t idx) {
return GetProcessInstances().GetDescriptionAtIndex(idx);
}
-ProcessCreateInstance
-PluginManager::GetProcessCreateCallbackAtIndex(uint32_t idx) {
- return GetProcessInstances().GetCallbackAtIndex(idx);
-}
-
ProcessCreateInstance
PluginManager::GetProcessCreateCallbackForPluginName(llvm::StringRef name) {
return GetProcessInstances().GetCallbackForName(name);
}
+std::vector<ProcessCreateInstance> PluginManager::GetProcessCreateCallbacks() {
+ return GetProcessInstances().GetCreateCallbacks();
+}
+
void PluginManager::AutoCompleteProcessName(llvm::StringRef name,
CompletionRequest &request) {
for (const auto &instance : GetProcessInstances().GetSnapshot()) {
@@ -1359,9 +1334,9 @@ bool PluginManager::UnregisterPlugin(
return GetScriptInterpreterInstances().UnregisterPlugin(create_callback);
}
-ScriptInterpreterCreateInstance
-PluginManager::GetScriptInterpreterCreateCallbackAtIndex(uint32_t idx) {
- return GetScriptInterpreterInstances().GetCallbackAtIndex(idx);
+std::vector<ScriptInterpreterCreateInstance>
+PluginManager::GetScriptInterpreterCreateCallbacks() {
+ return GetScriptInterpreterInstances().GetCreateCallbacks();
}
lldb::ScriptInterpreterSP
@@ -1442,9 +1417,9 @@ PluginManager::GetSyntheticFrameProviderCreateCallbackForPluginName(
return GetSyntheticFrameProviderInstances().GetCallbackForName(name);
}
-ScriptedFrameProviderCreateInstance
-PluginManager::GetScriptedFrameProviderCreateCallbackAtIndex(uint32_t idx) {
- return GetScriptedFrameProviderInstances().GetCallbackAtIndex(idx);
+std::vector<ScriptedFrameProviderCreateInstance>
+PluginManager::GetScriptedFrameProviderCreateCallbacks() {
+ return GetScriptedFrameProviderInstances().GetCreateCallbacks();
}
#pragma mark StructuredDataPlugin
@@ -1486,21 +1461,14 @@ bool PluginManager::UnregisterPlugin(
return GetStructuredDataPluginInstances().UnregisterPlugin(create_callback);
}
-StructuredDataPluginCreateInstance
-PluginManager::GetStructuredDataPluginCreateCallbackAtIndex(uint32_t idx) {
- return GetStructuredDataPluginInstances().GetCallbackAtIndex(idx);
-}
-
-StructuredDataFilterLaunchInfo
-PluginManager::GetStructuredDataFilterCallbackAtIndex(
- uint32_t idx, bool &iteration_complete) {
- if (auto instance =
- GetStructuredDataPluginInstances().GetInstanceAtIndex(idx)) {
- iteration_complete = false;
- return instance->filter_callback;
- }
- iteration_complete = true;
- return nullptr;
+std::vector<StructuredDataPluginCallbacks>
+PluginManager::GetStructuredDataPluginCallbacks() {
+ auto instances = GetStructuredDataPluginInstances().GetSnapshot();
+ std::vector<StructuredDataPluginCallbacks> result;
+ result.reserve(instances.size());
+ for (auto &instance : instances)
+ result.push_back({instance.create_callback, instance.filter_callback});
+ return result;
}
#pragma mark SymbolFile
@@ -1525,9 +1493,9 @@ bool PluginManager::UnregisterPlugin(SymbolFileCreateInstance create_callback) {
return GetSymbolFileInstances().UnregisterPlugin(create_callback);
}
-SymbolFileCreateInstance
-PluginManager::GetSymbolFileCreateCallbackAtIndex(uint32_t idx) {
- return GetSymbolFileInstances().GetCallbackAtIndex(idx);
+std::vector<SymbolFileCreateInstance>
+PluginManager::GetSymbolFileCreateCallbacks() {
+ return GetSymbolFileInstances().GetCreateCallbacks();
}
#pragma mark SymbolVendor
@@ -1552,9 +1520,9 @@ bool PluginManager::UnregisterPlugin(
return GetSymbolVendorInstances().UnregisterPlugin(create_callback);
}
-SymbolVendorCreateInstance
-PluginManager::GetSymbolVendorCreateCallbackAtIndex(uint32_t idx) {
- return GetSymbolVendorInstances().GetCallbackAtIndex(idx);
+std::vector<SymbolVendorCreateInstance>
+PluginManager::GetSymbolVendorCreateCallbacks() {
+ return GetSymbolVendorInstances().GetCreateCallbacks();
}
#pragma mark SymbolLocator
@@ -1607,9 +1575,9 @@ bool PluginManager::UnregisterPlugin(
return GetSymbolLocatorInstances().UnregisterPlugin(create_callback);
}
-SymbolLocatorCreateInstance
-PluginManager::GetSymbolLocatorCreateCallbackAtIndex(uint32_t idx) {
- return GetSymbolLocatorInstances().GetCallbackAtIndex(idx);
+std::vector<SymbolLocatorCreateInstance>
+PluginManager::GetSymbolLocatorCreateCallbacks() {
+ return GetSymbolLocatorInstances().GetCreateCallbacks();
}
ModuleSpec
@@ -1791,16 +1759,14 @@ bool PluginManager::UnregisterPlugin(
return GetTraceExporterInstances().UnregisterPlugin(create_callback);
}
-ThreadTraceExportCommandCreator
-PluginManager::GetThreadTraceExportCommandCreatorAtIndex(uint32_t index) {
- if (auto instance = GetTraceExporterInstances().GetInstanceAtIndex(index))
- return instance->create_thread_trace_export_command;
- return nullptr;
-}
-
-llvm::StringRef
-PluginManager::GetTraceExporterPluginNameAtIndex(uint32_t index) {
- return GetTraceExporterInstances().GetNameAtIndex(index);
+std::vector<TraceExporterCallbacks> PluginManager::GetTraceExporterCallbacks() {
+ auto instances = GetTraceExporterInstances().GetSnapshot();
+ std::vector<TraceExporterCallbacks> result;
+ result.reserve(instances.size());
+ for (auto &instance : instances)
+ result.push_back({instance.name, instance.create_callback,
+ instance.create_thread_trace_export_command});
+ return result;
}
#pragma mark UnwindAssembly
@@ -1825,9 +1791,9 @@ bool PluginManager::UnregisterPlugin(
return GetUnwindAssemblyInstances().UnregisterPlugin(create_callback);
}
-UnwindAssemblyCreateInstance
-PluginManager::GetUnwindAssemblyCreateCallbackAtIndex(uint32_t idx) {
- return GetUnwindAssemblyInstances().GetCallbackAtIndex(idx);
+std::vector<UnwindAssemblyCreateInstance>
+PluginManager::GetUnwindAssemblyCreateCallbacks() {
+ return GetUnwindAssemblyInstances().GetCreateCallbacks();
}
#pragma mark MemoryHistory
@@ -1852,9 +1818,9 @@ bool PluginManager::UnregisterPlugin(
return GetMemoryHistoryInstances().UnregisterPlugin(create_callback);
}
-MemoryHistoryCreateInstance
-PluginManager::GetMemoryHistoryCreateCallbackAtIndex(uint32_t idx) {
- return GetMemoryHistoryInstances().GetCallbackAtIndex(idx);
+std::vector<MemoryHistoryCreateInstance>
+PluginManager::GetMemoryHistoryCreateCallbacks() {
+ return GetMemoryHistoryInstances().GetCreateCallbacks();
}
#pragma mark InstrumentationRuntime
@@ -1893,17 +1859,14 @@ bool PluginManager::UnregisterPlugin(
return GetInstrumentationRuntimeInstances().UnregisterPlugin(create_callback);
}
-InstrumentationRuntimeGetType
-PluginManager::GetInstrumentationRuntimeGetTypeCallbackAtIndex(uint32_t idx) {
- if (auto instance =
- GetInstrumentationRuntimeInstances().GetInstanceAtIndex(idx))
- return instance->get_type_callback;
- return nullptr;
-}
-
-InstrumentationRuntimeCreateInstance
-PluginManager::GetInstrumentationRuntimeCreateCallbackAtIndex(uint32_t idx) {
- return GetInstrumentationRuntimeInstances().GetCallbackAtIndex(idx);
+std::vector<InstrumentationRuntimeCallbacks>
+PluginManager::GetInstrumentationRuntimeCallbacks() {
+ auto instances = GetInstrumentationRuntimeInstances().GetSnapshot();
+ std::vector<InstrumentationRuntimeCallbacks> result;
+ result.reserve(instances.size());
+ for (auto &instance : instances)
+ result.push_back({instance.create_callback, instance.get_type_callback});
+ return result;
}
#pragma mark TypeSystem
@@ -1944,9 +1907,9 @@ bool PluginManager::UnregisterPlugin(TypeSystemCreateInstance create_callback) {
return GetTypeSystemInstances().UnregisterPlugin(create_callback);
}
-TypeSystemCreateInstance
-PluginManager::GetTypeSystemCreateCallbackAtIndex(uint32_t idx) {
- return GetTypeSystemInstances().GetCallbackAtIndex(idx);
+std::vector<TypeSystemCreateInstance>
+PluginManager::GetTypeSystemCreateCallbacks() {
+ return GetTypeSystemInstances().GetCreateCallbacks();
}
LanguageSet PluginManager::GetAllTypeSystemSupportedLanguagesForTypes() {
@@ -2058,14 +2021,13 @@ bool PluginManager::UnregisterPlugin(REPLCreateInstance create_callback) {
return GetREPLInstances().UnregisterPlugin(create_callback);
}
-REPLCreateInstance PluginManager::GetREPLCreateCallbackAtIndex(uint32_t idx) {
- return GetREPLInstances().GetCallbackAtIndex(idx);
-}
-
-LanguageSet PluginManager::GetREPLSupportedLanguagesAtIndex(uint32_t idx) {
- if (auto instance = GetREPLInstances().GetInstanceAtIndex(idx))
- return instance->supported_languages;
- return LanguageSet();
+std::vector<REPLCallbacks> PluginManager::GetREPLCallbacks() {
+ auto instances = GetREPLInstances().GetSnapshot();
+ std::vector<REPLCallbacks> result;
+ result.reserve(instances.size());
+ for (auto &instance : instances)
+ result.push_back({instance.create_callback, instance.supported_languages});
+ return result;
}
LanguageSet PluginManager::GetREPLAllTypeSystemSupportedLanguages() {
@@ -2104,9 +2066,9 @@ bool PluginManager::UnregisterPlugin(
return GetHighlighterInstances().UnregisterPlugin(create_callback);
}
-HighlighterCreateInstance
-PluginManager::GetHighlighterCreateCallbackAtIndex(uint32_t idx) {
- return GetHighlighterInstances().GetCallbackAtIndex(idx);
+std::vector<HighlighterCreateInstance>
+PluginManager::GetHighlighterCreateCallbacks() {
+ return GetHighlighterInstances().GetCreateCallbacks();
}
#pragma mark PluginManager
diff --git a/lldb/source/Expression/REPL.cpp b/lldb/source/Expression/REPL.cpp
index 2c73703bf441e..20d4cb700e161 100644
--- a/lldb/source/Expression/REPL.cpp
+++ b/lldb/source/Expression/REPL.cpp
@@ -38,19 +38,14 @@ REPL::~REPL() = default;
lldb::REPLSP REPL::Create(Status &err, lldb::LanguageType language,
Debugger *debugger, Target *target,
const char *repl_options) {
- uint32_t idx = 0;
lldb::REPLSP ret;
- while (REPLCreateInstance create_instance =
- PluginManager::GetREPLCreateCallbackAtIndex(idx)) {
- LanguageSet supported_languages =
- PluginManager::GetREPLSupportedLanguagesAtIndex(idx++);
- if (!supported_languages[language])
+ for (auto &cbs : PluginManager::GetREPLCallbacks()) {
+ if (!cbs.supported_languages[language])
continue;
- ret = (*create_instance)(err, language, debugger, target, repl_options);
- if (ret) {
+ ret = (*cbs.create_callback)(err, language, debugger, target, repl_options);
+ if (ret)
break;
- }
}
return ret;
diff --git a/lldb/source/Symbol/ObjectContainer.cpp b/lldb/source/Symbol/ObjectContainer.cpp
index 7ad0c25db30a7..87d0911341e8f 100644
--- a/lldb/source/Symbol/ObjectContainer.cpp
+++ b/lldb/source/Symbol/ObjectContainer.cpp
@@ -45,14 +45,11 @@ ObjectContainerSP ObjectContainer::FindPlugin(const lldb::ModuleSP &module_sp,
module_sp->GetFileSpec().GetPath().c_str(),
static_cast<void *>(process_sp.get()), header_addr);
- ObjectContainerCreateMemoryInstance create_callback;
- for (size_t idx = 0;
- (create_callback =
- PluginManager::GetObjectContainerCreateMemoryCallbackAtIndex(
- idx)) != nullptr;
- ++idx) {
- ObjectContainerSP object_container_sp(
- create_callback(module_sp, data_sp, process_sp, header_addr));
+ for (auto &cbs : PluginManager::GetObjectContainerCallbacks()) {
+ if (!cbs.create_memory_callback)
+ continue;
+ ObjectContainerSP object_container_sp(cbs.create_memory_callback(
+ module_sp, data_sp, process_sp, header_addr));
if (object_container_sp)
return object_container_sp;
}
diff --git a/lldb/source/Symbol/ObjectFile.cpp b/lldb/source/Symbol/ObjectFile.cpp
index 31a925238c533..be6c1b57dac37 100644
--- a/lldb/source/Symbol/ObjectFile.cpp
+++ b/lldb/source/Symbol/ObjectFile.cpp
@@ -36,12 +36,8 @@ static ObjectFileSP
CreateObjectFromContainer(const lldb::ModuleSP &module_sp, const FileSpec *file,
lldb::offset_t file_offset, lldb::offset_t file_size,
DataBufferSP data_sp, lldb::offset_t &data_offset) {
- ObjectContainerCreateInstance callback;
- for (uint32_t idx = 0;
- (callback = PluginManager::GetObjectContainerCreateCallbackAtIndex(
- idx)) != nullptr;
- ++idx) {
- std::unique_ptr<ObjectContainer> object_container_up(callback(
+ for (auto &cbs : PluginManager::GetObjectContainerCallbacks()) {
+ std::unique_ptr<ObjectContainer> object_container_up(cbs.create_callback(
module_sp, data_sp, data_offset, file, file_offset, file_size));
if (object_container_up)
return object_container_up->GetObjectFile(file);
@@ -132,13 +128,9 @@ ObjectFileSP ObjectFile::FindPlugin(const lldb::ModuleSP &module_sp,
if (extractor_sp && extractor_sp->HasData()) {
// Check if this is a normal object file by iterating through all
// object file plugin instances.
- ObjectFileCreateInstance callback;
- for (uint32_t idx = 0;
- (callback = PluginManager::GetObjectFileCreateCallbackAtIndex(idx)) !=
- nullptr;
- ++idx) {
- ObjectFileSP object_file_sp(callback(module_sp, extractor_sp, data_offset,
- file, file_offset, file_size));
+ for (auto &cbs : PluginManager::GetObjectFileCallbacks()) {
+ ObjectFileSP object_file_sp(cbs.create_callback(
+ module_sp, extractor_sp, data_offset, file, file_offset, file_size));
if (object_file_sp.get())
return object_file_sp;
}
@@ -170,18 +162,14 @@ ObjectFileSP ObjectFile::FindPlugin(const lldb::ModuleSP &module_sp,
"0x%" PRIx64 ")",
module_sp->GetFileSpec().GetPath().c_str(),
static_cast<void *>(process_sp.get()), header_addr);
- uint32_t idx;
// Check if this is a normal object file by iterating through all object
// file plugin instances.
- ObjectFileCreateMemoryInstance create_callback;
- for (idx = 0;
- (create_callback =
- PluginManager::GetObjectFileCreateMemoryCallbackAtIndex(idx)) !=
- nullptr;
- ++idx) {
- object_file_sp.reset(
- create_callback(module_sp, data_sp, process_sp, header_addr));
+ for (auto &cbs : PluginManager::GetObjectFileCallbacks()) {
+ if (!cbs.create_memory_callback)
+ continue;
+ object_file_sp.reset(cbs.create_memory_callback(module_sp, data_sp,
+ process_sp, header_addr));
if (object_file_sp.get())
return object_file_sp;
}
@@ -236,27 +224,17 @@ size_t ObjectFile::GetModuleSpecifications(
lldb::offset_t data_offset, lldb::offset_t file_offset,
lldb::offset_t file_size, lldb_private::ModuleSpecList &specs) {
const size_t initial_count = specs.GetSize();
- ObjectFileGetModuleSpecifications callback;
- uint32_t i;
// Try the ObjectFile plug-ins
- for (i = 0;
- (callback =
- PluginManager::GetObjectFileGetModuleSpecificationsCallbackAtIndex(
- i)) != nullptr;
- ++i) {
- if (callback(file, extractor_sp, data_offset, file_offset, file_size,
- specs) > 0)
+ for (auto &cbs : PluginManager::GetObjectFileCallbacks()) {
+ if (cbs.get_module_specifications(file, extractor_sp, data_offset,
+ file_offset, file_size, specs) > 0)
return specs.GetSize() - initial_count;
}
// Try the ObjectContainer plug-ins
- for (i = 0;
- (callback = PluginManager::
- GetObjectContainerGetModuleSpecificationsCallbackAtIndex(i)) !=
- nullptr;
- ++i) {
- if (callback(file, extractor_sp, data_offset, file_offset, file_size,
- specs) > 0)
+ for (auto &cbs : PluginManager::GetObjectContainerCallbacks()) {
+ if (cbs.get_module_specifications(file, extractor_sp, data_offset,
+ file_offset, file_size, specs) > 0)
return specs.GetSize() - initial_count;
}
return 0;
diff --git a/lldb/source/Symbol/SymbolFile.cpp b/lldb/source/Symbol/SymbolFile.cpp
index bfc63003216b2..7c2b499c97b4c 100644
--- a/lldb/source/Symbol/SymbolFile.cpp
+++ b/lldb/source/Symbol/SymbolFile.cpp
@@ -59,11 +59,7 @@ SymbolFile *SymbolFile::FindPlugin(ObjectFileSP objfile_sp) {
uint32_t best_symfile_abilities = 0;
- SymbolFileCreateInstance create_callback;
- for (uint32_t idx = 0;
- (create_callback = PluginManager::GetSymbolFileCreateCallbackAtIndex(
- idx)) != nullptr;
- ++idx) {
+ for (auto create_callback : PluginManager::GetSymbolFileCreateCallbacks()) {
std::unique_ptr<SymbolFile> curr_symfile_up(create_callback(objfile_sp));
if (curr_symfile_up) {
diff --git a/lldb/source/Symbol/SymbolVendor.cpp b/lldb/source/Symbol/SymbolVendor.cpp
index a6350d57735d0..bbadb8949969e 100644
--- a/lldb/source/Symbol/SymbolVendor.cpp
+++ b/lldb/source/Symbol/SymbolVendor.cpp
@@ -26,12 +26,8 @@ using namespace lldb_private;
SymbolVendor *SymbolVendor::FindPlugin(const lldb::ModuleSP &module_sp,
lldb_private::Stream *feedback_strm) {
std::unique_ptr<SymbolVendor> instance_up;
- SymbolVendorCreateInstance create_callback;
- for (size_t idx = 0;
- (create_callback = PluginManager::GetSymbolVendorCreateCallbackAtIndex(
- idx)) != nullptr;
- ++idx) {
+ for (auto create_callback : PluginManager::GetSymbolVendorCreateCallbacks()) {
instance_up.reset(create_callback(module_sp, feedback_strm));
if (instance_up) {
diff --git a/lldb/source/Symbol/TypeSystem.cpp b/lldb/source/Symbol/TypeSystem.cpp
index 8712142893835..1fe361f87ef61 100644
--- a/lldb/source/Symbol/TypeSystem.cpp
+++ b/lldb/source/Symbol/TypeSystem.cpp
@@ -41,14 +41,10 @@ TypeSystem::~TypeSystem() = default;
static TypeSystemSP CreateInstanceHelper(lldb::LanguageType language,
Module *module, Target *target) {
- uint32_t i = 0;
- TypeSystemCreateInstance create_callback;
- while ((create_callback = PluginManager::GetTypeSystemCreateCallbackAtIndex(
- i++)) != nullptr) {
+ for (auto create_callback : PluginManager::GetTypeSystemCreateCallbacks()) {
if (auto type_system_sp = create_callback(language, module, target))
return type_system_sp;
}
-
return {};
}
diff --git a/lldb/source/Target/ABI.cpp b/lldb/source/Target/ABI.cpp
index 3c51074340149..b7b45f9f4c44b 100644
--- a/lldb/source/Target/ABI.cpp
+++ b/lldb/source/Target/ABI.cpp
@@ -25,20 +25,11 @@ using namespace lldb_private;
ABISP
ABI::FindPlugin(lldb::ProcessSP process_sp, const ArchSpec &arch) {
- ABISP abi_sp;
- ABICreateInstance create_callback;
-
- for (uint32_t idx = 0;
- (create_callback = PluginManager::GetABICreateCallbackAtIndex(idx)) !=
- nullptr;
- ++idx) {
- abi_sp = create_callback(process_sp, arch);
-
- if (abi_sp)
+ for (auto create_callback : PluginManager::GetABICreateCallbacks()) {
+ if (ABISP abi_sp = create_callback(process_sp, arch))
return abi_sp;
}
- abi_sp.reset();
- return abi_sp;
+ return {};
}
ABI::~ABI() = default;
diff --git a/lldb/source/Target/InstrumentationRuntime.cpp b/lldb/source/Target/InstrumentationRuntime.cpp
index d9800a8541f4e..66feba813304d 100644
--- a/lldb/source/Target/InstrumentationRuntime.cpp
+++ b/lldb/source/Target/InstrumentationRuntime.cpp
@@ -20,22 +20,10 @@ using namespace lldb_private;
void InstrumentationRuntime::ModulesDidLoad(
lldb_private::ModuleList &module_list, lldb_private::Process *process,
InstrumentationRuntimeCollection &runtimes) {
- InstrumentationRuntimeCreateInstance create_callback = nullptr;
- InstrumentationRuntimeGetType get_type_callback;
- for (uint32_t idx = 0;; ++idx) {
- create_callback =
- PluginManager::GetInstrumentationRuntimeCreateCallbackAtIndex(idx);
- if (create_callback == nullptr)
- break;
- get_type_callback =
- PluginManager::GetInstrumentationRuntimeGetTypeCallbackAtIndex(idx);
- InstrumentationRuntimeType type = get_type_callback();
-
- InstrumentationRuntimeCollection::iterator pos;
- pos = runtimes.find(type);
- if (pos == runtimes.end()) {
- runtimes[type] = create_callback(process->shared_from_this());
- }
+ for (auto &cbs : PluginManager::GetInstrumentationRuntimeCallbacks()) {
+ InstrumentationRuntimeType type = cbs.get_type_callback();
+ if (runtimes.find(type) == runtimes.end())
+ runtimes[type] = cbs.create_callback(process->shared_from_this());
}
}
diff --git a/lldb/source/Target/JITLoader.cpp b/lldb/source/Target/JITLoader.cpp
index 8ff349e063b62..4b810a57bf310 100644
--- a/lldb/source/Target/JITLoader.cpp
+++ b/lldb/source/Target/JITLoader.cpp
@@ -16,11 +16,7 @@ using namespace lldb;
using namespace lldb_private;
void JITLoader::LoadPlugins(Process *process, JITLoaderList &list) {
- JITLoaderCreateInstance create_callback = nullptr;
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetJITLoaderCreateCallbackAtIndex(idx)) != nullptr;
- ++idx) {
+ for (auto create_callback : PluginManager::GetJITLoaderCreateCallbacks()) {
JITLoaderSP instance_sp(create_callback(process, false));
if (instance_sp)
list.Append(std::move(instance_sp));
diff --git a/lldb/source/Target/Language.cpp b/lldb/source/Target/Language.cpp
index d22e58b0a6a9a..03754e988faa4 100644
--- a/lldb/source/Target/Language.cpp
+++ b/lldb/source/Target/Language.cpp
@@ -89,12 +89,8 @@ Language *Language::FindPlugin(lldb::LanguageType language) {
return iter->second.get();
Language *language_ptr = nullptr;
- LanguageCreateInstance create_callback;
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetLanguageCreateCallbackAtIndex(idx)) != nullptr;
- ++idx) {
+ for (auto create_callback : PluginManager::GetLanguageCreateCallbacks()) {
language_ptr = create_callback(language);
if (language_ptr) {
diff --git a/lldb/source/Target/LanguageRuntime.cpp b/lldb/source/Target/LanguageRuntime.cpp
index 269d1e017fdf2..7aa89e7432870 100644
--- a/lldb/source/Target/LanguageRuntime.cpp
+++ b/lldb/source/Target/LanguageRuntime.cpp
@@ -201,13 +201,8 @@ class ExceptionBreakpointResolver : public BreakpointResolver {
LanguageRuntime *LanguageRuntime::FindPlugin(Process *process,
lldb::LanguageType language) {
- LanguageRuntimeCreateInstance create_callback;
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetLanguageRuntimeCreateCallbackAtIndex(idx)) !=
- nullptr;
- ++idx) {
- if (LanguageRuntime *runtime = create_callback(process, language))
+ for (auto &cbs : PluginManager::GetLanguageRuntimeCallbacks()) {
+ if (LanguageRuntime *runtime = cbs.create_callback(process, language))
return runtime;
}
return nullptr;
@@ -218,17 +213,10 @@ LanguageRuntime::LanguageRuntime(Process *process) : Runtime(process) {}
BreakpointPreconditionSP
LanguageRuntime::GetExceptionPrecondition(LanguageType language,
bool throw_bp) {
- LanguageRuntimeCreateInstance create_callback;
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetLanguageRuntimeCreateCallbackAtIndex(idx)) !=
- nullptr;
- idx++) {
- if (auto precondition_callback =
- PluginManager::GetLanguageRuntimeGetExceptionPreconditionAtIndex(
- idx)) {
+ for (auto &cbs : PluginManager::GetLanguageRuntimeCallbacks()) {
+ if (cbs.precondition_callback) {
if (BreakpointPreconditionSP precond =
- precondition_callback(language, throw_bp))
+ cbs.precondition_callback(language, throw_bp))
return precond;
}
}
@@ -289,17 +277,10 @@ void LanguageRuntime::InitializeCommands(CommandObject *parent) {
if (!parent->IsMultiwordObject())
return;
- LanguageRuntimeCreateInstance create_callback;
-
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetLanguageRuntimeCreateCallbackAtIndex(idx)) !=
- nullptr;
- ++idx) {
- if (LanguageRuntimeGetCommandObject command_callback =
- PluginManager::GetLanguageRuntimeGetCommandObjectAtIndex(idx)) {
+ for (auto &cbs : PluginManager::GetLanguageRuntimeCallbacks()) {
+ if (cbs.command_callback) {
CommandObjectSP command =
- command_callback(parent->GetCommandInterpreter());
+ cbs.command_callback(parent->GetCommandInterpreter());
if (command) {
// the CommandObject vended by a Language plugin cannot be created once
// and cached because we may create multiple debuggers and need one
diff --git a/lldb/source/Target/MemoryHistory.cpp b/lldb/source/Target/MemoryHistory.cpp
index 0ebf796a56bbd..f2c0de0d2017f 100644
--- a/lldb/source/Target/MemoryHistory.cpp
+++ b/lldb/source/Target/MemoryHistory.cpp
@@ -13,16 +13,11 @@ using namespace lldb;
using namespace lldb_private;
lldb::MemoryHistorySP MemoryHistory::FindPlugin(const ProcessSP process) {
- MemoryHistoryCreateInstance create_callback = nullptr;
-
- for (uint32_t idx = 0;
- (create_callback = PluginManager::GetMemoryHistoryCreateCallbackAtIndex(
- idx)) != nullptr;
- ++idx) {
+ for (auto create_callback :
+ PluginManager::GetMemoryHistoryCreateCallbacks()) {
MemoryHistorySP memory_history_sp(create_callback(process));
if (memory_history_sp)
return memory_history_sp;
}
-
- return MemoryHistorySP();
+ return {};
}
diff --git a/lldb/source/Target/OperatingSystem.cpp b/lldb/source/Target/OperatingSystem.cpp
index 75762c05151d1..7b418067695e1 100644
--- a/lldb/source/Target/OperatingSystem.cpp
+++ b/lldb/source/Target/OperatingSystem.cpp
@@ -27,11 +27,8 @@ OperatingSystem *OperatingSystem::FindPlugin(Process *process,
return instance_up.release();
}
} else {
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetOperatingSystemCreateCallbackAtIndex(idx)) !=
- nullptr;
- ++idx) {
+ for (auto create_callback :
+ PluginManager::GetOperatingSystemCreateCallbacks()) {
std::unique_ptr<OperatingSystem> instance_up(
create_callback(process, false));
if (instance_up)
diff --git a/lldb/source/Target/Platform.cpp b/lldb/source/Target/Platform.cpp
index 4068210cc1632..c85c7d2b578ef 100644
--- a/lldb/source/Target/Platform.cpp
+++ b/lldb/source/Target/Platform.cpp
@@ -1010,17 +1010,10 @@ lldb::ProcessSP Platform::DebugProcess(ProcessLaunchInfo &launch_info,
// Allow any StructuredData process-bound plugins to adjust the launch info
// if needed
- size_t i = 0;
- bool iteration_complete = false;
- // Note iteration can't simply go until a nullptr callback is returned, as it
- // is valid for a plugin to not supply a filter.
- auto get_filter_func = PluginManager::GetStructuredDataFilterCallbackAtIndex;
- for (auto filter_callback = get_filter_func(i, iteration_complete);
- !iteration_complete;
- filter_callback = get_filter_func(++i, iteration_complete)) {
- if (filter_callback) {
+ for (auto &cbs : PluginManager::GetStructuredDataPluginCallbacks()) {
+ if (cbs.filter_callback) {
// Give this ProcessLaunchInfo filter a chance to adjust the launch info.
- error = (*filter_callback)(launch_info, &target);
+ error = (*cbs.filter_callback)(launch_info, &target);
if (!error.Success()) {
LLDB_LOGF(log,
"Platform::%s() StructuredDataPlugin launch "
@@ -2135,12 +2128,8 @@ PlatformSP PlatformList::GetOrCreate(const ArchSpec &arch,
return platform_sp;
}
- PlatformCreateInstance create_callback;
// First try exact arch matches across all platform plug-ins
- uint32_t idx;
- for (idx = 0;
- (create_callback = PluginManager::GetPlatformCreateCallbackAtIndex(idx));
- ++idx) {
+ for (auto create_callback : PluginManager::GetPlatformCreateCallbacks()) {
PlatformSP platform_sp = create_callback(false, &arch);
if (platform_sp &&
platform_sp->IsCompatibleArchitecture(
@@ -2150,9 +2139,7 @@ PlatformSP PlatformList::GetOrCreate(const ArchSpec &arch,
}
}
// Next try compatible arch matches across all platform plug-ins
- for (idx = 0;
- (create_callback = PluginManager::GetPlatformCreateCallbackAtIndex(idx));
- ++idx) {
+ for (auto create_callback : PluginManager::GetPlatformCreateCallbacks()) {
PlatformSP platform_sp = create_callback(false, &arch);
if (platform_sp && platform_sp->IsCompatibleArchitecture(
arch, process_host_arch, ArchSpec::CompatibleMatch,
@@ -2239,10 +2226,7 @@ bool PlatformList::LoadPlatformBinaryAndSetup(Process *process,
lldb::addr_t addr, bool notify) {
std::lock_guard<std::recursive_mutex> guard(m_mutex);
- PlatformCreateInstance create_callback;
- for (int idx = 0;
- (create_callback = PluginManager::GetPlatformCreateCallbackAtIndex(idx));
- ++idx) {
+ for (auto create_callback : PluginManager::GetPlatformCreateCallbacks()) {
ArchSpec arch;
PlatformSP platform_sp = create_callback(true, &arch);
if (platform_sp) {
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index aa64c6fb4ebc1..5e364b4932903 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -402,10 +402,7 @@ ProcessSP Process::FindPlugin(lldb::TargetSP target_sp,
}
}
} else {
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetProcessCreateCallbackAtIndex(idx)) != nullptr;
- ++idx) {
+ for (auto create_callback : PluginManager::GetProcessCreateCallbacks()) {
process_sp = create_callback(target_sp, listener_sp, crash_file_path,
can_connect);
if (process_sp) {
@@ -6448,15 +6445,12 @@ void Process::MapSupportedStructuredDataPlugins(
// we've consumed all the type names.
// FIXME: should we return an error if there are type names nobody
// supports?
- for (uint32_t plugin_index = 0; !type_names.empty(); plugin_index++) {
- auto create_instance =
- PluginManager::GetStructuredDataPluginCreateCallbackAtIndex(
- plugin_index);
- if (!create_instance)
+ for (auto &cbs : PluginManager::GetStructuredDataPluginCallbacks()) {
+ if (type_names.empty())
break;
// Create the plugin.
- StructuredDataPluginSP plugin_sp = (*create_instance)(*this);
+ StructuredDataPluginSP plugin_sp = (*cbs.create_callback)(*this);
if (!plugin_sp) {
// This plugin doesn't think it can work with the process. Move on to the
// next.
diff --git a/lldb/source/Target/SyntheticFrameProvider.cpp b/lldb/source/Target/SyntheticFrameProvider.cpp
index e799ad23b7512..0e4408eaad480 100644
--- a/lldb/source/Target/SyntheticFrameProvider.cpp
+++ b/lldb/source/Target/SyntheticFrameProvider.cpp
@@ -84,12 +84,8 @@ llvm::Expected<SyntheticFrameProviderSP> SyntheticFrameProvider::CreateInstance(
"cannot create synthetic frame provider: invalid input frames");
// Iterate through all registered ScriptedFrameProvider plugins.
- ScriptedFrameProviderCreateInstance create_callback = nullptr;
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetScriptedFrameProviderCreateCallbackAtIndex(
- idx)) != nullptr;
- ++idx) {
+ for (auto create_callback :
+ PluginManager::GetScriptedFrameProviderCreateCallbacks()) {
auto provider_or_err = create_callback(input_frames, descriptor);
if (!provider_or_err) {
LLDB_LOG_ERROR(GetLog(LLDBLog::Target), provider_or_err.takeError(),
diff --git a/lldb/source/Target/SystemRuntime.cpp b/lldb/source/Target/SystemRuntime.cpp
index 6d8a2ef55225f..0a4d8b630e5bd 100644
--- a/lldb/source/Target/SystemRuntime.cpp
+++ b/lldb/source/Target/SystemRuntime.cpp
@@ -15,11 +15,8 @@ using namespace lldb;
using namespace lldb_private;
SystemRuntime *SystemRuntime::FindPlugin(Process *process) {
- SystemRuntimeCreateInstance create_callback = nullptr;
- for (uint32_t idx = 0;
- (create_callback = PluginManager::GetSystemRuntimeCreateCallbackAtIndex(
- idx)) != nullptr;
- ++idx) {
+ for (auto create_callback :
+ PluginManager::GetSystemRuntimeCreateCallbacks()) {
std::unique_ptr<SystemRuntime> instance_up(create_callback(process));
if (instance_up)
return instance_up.release();
diff --git a/lldb/source/Target/UnwindAssembly.cpp b/lldb/source/Target/UnwindAssembly.cpp
index 75f2b328cef88..ad2a74a7fc27e 100644
--- a/lldb/source/Target/UnwindAssembly.cpp
+++ b/lldb/source/Target/UnwindAssembly.cpp
@@ -15,12 +15,8 @@ using namespace lldb;
using namespace lldb_private;
UnwindAssemblySP UnwindAssembly::FindPlugin(const ArchSpec &arch) {
- UnwindAssemblyCreateInstance create_callback;
-
- for (uint32_t idx = 0;
- (create_callback = PluginManager::GetUnwindAssemblyCreateCallbackAtIndex(
- idx)) != nullptr;
- ++idx) {
+ for (auto create_callback :
+ PluginManager::GetUnwindAssemblyCreateCallbacks()) {
UnwindAssemblySP assembly_profiler_up(create_callback(arch));
if (assembly_profiler_up)
return assembly_profiler_up;
diff --git a/lldb/unittests/Core/PluginManagerTest.cpp b/lldb/unittests/Core/PluginManagerTest.cpp
index c7a56b28a42fc..0339e387f2c58 100644
--- a/lldb/unittests/Core/PluginManagerTest.cpp
+++ b/lldb/unittests/Core/PluginManagerTest.cpp
@@ -57,22 +57,16 @@ class PluginManagerTest : public testing::Test {
static void RemoveAllRegisteredSystemRuntimePlugins() {
// Enable all currently registered plugins so we can get a handle to
// their create callbacks in the loop below. Only enabled plugins
- // are returned from the PluginManager Get*CreateCallbackAtIndex apis.
+ // are returned from the PluginManager GetSystemRuntimeCreateCallbacks()
+ // api.
for (const RegisteredPluginInfo &PluginInfo :
PluginManager::GetSystemRuntimePluginInfo()) {
PluginManager::SetSystemRuntimePluginEnabled(PluginInfo.name, true);
}
// Get a handle to the create call backs for all the registered plugins.
- std::vector<SystemRuntimeCreateInstance> registered_plugin_callbacks;
- SystemRuntimeCreateInstance create_callback = nullptr;
- for (uint32_t idx = 0;
- (create_callback =
- PluginManager::GetSystemRuntimeCreateCallbackAtIndex(idx)) !=
- nullptr;
- ++idx) {
- registered_plugin_callbacks.push_back((create_callback));
- }
+ std::vector<SystemRuntimeCreateInstance> registered_plugin_callbacks =
+ PluginManager::GetSystemRuntimeCreateCallbacks();
// Remove all currently registered plugins.
for (SystemRuntimeCreateInstance create_callback :
@@ -86,16 +80,11 @@ class PluginManagerTest : public testing::Test {
TEST_F(PluginManagerTest, RegisterSystemRuntimePlugin) {
RegisterMockSystemRuntimePlugins();
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
-
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginB);
-
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2),
- CreateSystemRuntimePluginC);
-
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(3), nullptr);
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 3u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginB);
+ ASSERT_EQ(callbacks[2], CreateSystemRuntimePluginC);
}
// Test basic un-register functionality.
@@ -104,13 +93,10 @@ TEST_F(PluginManagerTest, UnRegisterSystemRuntimePlugin) {
ASSERT_TRUE(PluginManager::UnregisterPlugin(CreateSystemRuntimePluginB));
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
-
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginC);
-
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2), nullptr);
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 2u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginC);
}
// Test registered plugin info functionality.
@@ -170,11 +156,10 @@ TEST_F(PluginManagerTest, SystemRuntimePluginDisable) {
ASSERT_EQ(plugin_info[2].enabled, true);
// Disabling a plugin does remove it from available plugins.
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginC);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2), nullptr);
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 2u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginC);
}
// Test plugin disable and enable functionality.
@@ -182,25 +167,30 @@ TEST_F(PluginManagerTest, SystemRuntimePluginDisableThenEnable) {
RegisterMockSystemRuntimePlugins();
// Initially plugin b is available in slot 1.
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginB);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginB);
+ }
// Disabling it will remove it from available plugins.
ASSERT_TRUE(PluginManager::SetSystemRuntimePluginEnabled("b", false));
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginC);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 2u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginC);
+ }
// We can re-enable the plugin later and it should go back to the original
// slot.
ASSERT_TRUE(PluginManager::SetSystemRuntimePluginEnabled("b", true));
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginB);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2),
- CreateSystemRuntimePluginC);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 3u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginB);
+ ASSERT_EQ(callbacks[2], CreateSystemRuntimePluginC);
+ }
// And show up in the plugin info correctly.
std::vector<RegisteredPluginInfo> plugin_info =
@@ -248,12 +238,13 @@ TEST_F(PluginManagerTest, SystemRuntimePluginDisableAll) {
RegisterMockSystemRuntimePlugins();
// Validate initial state of registered plugins.
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginB);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2),
- CreateSystemRuntimePluginC);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 3u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginB);
+ ASSERT_EQ(callbacks[2], CreateSystemRuntimePluginC);
+ }
// Disable all the active plugins.
ASSERT_TRUE(PluginManager::SetSystemRuntimePluginEnabled("a", false));
@@ -261,9 +252,7 @@ TEST_F(PluginManagerTest, SystemRuntimePluginDisableAll) {
ASSERT_TRUE(PluginManager::SetSystemRuntimePluginEnabled("c", false));
// Should have no active plugins.
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0), nullptr);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1), nullptr);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2), nullptr);
+ ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbacks().size(), 0u);
// And show up in the plugin info correctly.
std::vector<RegisteredPluginInfo> plugin_info =
@@ -279,22 +268,28 @@ TEST_F(PluginManagerTest, SystemRuntimePluginDisableAll) {
// Enable plugins in reverse order and validate expected indicies.
// They should show up in the original plugin order.
ASSERT_TRUE(PluginManager::SetSystemRuntimePluginEnabled("c", true));
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginC);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 1u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginC);
+ }
ASSERT_TRUE(PluginManager::SetSystemRuntimePluginEnabled("a", true));
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginC);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 2u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginC);
+ }
ASSERT_TRUE(PluginManager::SetSystemRuntimePluginEnabled("b", true));
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginB);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2),
- CreateSystemRuntimePluginC);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 3u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginB);
+ ASSERT_EQ(callbacks[2], CreateSystemRuntimePluginC);
+ }
}
// Test un-registering a disabled plugin works.
@@ -326,12 +321,13 @@ TEST_F(PluginManagerTest, UnRegisterSystemRuntimePluginChangesOrder) {
std::vector<RegisteredPluginInfo> plugin_info =
PluginManager::GetSystemRuntimePluginInfo();
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginB);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2),
- CreateSystemRuntimePluginC);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 3u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginB);
+ ASSERT_EQ(callbacks[2], CreateSystemRuntimePluginC);
+ }
ASSERT_EQ(plugin_info.size(), 3u);
ASSERT_EQ(plugin_info[0].name, "a");
@@ -346,12 +342,13 @@ TEST_F(PluginManagerTest, UnRegisterSystemRuntimePluginChangesOrder) {
// Check the callback indices match as expected.
plugin_info = PluginManager::GetSystemRuntimePluginInfo();
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginC);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2),
- CreateSystemRuntimePluginB);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 3u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginC);
+ ASSERT_EQ(callbacks[2], CreateSystemRuntimePluginB);
+ }
// And plugin info should match as well.
ASSERT_EQ(plugin_info.size(), 3u);
@@ -365,19 +362,22 @@ TEST_F(PluginManagerTest, UnRegisterSystemRuntimePluginChangesOrder) {
// un-registering and re-registering "b" it should now stay in
// the middle of the order.
ASSERT_TRUE(PluginManager::SetSystemRuntimePluginEnabled("c", false));
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginB);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 2u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginB);
+ }
// And re-enabling
ASSERT_TRUE(PluginManager::SetSystemRuntimePluginEnabled("c", true));
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(0),
- CreateSystemRuntimePluginA);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(1),
- CreateSystemRuntimePluginC);
- ASSERT_EQ(PluginManager::GetSystemRuntimeCreateCallbackAtIndex(2),
- CreateSystemRuntimePluginB);
+ {
+ auto callbacks = PluginManager::GetSystemRuntimeCreateCallbacks();
+ ASSERT_EQ(callbacks.size(), 3u);
+ ASSERT_EQ(callbacks[0], CreateSystemRuntimePluginA);
+ ASSERT_EQ(callbacks[1], CreateSystemRuntimePluginC);
+ ASSERT_EQ(callbacks[2], CreateSystemRuntimePluginB);
+ }
}
TEST_F(PluginManagerTest, MatchPluginName) {
More information about the lldb-commits
mailing list