Type.h revision 598df88bd6fc33c6fb330bc859bdc277795501f3
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Type.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_Type_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_Type_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-private.h"
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ClangForward.h"
15ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham#include "lldb/Core/ConstString.h"
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UserID.h"
170fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton#include "lldb/Symbol/ClangASTType.h"
1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Declaration.h"
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <set>
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2237bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton
2337bb8ddd443da172f42bb8657f15ec856a525c84Greg Claytonclass SymbolFileType :
24598df88bd6fc33c6fb330bc859bdc277795501f3Greg Clayton    public STD_ENABLE_SHARED_FROM_THIS(SymbolFileType),
2537bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton    public UserID
2637bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton    {
2737bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton    public:
2837bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        SymbolFileType (SymbolFile &symbol_file, lldb::user_id_t uid) :
2937bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton            UserID (uid),
3037bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton            m_symbol_file (symbol_file)
3137bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        {
3237bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        }
3337bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton
3437bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        ~SymbolFileType ()
3537bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        {
3637bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        }
3737bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton
3837bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        Type *
3937bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        operator->()
4037bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        {
4137bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton            return GetType ();
4237bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        }
4337bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton
4437bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        Type *
4537bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        GetType ();
4637bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton
4737bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton    protected:
4837bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        SymbolFile &m_symbol_file;
4937bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton        lldb::TypeSP m_type_sp;
5037bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton    };
51979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
524c8353bd5be6e5abcab8fe27965d477aace75cf2Greg Claytonclass Type :
53598df88bd6fc33c6fb330bc859bdc277795501f3Greg Clayton    public STD_ENABLE_SHARED_FROM_THIS(Type),
544c8353bd5be6e5abcab8fe27965d477aace75cf2Greg Clayton    public UserID
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
576916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    typedef enum EncodingDataTypeTag
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
594b40711e7950310afb74835820eb669004cd8c44Greg Clayton        eEncodingInvalid,
606916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton        eEncodingIsUID,                 ///< This type is the type whose UID is m_encoding_uid
614b40711e7950310afb74835820eb669004cd8c44Greg Clayton        eEncodingIsConstUID,            ///< This type is the type whose UID is m_encoding_uid with the const qualifier added
624b40711e7950310afb74835820eb669004cd8c44Greg Clayton        eEncodingIsRestrictUID,         ///< This type is the type whose UID is m_encoding_uid with the restrict qualifier added
634b40711e7950310afb74835820eb669004cd8c44Greg Clayton        eEncodingIsVolatileUID,         ///< This type is the type whose UID is m_encoding_uid with the volatile qualifier added
644b40711e7950310afb74835820eb669004cd8c44Greg Clayton        eEncodingIsTypedefUID,          ///< This type is pointer to a type whose UID is m_encoding_uid
654b40711e7950310afb74835820eb669004cd8c44Greg Clayton        eEncodingIsPointerUID,          ///< This type is pointer to a type whose UID is m_encoding_uid
664b40711e7950310afb74835820eb669004cd8c44Greg Clayton        eEncodingIsLValueReferenceUID,  ///< This type is L value reference to a type whose UID is m_encoding_uid
674b40711e7950310afb74835820eb669004cd8c44Greg Clayton        eEncodingIsRValueReferenceUID,  ///< This type is R value reference to a type whose UID is m_encoding_uid
68ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton        eEncodingIsSyntheticUID
694b40711e7950310afb74835820eb669004cd8c44Greg Clayton    } EncodingDataType;
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
716916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    typedef enum ResolveStateTag
726916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    {
736916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton        eResolveStateUnresolved = 0,
746916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton        eResolveStateForward    = 1,
756916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton        eResolveStateLayout     = 2,
766916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton        eResolveStateFull       = 3
776916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    } ResolveState;
786916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton
79462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    Type (lldb::user_id_t uid,
80462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton          SymbolFile* symbol_file,
81462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton          const ConstString &name,
824b40711e7950310afb74835820eb669004cd8c44Greg Clayton          uint32_t byte_size,
83462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton          SymbolContextScope *context,
84bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton          lldb::user_id_t encoding_uid,
85bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton          EncodingDataType encoding_uid_type,
86462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton          const Declaration& decl,
874b40711e7950310afb74835820eb669004cd8c44Greg Clayton          lldb::clang_type_t clang_qual_type,
886916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton          ResolveState clang_type_resolve_state);
89462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // This makes an invalid type.  Used for functions that return a Type when they
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // get an error.
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Type();
93bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton
94bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton    Type (const Type &rhs);
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const Type&
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    operator= (const Type& rhs);
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Dump(Stream *s, bool show_context);
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DumpTypeName(Stream *s);
10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
10512bec71b323dc520f0e985a86e09c4712559e115Greg Clayton
10612bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    void
10712bec71b323dc520f0e985a86e09c4712559e115Greg Clayton    GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_name);
10812bec71b323dc520f0e985a86e09c4712559e115Greg Clayton
10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SymbolFile *
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSymbolFile()
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_symbol_file;
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const SymbolFile *
11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSymbolFile() const
11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_symbol_file;
11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    TypeList*
12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetTypeList();
12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const ConstString&
12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetName();
12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
126bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton    uint32_t
12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetByteSize();
12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    uint32_t
13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetNumChildren (bool omit_empty_base_classes);
13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsAggregateType ();
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    IsValidType ()
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
138ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton        return m_encoding_uid_type != eEncodingInvalid;
13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetByteSize(uint32_t byte_size);
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const ConstString &
14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetName () const
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_name;
14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DumpValue(ExecutionContext *exe_ctx,
15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              Stream *s,
15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              const DataExtractor &data,
15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              uint32_t data_offset,
15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              bool show_type,
15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              bool show_summary,
15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              bool verbose,
15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner              lldb::Format format = lldb::eFormatDefault);
15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    DumpValueInMemory(ExecutionContext *exe_ctx,
16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                      Stream *s,
16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                      lldb::addr_t address,
164b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                      AddressType address_type,
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                      bool show_types,
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                      bool show_summary,
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                      bool verbose);
16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ReadFromMemory (ExecutionContext *exe_ctx,
17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    lldb::addr_t address,
172b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                    AddressType address_type,
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                    DataExtractor &data);
17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    WriteToMemory (ExecutionContext *exe_ctx,
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                   lldb::addr_t address,
178b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                   AddressType address_type,
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                   DataExtractor &data);
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetIsDeclaration() const;
18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetIsDeclaration(bool b);
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetIsExternal() const;
18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetIsExternal(bool b);
19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::Format
19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetFormat ();
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    lldb::Encoding
19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetEncoding (uint32_t &count);
19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SymbolContextScope *
20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSymbolContextScope()
20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_context;
20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const SymbolContextScope *
20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetSymbolContextScope() const
20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        return m_context;
20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetSymbolContextScope(SymbolContextScope *context)
21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    {
21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        m_context = context;
21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    }
21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2150bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham    const lldb_private::Declaration &
2160bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham    GetDeclaration () const;
2170bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham
218b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    // Get the clang type, and resolve definitions for any
219b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    // class/struct/union/enum types completely.
220462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
22104c9c7b03fbec6d0dcc6c848391147de2f129c66Greg Clayton    GetClangFullType ();
222b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton
2236916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    // Get the clang type, and resolve definitions enough so that the type could
2246916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    // have layout performed. This allows ptrs and refs to class/struct/union/enum
2256916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    // types remain forward declarations.
2266916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    lldb::clang_type_t
2276916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    GetClangLayoutType ();
2286916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton
229b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    // Get the clang type and leave class/struct/union/enum types as forward
230b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    // declarations if they haven't already been fully defined.
231b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    lldb::clang_type_t
232b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    GetClangForwardType ();
23324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::ASTContext *
23524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetClangAST ();
23624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
23724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ClangASTContext &
23824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetClangASTContext ();
23924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static int
24124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Compare(const Type &a, const Type &b);
24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2436916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    void
2446916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    SetEncodingType (Type *encoding_type)
2456916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    {
2466916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton        m_encoding_type = encoding_type;
2476916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    }
2486916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton
2492403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton    uint32_t
2502403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton    GetEncodingMask ();
2512403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton
252b01000fd063629facd45044f137446fb748ee179Greg Clayton    void *
253b01000fd063629facd45044f137446fb748ee179Greg Clayton    CreateClangPointerType (Type *type);
254b01000fd063629facd45044f137446fb748ee179Greg Clayton
255b01000fd063629facd45044f137446fb748ee179Greg Clayton    void *
256b01000fd063629facd45044f137446fb748ee179Greg Clayton    CreateClangTypedefType (Type *typedef_type, Type *base_type);
257b01000fd063629facd45044f137446fb748ee179Greg Clayton
258b01000fd063629facd45044f137446fb748ee179Greg Clayton    // For C++98 references (&)
259b01000fd063629facd45044f137446fb748ee179Greg Clayton    void *
260b01000fd063629facd45044f137446fb748ee179Greg Clayton    CreateClangLValueReferenceType (Type *type);
261b01000fd063629facd45044f137446fb748ee179Greg Clayton
262b01000fd063629facd45044f137446fb748ee179Greg Clayton    // For C++0x references (&&)
263b01000fd063629facd45044f137446fb748ee179Greg Clayton    void *
264b01000fd063629facd45044f137446fb748ee179Greg Clayton    CreateClangRValueReferenceType (Type *type);
265f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham
266f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham    bool
267f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham    IsRealObjCClass();
268931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan
269931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    bool
270931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    IsCompleteObjCClass()
271931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    {
272931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan        return m_flags.is_complete_objc_class;
273931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    }
274931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan
275931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    void
276931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    SetIsCompleteObjCClass(bool is_complete_objc_class)
277931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    {
278931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan        m_flags.is_complete_objc_class = is_complete_objc_class;
279931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    }
280b01000fd063629facd45044f137446fb748ee179Greg Clayton
28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ConstString m_name;
28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SymbolFile *m_symbol_file;
28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SymbolContextScope *m_context; // The symbol context in which this type is defined
285ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton    Type *m_encoding_type;
286ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton    uint32_t m_encoding_uid;
287bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton    EncodingDataType m_encoding_uid_type;
288ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton    uint32_t m_byte_size;
28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Declaration m_decl;
290bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    lldb::clang_type_t m_clang_type;
291931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan
292931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    struct Flags {
293931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan        ResolveState    clang_type_resolve_state : 2;
294931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan        bool            is_complete_objc_class   : 1;
295931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan    } m_flags;
29624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2974b40711e7950310afb74835820eb669004cd8c44Greg Clayton    Type *
298ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton    GetEncodingType ();
299ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton
300bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton    bool
301bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton    ResolveClangType (ResolveState clang_type_resolve_state);
30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
304ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
305ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham///
306ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// Sometimes you can find the name of the type corresponding to an object, but we don't have debug
307ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// information for it.  If that is the case, you can return one of these objects, and then if it
308ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// has a full type, you can use that, but if not at least you can print the name for informational
309ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// purposes.
310ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham///
311ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
312ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamclass TypeAndOrName
313ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{
314ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghampublic:
315ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    TypeAndOrName ();
316ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    TypeAndOrName (lldb::TypeSP &type_sp);
317ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    TypeAndOrName (const char *type_str);
318ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    TypeAndOrName (const TypeAndOrName &rhs);
319ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    TypeAndOrName (ConstString &type_const_string);
320ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
321ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    TypeAndOrName &
322ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    operator= (const TypeAndOrName &rhs);
323ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
324ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    ConstString GetName () const;
3250fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton
3260fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    lldb::TypeSP
3270fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    GetTypeSP () const
3280fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    {
329ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham        return m_type_sp;
3300fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    }
331ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
332ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    void
333ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    SetName (ConstString &type_name_const_str);
334ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
335ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    void
336ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    SetName (const char *type_name_str);
337ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
338ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    void
339ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    SetTypeSP (lldb::TypeSP type_sp);
340ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
341ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    bool
342ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    IsEmpty ();
343ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
344ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamprivate:
345ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    lldb::TypeSP m_type_sp;
346ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham    ConstString m_type_name;
347ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham};
348ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham
349979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata// the two classes here are used by the public API as a backend to
350979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata// the SBType and SBTypeList classes
351979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
352979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass TypeImpl
353979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{
354979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatapublic:
355979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
356979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    TypeImpl() :
3570fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        m_clang_ast_type(),
3580fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        m_type_sp()
3590fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    {
3600fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    }
361979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
362979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    TypeImpl(const TypeImpl& rhs) :
3630fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        m_clang_ast_type(rhs.m_clang_ast_type),
3640fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        m_type_sp(rhs.m_type_sp)
3650fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    {
3660fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    }
3670fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton
3680fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    TypeImpl(const lldb_private::ClangASTType& type);
3690fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton
3700fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    TypeImpl(const lldb::TypeSP& type);
371979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
372979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    TypeImpl&
373979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    operator = (const TypeImpl& rhs);
374979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
375979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    bool
376979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    operator == (const TypeImpl& rhs)
377979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    {
3780fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        return m_clang_ast_type == rhs.m_clang_ast_type && m_type_sp.get() == rhs.m_type_sp.get();
379979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    }
380979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
381979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    bool
382979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    operator != (const TypeImpl& rhs)
383979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    {
3840fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        return m_clang_ast_type != rhs.m_clang_ast_type || m_type_sp.get() != rhs.m_type_sp.get();
385979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    }
386979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
387979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    bool
388979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    IsValid()
389979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    {
3900fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        return m_type_sp.get() != NULL || m_clang_ast_type.IsValid();
391979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    }
392979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
3930fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    const lldb_private::ClangASTType &
3940fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    GetClangASTType() const
395979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    {
3960fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        return m_clang_ast_type;
397979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    }
398979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
399979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    clang::ASTContext*
400979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetASTContext();
401979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
402979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    lldb::clang_type_t
403979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetOpaqueQualType();
4040fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton
405d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    lldb::TypeSP
406d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    GetTypeSP ()
407d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    {
408d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata        return m_type_sp;
409d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata    }
410d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata
41196154be69fa240a662419183ed08e1cfc5418164Greg Clayton    bool
41296154be69fa240a662419183ed08e1cfc5418164Greg Clayton    GetDescription (lldb_private::Stream &strm,
41396154be69fa240a662419183ed08e1cfc5418164Greg Clayton                    lldb::DescriptionLevel description_level);
41496154be69fa240a662419183ed08e1cfc5418164Greg Clayton
4157dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    void
4167dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton    SetType (const lldb::TypeSP &type_sp);
41796154be69fa240a662419183ed08e1cfc5418164Greg Clayton
4180fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonprivate:
4190fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    ClangASTType m_clang_ast_type;
4200fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    lldb::TypeSP m_type_sp;
421979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata};
422979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
423979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass TypeListImpl
424979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{
425979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatapublic:
426979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    TypeListImpl() :
4270fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        m_content()
4280fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    {
4290fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    }
430979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
431979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    void
4320fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    Append (const lldb::TypeImplSP& type)
433979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    {
434979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata        m_content.push_back(type);
435979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    }
436979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
4370fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    lldb::TypeImplSP
4380fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    GetTypeAtIndex(size_t idx)
439979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    {
4400fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        lldb::TypeImplSP type_sp;
4410fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        if (idx < GetSize())
4420fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton            type_sp = m_content[idx];
4430fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton        return type_sp;
444979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    }
445979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
4460fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    size_t
447979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetSize()
448979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    {
449979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata        return m_content.size();
450979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    }
451979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
452979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataprivate:
4530fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton    std::vector<lldb::TypeImplSP> m_content;
454979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata};
455d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
456d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonclass TypeMemberImpl
457d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton{
458d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonpublic:
459d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    TypeMemberImpl () :
460d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        m_type_impl_sp (),
461d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        m_bit_offset (0),
462d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        m_name ()
463d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    {
464d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    }
465d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
466d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp,
467d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton                    uint64_t bit_offset,
468d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton                    const ConstString &name) :
469d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        m_type_impl_sp (type_impl_sp),
470d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        m_bit_offset (bit_offset),
471d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        m_name (name)
472d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    {
473d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    }
474d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
475d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp,
476d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton                    uint64_t bit_offset):
477d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        m_type_impl_sp (type_impl_sp),
478d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        m_bit_offset (bit_offset),
479d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        m_name ()
480d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    {
481d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    }
482d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
483d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    const lldb::TypeImplSP &
484d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetTypeImpl ()
485d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    {
486d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        return m_type_impl_sp;
487d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    }
488d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
489d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    const ConstString &
490d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetName () const
491d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    {
492d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        return m_name;
493d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    }
494d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
495d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    uint64_t
496d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    GetBitOffset () const
497d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    {
498d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton        return m_bit_offset;
499d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    }
500d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton
501d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonprotected:
502d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    lldb::TypeImplSP m_type_impl_sp;
503d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    uint64_t m_bit_offset;
504d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton    ConstString m_name;
505d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton};
506979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
507979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata
50824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
50924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
51024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_Type_h_
51124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
512