[Lldb-commits] [lldb] 59af0c3 - [lldb][NFCI] Change the way Process stores StructuredData plugins
Alex Langford via lldb-commits
lldb-commits at lists.llvm.org
Mon Jun 5 13:52:18 PDT 2023
Author: Alex Langford
Date: 2023-06-05T13:49:58-07:00
New Revision: 59af0c38956346ece6e89276ec7ca99683010b2a
URL: https://github.com/llvm/llvm-project/commit/59af0c38956346ece6e89276ec7ca99683010b2a
DIFF: https://github.com/llvm/llvm-project/commit/59af0c38956346ece6e89276ec7ca99683010b2a.diff
LOG: [lldb][NFCI] Change the way Process stores StructuredData plugins
Instead of having a map from ConstString to StructuredDataPluginSP, we
can use an llvm::StringMap. The keys themselves don't need to be
ConstStrings, so an llvm::StringMap feels most natural.
Differential Revision: https://reviews.llvm.org/D151960
Added:
Modified:
lldb/include/lldb/Target/Process.h
lldb/source/Target/Process.cpp
Removed:
################################################################################
diff --git a/lldb/include/lldb/Target/Process.h b/lldb/include/lldb/Target/Process.h
index d565931af7087..b27fd212ad1f9 100644
--- a/lldb/include/lldb/Target/Process.h
+++ b/lldb/include/lldb/Target/Process.h
@@ -2561,7 +2561,7 @@ void PruneThreadPlans();
/// The plugin if one is available for the specified feature;
/// otherwise, returns an empty shared pointer.
lldb::StructuredDataPluginSP
- GetStructuredDataPlugin(ConstString type_name) const;
+ GetStructuredDataPlugin(llvm::StringRef type_name) const;
virtual void *GetImplementation() { return nullptr; }
@@ -2908,9 +2908,6 @@ void PruneThreadPlans();
}
};
- using StructuredDataPluginMap =
- std::map<ConstString, lldb::StructuredDataPluginSP>;
-
// Member variables
std::weak_ptr<Target> m_target_wp; ///< The target that owns this process.
lldb::pid_t m_pid = LLDB_INVALID_PROCESS_ID;
@@ -3033,7 +3030,7 @@ void PruneThreadPlans();
// don't support the ability to modify
// the stack.
std::mutex m_run_thread_plan_lock;
- StructuredDataPluginMap m_structured_data_plugin_map;
+ llvm::StringMap<lldb::StructuredDataPluginSP> m_structured_data_plugin_map;
enum { eCanJITDontKnow = 0, eCanJITYes, eCanJITNo } m_can_jit;
diff --git a/lldb/source/Target/Process.cpp b/lldb/source/Target/Process.cpp
index 572b73871760c..3dd807aa83632 100644
--- a/lldb/source/Target/Process.cpp
+++ b/lldb/source/Target/Process.cpp
@@ -4301,7 +4301,7 @@ void Process::BroadcastStructuredData(const StructuredData::ObjectSP &object_sp,
}
StructuredDataPluginSP
-Process::GetStructuredDataPlugin(ConstString type_name) const {
+Process::GetStructuredDataPlugin(llvm::StringRef type_name) const {
auto find_it = m_structured_data_plugin_map.find(type_name);
if (find_it != m_structured_data_plugin_map.end())
return find_it->second;
@@ -5782,7 +5782,7 @@ void Process::ModulesDidLoad(ModuleList &module_list) {
LoadOperatingSystemPlugin(false);
// Inform the structured-data plugins of the modified modules.
- for (auto pair : m_structured_data_plugin_map) {
+ for (auto &pair : m_structured_data_plugin_map) {
if (pair.second)
pair.second->ModulesDidLoad(*this, module_list);
}
@@ -5977,34 +5977,29 @@ void Process::MapSupportedStructuredDataPlugins(
// Bail out early if there are no type names to map.
if (supported_type_names.GetSize() == 0) {
- LLDB_LOGF(log, "Process::%s(): no structured data types supported",
- __FUNCTION__);
+ LLDB_LOG(log, "no structured data types supported");
return;
}
- // Convert StructuredData type names to ConstString instances.
- std::set<ConstString> const_type_names;
+ // These StringRefs are backed by the input parameter.
+ std::set<llvm::StringRef> type_names;
- LLDB_LOGF(log,
- "Process::%s(): the process supports the following async "
- "structured data types:",
- __FUNCTION__);
+ LLDB_LOG(log,
+ "the process supports the following async structured data types:");
supported_type_names.ForEach(
- [&const_type_names, &log](StructuredData::Object *object) {
- if (!object) {
- // Invalid - shouldn't be null objects in the array.
+ [&type_names, &log](StructuredData::Object *object) {
+ // There shouldn't be null objects in the array.
+ if (!object)
return false;
- }
- auto type_name = object->GetAsString();
- if (!type_name) {
- // Invalid format - all type names should be strings.
+ // All type names should be strings.
+ const llvm::StringRef type_name = object->GetStringValue();
+ if (type_name.empty())
return false;
- }
- const_type_names.insert(ConstString(type_name->GetValue()));
- LLDB_LOG(log, "- {0}", type_name->GetValue());
+ type_names.insert(type_name);
+ LLDB_LOG(log, "- {0}", type_name);
return true;
});
@@ -6013,10 +6008,10 @@ 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; !const_type_names.empty(); plugin_index++) {
+ for (uint32_t plugin_index = 0; !type_names.empty(); plugin_index++) {
auto create_instance =
- PluginManager::GetStructuredDataPluginCreateCallbackAtIndex(
- plugin_index);
+ PluginManager::GetStructuredDataPluginCreateCallbackAtIndex(
+ plugin_index);
if (!create_instance)
break;
@@ -6029,9 +6024,9 @@ void Process::MapSupportedStructuredDataPlugins(
}
// For any of the remaining type names, map any that this plugin supports.
- std::vector<ConstString> names_to_remove;
- for (auto &type_name : const_type_names) {
- if (plugin_sp->SupportsStructuredDataType(type_name)) {
+ std::vector<llvm::StringRef> names_to_remove;
+ for (llvm::StringRef type_name : type_names) {
+ if (plugin_sp->SupportsStructuredDataType(ConstString(type_name))) {
m_structured_data_plugin_map.insert(
std::make_pair(type_name, plugin_sp));
names_to_remove.push_back(type_name);
@@ -6041,8 +6036,8 @@ void Process::MapSupportedStructuredDataPlugins(
}
// Remove the type names that were consumed by this plugin.
- for (auto &type_name : names_to_remove)
- const_type_names.erase(type_name);
+ for (llvm::StringRef type_name : names_to_remove)
+ type_names.erase(type_name);
}
}
@@ -6059,7 +6054,7 @@ bool Process::RouteAsyncStructuredData(
return false;
// Grab the async structured type name (i.e. the feature/plugin name).
- ConstString type_name;
+ llvm::StringRef type_name;
if (!dictionary->GetValueForKeyAsString("type", type_name))
return false;
@@ -6071,7 +6066,8 @@ bool Process::RouteAsyncStructuredData(
}
// Route the structured data to the plugin.
- find_it->second->HandleArrivalOfStructuredData(*this, type_name, object_sp);
+ find_it->second->HandleArrivalOfStructuredData(*this, ConstString(type_name),
+ object_sp);
return true;
}
More information about the lldb-commits
mailing list