================ @@ -319,40 +319,49 @@ ValueObjectSynthetic::GetChildMemberWithName(llvm::StringRef name, bool can_create) { UpdateValueIfNeeded(); - uint32_t index = GetIndexOfChildWithName(name); + auto index_or_err = GetIndexOfChildWithName(name); - if (index == UINT32_MAX) + if (!index_or_err) { + llvm::consumeError(index_or_err.takeError()); return lldb::ValueObjectSP(); + } - return GetChildAtIndex(index, can_create); + return GetChildAtIndex(*index_or_err, can_create); } -size_t ValueObjectSynthetic::GetIndexOfChildWithName(llvm::StringRef name_ref) { +llvm::Expected<size_t> +ValueObjectSynthetic::GetIndexOfChildWithName(llvm::StringRef name_ref) { UpdateValueIfNeeded(); ConstString name(name_ref); - uint32_t found_index = UINT32_MAX; - bool did_find; + std::optional<uint32_t> found_index = std::nullopt; { std::lock_guard<std::mutex> guard(m_child_mutex); auto name_to_index = m_name_toindex.find(name.GetCString()); - did_find = name_to_index != m_name_toindex.end(); - if (did_find) + if (name_to_index != m_name_toindex.end()) found_index = name_to_index->second; } - if (!did_find && m_synth_filter_up != nullptr) { - uint32_t index = m_synth_filter_up->GetIndexOfChildWithName(name); - if (index == UINT32_MAX) - return index; + if (!found_index && m_synth_filter_up != nullptr) { + auto index_or_err = m_synth_filter_up->GetIndexOfChildWithName(name); + if (!index_or_err) + return index_or_err.takeError(); std::lock_guard<std::mutex> guard(m_child_mutex); - m_name_toindex[name.GetCString()] = index; - return index; - } else if (!did_find && m_synth_filter_up == nullptr) - return UINT32_MAX; - else /*if (iter != m_name_toindex.end())*/ - return found_index; + m_name_toindex[name.GetCString()] = *index_or_err; + return *index_or_err; + } else if (!found_index && m_synth_filter_up == nullptr) { + return llvm::createStringError( + "'SyntheticChildrenFrontEnd::ValueObjectSynthetic' cannot find index " + "of child '%s'. m_synth_filter_up is null.", + name.AsCString()); + } else if (found_index) { + return *found_index; + } else /*if (iter != m_name_toindex.end())*/ + return llvm::createStringError( + "'SyntheticChildrenFrontEnd::ValueObjectSynthetic' cannot find index " + "of child '%s'", + name.AsCString()); ---------------- Michael137 wrote:
```suggestion } return llvm::createStringError( "'SyntheticChildrenFrontEnd::ValueObjectSynthetic' cannot find index " "of child '%s'", name.AsCString()); ``` https://github.com/llvm/llvm-project/pull/136693 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits