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