https://github.com/JDevlieghere created https://github.com/llvm/llvm-project/pull/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 change was largely mechanical and I used Claude to do the menial work of updating the signatures and call sites. >From 0a8ab6ece9ca6e5268c2189003cab210716fc8e7 Mon Sep 17 00:00:00 2001 From: Jonas Devlieghere <[email protected]> Date: Thu, 5 Mar 2026 09:13:31 -0800 Subject: [PATCH] [lldb] Use range-based for loops over plugins 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 change was largely mechanical and I used Claude to do the rote replacement. --- lldb/include/lldb/Core/PluginManager.h | 157 +++++----- lldb/source/Commands/CommandObjectThread.cpp | 13 +- lldb/source/Core/Disassembler.cpp | 6 +- lldb/source/Core/DynamicLoader.cpp | 7 +- lldb/source/Core/EmulateInstruction.cpp | 7 +- lldb/source/Core/Highlighter.cpp | 4 +- lldb/source/Core/PluginManager.cpp | 288 ++++++++---------- lldb/source/Expression/REPL.cpp | 13 +- lldb/source/Symbol/ObjectContainer.cpp | 13 +- lldb/source/Symbol/ObjectFile.cpp | 54 +--- lldb/source/Symbol/SymbolFile.cpp | 6 +- lldb/source/Symbol/SymbolVendor.cpp | 6 +- lldb/source/Symbol/TypeSystem.cpp | 6 +- lldb/source/Target/ABI.cpp | 15 +- lldb/source/Target/InstrumentationRuntime.cpp | 20 +- lldb/source/Target/JITLoader.cpp | 6 +- lldb/source/Target/Language.cpp | 6 +- lldb/source/Target/LanguageRuntime.cpp | 35 +-- lldb/source/Target/MemoryHistory.cpp | 11 +- lldb/source/Target/OperatingSystem.cpp | 7 +- lldb/source/Target/Platform.cpp | 28 +- lldb/source/Target/Process.cpp | 14 +- lldb/source/Target/SyntheticFrameProvider.cpp | 8 +- lldb/source/Target/SystemRuntime.cpp | 7 +- lldb/source/Target/UnwindAssembly.cpp | 8 +- lldb/unittests/Core/PluginManagerTest.cpp | 174 +++++------ 26 files changed, 368 insertions(+), 551 deletions(-) diff --git a/lldb/include/lldb/Core/PluginManager.h b/lldb/include/lldb/Core/PluginManager.h index 26680bf95fae6..868aff2527ddd 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; // may be null +}; + +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 different 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) { _______________________________________________ lldb-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
