Type.h revision 462d4147f3bb9141bf62d904f58a623db00669df
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" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/UserID.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Declaration.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <set> 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Type : public UserID 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner typedef enum 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eTypeInvalid, 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eIsTypeWithUID, ///< This type is the type whose UID is m_encoding_uid 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eIsConstTypeWithUID, ///< This type is the type whose UID is m_encoding_uid with the const qualifier added 2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eIsRestrictTypeWithUID, ///< This type is the type whose UID is m_encoding_uid with the restrict qualifier added 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eIsVolatileTypeWithUID, ///< This type is the type whose UID is m_encoding_uid with the volatile qualifier added 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eTypedefToTypeWithUID, ///< This type is pointer to a type whose UID is m_encoding_uid 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ePointerToTypeWithUID, ///< This type is pointer to a type whose UID is m_encoding_uid 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eLValueReferenceToTypeWithUID, ///< This type is L value reference to a type whose UID is m_encoding_uid 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eRValueReferenceToTypeWithUID, ///< This type is R value reference to a type whose UID is m_encoding_uid 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner eTypeUIDSynthetic 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } EncodingUIDType; 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton Type (lldb::user_id_t uid, 39462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton SymbolFile* symbol_file, 40462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton const ConstString &name, 41462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton uint64_t byte_size, 42462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton SymbolContextScope *context, 43462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::user_id_t encoding_uid, 44462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton EncodingUIDType encoding_type, 45462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton const Declaration& decl, 46462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::clang_type_t clang_qual_type); 47462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // This makes an invalid type. Used for functions that return a Type when they 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // get an error. 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Type(); 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Type& 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner operator= (const Type& rhs); 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Dump(Stream *s, bool show_context); 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpTypeName(Stream *s); 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6112bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 6212bec71b323dc520f0e985a86e09c4712559e115Greg Clayton void 6312bec71b323dc520f0e985a86e09c4712559e115Greg Clayton GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_name); 6412bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFile * 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolFile() 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_symbol_file; 6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const SymbolFile * 7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolFile() const 7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_symbol_file; 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner TypeList* 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetTypeList(); 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString& 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName(); 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetByteSize(); 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetNumChildren (bool omit_empty_base_classes); 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsAggregateType (); 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner IsValidType () 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_encoding_uid_type != eTypeInvalid; 9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetByteSize(uint32_t byte_size); 9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString & 10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName () const 10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_name; 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpValue(ExecutionContext *exe_ctx, 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Stream *s, 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const DataExtractor &data, 11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t data_offset, 11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_type, 11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose, 11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format format = lldb::eFormatDefault); 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 11624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpValueInMemory(ExecutionContext *exe_ctx, 11824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Stream *s, 11924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::AddressType address_type, 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_types, 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 12324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose); 12424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 12624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ReadFromMemory (ExecutionContext *exe_ctx, 12724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 12824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::AddressType address_type, 12924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataExtractor &data); 13024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner WriteToMemory (ExecutionContext *exe_ctx, 13324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::AddressType address_type, 13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DataExtractor &data); 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIsDeclaration() const; 13924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetIsDeclaration(bool b); 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetIsExternal() const; 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetIsExternal(bool b); 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetFormat (); 15124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Encoding 15324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetEncoding (uint32_t &count); 15424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextScope * 15624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolContextScope() 15724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 15824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_context; 15924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const SymbolContextScope * 16124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetSymbolContextScope() const 16224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_context; 16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetSymbolContextScope(SymbolContextScope *context) 16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 16824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_context = context; 16924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1710bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham const lldb_private::Declaration & 1720bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham GetDeclaration () const; 1730bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham 174462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::clang_type_t 175462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton GetClangType (bool forward_decl_is_ok = false); 17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::ASTContext * 17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetClangAST (); 17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClangASTContext & 18124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetClangASTContext (); 18224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 183462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::clang_type_t 18424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetChildClangTypeAtIndex (const char *parent_name, 18524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t idx, 18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool transparent_pointers, 18724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool omit_empty_base_classes, 18824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString& name, 18924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t &child_byte_size, 19024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner int32_t &child_byte_offset, 19124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t &child_bitfield_bit_size, 19224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t &child_bitfield_bit_offset); 19324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static int 19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Compare(const Type &a, const Type &b); 19624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 19824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ConstString m_name; 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint64_t m_byte_size; 20024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFile *m_symbol_file; 20124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextScope *m_context; // The symbol context in which this type is defined 20224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t m_encoding_uid; 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner EncodingUIDType m_encoding_uid_type; 20424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Declaration m_decl; 205462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton lldb::clang_type_t m_clang_qual_type; 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 207462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton bool ResolveClangType(bool forward_decl_is_ok = false); 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 21124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_Type_h_ 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 214