https://github.com/bulbazord created https://github.com/llvm/llvm-project/pull/71993
This is a follow-up to (#71613) and (#71961). >From c6b3f622c32634db628cb76eaca556ae3d8ad6f4 Mon Sep 17 00:00:00 2001 From: Alex Langford <alangf...@apple.com> Date: Fri, 10 Nov 2023 14:06:48 -0800 Subject: [PATCH] [lldb] Change interface of StructuredData::Array::GetItemAtIndexAsInteger This is a follow-up to (#71613) and (#71961). --- lldb/include/lldb/Utility/StructuredData.h | 28 +++++-------------- .../Breakpoint/BreakpointResolverName.cpp | 8 +++--- .../TSan/InstrumentationRuntimeTSan.cpp | 5 ++-- lldb/source/Target/DynamicRegisterInfo.cpp | 15 +++++----- 4 files changed, 21 insertions(+), 35 deletions(-) diff --git a/lldb/include/lldb/Utility/StructuredData.h b/lldb/include/lldb/Utility/StructuredData.h index 8d0ae372f43c6bf..35fcfca8dd98c67 100644 --- a/lldb/include/lldb/Utility/StructuredData.h +++ b/lldb/include/lldb/Utility/StructuredData.h @@ -221,31 +221,17 @@ class StructuredData { } template <class IntType> - bool GetItemAtIndexAsInteger(size_t idx, IntType &result) const { - ObjectSP value_sp = GetItemAtIndex(idx); - if (value_sp.get()) { + std::optional<IntType> GetItemAtIndexAsInteger(size_t idx) const { + if (auto item_sp = GetItemAtIndex(idx)) { if constexpr (std::numeric_limits<IntType>::is_signed) { - if (auto signed_value = value_sp->GetAsSignedInteger()) { - result = static_cast<IntType>(signed_value->GetValue()); - return true; - } + if (auto *signed_value = item_sp->GetAsSignedInteger()) + return static_cast<IntType>(signed_value->GetValue()); } else { - if (auto unsigned_value = value_sp->GetAsUnsignedInteger()) { - result = static_cast<IntType>(unsigned_value->GetValue()); - return true; - } + if (auto *unsigned_value = item_sp->GetAsUnsignedInteger()) + return static_cast<IntType>(unsigned_value->GetValue()); } } - return false; - } - - template <class IntType> - bool GetItemAtIndexAsInteger(size_t idx, IntType &result, - IntType default_val) const { - bool success = GetItemAtIndexAsInteger(idx, result); - if (!success) - result = default_val; - return success; + return {}; } std::optional<llvm::StringRef> GetItemAtIndexAsString(size_t idx) const { diff --git a/lldb/source/Breakpoint/BreakpointResolverName.cpp b/lldb/source/Breakpoint/BreakpointResolverName.cpp index 0097046cf511b5d..07ff597e10a5ca0 100644 --- a/lldb/source/Breakpoint/BreakpointResolverName.cpp +++ b/lldb/source/Breakpoint/BreakpointResolverName.cpp @@ -161,14 +161,14 @@ BreakpointResolverSP BreakpointResolverName::CreateFromStructuredData( error.SetErrorString("BRN::CFSD: name entry is not a string."); return nullptr; } - std::underlying_type<FunctionNameType>::type fnt; - success = names_mask_array->GetItemAtIndexAsInteger(i, fnt); - if (!success) { + auto maybe_fnt = names_mask_array->GetItemAtIndexAsInteger< + std::underlying_type<FunctionNameType>::type>(i); + if (!maybe_fnt) { error.SetErrorString("BRN::CFSD: name mask entry is not an integer."); return nullptr; } names.push_back(std::string(*maybe_name)); - name_masks.push_back(static_cast<FunctionNameType>(fnt)); + name_masks.push_back(static_cast<FunctionNameType>(*maybe_fnt)); } std::shared_ptr<BreakpointResolverName> resolver_sp = diff --git a/lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp b/lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp index 2a35256a6fb0bf3..72293c5331f40da 100644 --- a/lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp +++ b/lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp @@ -592,9 +592,10 @@ addr_t InstrumentationRuntimeTSan::GetFirstNonInternalFramePc( if (skip_one_frame && i == 0) continue; - addr_t addr; - if (!trace_array->GetItemAtIndexAsInteger(i, addr)) + auto maybe_addr = trace_array->GetItemAtIndexAsInteger<addr_t>(i); + if (!maybe_addr) continue; + addr_t addr = *maybe_addr; lldb_private::Address so_addr; if (!process_sp->GetTarget().GetSectionLoadList().ResolveLoadAddress( diff --git a/lldb/source/Target/DynamicRegisterInfo.cpp b/lldb/source/Target/DynamicRegisterInfo.cpp index 7469c1d4259afc2..1a817449fa95896 100644 --- a/lldb/source/Target/DynamicRegisterInfo.cpp +++ b/lldb/source/Target/DynamicRegisterInfo.cpp @@ -349,10 +349,8 @@ DynamicRegisterInfo::SetRegisterInfo(const StructuredData::Dictionary &dict, const size_t num_regs = invalidate_reg_list->GetSize(); if (num_regs > 0) { for (uint32_t idx = 0; idx < num_regs; ++idx) { - uint64_t invalidate_reg_num; - std::optional<llvm::StringRef> maybe_invalidate_reg_name = - invalidate_reg_list->GetItemAtIndexAsString(idx); - if (maybe_invalidate_reg_name) { + if (auto maybe_invalidate_reg_name = + invalidate_reg_list->GetItemAtIndexAsString(idx)) { const RegisterInfo *invalidate_reg_info = GetRegisterInfo(*maybe_invalidate_reg_name); if (invalidate_reg_info) { @@ -365,10 +363,11 @@ DynamicRegisterInfo::SetRegisterInfo(const StructuredData::Dictionary &dict, "\"%s\" while parsing register \"%s\"\n", maybe_invalidate_reg_name->str().c_str(), reg_info.name); } - } else if (invalidate_reg_list->GetItemAtIndexAsInteger( - idx, invalidate_reg_num)) { - if (invalidate_reg_num != UINT64_MAX) - m_invalidate_regs_map[i].push_back(invalidate_reg_num); + } else if (auto maybe_invalidate_reg_num = + invalidate_reg_list->GetItemAtIndexAsInteger<uint64_t>( + idx)) { + if (*maybe_invalidate_reg_num != UINT64_MAX) + m_invalidate_regs_map[i].push_back(*maybe_invalidate_reg_num); else printf("error: 'invalidate-regs' list value wasn't a valid " "integer\n"); _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits