Author: Alex Langford Date: 2024-01-08T13:31:03-08:00 New Revision: 16b8a0dc6885dea0882887a6e642a504fd1e193c
URL: https://github.com/llvm/llvm-project/commit/16b8a0dc6885dea0882887a6e642a504fd1e193c DIFF: https://github.com/llvm/llvm-project/commit/16b8a0dc6885dea0882887a6e642a504fd1e193c.diff LOG: [lldb] Change interface of StructuredData::Array::GetItemAtIndexAsInteger (#71993) This is a follow-up to (#71613) and (#71961). Added: Modified: lldb/include/lldb/Utility/StructuredData.h lldb/source/Breakpoint/BreakpointResolverName.cpp lldb/source/Plugins/InstrumentationRuntime/TSan/InstrumentationRuntimeTSan.cpp lldb/source/Target/DynamicRegisterInfo.cpp Removed: ################################################################################ diff --git a/lldb/include/lldb/Utility/StructuredData.h b/lldb/include/lldb/Utility/StructuredData.h index e7ee12868512f4..5e63ef92fac3ec 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 82eef43ad6cfd2..aa86d2a26d1100 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 2a35256a6fb0bf..72293c5331f40d 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 7469c1d4259afc..1a817449fa9589 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