xref: /NextBSD/contrib/llvm/tools/lldb/include/lldb/Core/ValueObjectChild.h (revision 84d351007654069f9643c8e4b4802a7f5f08ee42)
1 //===-- ValueObjectChild.h --------------------------------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9 
10 #ifndef liblldb_ValueObjectChild_h_
11 #define liblldb_ValueObjectChild_h_
12 
13 // C Includes
14 // C++ Includes
15 // Other libraries and framework includes
16 // Project includes
17 #include "lldb/Core/ValueObject.h"
18 
19 namespace lldb_private {
20 
21 //----------------------------------------------------------------------
22 // A child of another ValueObject.
23 //----------------------------------------------------------------------
24 class ValueObjectChild : public ValueObject
25 {
26 public:
27     virtual ~ValueObjectChild();
28 
29     virtual uint64_t
GetByteSize()30     GetByteSize()
31     {
32         return m_byte_size;
33     }
34 
35     virtual lldb::offset_t
GetByteOffset()36     GetByteOffset()
37     {
38         return m_byte_offset;
39     }
40 
41     virtual uint32_t
GetBitfieldBitSize()42     GetBitfieldBitSize()
43     {
44         return m_bitfield_bit_size;
45     }
46 
47     virtual uint32_t
GetBitfieldBitOffset()48     GetBitfieldBitOffset()
49     {
50         return m_bitfield_bit_offset;
51     }
52 
53     virtual lldb::ValueType
54     GetValueType() const;
55 
56     virtual size_t
57     CalculateNumChildren();
58 
59     virtual ConstString
60     GetTypeName();
61 
62     virtual ConstString
63     GetQualifiedTypeName();
64 
65     virtual ConstString
66     GetDisplayTypeName();
67 
68     virtual bool
69     IsInScope ();
70 
71     virtual bool
IsBaseClass()72     IsBaseClass ()
73     {
74         return m_is_base_class;
75     }
76 
77     virtual bool
IsDereferenceOfParent()78     IsDereferenceOfParent ()
79     {
80         return m_is_deref_of_parent;
81     }
82 
83 protected:
84     virtual bool
85     UpdateValue ();
86 
87     virtual bool
88     CanUpdateWithInvalidExecutionContext ();
89 
90     virtual ClangASTType
GetClangTypeImpl()91     GetClangTypeImpl ()
92     {
93         return m_clang_type;
94     }
95 
96     ClangASTType m_clang_type;
97     ConstString m_type_name;
98     uint64_t m_byte_size;
99     int32_t m_byte_offset;
100     uint8_t m_bitfield_bit_size;
101     uint8_t m_bitfield_bit_offset;
102     bool m_is_base_class;
103     bool m_is_deref_of_parent;
104 
105 //
106 //  void
107 //  ReadValueFromMemory (ValueObject* parent, lldb::addr_t address);
108 
109 protected:
110     friend class ValueObject;
111     friend class ValueObjectConstResult;
112     friend class ValueObjectConstResultImpl;
113     ValueObjectChild (ValueObject &parent,
114                       const ClangASTType &clang_type,
115                       const ConstString &name,
116                       uint64_t byte_size,
117                       int32_t byte_offset,
118                       uint32_t bitfield_bit_size,
119                       uint32_t bitfield_bit_offset,
120                       bool is_base_class,
121                       bool is_deref_of_parent,
122                       AddressType child_ptr_or_ref_addr_type);
123 
124     DISALLOW_COPY_AND_ASSIGN (ValueObjectChild);
125 };
126 
127 } // namespace lldb_private
128 
129 #endif  // liblldb_ValueObjectChild_h_
130