Type.h revision a8b56238ce138e70433a0ce0b4218c9257beae38
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 : 24102b2c2681c9a830afe25bfea35557421905e42cGreg 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 : 53102b2c2681c9a830afe25bfea35557421905e42cGreg 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, 82fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_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 126fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_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 const ConstString & 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName () const 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_name; 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 156dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton ConstString 157dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetQualifiedName (); 158dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpValue(ExecutionContext *exe_ctx, 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Stream *s, 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DataExtractor &data, 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t data_offset, 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_type, 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose, 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format format = lldb::eFormatDefault); 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpValueInMemory(ExecutionContext *exe_ctx, 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Stream *s, 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 173b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 17424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_types, 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose); 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReadFromMemory (ExecutionContext *exe_ctx, 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 181b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataExtractor &data); 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteToMemory (ExecutionContext *exe_ctx, 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 187b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataExtractor &data); 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIsDeclaration() const; 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetIsDeclaration(bool b); 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIsExternal() const; 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetIsExternal(bool b); 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFormat (); 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Encoding 206fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton GetEncoding (uint64_t &count); 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextScope * 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolContextScope() 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_context; 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const SymbolContextScope * 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolContextScope() const 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_context; 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetSymbolContextScope(SymbolContextScope *context) 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_context = context; 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2240bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham const lldb_private::Declaration & 2250bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham GetDeclaration () const; 2260bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham 227b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // Get the clang type, and resolve definitions for any 228b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // class/struct/union/enum types completely. 229462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::clang_type_t 23004c9c7b03fbec6d0dcc6c848391147de2f129c66Greg Clayton GetClangFullType (); 231b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton 2326916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton // Get the clang type, and resolve definitions enough so that the type could 2336916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton // have layout performed. This allows ptrs and refs to class/struct/union/enum 2346916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton // types remain forward declarations. 2356916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton lldb::clang_type_t 2366916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton GetClangLayoutType (); 2376916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 238b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // Get the clang type and leave class/struct/union/enum types as forward 239b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // declarations if they haven't already been fully defined. 240b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t 241b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetClangForwardType (); 24224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::ASTContext * 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetClangAST (); 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClangASTContext & 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetClangASTContext (); 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Compare(const Type &a, const Type &b); 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 252dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton // From a fully qualified typename, split the type into the type basename 253dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton // and the remaining type scope (namespaces/classes). 254dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton static bool 255b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton GetTypeScopeAndBasename (const char* &name_cstr, 256dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton std::string &scope, 257b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton std::string &basename, 258b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton lldb::TypeClass &type_class); 2596916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton void 2606916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton SetEncodingType (Type *encoding_type) 2616916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton { 2626916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton m_encoding_type = encoding_type; 2636916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton } 2646916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 2652403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton uint32_t 2662403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton GetEncodingMask (); 2672403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton 268b01000fd063629facd45044f137446fb748ee179Greg Clayton void * 269b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateClangPointerType (Type *type); 270b01000fd063629facd45044f137446fb748ee179Greg Clayton 271b01000fd063629facd45044f137446fb748ee179Greg Clayton void * 272b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateClangTypedefType (Type *typedef_type, Type *base_type); 273b01000fd063629facd45044f137446fb748ee179Greg Clayton 274b01000fd063629facd45044f137446fb748ee179Greg Clayton // For C++98 references (&) 275b01000fd063629facd45044f137446fb748ee179Greg Clayton void * 276b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateClangLValueReferenceType (Type *type); 277b01000fd063629facd45044f137446fb748ee179Greg Clayton 278b01000fd063629facd45044f137446fb748ee179Greg Clayton // For C++0x references (&&) 279b01000fd063629facd45044f137446fb748ee179Greg Clayton void * 280b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateClangRValueReferenceType (Type *type); 281f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham 282f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham bool 283f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham IsRealObjCClass(); 284931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 285931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan bool 286931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan IsCompleteObjCClass() 287931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan { 288931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan return m_flags.is_complete_objc_class; 289931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan } 290931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 291931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan void 292931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan SetIsCompleteObjCClass(bool is_complete_objc_class) 293931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan { 294931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_flags.is_complete_objc_class = is_complete_objc_class; 295931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan } 296b01000fd063629facd45044f137446fb748ee179Greg Clayton 29724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 29824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString m_name; 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFile *m_symbol_file; 30024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextScope *m_context; // The symbol context in which this type is defined 301ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton Type *m_encoding_type; 3021b888f8af37eb363d5026ee1bd3eea409be8eae3Greg Clayton lldb::user_id_t m_encoding_uid; 303bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton EncodingDataType m_encoding_uid_type; 304fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t m_byte_size; 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration m_decl; 306bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton lldb::clang_type_t m_clang_type; 307931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 308931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan struct Flags { 309931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan ResolveState clang_type_resolve_state : 2; 310931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan bool is_complete_objc_class : 1; 311931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan } m_flags; 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3134b40711e7950310afb74835820eb669004cd8c44Greg Clayton Type * 314ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton GetEncodingType (); 315ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 316bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton bool 317bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton ResolveClangType (ResolveState clang_type_resolve_state); 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 320ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 321ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// 322ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// Sometimes you can find the name of the type corresponding to an object, but we don't have debug 323ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// information for it. If that is the case, you can return one of these objects, and then if it 324ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// has a full type, you can use that, but if not at least you can print the name for informational 325ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// purposes. 326ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// 327ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 328ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamclass TypeAndOrName 329ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 330ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghampublic: 331ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (); 332ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (lldb::TypeSP &type_sp); 333ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (const char *type_str); 334ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (const TypeAndOrName &rhs); 335ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (ConstString &type_const_string); 336ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 337ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName & 338ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham operator= (const TypeAndOrName &rhs); 339ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 3401a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool 3411a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata operator==(const TypeAndOrName &other) const; 3421a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 3431a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool 3441a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata operator!=(const TypeAndOrName &other) const; 3451a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 346ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham ConstString GetName () const; 3470fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 3480fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeSP 3490fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton GetTypeSP () const 3500fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 351ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return m_type_sp; 3520fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 353ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 354ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham void 355ef22b90240618ed8056dac14a756dff574f8218aGreg Clayton SetName (const ConstString &type_name); 356ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 357ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham void 358ef22b90240618ed8056dac14a756dff574f8218aGreg Clayton SetName (const char *type_name_cstr); 359ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 360ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham void 361ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham SetTypeSP (lldb::TypeSP type_sp); 362ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 363ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham bool 364ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham IsEmpty (); 365ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 3661a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool 3671a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata HasName (); 3681a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 3691a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool 3701a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata HasTypeSP (); 3711a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 3721a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata void 3731a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata Clear (); 3741a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 3751a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata operator 3761a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool () 3771a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata { 3781a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return !IsEmpty(); 3791a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata } 3801a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 381ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamprivate: 382ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham lldb::TypeSP m_type_sp; 383ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham ConstString m_type_name; 384ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham}; 385ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 386979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata// the two classes here are used by the public API as a backend to 387979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata// the SBType and SBTypeList classes 388979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 389979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass TypeImpl 390979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{ 391979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatapublic: 392979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 393979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeImpl() : 3940fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_clang_ast_type(), 3950fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type_sp() 3960fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 3970fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 398979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 399979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeImpl(const TypeImpl& rhs) : 4000fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_clang_ast_type(rhs.m_clang_ast_type), 4010fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type_sp(rhs.m_type_sp) 4020fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 4030fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 4040fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 4050fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton TypeImpl(const lldb_private::ClangASTType& type); 4060fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 4070fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton TypeImpl(const lldb::TypeSP& type); 408979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 409979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeImpl& 410979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata operator = (const TypeImpl& rhs); 411979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 412979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata bool 413979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata operator == (const TypeImpl& rhs) 414979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4150fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type == rhs.m_clang_ast_type && m_type_sp.get() == rhs.m_type_sp.get(); 416979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 417979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 418979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata bool 419979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata operator != (const TypeImpl& rhs) 420979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4210fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type != rhs.m_clang_ast_type || m_type_sp.get() != rhs.m_type_sp.get(); 422979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 423979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 424979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata bool 425979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata IsValid() 426979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4270fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_type_sp.get() != NULL || m_clang_ast_type.IsValid(); 428979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 429979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 4300fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton const lldb_private::ClangASTType & 4310fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton GetClangASTType() const 432979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4330fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type; 434979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 435979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 436979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata clang::ASTContext* 437979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetASTContext(); 438979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 439979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata lldb::clang_type_t 440979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetOpaqueQualType(); 4410fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 442d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata lldb::TypeSP 443d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata GetTypeSP () 444d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata { 445d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata return m_type_sp; 446d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata } 4478c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata 4488c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata ConstString 4498c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata GetName (); 450d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata 45196154be69fa240a662419183ed08e1cfc5418164Greg Clayton bool 45296154be69fa240a662419183ed08e1cfc5418164Greg Clayton GetDescription (lldb_private::Stream &strm, 45396154be69fa240a662419183ed08e1cfc5418164Greg Clayton lldb::DescriptionLevel description_level); 45496154be69fa240a662419183ed08e1cfc5418164Greg Clayton 4557dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton void 4567dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton SetType (const lldb::TypeSP &type_sp); 45796154be69fa240a662419183ed08e1cfc5418164Greg Clayton 4580fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonprivate: 4590fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton ClangASTType m_clang_ast_type; 4600fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeSP m_type_sp; 461979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata}; 462979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 463979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass TypeListImpl 464979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{ 465979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatapublic: 466979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeListImpl() : 4670fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_content() 4680fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 4690fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 470979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 471979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata void 4720fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton Append (const lldb::TypeImplSP& type) 473979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 474979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata m_content.push_back(type); 475979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 476979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 477a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton class AppendVisitor 478a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton { 479a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton public: 480a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton AppendVisitor(TypeListImpl &type_list) : 481a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton m_type_list(type_list) 482a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton { 483a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton } 484a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 485a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton void 486a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton operator() (const lldb::TypeImplSP& type) 487a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton { 488a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton m_type_list.Append(type); 489a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton } 490a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 491a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton private: 492a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton TypeListImpl &m_type_list; 493a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton }; 494a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 495a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton void 496a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton Append (const lldb_private::TypeList &type_list); 497a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 4980fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeImplSP 4990fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton GetTypeAtIndex(size_t idx) 500979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 5010fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeImplSP type_sp; 5020fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton if (idx < GetSize()) 5030fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton type_sp = m_content[idx]; 5040fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return type_sp; 505979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 506979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 5070fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton size_t 508979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetSize() 509979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 510979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata return m_content.size(); 511979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 512979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 513979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataprivate: 5140fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton std::vector<lldb::TypeImplSP> m_content; 515979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata}; 516d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 517d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonclass TypeMemberImpl 518d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton{ 519d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonpublic: 520d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton TypeMemberImpl () : 521d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_type_impl_sp (), 522d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_bit_offset (0), 523f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_name (), 524f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size (0), 525f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield (false) 526f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 527d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 528d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 529d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 530d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp, 531d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t bit_offset, 532f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton const ConstString &name, 533f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton uint32_t bitfield_bit_size = 0, 534f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton bool is_bitfield = false) : 535d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_type_impl_sp (type_impl_sp), 536d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_bit_offset (bit_offset), 537f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_name (name), 538f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size (bitfield_bit_size), 539f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield (is_bitfield) 540d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 541d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 542d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 543d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp, 544d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t bit_offset): 545d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_type_impl_sp (type_impl_sp), 546d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_bit_offset (bit_offset), 547f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_name (), 548f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size (0), 549f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield (false) 550d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 5518c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata if (m_type_impl_sp) 5528c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata m_name = m_type_impl_sp->GetName(); 553d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 554d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 555d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton const lldb::TypeImplSP & 556d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetTypeImpl () 557d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 558d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton return m_type_impl_sp; 559d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 560d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 561d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton const ConstString & 562d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetName () const 563d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 564d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton return m_name; 565d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 566dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 567d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t 568d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetBitOffset () const 569d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 570d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton return m_bit_offset; 571d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 572d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 573f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton uint32_t 574f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton GetBitfieldBitSize () const 575f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 576f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton return m_bitfield_bit_size; 577f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 578f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 579f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton void 580f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton SetBitfieldBitSize (uint32_t bitfield_bit_size) 581f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 582f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size = bitfield_bit_size; 583f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 584f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 585f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton bool 586f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton GetIsBitfield () const 587f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 588f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton return m_is_bitfield; 589f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 590f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 591f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton void 592f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton SetIsBitfield (bool is_bitfield) 593f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 594f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield = is_bitfield; 595f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 596f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 597d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonprotected: 598d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton lldb::TypeImplSP m_type_impl_sp; 599d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t m_bit_offset; 600d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton ConstString m_name; 601f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton uint32_t m_bitfield_bit_size; // Bit size for bitfield members only 602f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton bool m_is_bitfield; 603d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton}; 604979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 605979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 60824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Type_h_ 60924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 610