1 //===-- ValueObjectChild.h --------------------------------------*- C++ -*-===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef LLDB_CORE_VALUEOBJECTCHILD_H 10 #define LLDB_CORE_VALUEOBJECTCHILD_H 11 12 #include "lldb/Core/ValueObject.h" 13 14 #include "lldb/Symbol/CompilerType.h" 15 #include "lldb/Utility/ConstString.h" 16 #include "lldb/lldb-defines.h" 17 #include "lldb/lldb-enumerations.h" 18 #include "lldb/lldb-private-enumerations.h" 19 #include "lldb/lldb-types.h" 20 21 #include "llvm/ADT/Optional.h" 22 23 #include <stddef.h> 24 #include <stdint.h> 25 26 namespace lldb_private { 27 28 // A child of another ValueObject. 29 class ValueObjectChild : public ValueObject { 30 public: 31 ~ValueObjectChild() override; 32 GetByteSize()33 llvm::Optional<uint64_t> GetByteSize() override { return m_byte_size; } 34 GetByteOffset()35 lldb::offset_t GetByteOffset() override { return m_byte_offset; } 36 GetBitfieldBitSize()37 uint32_t GetBitfieldBitSize() override { return m_bitfield_bit_size; } 38 GetBitfieldBitOffset()39 uint32_t GetBitfieldBitOffset() override { return m_bitfield_bit_offset; } 40 41 lldb::ValueType GetValueType() const override; 42 43 size_t CalculateNumChildren(uint32_t max) override; 44 45 ConstString GetTypeName() override; 46 47 ConstString GetQualifiedTypeName() override; 48 49 ConstString GetDisplayTypeName() override; 50 51 bool IsInScope() override; 52 IsBaseClass()53 bool IsBaseClass() override { return m_is_base_class; } 54 IsDereferenceOfParent()55 bool IsDereferenceOfParent() override { return m_is_deref_of_parent; } 56 57 protected: 58 bool UpdateValue() override; 59 60 LazyBool CanUpdateWithInvalidExecutionContext() override; 61 GetCompilerTypeImpl()62 CompilerType GetCompilerTypeImpl() override { return m_compiler_type; } 63 64 CompilerType m_compiler_type; 65 ConstString m_type_name; 66 uint64_t m_byte_size; 67 int32_t m_byte_offset; 68 uint8_t m_bitfield_bit_size; 69 uint8_t m_bitfield_bit_offset; 70 bool m_is_base_class; 71 bool m_is_deref_of_parent; 72 llvm::Optional<LazyBool> m_can_update_with_invalid_exe_ctx; 73 74 // 75 // void 76 // ReadValueFromMemory (ValueObject* parent, lldb::addr_t address); 77 78 friend class ValueObject; 79 friend class ValueObjectConstResult; 80 friend class ValueObjectConstResultImpl; 81 82 ValueObjectChild(ValueObject &parent, const CompilerType &compiler_type, 83 ConstString name, uint64_t byte_size, 84 int32_t byte_offset, uint32_t bitfield_bit_size, 85 uint32_t bitfield_bit_offset, bool is_base_class, 86 bool is_deref_of_parent, 87 AddressType child_ptr_or_ref_addr_type, 88 uint64_t language_flags); 89 90 ValueObjectChild(const ValueObjectChild &) = delete; 91 const ValueObjectChild &operator=(const ValueObjectChild &) = delete; 92 }; 93 94 } // namespace lldb_private 95 96 #endif // LLDB_CORE_VALUEOBJECTCHILD_H 97