Type.h revision f6132ef983e8a5b98fbe5e184f5128eff8c04730
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 1410cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton bool 1420cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton IsTypedef () 1430cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton { 1440cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton return m_encoding_uid_type == eEncodingIsTypedefUID; 1450cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton } 1460cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton 1470cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton lldb::TypeSP 1480cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton GetTypedefType(); 1490cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetByteSize(uint32_t byte_size); 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString & 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName () const 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_name; 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 159dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton ConstString 160dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetQualifiedName (); 161dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpValue(ExecutionContext *exe_ctx, 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Stream *s, 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DataExtractor &data, 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t data_offset, 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_type, 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose, 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format format = lldb::eFormatDefault); 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpValueInMemory(ExecutionContext *exe_ctx, 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Stream *s, 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 176b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_types, 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose); 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReadFromMemory (ExecutionContext *exe_ctx, 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 184b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataExtractor &data); 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteToMemory (ExecutionContext *exe_ctx, 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 190b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataExtractor &data); 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIsDeclaration() const; 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetIsDeclaration(bool b); 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIsExternal() const; 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetIsExternal(bool b); 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFormat (); 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Encoding 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetEncoding (uint32_t &count); 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextScope * 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolContextScope() 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_context; 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const SymbolContextScope * 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolContextScope() const 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_context; 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetSymbolContextScope(SymbolContextScope *context) 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_context = context; 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2270bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham const lldb_private::Declaration & 2280bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham GetDeclaration () const; 2290bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham 230b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // Get the clang type, and resolve definitions for any 231b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // class/struct/union/enum types completely. 232462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::clang_type_t 23304c9c7b03fbec6d0dcc6c848391147de2f129c66Greg Clayton GetClangFullType (); 234b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton 2356916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton // Get the clang type, and resolve definitions enough so that the type could 2366916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton // have layout performed. This allows ptrs and refs to class/struct/union/enum 2376916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton // types remain forward declarations. 2386916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton lldb::clang_type_t 2396916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton GetClangLayoutType (); 2406916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 241b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // Get the clang type and leave class/struct/union/enum types as forward 242b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // declarations if they haven't already been fully defined. 243b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t 244b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetClangForwardType (); 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::ASTContext * 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetClangAST (); 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClangASTContext & 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetClangASTContext (); 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int 25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Compare(const Type &a, const Type &b); 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 255dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton // From a fully qualified typename, split the type into the type basename 256dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton // and the remaining type scope (namespaces/classes). 257dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton static bool 258dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetTypeScopeAndBasename (const char* name_cstr, 259dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton std::string &scope, 260dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton std::string &basename); 2616916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton void 2626916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton SetEncodingType (Type *encoding_type) 2636916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton { 2646916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton m_encoding_type = encoding_type; 2656916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton } 2666916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 2672403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton uint32_t 2682403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton GetEncodingMask (); 2692403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton 270b01000fd063629facd45044f137446fb748ee179Greg Clayton void * 271b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateClangPointerType (Type *type); 272b01000fd063629facd45044f137446fb748ee179Greg Clayton 273b01000fd063629facd45044f137446fb748ee179Greg Clayton void * 274b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateClangTypedefType (Type *typedef_type, Type *base_type); 275b01000fd063629facd45044f137446fb748ee179Greg Clayton 276b01000fd063629facd45044f137446fb748ee179Greg Clayton // For C++98 references (&) 277b01000fd063629facd45044f137446fb748ee179Greg Clayton void * 278b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateClangLValueReferenceType (Type *type); 279b01000fd063629facd45044f137446fb748ee179Greg Clayton 280b01000fd063629facd45044f137446fb748ee179Greg Clayton // For C++0x references (&&) 281b01000fd063629facd45044f137446fb748ee179Greg Clayton void * 282b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateClangRValueReferenceType (Type *type); 283f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham 284f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham bool 285f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham IsRealObjCClass(); 286931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 287931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan bool 288931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan IsCompleteObjCClass() 289931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan { 290931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan return m_flags.is_complete_objc_class; 291931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan } 292931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 293931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan void 294931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan SetIsCompleteObjCClass(bool is_complete_objc_class) 295931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan { 296931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_flags.is_complete_objc_class = is_complete_objc_class; 297931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan } 298b01000fd063629facd45044f137446fb748ee179Greg Clayton 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString m_name; 30124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFile *m_symbol_file; 30224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextScope *m_context; // The symbol context in which this type is defined 303ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton Type *m_encoding_type; 304ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton uint32_t m_encoding_uid; 305bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton EncodingDataType m_encoding_uid_type; 306ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton uint32_t m_byte_size; 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration m_decl; 308bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton lldb::clang_type_t m_clang_type; 309931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 310931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan struct Flags { 311931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan ResolveState clang_type_resolve_state : 2; 312931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan bool is_complete_objc_class : 1; 313931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan } m_flags; 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3154b40711e7950310afb74835820eb669004cd8c44Greg Clayton Type * 316ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton GetEncodingType (); 317ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 318bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton bool 319bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton ResolveClangType (ResolveState clang_type_resolve_state); 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 32124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 322ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 323ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// 324ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// Sometimes you can find the name of the type corresponding to an object, but we don't have debug 325ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// information for it. If that is the case, you can return one of these objects, and then if it 326ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// has a full type, you can use that, but if not at least you can print the name for informational 327ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// purposes. 328ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// 329ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 330ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamclass TypeAndOrName 331ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 332ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghampublic: 333ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (); 334ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (lldb::TypeSP &type_sp); 335ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (const char *type_str); 336ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (const TypeAndOrName &rhs); 337ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (ConstString &type_const_string); 338ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 339ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName & 340ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham operator= (const TypeAndOrName &rhs); 341ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 342ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham ConstString GetName () const; 3430fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 3440fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeSP 3450fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton GetTypeSP () const 3460fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 347ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return m_type_sp; 3480fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 349ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 350ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham void 351ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham SetName (ConstString &type_name_const_str); 352ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 353ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham void 354ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham SetName (const char *type_name_str); 355ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 356ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham void 357ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham SetTypeSP (lldb::TypeSP type_sp); 358ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 359ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham bool 360ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham IsEmpty (); 361ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 362ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamprivate: 363ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham lldb::TypeSP m_type_sp; 364ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham ConstString m_type_name; 365ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham}; 366ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 367979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata// the two classes here are used by the public API as a backend to 368979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata// the SBType and SBTypeList classes 369979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 370979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass TypeImpl 371979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{ 372979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatapublic: 373979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 374979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeImpl() : 3750fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_clang_ast_type(), 3760fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type_sp() 3770fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 3780fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 379979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 380979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeImpl(const TypeImpl& rhs) : 3810fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_clang_ast_type(rhs.m_clang_ast_type), 3820fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type_sp(rhs.m_type_sp) 3830fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 3840fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 3850fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 3860fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton TypeImpl(const lldb_private::ClangASTType& type); 3870fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 3880fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton TypeImpl(const lldb::TypeSP& type); 389979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 390979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeImpl& 391979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata operator = (const TypeImpl& rhs); 392979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 393979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata bool 394979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata operator == (const TypeImpl& rhs) 395979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 3960fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type == rhs.m_clang_ast_type && m_type_sp.get() == rhs.m_type_sp.get(); 397979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 398979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 399979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata bool 400979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata operator != (const TypeImpl& rhs) 401979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4020fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type != rhs.m_clang_ast_type || m_type_sp.get() != rhs.m_type_sp.get(); 403979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 404979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 405979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata bool 406979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata IsValid() 407979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4080fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_type_sp.get() != NULL || m_clang_ast_type.IsValid(); 409979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 410979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 4110fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton const lldb_private::ClangASTType & 4120fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton GetClangASTType() const 413979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4140fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type; 415979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 416979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 417979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata clang::ASTContext* 418979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetASTContext(); 419979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 420979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata lldb::clang_type_t 421979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetOpaqueQualType(); 4220fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 423d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata lldb::TypeSP 424d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata GetTypeSP () 425d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata { 426d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata return m_type_sp; 427d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata } 428d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata 42996154be69fa240a662419183ed08e1cfc5418164Greg Clayton bool 43096154be69fa240a662419183ed08e1cfc5418164Greg Clayton GetDescription (lldb_private::Stream &strm, 43196154be69fa240a662419183ed08e1cfc5418164Greg Clayton lldb::DescriptionLevel description_level); 43296154be69fa240a662419183ed08e1cfc5418164Greg Clayton 4337dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton void 4347dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton SetType (const lldb::TypeSP &type_sp); 43596154be69fa240a662419183ed08e1cfc5418164Greg Clayton 4360fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonprivate: 4370fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton ClangASTType m_clang_ast_type; 4380fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeSP m_type_sp; 439979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata}; 440979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 441979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass TypeListImpl 442979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{ 443979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatapublic: 444979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeListImpl() : 4450fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_content() 4460fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 4470fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 448979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 449979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata void 4500fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton Append (const lldb::TypeImplSP& type) 451979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 452979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata m_content.push_back(type); 453979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 454979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 4550fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeImplSP 4560fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton GetTypeAtIndex(size_t idx) 457979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4580fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeImplSP type_sp; 4590fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton if (idx < GetSize()) 4600fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton type_sp = m_content[idx]; 4610fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return type_sp; 462979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 463979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 4640fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton size_t 465979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetSize() 466979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 467979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata return m_content.size(); 468979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 469979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 470979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataprivate: 4710fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton std::vector<lldb::TypeImplSP> m_content; 472979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata}; 473d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 474d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonclass TypeMemberImpl 475d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton{ 476d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonpublic: 477d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton TypeMemberImpl () : 478d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_type_impl_sp (), 479d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_bit_offset (0), 480f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_name (), 481f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size (0), 482f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield (false) 483f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 484d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 485d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 486d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 487d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp, 488d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t bit_offset, 489f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton const ConstString &name, 490f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton uint32_t bitfield_bit_size = 0, 491f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton bool is_bitfield = false) : 492d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_type_impl_sp (type_impl_sp), 493d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_bit_offset (bit_offset), 494f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_name (name), 495f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size (bitfield_bit_size), 496f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield (is_bitfield) 497d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 498d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 499d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 500d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp, 501d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t bit_offset): 502d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_type_impl_sp (type_impl_sp), 503d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_bit_offset (bit_offset), 504f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_name (), 505f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size (0), 506f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield (false) 507d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 508d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 509d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 510d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton const lldb::TypeImplSP & 511d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetTypeImpl () 512d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 513d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton return m_type_impl_sp; 514d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 515d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 516d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton const ConstString & 517d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetName () const 518d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 519d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton return m_name; 520d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 521dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 522d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t 523d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetBitOffset () const 524d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 525d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton return m_bit_offset; 526d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 527d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 528f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton uint32_t 529f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton GetBitfieldBitSize () const 530f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 531f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton return m_bitfield_bit_size; 532f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 533f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 534f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton void 535f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton SetBitfieldBitSize (uint32_t bitfield_bit_size) 536f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 537f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size = bitfield_bit_size; 538f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 539f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 540f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton bool 541f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton GetIsBitfield () const 542f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 543f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton return m_is_bitfield; 544f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 545f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 546f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton void 547f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton SetIsBitfield (bool is_bitfield) 548f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 549f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield = is_bitfield; 550f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 551f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 552d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonprotected: 553d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton lldb::TypeImplSP m_type_impl_sp; 554d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t m_bit_offset; 555d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton ConstString m_name; 556f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton uint32_t m_bitfield_bit_size; // Bit size for bitfield members only 557f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton bool m_is_bitfield; 558d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton}; 559979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 560979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 56224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 56324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Type_h_ 56424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 565