virtual size_t GetIndexOfChildWithName (const ConstString &name) { const char* item_name = name.GetCString(); uint32_t idx = ExtractIndexFromString(item_name); if (idx < UINT32_MAX && idx >= CalculateNumChildren()) return UINT32_MAX; return idx; }
lldb::ValueObjectSP GetChildAtIndex(size_t idx) override { if (!m_block_struct_type.IsValid()) { return lldb::ValueObjectSP(); } if (idx >= CalculateNumChildren()) { return lldb::ValueObjectSP(); } const bool thread_and_frame_only_if_stopped = true; ExecutionContext exe_ctx = m_backend.GetExecutionContextRef().Lock( thread_and_frame_only_if_stopped); const bool transparent_pointers = false; const bool omit_empty_base_classes = false; const bool ignore_array_bounds = false; ValueObject *value_object = nullptr; std::string child_name; uint32_t child_byte_size = 0; int32_t child_byte_offset = 0; uint32_t child_bitfield_bit_size = 0; uint32_t child_bitfield_bit_offset = 0; bool child_is_base_class = false; bool child_is_deref_of_parent = false; uint64_t language_flags = 0; const CompilerType child_type = m_block_struct_type.GetChildCompilerTypeAtIndex( &exe_ctx, idx, transparent_pointers, omit_empty_base_classes, ignore_array_bounds, child_name, child_byte_size, child_byte_offset, child_bitfield_bit_size, child_bitfield_bit_offset, child_is_base_class, child_is_deref_of_parent, value_object, language_flags); ValueObjectSP struct_pointer_sp = m_backend.Cast(m_block_struct_type.GetPointerType()); if (!struct_pointer_sp) { return lldb::ValueObjectSP(); } Error err; ValueObjectSP struct_sp = struct_pointer_sp->Dereference(err); if (!struct_sp || !err.Success()) { return lldb::ValueObjectSP(); } ValueObjectSP child_sp(struct_sp->GetSyntheticChildAtOffset( child_byte_offset, child_type, true, ConstString(child_name.c_str(), child_name.size()))); return child_sp; }
virtual lldb::ValueObjectSP GetChildAtIndex (size_t idx) { if (idx >= CalculateNumChildren()) return lldb::ValueObjectSP(); auto offset = idx * m_child_type.GetByteSize(nullptr); ValueObjectSP child_sp(m_backend.GetSyntheticChildAtOffset(offset, m_child_type, true)); if (!child_sp) return child_sp; StreamString idx_name; idx_name.Printf("[%" PRIu64 "]", (uint64_t)idx); child_sp->SetName( ConstString( idx_name.GetData() ) ); child_sp->SetFormat(m_item_format); return child_sp; }