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" 1952f792329be5db8e38961350589e97e8f2823acdGreg Clayton 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <set> 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2337bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton 2437bb8ddd443da172f42bb8657f15ec856a525c84Greg Claytonclass SymbolFileType : 25102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton public std::enable_shared_from_this<SymbolFileType>, 2637bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton public UserID 2737bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton { 2837bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton public: 2937bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton SymbolFileType (SymbolFile &symbol_file, lldb::user_id_t uid) : 3037bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton UserID (uid), 3137bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton m_symbol_file (symbol_file) 3237bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton { 3337bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton } 3437bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton 3537bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton ~SymbolFileType () 3637bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton { 3737bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton } 3837bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton 3937bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton Type * 4037bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton operator->() 4137bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton { 4237bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton return GetType (); 4337bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton } 4437bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton 4537bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton Type * 4637bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton GetType (); 4737bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton 4837bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton protected: 4937bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton SymbolFile &m_symbol_file; 5037bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton lldb::TypeSP m_type_sp; 5137bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton }; 52979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 534c8353bd5be6e5abcab8fe27965d477aace75cf2Greg Claytonclass Type : 54102b2c2681c9a830afe25bfea35557421905e42cGreg Clayton public std::enable_shared_from_this<Type>, 554c8353bd5be6e5abcab8fe27965d477aace75cf2Greg Clayton public UserID 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 586916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton typedef enum EncodingDataTypeTag 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 604b40711e7950310afb74835820eb669004cd8c44Greg Clayton eEncodingInvalid, 616916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton eEncodingIsUID, ///< This type is the type whose UID is m_encoding_uid 624b40711e7950310afb74835820eb669004cd8c44Greg Clayton eEncodingIsConstUID, ///< This type is the type whose UID is m_encoding_uid with the const qualifier added 634b40711e7950310afb74835820eb669004cd8c44Greg Clayton eEncodingIsRestrictUID, ///< This type is the type whose UID is m_encoding_uid with the restrict qualifier added 644b40711e7950310afb74835820eb669004cd8c44Greg Clayton eEncodingIsVolatileUID, ///< This type is the type whose UID is m_encoding_uid with the volatile qualifier added 654b40711e7950310afb74835820eb669004cd8c44Greg Clayton eEncodingIsTypedefUID, ///< This type is pointer to a type whose UID is m_encoding_uid 664b40711e7950310afb74835820eb669004cd8c44Greg Clayton eEncodingIsPointerUID, ///< This type is pointer to a type whose UID is m_encoding_uid 674b40711e7950310afb74835820eb669004cd8c44Greg Clayton eEncodingIsLValueReferenceUID, ///< This type is L value reference to a type whose UID is m_encoding_uid 684b40711e7950310afb74835820eb669004cd8c44Greg Clayton eEncodingIsRValueReferenceUID, ///< This type is R value reference to a type whose UID is m_encoding_uid 69ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton eEncodingIsSyntheticUID 704b40711e7950310afb74835820eb669004cd8c44Greg Clayton } EncodingDataType; 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 726916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton typedef enum ResolveStateTag 736916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton { 746916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton eResolveStateUnresolved = 0, 756916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton eResolveStateForward = 1, 766916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton eResolveStateLayout = 2, 776916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton eResolveStateFull = 3 786916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton } ResolveState; 796916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 80462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton Type (lldb::user_id_t uid, 81462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton SymbolFile* symbol_file, 82462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton const ConstString &name, 83fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t byte_size, 84462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton SymbolContextScope *context, 85bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton lldb::user_id_t encoding_uid, 86bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton EncodingDataType encoding_uid_type, 87462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton const Declaration& decl, 8852f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &clang_qual_type, 896916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton ResolveState clang_type_resolve_state); 90462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This makes an invalid type. Used for functions that return a Type when they 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // get an error. 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type(); 94bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton 95bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton Type (const Type &rhs); 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Type& 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator= (const Type& rhs); 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump(Stream *s, bool show_context); 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpTypeName(Stream *s); 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10612bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 10712bec71b323dc520f0e985a86e09c4712559e115Greg Clayton void 10812bec71b323dc520f0e985a86e09c4712559e115Greg Clayton GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_name); 10912bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFile * 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolFile() 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_symbol_file; 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const SymbolFile * 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolFile() const 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_symbol_file; 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TypeList* 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetTypeList(); 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString& 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName(); 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 127fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetByteSize(); 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumChildren (bool omit_empty_base_classes); 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsAggregateType (); 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsValidType () 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 139ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton return m_encoding_uid_type != eEncodingInvalid; 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1420cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton bool 1430cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton IsTypedef () 1440cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton { 1450cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton return m_encoding_uid_type == eEncodingIsTypedefUID; 1460cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton } 1470cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton 1480cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton lldb::TypeSP 1490cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton GetTypedefType(); 1500cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString & 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName () const 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_name; 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 157dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton ConstString 158dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetQualifiedName (); 159dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpValue(ExecutionContext *exe_ctx, 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Stream *s, 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DataExtractor &data, 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t data_offset, 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_type, 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose, 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format format = lldb::eFormatDefault); 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 17124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpValueInMemory(ExecutionContext *exe_ctx, 17224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Stream *s, 17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 174b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 17524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_types, 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose); 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReadFromMemory (ExecutionContext *exe_ctx, 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 182b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 18324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataExtractor &data); 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteToMemory (ExecutionContext *exe_ctx, 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 188b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataExtractor &data); 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIsDeclaration() const; 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetIsDeclaration(bool b); 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIsExternal() const; 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetIsExternal(bool b); 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFormat (); 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Encoding 207fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton GetEncoding (uint64_t &count); 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextScope * 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolContextScope() 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_context; 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const SymbolContextScope * 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolContextScope() const 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_context; 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 22024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetSymbolContextScope(SymbolContextScope *context) 22124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_context = context; 22324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2250bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham const lldb_private::Declaration & 2260bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham GetDeclaration () const; 2270bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham 228b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // Get the clang type, and resolve definitions for any 229b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // class/struct/union/enum types completely. 23052f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 23104c9c7b03fbec6d0dcc6c848391147de2f129c66Greg Clayton GetClangFullType (); 232b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton 2336916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton // Get the clang type, and resolve definitions enough so that the type could 2346916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton // have layout performed. This allows ptrs and refs to class/struct/union/enum 2356916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton // types remain forward declarations. 23652f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 2376916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton GetClangLayoutType (); 2386916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 239b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // Get the clang type and leave class/struct/union/enum types as forward 240b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton // declarations if they haven't already been fully defined. 24152f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 242b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetClangForwardType (); 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClangASTContext & 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetClangASTContext (); 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Compare(const Type &a, const Type &b); 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 250dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton // From a fully qualified typename, split the type into the type basename 251dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton // and the remaining type scope (namespaces/classes). 252dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton static bool 253b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton GetTypeScopeAndBasename (const char* &name_cstr, 254dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton std::string &scope, 255b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton std::string &basename, 256b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton lldb::TypeClass &type_class); 2576916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton void 2586916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton SetEncodingType (Type *encoding_type) 2596916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton { 2606916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton m_encoding_type = encoding_type; 2616916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton } 2626916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 2632403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton uint32_t 2642403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton GetEncodingMask (); 26552f792329be5db8e38961350589e97e8f2823acdGreg Clayton 26652f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 267b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateClangTypedefType (Type *typedef_type, Type *base_type); 268b01000fd063629facd45044f137446fb748ee179Greg Clayton 269f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham bool 270f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham IsRealObjCClass(); 271931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 272931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan bool 273931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan IsCompleteObjCClass() 274931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan { 275931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan return m_flags.is_complete_objc_class; 276931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan } 277931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 278931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan void 279931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan SetIsCompleteObjCClass(bool is_complete_objc_class) 280931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan { 281931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_flags.is_complete_objc_class = is_complete_objc_class; 282931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan } 283b01000fd063629facd45044f137446fb748ee179Greg Clayton 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString m_name; 28624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFile *m_symbol_file; 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextScope *m_context; // The symbol context in which this type is defined 288ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton Type *m_encoding_type; 2891b888f8af37eb363d5026ee1bd3eea409be8eae3Greg Clayton lldb::user_id_t m_encoding_uid; 290bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton EncodingDataType m_encoding_uid_type; 291fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t m_byte_size; 29224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration m_decl; 29352f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType m_clang_type; 294931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan 295931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan struct Flags { 296931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan ResolveState clang_type_resolve_state : 2; 297931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan bool is_complete_objc_class : 1; 298931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan } m_flags; 29924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3004b40711e7950310afb74835820eb669004cd8c44Greg Clayton Type * 301ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton GetEncodingType (); 302ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 303bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton bool 304bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton ResolveClangType (ResolveState clang_type_resolve_state); 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 30624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 307ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 308ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// 309ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// Sometimes you can find the name of the type corresponding to an object, but we don't have debug 310ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// information for it. If that is the case, you can return one of these objects, and then if it 311ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// has a full type, you can use that, but if not at least you can print the name for informational 312ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// purposes. 313ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham/// 314ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 315ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamclass TypeAndOrName 316ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 317ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghampublic: 318ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (); 319ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (lldb::TypeSP &type_sp); 320ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (const char *type_str); 321ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (const TypeAndOrName &rhs); 322ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName (ConstString &type_const_string); 323ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 324ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham TypeAndOrName & 325ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham operator= (const TypeAndOrName &rhs); 326ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 3271a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool 3281a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata operator==(const TypeAndOrName &other) const; 3291a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 3301a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool 3311a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata operator!=(const TypeAndOrName &other) const; 3321a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 333ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham ConstString GetName () const; 3340fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 3350fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeSP 3360fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton GetTypeSP () const 3370fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 338ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return m_type_sp; 3390fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 340ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 341ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham void 342ef22b90240618ed8056dac14a756dff574f8218aGreg Clayton SetName (const ConstString &type_name); 343ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 344ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham void 345ef22b90240618ed8056dac14a756dff574f8218aGreg Clayton SetName (const char *type_name_cstr); 346ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 347ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham void 348ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham SetTypeSP (lldb::TypeSP type_sp); 349ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 350ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham bool 351ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham IsEmpty (); 352ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 3531a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool 3541a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata HasName (); 3551a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 3561a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool 3571a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata HasTypeSP (); 3581a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 3591a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata void 3601a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata Clear (); 3611a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 3621a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata operator 3631a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata bool () 3641a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata { 3651a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return !IsEmpty(); 3661a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata } 3671a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 368ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamprivate: 369ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham lldb::TypeSP m_type_sp; 370ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham ConstString m_type_name; 371ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham}; 372ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 373979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata// the two classes here are used by the public API as a backend to 374979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata// the SBType and SBTypeList classes 375979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 376979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass TypeImpl 377979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{ 378979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatapublic: 379979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 380979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeImpl() : 3810fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_clang_ast_type(), 3820fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type_sp() 3830fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 3840fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 385979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 386979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeImpl(const TypeImpl& rhs) : 3870fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_clang_ast_type(rhs.m_clang_ast_type), 3880fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type_sp(rhs.m_type_sp) 3890fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 3900fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 3910fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 3920fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton TypeImpl(const lldb_private::ClangASTType& type); 3930fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 3940fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton TypeImpl(const lldb::TypeSP& type); 395979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 396979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeImpl& 397979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata operator = (const TypeImpl& rhs); 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 operator != (const TypeImpl& rhs) 407979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4080fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type != rhs.m_clang_ast_type || m_type_sp.get() != rhs.m_type_sp.get(); 409979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 410979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 411979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata bool 412979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata IsValid() 413979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4140fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_type_sp.get() != NULL || m_clang_ast_type.IsValid(); 415979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 416979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 4170fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton const lldb_private::ClangASTType & 4180fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton GetClangASTType() const 419979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4200fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type; 421979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 422979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 423979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata clang::ASTContext* 424979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetASTContext(); 425979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 426979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata lldb::clang_type_t 427979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetOpaqueQualType(); 4280fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 429d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata lldb::TypeSP 430d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata GetTypeSP () 431d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata { 432d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata return m_type_sp; 433d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata } 4348c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata 4358c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata ConstString 4368c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata GetName (); 437d760907c1d42726fa0c8c48efa28385ed339bb94Enrico Granata 43896154be69fa240a662419183ed08e1cfc5418164Greg Clayton bool 43996154be69fa240a662419183ed08e1cfc5418164Greg Clayton GetDescription (lldb_private::Stream &strm, 44096154be69fa240a662419183ed08e1cfc5418164Greg Clayton lldb::DescriptionLevel description_level); 44196154be69fa240a662419183ed08e1cfc5418164Greg Clayton 4427dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton void 4437dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton SetType (const lldb::TypeSP &type_sp); 44496154be69fa240a662419183ed08e1cfc5418164Greg Clayton 4450fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonprivate: 4460fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton ClangASTType m_clang_ast_type; 4470fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeSP m_type_sp; 448979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata}; 449979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 450979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclass TypeListImpl 451979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{ 452979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatapublic: 453979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata TypeListImpl() : 4540fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_content() 4550fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 4560fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 457979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 458979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata void 4590fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton Append (const lldb::TypeImplSP& type) 460979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 461979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata m_content.push_back(type); 462979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 463979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 464a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton class AppendVisitor 465a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton { 466a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton public: 467a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton AppendVisitor(TypeListImpl &type_list) : 468a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton m_type_list(type_list) 469a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton { 470a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton } 471a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 472a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton void 473a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton operator() (const lldb::TypeImplSP& type) 474a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton { 475a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton m_type_list.Append(type); 476a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton } 477a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 478a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton private: 479a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton TypeListImpl &m_type_list; 480a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton }; 481a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 482a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton void 483a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton Append (const lldb_private::TypeList &type_list); 484a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 4850fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeImplSP 4860fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton GetTypeAtIndex(size_t idx) 487979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 4880fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton lldb::TypeImplSP type_sp; 4890fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton if (idx < GetSize()) 4900fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton type_sp = m_content[idx]; 4910fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return type_sp; 492979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 493979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 4940fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton size_t 495979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetSize() 496979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 497979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata return m_content.size(); 498979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 499979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 500979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataprivate: 5010fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton std::vector<lldb::TypeImplSP> m_content; 502979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata}; 503d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 504d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonclass TypeMemberImpl 505d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton{ 506d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonpublic: 507d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton TypeMemberImpl () : 508d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_type_impl_sp (), 509d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_bit_offset (0), 510f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_name (), 511f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size (0), 512f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield (false) 513f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 514d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 515d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 516d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 517d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp, 518d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t bit_offset, 519f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton const ConstString &name, 520f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton uint32_t bitfield_bit_size = 0, 521f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton bool is_bitfield = false) : 522d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_type_impl_sp (type_impl_sp), 523d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_bit_offset (bit_offset), 524f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_name (name), 525f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size (bitfield_bit_size), 526f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield (is_bitfield) 527d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 528d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 529d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 530d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton TypeMemberImpl (const lldb::TypeImplSP &type_impl_sp, 531d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t bit_offset): 532d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_type_impl_sp (type_impl_sp), 533d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton m_bit_offset (bit_offset), 534f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_name (), 535f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size (0), 536f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield (false) 537d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 5388c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata if (m_type_impl_sp) 5398c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata m_name = m_type_impl_sp->GetName(); 540d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 541d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 542d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton const lldb::TypeImplSP & 543d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetTypeImpl () 544d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 545d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton return m_type_impl_sp; 546d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 547d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 548d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton const ConstString & 549d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetName () const 550d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 551d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton return m_name; 552d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 553dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 554d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t 555d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetBitOffset () const 556d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton { 557d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton return m_bit_offset; 558d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton } 559d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 560f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton uint32_t 561f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton GetBitfieldBitSize () const 562f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 563f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton return m_bitfield_bit_size; 564f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 565f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 566f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton void 567f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton SetBitfieldBitSize (uint32_t bitfield_bit_size) 568f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 569f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_bitfield_bit_size = bitfield_bit_size; 570f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 571f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 572f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton bool 573f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton GetIsBitfield () const 574f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 575f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton return m_is_bitfield; 576f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 577f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 578f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton void 579f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton SetIsBitfield (bool is_bitfield) 580f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton { 581f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton m_is_bitfield = is_bitfield; 582f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton } 583f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton 584d68e089f8353eaf845c3559dac6d47b32830974fGreg Claytonprotected: 585d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton lldb::TypeImplSP m_type_impl_sp; 586d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton uint64_t m_bit_offset; 587d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton ConstString m_name; 588f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton uint32_t m_bitfield_bit_size; // Bit size for bitfield members only 589f6132ef983e8a5b98fbe5e184f5128eff8c04730Greg Clayton bool m_is_bitfield; 590d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton}; 591979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 592979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 59324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 59424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 59524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Type_h_ 59624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 597