124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ValueObjectChild.h --------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_ValueObjectChild_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ValueObjectChild_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ValueObject.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// A child of another ValueObject.
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//----------------------------------------------------------------------
2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ValueObjectChild : public ValueObject
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual ~ValueObjectChild();
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
29fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton    virtual uint64_t
307b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    GetByteSize()
317b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    {
327b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton        return m_byte_size;
337b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    }
3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual off_t
367b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    GetByteOffset()
377b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    {
387b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton        return m_byte_offset;
397b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    }
4024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t
427b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    GetBitfieldBitSize()
437b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    {
447b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton        return m_bitfield_bit_size;
457b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    }
4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual uint32_t
487b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    GetBitfieldBitOffset()
497b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    {
507b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton        return m_bitfield_bit_offset;
517b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    }
5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual lldb::ValueType
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetValueType() const;
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5636da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton    virtual size_t
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CalculateNumChildren();
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual ConstString
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetTypeName();
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
62dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    virtual ConstString
63dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton    GetQualifiedTypeName();
64dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    virtual bool
66fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    IsInScope ();
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
68bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    virtual bool
69bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    IsBaseClass ()
70bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    {
71bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        return m_is_base_class;
72bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    }
73bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton
7400c3ae7dac4cf9654d1569735c41e58fb2fd8969Greg Clayton    virtual bool
7500c3ae7dac4cf9654d1569735c41e58fb2fd8969Greg Clayton    IsDereferenceOfParent ()
7600c3ae7dac4cf9654d1569735c41e58fb2fd8969Greg Clayton    {
7700c3ae7dac4cf9654d1569735c41e58fb2fd8969Greg Clayton        return m_is_deref_of_parent;
7800c3ae7dac4cf9654d1569735c41e58fb2fd8969Greg Clayton    }
7900c3ae7dac4cf9654d1569735c41e58fb2fd8969Greg Clayton
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
81fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    virtual bool
82fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham    UpdateValue ();
83fa3a16a2ea380ef38388ebe323817bd1b32c20cdJim Ingham
8452f792329be5db8e38961350589e97e8f2823acdGreg Clayton    virtual ClangASTType
85931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    GetClangTypeImpl ()
86931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    {
87931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan        return m_clang_type;
88931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    }
89931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan
9052f792329be5db8e38961350589e97e8f2823acdGreg Clayton    ClangASTType m_clang_type;
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ConstString m_type_name;
92fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton    uint64_t m_byte_size;
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    int32_t m_byte_offset;
947b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    uint8_t m_bitfield_bit_size;
957b85755252a0e2e7bd99305fab9ea2f1f2ce38c6Greg Clayton    uint8_t m_bitfield_bit_offset;
96bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    bool m_is_base_class;
9700c3ae7dac4cf9654d1569735c41e58fb2fd8969Greg Clayton    bool m_is_deref_of_parent;
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  void
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//  ReadValueFromMemory (ValueObject* parent, lldb::addr_t address);
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
103915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granataprotected:
10447da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham    friend class ValueObject;
105915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata    friend class ValueObjectConstResult;
10647da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham    ValueObjectChild (ValueObject &parent,
10752f792329be5db8e38961350589e97e8f2823acdGreg Clayton                      const ClangASTType &clang_type,
10847da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham                      const ConstString &name,
109fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton                      uint64_t byte_size,
11047da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham                      int32_t byte_offset,
11147da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham                      uint32_t bitfield_bit_size,
11247da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham                      uint32_t bitfield_bit_offset,
11347da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham                      bool is_base_class,
114915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                      bool is_deref_of_parent,
115915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata                      AddressType child_ptr_or_ref_addr_type);
11647da810225d8674eb9158bcf5f1f5b847cbaeedfJim Ingham
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DISALLOW_COPY_AND_ASSIGN (ValueObjectChild);
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_ValueObjectChild_h_
123