Change GetNumChildren()/CalculateNumChildren() methods return llvm::Expected This is an NFC change that does not yet add any error handling or change any code to return any errors. This is the second big change in the patch series started with https://github.com/llvm/llvm-project/pull/83501 A follow-up PR will wire up error handling.
89 lines
2.6 KiB
C++
89 lines
2.6 KiB
C++
//===-- LibCxxRangesRefView.cpp -------------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "LibCxx.h"
|
|
|
|
#include "lldb/Core/ValueObject.h"
|
|
#include "lldb/DataFormatters/FormattersHelpers.h"
|
|
#include "lldb/Utility/ConstString.h"
|
|
#include "llvm/ADT/APSInt.h"
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
using namespace lldb_private::formatters;
|
|
|
|
namespace lldb_private {
|
|
namespace formatters {
|
|
|
|
class LibcxxStdRangesRefViewSyntheticFrontEnd
|
|
: public SyntheticChildrenFrontEnd {
|
|
public:
|
|
LibcxxStdRangesRefViewSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp);
|
|
|
|
~LibcxxStdRangesRefViewSyntheticFrontEnd() override = default;
|
|
|
|
llvm::Expected<uint32_t> CalculateNumChildren() override {
|
|
// __range_ will be the sole child of this type
|
|
return 1;
|
|
}
|
|
|
|
lldb::ValueObjectSP GetChildAtIndex(uint32_t idx) override {
|
|
// Since we only have a single child, return it
|
|
assert(idx == 0);
|
|
return m_range_sp;
|
|
}
|
|
|
|
lldb::ChildCacheState Update() override;
|
|
|
|
bool MightHaveChildren() override { return true; }
|
|
|
|
size_t GetIndexOfChildWithName(ConstString name) override {
|
|
// We only have a single child
|
|
return 0;
|
|
}
|
|
|
|
private:
|
|
/// Pointer to the dereferenced __range_ member
|
|
lldb::ValueObjectSP m_range_sp = nullptr;
|
|
};
|
|
|
|
lldb_private::formatters::LibcxxStdRangesRefViewSyntheticFrontEnd::
|
|
LibcxxStdRangesRefViewSyntheticFrontEnd(lldb::ValueObjectSP valobj_sp)
|
|
: SyntheticChildrenFrontEnd(*valobj_sp) {
|
|
if (valobj_sp)
|
|
Update();
|
|
}
|
|
|
|
lldb::ChildCacheState
|
|
lldb_private::formatters::LibcxxStdRangesRefViewSyntheticFrontEnd::Update() {
|
|
ValueObjectSP range_ptr =
|
|
GetChildMemberWithName(m_backend, {ConstString("__range_")});
|
|
if (!range_ptr)
|
|
return lldb::ChildCacheState::eRefetch;
|
|
|
|
lldb_private::Status error;
|
|
m_range_sp = range_ptr->Dereference(error);
|
|
|
|
return error.Success() ? lldb::ChildCacheState::eReuse
|
|
: lldb::ChildCacheState::eRefetch;
|
|
}
|
|
|
|
lldb_private::SyntheticChildrenFrontEnd *
|
|
LibcxxStdRangesRefViewSyntheticFrontEndCreator(CXXSyntheticChildren *,
|
|
lldb::ValueObjectSP valobj_sp) {
|
|
if (!valobj_sp)
|
|
return nullptr;
|
|
CompilerType type = valobj_sp->GetCompilerType();
|
|
if (!type.IsValid())
|
|
return nullptr;
|
|
return new LibcxxStdRangesRefViewSyntheticFrontEnd(valobj_sp);
|
|
}
|
|
|
|
} // namespace formatters
|
|
} // namespace lldb_private
|