Author: Alex Langford Date: 2023-04-17T17:25:05-07:00 New Revision: 8bddb13c2470b95651955c61913627b31e9c99d6
URL: https://github.com/llvm/llvm-project/commit/8bddb13c2470b95651955c61913627b31e9c99d6 DIFF: https://github.com/llvm/llvm-project/commit/8bddb13c2470b95651955c61913627b31e9c99d6.diff LOG: [lldb] Change parameter type of StructuredData::ParseJSON Instead of taking a `const std::string &` we can take an `llvm::StringRef`. The motivation for this change is that many of the callers of `ParseJSON` end up creating a temporary `std::string` from an existing `StringRef` or `const char *` in order to satisfy the API. There's no reason we need to do this. Differential Revision: https://reviews.llvm.org/D148579 Added: Modified: lldb/include/lldb/Utility/StructuredData.h lldb/source/API/SBDebugger.cpp lldb/source/API/SBStructuredData.cpp lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp lldb/source/Utility/StructuredData.cpp lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Utility/StructuredData.h b/lldb/include/lldb/Utility/StructuredData.h index 5420c0dcf8d5a..8bc44315210b6 100644 --- a/lldb/include/lldb/Utility/StructuredData.h +++ b/lldb/include/lldb/Utility/StructuredData.h @@ -579,7 +579,7 @@ class StructuredData { void *m_object; }; - static ObjectSP ParseJSON(const std::string &json_text); + static ObjectSP ParseJSON(llvm::StringRef json_text); static ObjectSP ParseJSONFromFile(const FileSpec &file, Status &error); static bool IsRecordType(const ObjectSP object_sp); }; diff --git a/lldb/source/API/SBDebugger.cpp b/lldb/source/API/SBDebugger.cpp index 2e7f06c7bb1b7..4f9c2fa1b223a 100644 --- a/lldb/source/API/SBDebugger.cpp +++ b/lldb/source/API/SBDebugger.cpp @@ -481,8 +481,7 @@ lldb::SBStructuredData SBDebugger::GetSetting(const char *setting) { m_opaque_sp->DumpAllPropertyValues(&exe_ctx, json_strm, /*dump_mask*/ 0, /*is_json*/ true); - data.m_impl_up->SetObjectSP( - StructuredData::ParseJSON(json_strm.GetString().str())); + data.m_impl_up->SetObjectSP(StructuredData::ParseJSON(json_strm.GetString())); return data; } diff --git a/lldb/source/API/SBStructuredData.cpp b/lldb/source/API/SBStructuredData.cpp index 498bcdd39e448..445ed81105407 100644 --- a/lldb/source/API/SBStructuredData.cpp +++ b/lldb/source/API/SBStructuredData.cpp @@ -57,9 +57,9 @@ lldb::SBError SBStructuredData::SetFromJSON(lldb::SBStream &stream) { LLDB_INSTRUMENT_VA(this, stream); lldb::SBError error; - std::string json_str(stream.GetData()); - StructuredData::ObjectSP json_obj = StructuredData::ParseJSON(json_str); + StructuredData::ObjectSP json_obj = + StructuredData::ParseJSON(stream.GetData()); m_impl_up->SetObjectSP(json_obj); if (!json_obj || json_obj->GetType() != eStructuredDataTypeDictionary) diff --git a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp index 0858a2a8d3c8b..446776519dd24 100644 --- a/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp +++ b/lldb/source/Plugins/Platform/gdb-server/PlatformRemoteGDBServer.cpp @@ -699,8 +699,7 @@ const UnixSignalsSP &PlatformRemoteGDBServer::GetRemoteUnixSignals() { response.GetResponseType() != response.eResponse) return m_remote_signals_sp; - auto object_sp = - StructuredData::ParseJSON(std::string(response.GetStringRef())); + auto object_sp = StructuredData::ParseJSON(response.GetStringRef()); if (!object_sp || !object_sp->IsValid()) return m_remote_signals_sp; diff --git a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp index a1c1aa5e0f29f..18552ea66b029 100644 --- a/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/GDBRemoteCommunicationClient.cpp @@ -549,8 +549,7 @@ StructuredData::ObjectSP GDBRemoteCommunicationClient::GetThreadsInfo() { if (response.IsUnsupportedResponse()) { m_supports_jThreadsInfo = false; } else if (!response.Empty()) { - object_sp = - StructuredData::ParseJSON(std::string(response.GetStringRef())); + object_sp = StructuredData::ParseJSON(response.GetStringRef()); } } } @@ -2620,7 +2619,7 @@ size_t GDBRemoteCommunicationClient::QueryGDBServer( return 0; StructuredData::ObjectSP data = - StructuredData::ParseJSON(std::string(response.GetStringRef())); + StructuredData::ParseJSON(response.GetStringRef()); if (!data) return 0; @@ -3868,7 +3867,7 @@ GDBRemoteCommunicationClient::GetModulesInfo( } StructuredData::ObjectSP response_object_sp = - StructuredData::ParseJSON(std::string(response.GetStringRef())); + StructuredData::ParseJSON(response.GetStringRef()); if (!response_object_sp) return std::nullopt; @@ -4126,7 +4125,7 @@ GDBRemoteCommunicationClient::GetSupportedStructuredDataPlugins() { if (SendPacketAndWaitForResponse("qStructuredDataPlugins", response) == PacketResult::Success) { m_supported_async_json_packets_sp = - StructuredData::ParseJSON(std::string(response.GetStringRef())); + StructuredData::ParseJSON(response.GetStringRef()); if (m_supported_async_json_packets_sp && !m_supported_async_json_packets_sp->GetAsArray()) { // We were returned something other than a JSON array. This is diff --git a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp index ab5e19da32911..858a3e5cf5a70 100644 --- a/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp +++ b/lldb/source/Plugins/Process/gdb-remote/ProcessGDBRemote.cpp @@ -3781,8 +3781,7 @@ ProcessGDBRemote::GetExtendedInfoForThread(lldb::tid_t tid) { response.GetResponseType(); if (response_type == StringExtractorGDBRemote::eResponse) { if (!response.Empty()) { - object_sp = - StructuredData::ParseJSON(std::string(response.GetStringRef())); + object_sp = StructuredData::ParseJSON(response.GetStringRef()); } } } @@ -3853,8 +3852,7 @@ ProcessGDBRemote::GetLoadedDynamicLibrariesInfos_sender( response.GetResponseType(); if (response_type == StringExtractorGDBRemote::eResponse) { if (!response.Empty()) { - object_sp = - StructuredData::ParseJSON(std::string(response.GetStringRef())); + object_sp = StructuredData::ParseJSON(response.GetStringRef()); } } } @@ -3876,8 +3874,7 @@ StructuredData::ObjectSP ProcessGDBRemote::GetDynamicLoaderProcessState() { response.GetResponseType(); if (response_type == StringExtractorGDBRemote::eResponse) { if (!response.Empty()) { - object_sp = - StructuredData::ParseJSON(std::string(response.GetStringRef())); + object_sp = StructuredData::ParseJSON(response.GetStringRef()); } } } @@ -3909,8 +3906,7 @@ StructuredData::ObjectSP ProcessGDBRemote::GetSharedCacheInfo() { response.GetResponseType(); if (response_type == StringExtractorGDBRemote::eResponse) { if (!response.Empty()) { - object_sp = - StructuredData::ParseJSON(std::string(response.GetStringRef())); + object_sp = StructuredData::ParseJSON(response.GetStringRef()); } } } @@ -5087,8 +5083,7 @@ ParseStructuredDataPacket(llvm::StringRef packet) { } // This is an asynchronous JSON packet, destined for a StructuredDataPlugin. - StructuredData::ObjectSP json_sp = - StructuredData::ParseJSON(std::string(packet)); + StructuredData::ObjectSP json_sp = StructuredData::ParseJSON(packet); if (log) { if (json_sp) { StreamString json_str; diff --git a/lldb/source/Utility/StructuredData.cpp b/lldb/source/Utility/StructuredData.cpp index 0bf617e02873f..1c309974be9ef 100644 --- a/lldb/source/Utility/StructuredData.cpp +++ b/lldb/source/Utility/StructuredData.cpp @@ -21,8 +21,7 @@ static StructuredData::ObjectSP ParseJSONValue(json::Value &value); static StructuredData::ObjectSP ParseJSONObject(json::Object *object); static StructuredData::ObjectSP ParseJSONArray(json::Array *array); -StructuredData::ObjectSP -StructuredData::ParseJSON(const std::string &json_text) { +StructuredData::ObjectSP StructuredData::ParseJSON(llvm::StringRef json_text) { llvm::Expected<json::Value> value = json::parse(json_text); if (!value) { llvm::consumeError(value.takeError()); diff --git a/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp b/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp index f3eea2869048e..bf43881f49057 100644 --- a/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp +++ b/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp @@ -287,7 +287,7 @@ TEST_F(GDBRemoteCommunicationClientTest, TestPacketSpeedJSON) { server_thread.join(); GTEST_LOG_(INFO) << "Formatted output: " << ss.GetData(); - auto object_sp = StructuredData::ParseJSON(std::string(ss.GetString())); + auto object_sp = StructuredData::ParseJSON(ss.GetString()); ASSERT_TRUE(bool(object_sp)); auto dict_sp = object_sp->GetAsDictionary(); ASSERT_TRUE(bool(dict_sp)); diff --git a/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp b/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp index a2627ad0cc9ff..f131bd98c2e84 100644 --- a/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp +++ b/lldb/unittests/tools/lldb-server/tests/MessageObjects.cpp @@ -96,8 +96,7 @@ Expected<JThreadsInfo> JThreadsInfo::create(StringRef Response, ArrayRef<RegisterInfo> RegInfos) { JThreadsInfo jthreads_info; - StructuredData::ObjectSP json = - StructuredData::ParseJSON(std::string(Response)); + StructuredData::ObjectSP json = StructuredData::ParseJSON(Response); StructuredData::Array *array = json->GetAsArray(); if (!array) return make_parsing_error("JThreadsInfo: JSON array"); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits