124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- Type.cpp ------------------------------------------------*- 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// Other libraries and framework includes 1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataExtractor.h" 1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/DataBufferHeap.h" 1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Module.h" 1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/Scalar.h" 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/StreamString.h" 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#include "lldb/Symbol/ClangASTType.h" 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/ClangASTContext.h" 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/ObjectFile.h" 2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolContextScope.h" 2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/SymbolFile.h" 23931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan#include "lldb/Symbol/SymbolVendor.h" 2424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/Type.h" 2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Symbol/TypeList.h" 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/ExecutionContext.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Target/Process.h" 29395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton#include "lldb/Target/Target.h" 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton#include "llvm/ADT/StringRef.h" 32b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton 33462d4147f3bb9141bf62d904f58a623db00669dfGreg Claytonusing namespace lldb; 34bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Claytonusing namespace lldb_private; 35462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 36a8b56238ce138e70433a0ce0b4218c9257beae38Greg Claytonclass TypeAppendVisitor 37a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton{ 38a8b56238ce138e70433a0ce0b4218c9257beae38Greg Claytonpublic: 39a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton TypeAppendVisitor(TypeListImpl &type_list) : 40a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton m_type_list(type_list) 41a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton { 42a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton } 43a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 44a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton bool 45a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton operator() (const lldb::TypeSP& type) 46a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton { 47a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton m_type_list.Append(TypeImplSP(new TypeImpl(type))); 48a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton return true; 49a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton } 50a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 51a8b56238ce138e70433a0ce0b4218c9257beae38Greg Claytonprivate: 52a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton TypeListImpl &m_type_list; 53a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton}; 54a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 55a8b56238ce138e70433a0ce0b4218c9257beae38Greg Claytonvoid 56a8b56238ce138e70433a0ce0b4218c9257beae38Greg ClaytonTypeListImpl::Append (const lldb_private::TypeList &type_list) 57a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton{ 58a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton TypeAppendVisitor cb(*this); 59a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton type_list.ForEach(cb); 60a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton} 61a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 62a8b56238ce138e70433a0ce0b4218c9257beae38Greg Clayton 6337bb8ddd443da172f42bb8657f15ec856a525c84Greg ClaytonType * 6437bb8ddd443da172f42bb8657f15ec856a525c84Greg ClaytonSymbolFileType::GetType () 6537bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton{ 6637bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton if (!m_type_sp) 673508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton { 683508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton Type *resolved_type = m_symbol_file.ResolveTypeUID (GetID()); 693508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton if (resolved_type) 703508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton m_type_sp = resolved_type->shared_from_this(); 713508c387c3f0c9ecc439d98048fd7694d41bab1bGreg Clayton } 7237bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton return m_type_sp.get(); 7337bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton} 7437bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton 7537bb8ddd443da172f42bb8657f15ec856a525c84Greg Clayton 76bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::Type 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t uid, 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolFile* symbol_file, 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ConstString &name, 81fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t byte_size, 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SymbolContextScope *context, 83bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton user_id_t encoding_uid, 84bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton EncodingDataType encoding_uid_type, 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const Declaration& decl, 8652f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &clang_type, 876916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton ResolveState clang_type_resolve_state 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) : 89d387b462eecb908af265ecc7006781b4532073adGreg Clayton std::enable_shared_from_this<Type> (), 9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UserID (uid), 9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_name (name), 9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_symbol_file (symbol_file), 9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_context (context), 94ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton m_encoding_type (NULL), 95bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_encoding_uid (encoding_uid), 96bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_encoding_uid_type (encoding_uid_type), 974b40711e7950310afb74835820eb669004cd8c44Greg Clayton m_byte_size (byte_size), 9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_decl (decl), 99931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_clang_type (clang_type) 10024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 101931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_flags.clang_type_resolve_state = (clang_type ? clang_type_resolve_state : eResolveStateUnresolved); 102931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_flags.is_complete_objc_class = false; 10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 10424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 105bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::Type () : 106d387b462eecb908af265ecc7006781b4532073adGreg Clayton std::enable_shared_from_this<Type> (), 10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner UserID (0), 10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_name ("<INVALID TYPE>"), 10924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_symbol_file (NULL), 110ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton m_context (NULL), 111ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton m_encoding_type (NULL), 1121b888f8af37eb363d5026ee1bd3eea409be8eae3Greg Clayton m_encoding_uid (LLDB_INVALID_UID), 113dbeb3e1e038a75f00fd565203839020e1d00a7c6Stephen Wilson m_encoding_uid_type (eEncodingInvalid), 114ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton m_byte_size (0), 11524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_decl (), 11652f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type () 11724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 118931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_flags.clang_type_resolve_state = eResolveStateUnresolved; 119931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_flags.is_complete_objc_class = false; 12024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 12124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 12224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 123bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::Type (const Type &rhs) : 124d387b462eecb908af265ecc7006781b4532073adGreg Clayton std::enable_shared_from_this<Type> (rhs), 125bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton UserID (rhs), 126bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_name (rhs.m_name), 127bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_symbol_file (rhs.m_symbol_file), 128bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_context (rhs.m_context), 129bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_encoding_type (rhs.m_encoding_type), 130bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_encoding_uid (rhs.m_encoding_uid), 131dbeb3e1e038a75f00fd565203839020e1d00a7c6Stephen Wilson m_encoding_uid_type (rhs.m_encoding_uid_type), 132bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_byte_size (rhs.m_byte_size), 133bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_decl (rhs.m_decl), 134bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton m_clang_type (rhs.m_clang_type), 135931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_flags (rhs.m_flags) 136bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton{ 137bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton} 138bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton 139bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Claytonconst Type& 140bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::operator= (const Type& rhs) 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 14224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (this != &rhs) 14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return *this; 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 150bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetDescription (Stream *s, lldb::DescriptionLevel level, bool show_name) 15112bec71b323dc520f0e985a86e09c4712559e115Greg Clayton{ 15212bec71b323dc520f0e985a86e09c4712559e115Greg Clayton *s << "id = " << (const UserID&)*this; 15312bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 1541924e2408687e0ee41976010c6b9410bdd01270dGreg Clayton // Call the name accessor to make sure we resolve the type name 155dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton if (show_name) 156dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton { 157dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton const ConstString &type_name = GetName(); 158dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton if (type_name) 159dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton { 160dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton *s << ", name = \"" << type_name << '"'; 161dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton ConstString qualified_type_name (GetQualifiedName()); 162dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton if (qualified_type_name != type_name) 163dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton { 164dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton *s << ", qualified = \"" << qualified_type_name << '"'; 165dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton } 166dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton } 167dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton } 168c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton 1691924e2408687e0ee41976010c6b9410bdd01270dGreg Clayton // Call the get byte size accesor so we resolve our byte size 1701924e2408687e0ee41976010c6b9410bdd01270dGreg Clayton if (GetByteSize()) 171fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton s->Printf(", byte-size = %" PRIu64, m_byte_size); 1721924e2408687e0ee41976010c6b9410bdd01270dGreg Clayton bool show_fullpaths = (level == lldb::eDescriptionLevelVerbose); 1731924e2408687e0ee41976010c6b9410bdd01270dGreg Clayton m_decl.Dump(s, show_fullpaths); 17412bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 17552f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (m_clang_type.IsValid()) 17612bec71b323dc520f0e985a86e09c4712559e115Greg Clayton { 177c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton *s << ", clang_type = \""; 17852f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetClangForwardType().DumpTypeDescription(s); 179c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton *s << '"'; 18012bec71b323dc520f0e985a86e09c4712559e115Greg Clayton } 181ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton else if (m_encoding_uid != LLDB_INVALID_UID) 18212bec71b323dc520f0e985a86e09c4712559e115Greg Clayton { 1835f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea s->Printf(", type_uid = 0x%8.8" PRIx64, m_encoding_uid); 184ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton switch (m_encoding_uid_type) 18512bec71b323dc520f0e985a86e09c4712559e115Greg Clayton { 1864fdf7602bedd8be648f3c549074cf13d90a05f03Greg Clayton case eEncodingInvalid: break; 1874b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsUID: s->PutCString(" (unresolved type)"); break; 1884b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsConstUID: s->PutCString(" (unresolved const type)"); break; 1894b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsRestrictUID: s->PutCString(" (unresolved restrict type)"); break; 1904b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsVolatileUID: s->PutCString(" (unresolved volatile type)"); break; 1914b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsTypedefUID: s->PutCString(" (unresolved typedef)"); break; 1924b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsPointerUID: s->PutCString(" (unresolved pointer)"); break; 1934b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsLValueReferenceUID: s->PutCString(" (unresolved L value reference)"); break; 1944b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsRValueReferenceUID: s->PutCString(" (unresolved R value reference)"); break; 1954b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsSyntheticUID: s->PutCString(" (synthetic type)"); break; 19612bec71b323dc520f0e985a86e09c4712559e115Greg Clayton } 197c67b7d13cffeb2c9454635e8a11d65350bce61adGreg Clayton } 19812bec71b323dc520f0e985a86e09c4712559e115Greg Clayton} 19912bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 20012bec71b323dc520f0e985a86e09c4712559e115Greg Clayton 20112bec71b323dc520f0e985a86e09c4712559e115Greg Claytonvoid 202bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::Dump (Stream *s, bool show_context) 20324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2047e5fa7fc1f8efd24c078e063b2c4b5e13ba5be20Jason Molenda s->Printf("%p: ", this); 20524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner s->Indent(); 20624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *s << "Type" << (const UserID&)*this << ' '; 20724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_name) 20824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner *s << ", name = \"" << m_name << "\""; 20924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_byte_size != 0) 211fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton s->Printf(", size = %" PRIu64, m_byte_size); 21224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 21324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (show_context && m_context != NULL) 21424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 21524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner s->PutCString(", context = ( "); 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_context->DumpSymbolContext(s); 21724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner s->PutCString(" )"); 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2201924e2408687e0ee41976010c6b9410bdd01270dGreg Clayton bool show_fullpaths = false; 2211924e2408687e0ee41976010c6b9410bdd01270dGreg Clayton m_decl.Dump (s,show_fullpaths); 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22352f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (m_clang_type.IsValid()) 22424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 22552f792329be5db8e38961350589e97e8f2823acdGreg Clayton *s << ", clang_type = " << m_clang_type.GetOpaqueQualType() << ' '; 22652f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetClangForwardType().DumpTypeDescription (s); 22724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 228ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton else if (m_encoding_uid != LLDB_INVALID_UID) 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 230ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton *s << ", type_data = " << (uint64_t)m_encoding_uid; 231ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton switch (m_encoding_uid_type) 23224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 2334fdf7602bedd8be648f3c549074cf13d90a05f03Greg Clayton case eEncodingInvalid: break; 2344b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsUID: s->PutCString(" (unresolved type)"); break; 2354b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsConstUID: s->PutCString(" (unresolved const type)"); break; 2364b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsRestrictUID: s->PutCString(" (unresolved restrict type)"); break; 2374b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsVolatileUID: s->PutCString(" (unresolved volatile type)"); break; 2384b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsTypedefUID: s->PutCString(" (unresolved typedef)"); break; 2394b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsPointerUID: s->PutCString(" (unresolved pointer)"); break; 2404b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsLValueReferenceUID: s->PutCString(" (unresolved L value reference)"); break; 2414b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsRValueReferenceUID: s->PutCString(" (unresolved R value reference)"); break; 2424b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsSyntheticUID: s->PutCString(" (synthetic type)"); break; 24324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 24424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 24524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// 24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// if (m_access) 24824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// s->Printf(", access = %u", m_access); 24924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner s->EOL(); 25024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 252bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Claytonconst ConstString & 253bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetName() 25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 255b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton if (!m_name) 25652f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_name = GetClangForwardType().GetConstTypeName(); 25724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_name; 25824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 25924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 261bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::DumpTypeName(Stream *s) 26224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 26324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetName().Dump(s, "<invalid-type-name>"); 26424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 26524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 26724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnervoid 268bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::DumpValue 26924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 270bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton ExecutionContext *exe_ctx, 271bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton Stream *s, 272bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton const DataExtractor &data, 27324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t data_byte_offset, 27424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_types, 27524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 27624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose, 27724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Format format 27824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 27924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 2806916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton if (ResolveClangType(eResolveStateForward)) 28124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 28224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (show_types) 28324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 28424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner s->PutChar('('); 28524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (verbose) 2865f35a4be95aed0e5b2cb36f7d785bcbfc67284aeDaniel Malea s->Printf("Type{0x%8.8" PRIx64 "} ", GetID()); 28724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpTypeName (s); 28824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner s->PutCString(") "); 28924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 29024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 29152f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetClangForwardType().DumpValue (exe_ctx, 29252f792329be5db8e38961350589e97e8f2823acdGreg Clayton s, 29352f792329be5db8e38961350589e97e8f2823acdGreg Clayton format == lldb::eFormatDefault ? GetFormat() : format, 29452f792329be5db8e38961350589e97e8f2823acdGreg Clayton data, 29552f792329be5db8e38961350589e97e8f2823acdGreg Clayton data_byte_offset, 29652f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetByteSize(), 29752f792329be5db8e38961350589e97e8f2823acdGreg Clayton 0, // Bitfield bit size 29852f792329be5db8e38961350589e97e8f2823acdGreg Clayton 0, // Bitfield bit offset 29952f792329be5db8e38961350589e97e8f2823acdGreg Clayton show_types, 30052f792329be5db8e38961350589e97e8f2823acdGreg Clayton show_summary, 30152f792329be5db8e38961350589e97e8f2823acdGreg Clayton verbose, 30252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 0); 30324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 30424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 30524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 306bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType * 307bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetEncodingType () 308ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton{ 3096916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton if (m_encoding_type == NULL && m_encoding_uid != LLDB_INVALID_UID) 3106916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton m_encoding_type = m_symbol_file->ResolveTypeUID(m_encoding_uid); 311ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton return m_encoding_type; 312ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton} 313ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 314ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 315ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 316fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Claytonuint64_t 317bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetByteSize() 31824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 31924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (m_byte_size == 0) 32024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 321ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton switch (m_encoding_uid_type) 32224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 3234fdf7602bedd8be648f3c549074cf13d90a05f03Greg Clayton case eEncodingInvalid: 3244fdf7602bedd8be648f3c549074cf13d90a05f03Greg Clayton case eEncodingIsSyntheticUID: 3254fdf7602bedd8be648f3c549074cf13d90a05f03Greg Clayton break; 3264b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsUID: 3274b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsConstUID: 3284b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsRestrictUID: 3294b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsVolatileUID: 3304b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsTypedefUID: 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 332ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton Type *encoding_type = GetEncodingType (); 33324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (encoding_type) 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner m_byte_size = encoding_type->GetByteSize(); 335ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton if (m_byte_size == 0) 33652f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_byte_size = GetClangLayoutType().GetByteSize(); 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 34024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // If we are a pointer or reference, then this is just a pointer size; 3414b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsPointerUID: 3424b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsLValueReferenceUID: 3434b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsRValueReferenceUID: 34452f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_byte_size = m_symbol_file->GetClangASTContext().GetPointerByteSize(); 34524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 34624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 34724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 34824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return m_byte_size; 34924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 35024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattneruint32_t 353bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetNumChildren (bool omit_empty_base_classes) 35424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 35552f792329be5db8e38961350589e97e8f2823acdGreg Clayton return GetClangForwardType().GetNumChildren(omit_empty_base_classes); 35624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 35724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 35824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 359bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::IsAggregateType () 36024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 36152f792329be5db8e38961350589e97e8f2823acdGreg Clayton return GetClangForwardType().IsAggregateType(); 36224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 36324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3640cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Claytonlldb::TypeSP 3650cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg ClaytonType::GetTypedefType() 3660cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton{ 3670cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton lldb::TypeSP type_sp; 3680cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton if (IsTypedef()) 3690cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton { 3700cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton Type *typedef_type = m_symbol_file->ResolveTypeUID(m_encoding_uid); 3710cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton if (typedef_type) 3720cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton type_sp = typedef_type->shared_from_this(); 3730cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton } 3740cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton return type_sp; 3750cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton} 3760cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton 3770cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton 3780cbaacd31bce2f37aaa9ecb2f31b3e8bf84d25b4Greg Clayton 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::Format 380bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetFormat () 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 38252f792329be5db8e38961350589e97e8f2823acdGreg Clayton return GetClangForwardType().GetFormat(); 38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 38424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerlldb::Encoding 388fe6dc6e241c52822710380cec0931351a1d7b2d3Greg ClaytonType::GetEncoding (uint64_t &count) 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Make sure we resolve our type if it already hasn't been. 39152f792329be5db8e38961350589e97e8f2823acdGreg Clayton return GetClangForwardType().GetEncoding(count); 39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 39424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 395bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::DumpValueInMemory 39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner( 397bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton ExecutionContext *exe_ctx, 398bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton Stream *s, 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::addr_t address, 400b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_types, 40224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool show_summary, 40324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner bool verbose 40424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner) 40524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 40624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (address != LLDB_INVALID_ADDRESS) 40724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 408bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton DataExtractor data; 409567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton Target *target = NULL; 410567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (exe_ctx) 411567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton target = exe_ctx->GetTargetPtr(); 412567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (target) 413567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton data.SetByteOrder (target->GetArchitecture().GetByteOrder()); 41424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (ReadFromMemory (exe_ctx, address, address_type, data)) 41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner DumpValue(exe_ctx, s, data, 0, show_types, show_summary, verbose); 41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 42124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 425b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonType::ReadFromMemory (ExecutionContext *exe_ctx, lldb::addr_t addr, AddressType address_type, DataExtractor &data) 42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 427b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton if (address_type == eAddressTypeFile) 42824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 42924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Can't convert a file address to anything valid without more 43024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // context (which Module it came from) 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 434fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton const uint64_t byte_size = GetByteSize(); 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (data.GetByteSize() < byte_size) 43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::DataBufferSP data_sp(new DataBufferHeap (byte_size, '\0')); 43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner data.SetData(data_sp); 43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 44024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint8_t* dst = (uint8_t*)data.PeekData(0, byte_size); 44224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (dst != NULL) 44324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 444b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton if (address_type == eAddressTypeHost) 44524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 44624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // The address is an address in this process, so just copy it 44772374e3009feb87332542f60d72b92343c9b35faEnrico Granata if (addr == 0) 44872374e3009feb87332542f60d72b92343c9b35faEnrico Granata return false; 44924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner memcpy (dst, (uint8_t*)NULL + addr, byte_size); 45024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return true; 45124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 45224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 45324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 454567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (exe_ctx) 45524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 456567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton Process *process = exe_ctx->GetProcessPtr(); 457567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton if (process) 458567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton { 459567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton Error error; 460567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton return exe_ctx->GetProcessPtr()->ReadMemory(addr, dst, byte_size, error) == byte_size; 461567e7f3ba16eb48cb9fd6a2f26f2f7269eb6983cGreg Clayton } 46224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 46324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 46424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 46624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 46724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 470b344843f75ef893762c93fd0a22d2d45712ce74dGreg ClaytonType::WriteToMemory (ExecutionContext *exe_ctx, lldb::addr_t addr, AddressType address_type, DataExtractor &data) 47124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 47224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return false; 47324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 476bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonTypeList* 477bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetTypeList() 47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 479e98ac25604b3d967158917f6fdd5289b3096fd80Greg Clayton return GetSymbolFile()->GetTypeList(); 48024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 48124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 482bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Claytonconst Declaration & 483bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetDeclaration () const 4840bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham{ 4850bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham return m_decl; 4860bda40346c10604b3cef2e42bef4f4d6f534e18bJim Ingham} 48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 48824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerbool 489bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::ResolveClangType (ResolveState clang_type_resolve_state) 49024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 4916916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton Type *encoding_type = NULL; 49252f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (!m_clang_type.IsValid()) 49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 4946916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton encoding_type = GetEncodingType(); 495ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton if (encoding_type) 49624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 497ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton switch (m_encoding_uid_type) 49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 499ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton case eEncodingIsUID: 5006916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton { 50152f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType encoding_clang_type = encoding_type->GetClangForwardType(); 50252f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (encoding_clang_type.IsValid()) 50352f792329be5db8e38961350589e97e8f2823acdGreg Clayton { 50452f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = encoding_clang_type; 50552f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_flags.clang_type_resolve_state = encoding_type->m_flags.clang_type_resolve_state; 50652f792329be5db8e38961350589e97e8f2823acdGreg Clayton } 5076916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton } 508ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton break; 509ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 510ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton case eEncodingIsConstUID: 51152f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = encoding_type->GetClangForwardType().AddConstModifier(); 512ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton break; 513ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 514ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton case eEncodingIsRestrictUID: 51552f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = encoding_type->GetClangForwardType().AddRestrictModifier(); 516ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton break; 517ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 518ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton case eEncodingIsVolatileUID: 51952f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = encoding_type->GetClangForwardType().AddVolatileModifier(); 520ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton break; 521ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 522ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton case eEncodingIsTypedefUID: 52352f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = encoding_type->GetClangForwardType().CreateTypedefType (GetName().AsCString(), 52452f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetSymbolFile()->GetClangDeclContextContainingTypeUID(GetID())); 525ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton m_name.Clear(); 526ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton break; 527ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 528ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton case eEncodingIsPointerUID: 52952f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = encoding_type->GetClangForwardType().GetPointerType(); 530ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton break; 531ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 532ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton case eEncodingIsLValueReferenceUID: 53352f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = encoding_type->GetClangForwardType().GetLValueReferenceType(); 534ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton break; 535ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 536ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton case eEncodingIsRValueReferenceUID: 53752f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = encoding_type->GetClangForwardType().GetRValueReferenceType(); 538ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton break; 539ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton 540ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton default: 541ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton assert(!"Unhandled encoding_data_type."); 542ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton break; 54324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 54424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 54524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner else 54624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 54724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // We have no encoding type, return void? 54852f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType void_clang_type (ClangASTContext::GetBasicType(GetClangASTContext().getASTContext(), eBasicTypeVoid)); 549ea58a3cfac7ff90cd86c707d65dbd7d345a12bbeGreg Clayton switch (m_encoding_uid_type) 55024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner { 5514b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsUID: 552bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton m_clang_type = void_clang_type; 55324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 55424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5554b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsConstUID: 55652f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = void_clang_type.AddConstModifier (); 55724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 55824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5594b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsRestrictUID: 56052f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = void_clang_type.AddRestrictModifier (); 56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 56224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5634b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsVolatileUID: 56452f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = void_clang_type.AddVolatileModifier (); 56524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 56624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5674b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsTypedefUID: 56852f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = void_clang_type.CreateTypedefType (GetName().AsCString(), 56952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetSymbolFile()->GetClangDeclContextContainingTypeUID(GetID())); 57024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 57124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5724b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsPointerUID: 57352f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = void_clang_type.GetPointerType (); 57424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 57524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5764b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsLValueReferenceUID: 57752f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = void_clang_type.GetLValueReferenceType (); 57824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 57924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5804b40711e7950310afb74835820eb669004cd8c44Greg Clayton case eEncodingIsRValueReferenceUID: 58152f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_type = void_clang_type.GetRValueReferenceType (); 58224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 58324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 58424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner default: 5854b40711e7950310afb74835820eb669004cd8c44Greg Clayton assert(!"Unhandled encoding_data_type."); 58624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner break; 58724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 58824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 58924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner } 590462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 591462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton // Check if we have a forward reference to a class/struct/union/enum? 59252f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (m_clang_type.IsValid() && m_flags.clang_type_resolve_state < clang_type_resolve_state) 593462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton { 594931acecd4e3af534028936431dc0f75a9fd6eb02Sean Callanan m_flags.clang_type_resolve_state = eResolveStateFull; 59552f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (!m_clang_type.IsDefined ()) 5964b40711e7950310afb74835820eb669004cd8c44Greg Clayton { 59752f792329be5db8e38961350589e97e8f2823acdGreg Clayton // We have a forward declaration, we need to resolve it to a complete definition. 598bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton m_symbol_file->ResolveClangOpaqueTypeDefinition (m_clang_type); 5994b40711e7950310afb74835820eb669004cd8c44Greg Clayton } 600462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton } 601306edcaab871503192162272c147aef89d0ee719Greg Clayton 602306edcaab871503192162272c147aef89d0ee719Greg Clayton // If we have an encoding type, then we need to make sure it is 603bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton // resolved appropriately. 6046916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton if (m_encoding_uid != LLDB_INVALID_UID) 605bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton { 6066916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton if (encoding_type == NULL) 6076916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton encoding_type = GetEncodingType(); 6086916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton if (encoding_type) 609bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton { 610034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton ResolveState encoding_clang_type_resolve_state = clang_type_resolve_state; 611034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton 612034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton if (clang_type_resolve_state == eResolveStateLayout) 613bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton { 614034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton switch (m_encoding_uid_type) 615034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton { 616034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton case eEncodingIsPointerUID: 617034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton case eEncodingIsLValueReferenceUID: 618034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton case eEncodingIsRValueReferenceUID: 6196916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton encoding_clang_type_resolve_state = eResolveStateForward; 620034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton break; 621034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton default: 622034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton break; 623034c996d94fc8a2ec1021a1cf4db115bed8391c7Greg Clayton } 624bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton } 6256916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton encoding_type->ResolveClangType (encoding_clang_type_resolve_state); 626bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton } 627bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton } 62852f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_clang_type.IsValid(); 62924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 6302403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Claytonuint32_t 631bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetEncodingMask () 6322403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton{ 6332403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton uint32_t encoding_mask = 1u << m_encoding_uid_type; 6342403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton Type *encoding_type = GetEncodingType(); 6352403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton assert (encoding_type != this); 6362403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton if (encoding_type) 6372403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton encoding_mask |= encoding_type->GetEncodingMask (); 6382403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton return encoding_mask; 6392403b5e89760c1c970c3fe6936cb620d45dcf6c8Greg Clayton} 64024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 64152f792329be5db8e38961350589e97e8f2823acdGreg ClaytonClangASTType 64204c9c7b03fbec6d0dcc6c848391147de2f129c66Greg ClaytonType::GetClangFullType () 64324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 6446916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton ResolveClangType(eResolveStateFull); 6456916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton return m_clang_type; 6466916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton} 6476916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 64852f792329be5db8e38961350589e97e8f2823acdGreg ClaytonClangASTType 649bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetClangLayoutType () 6506916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton{ 6516916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton ResolveClangType(eResolveStateLayout); 652bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton return m_clang_type; 65324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 65424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 65552f792329be5db8e38961350589e97e8f2823acdGreg ClaytonClangASTType 656bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetClangForwardType () 657b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton{ 6586916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton ResolveClangType (eResolveStateForward); 659bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton return m_clang_type; 660b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton} 661b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton 662bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonClangASTContext & 663bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::GetClangASTContext () 66424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 665b01000fd063629facd45044f137446fb748ee179Greg Clayton return m_symbol_file->GetClangASTContext(); 66624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 66724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 66824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerint 669bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::Compare(const Type &a, const Type &b) 67024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 67124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Just compare the UID values for now... 67224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t a_uid = a.GetID(); 67324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::user_id_t b_uid = b.GetID(); 67424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (a_uid < b_uid) 67524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return -1; 67624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner if (a_uid > b_uid) 67724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 1; 67824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner return 0; 67924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// if (a.getQualType() == b.getQualType()) 68024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// return 0; 68124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} 68224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 683b01000fd063629facd45044f137446fb748ee179Greg Clayton 68452f792329be5db8e38961350589e97e8f2823acdGreg Clayton#if 0 // START REMOVE 68552f792329be5db8e38961350589e97e8f2823acdGreg Clayton// Move this into ClangASTType 686b01000fd063629facd45044f137446fb748ee179Greg Claytonvoid * 687bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::CreateClangPointerType (Type *type) 688b01000fd063629facd45044f137446fb748ee179Greg Clayton{ 689b01000fd063629facd45044f137446fb748ee179Greg Clayton assert(type); 690b01000fd063629facd45044f137446fb748ee179Greg Clayton return GetClangASTContext().CreatePointerType(type->GetClangForwardType()); 691b01000fd063629facd45044f137446fb748ee179Greg Clayton} 692b01000fd063629facd45044f137446fb748ee179Greg Clayton 693b01000fd063629facd45044f137446fb748ee179Greg Claytonvoid * 694bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::CreateClangTypedefType (Type *typedef_type, Type *base_type) 695b01000fd063629facd45044f137446fb748ee179Greg Clayton{ 696b01000fd063629facd45044f137446fb748ee179Greg Clayton assert(typedef_type && base_type); 697b01000fd063629facd45044f137446fb748ee179Greg Clayton return GetClangASTContext().CreateTypedefType (typedef_type->GetName().AsCString(), 698b01000fd063629facd45044f137446fb748ee179Greg Clayton base_type->GetClangForwardType(), 699c617a4cb4a451be9d7e97d7af6e165d282b5390fSean Callanan typedef_type->GetSymbolFile()->GetClangDeclContextContainingTypeUID(typedef_type->GetID())); 700b01000fd063629facd45044f137446fb748ee179Greg Clayton} 701b01000fd063629facd45044f137446fb748ee179Greg Clayton 702b01000fd063629facd45044f137446fb748ee179Greg Claytonvoid * 703bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::CreateClangLValueReferenceType (Type *type) 704b01000fd063629facd45044f137446fb748ee179Greg Clayton{ 705b01000fd063629facd45044f137446fb748ee179Greg Clayton assert(type); 706b01000fd063629facd45044f137446fb748ee179Greg Clayton return GetClangASTContext().CreateLValueReferenceType(type->GetClangForwardType()); 707b01000fd063629facd45044f137446fb748ee179Greg Clayton} 708b01000fd063629facd45044f137446fb748ee179Greg Clayton 709b01000fd063629facd45044f137446fb748ee179Greg Claytonvoid * 710bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg ClaytonType::CreateClangRValueReferenceType (Type *type) 711b01000fd063629facd45044f137446fb748ee179Greg Clayton{ 712b01000fd063629facd45044f137446fb748ee179Greg Clayton assert(type); 713b01000fd063629facd45044f137446fb748ee179Greg Clayton return GetClangASTContext().CreateRValueReferenceType (type->GetClangForwardType()); 714b01000fd063629facd45044f137446fb748ee179Greg Clayton} 71552f792329be5db8e38961350589e97e8f2823acdGreg Clayton#endif // END REMOVE 716b01000fd063629facd45044f137446fb748ee179Greg Clayton 717f03d97e519811a029578cc120a7a2725cdf2aad1Jim Inghambool 718f03d97e519811a029578cc120a7a2725cdf2aad1Jim InghamType::IsRealObjCClass() 719f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham{ 720f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham // For now we are just skipping ObjC classes that get made by hand from the runtime, because 721f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham // those don't have any information. We could extend this to only return true for "full 722f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham // definitions" if we can figure that out. 723f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham 72452f792329be5db8e38961350589e97e8f2823acdGreg Clayton if (m_clang_type.IsObjCObjectOrInterfaceType() && GetByteSize() != 0) 725f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham return true; 726f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham else 727f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham return false; 728f03d97e519811a029578cc120a7a2725cdf2aad1Jim Ingham} 729b01000fd063629facd45044f137446fb748ee179Greg Clayton 730dc0a38c5a727cae5362b218a3180d0f4265a619dGreg ClaytonConstString 731dc0a38c5a727cae5362b218a3180d0f4265a619dGreg ClaytonType::GetQualifiedName () 732dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton{ 73352f792329be5db8e38961350589e97e8f2823acdGreg Clayton return GetClangForwardType().GetConstTypeName(); 734dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton} 735dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 736dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 737dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Claytonbool 738b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg ClaytonType::GetTypeScopeAndBasename (const char* &name_cstr, 739dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton std::string &scope, 740b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton std::string &basename, 741b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton TypeClass &type_class) 742dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton{ 743dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton // Protect against null c string. 744dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 745b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton type_class = eTypeClassAny; 746b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton 747dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton if (name_cstr && name_cstr[0]) 748dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton { 749b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton llvm::StringRef name_strref(name_cstr); 750b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton if (name_strref.startswith("struct ")) 751b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton { 752b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton name_cstr += 7; 753b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton type_class = eTypeClassStruct; 754b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton } 755b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton else if (name_strref.startswith("class ")) 756b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton { 757b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton name_cstr += 6; 758b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton type_class = eTypeClassClass; 759b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton } 760b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton else if (name_strref.startswith("union ")) 761b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton { 762b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton name_cstr += 6; 763b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton type_class = eTypeClassUnion; 764b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton } 765b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton else if (name_strref.startswith("enum ")) 766b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton { 767b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton name_cstr += 5; 768b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton type_class = eTypeClassEnumeration; 769b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton } 770b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton else if (name_strref.startswith("typedef ")) 771b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton { 772b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton name_cstr += 8; 773b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton type_class = eTypeClassTypedef; 774b9bd4eeeb21dc4d634a61d00fa68f62c630bd38cGreg Clayton } 775dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton const char *basename_cstr = name_cstr; 776dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton const char* namespace_separator = ::strstr (basename_cstr, "::"); 777dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton if (namespace_separator) 778dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton { 779dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton const char* template_arg_char = ::strchr (basename_cstr, '<'); 780dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton while (namespace_separator != NULL) 781dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton { 782dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton if (template_arg_char && namespace_separator > template_arg_char) // but namespace'd template arguments are still good to go 783dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton break; 784dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton basename_cstr = namespace_separator + 2; 785dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton namespace_separator = strstr(basename_cstr, "::"); 786dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton } 787dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton if (basename_cstr > name_cstr) 788dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton { 789dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton scope.assign (name_cstr, basename_cstr - name_cstr); 790dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton basename.assign (basename_cstr); 791dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton return true; 792dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton } 793dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton } 794dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton } 795dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton return false; 796dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton} 797dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 798dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 799dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 800dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 801ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName::TypeAndOrName () : m_type_sp(), m_type_name() 802ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 803ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 804ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 805ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 806ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName::TypeAndOrName (TypeSP &in_type_sp) : m_type_sp(in_type_sp) 807ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 808ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham if (in_type_sp) 809ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham m_type_name = in_type_sp->GetName(); 810ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 811ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 812ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName::TypeAndOrName (const char *in_type_str) : m_type_name(in_type_str) 813ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 814ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 815ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 816ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName::TypeAndOrName (const TypeAndOrName &rhs) : m_type_sp (rhs.m_type_sp), m_type_name (rhs.m_type_name) 817ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 818ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 819ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 820ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 821ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName::TypeAndOrName (ConstString &in_type_const_string) : m_type_name (in_type_const_string) 822ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 823ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 824ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 825ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName & 826ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName::operator= (const TypeAndOrName &rhs) 827ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 828ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham if (this != &rhs) 829ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham { 830ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham m_type_name = rhs.m_type_name; 831ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham m_type_sp = rhs.m_type_sp; 832ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham } 833ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return *this; 834ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 835ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 8361a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granatabool 8371a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico GranataTypeAndOrName::operator==(const TypeAndOrName &other) const 8381a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata{ 8391a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata if (m_type_sp != other.m_type_sp) 8401a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return false; 8411a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata if (m_type_name != other.m_type_name) 8421a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return false; 8431a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return true; 8441a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata} 8451a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 8461a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granatabool 8471a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico GranataTypeAndOrName::operator!=(const TypeAndOrName &other) const 8481a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata{ 8491a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata if (m_type_sp != other.m_type_sp) 8501a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return true; 8511a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata if (m_type_name != other.m_type_name) 8521a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return true; 8531a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return false; 8541a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata} 8551a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 856ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamConstString 857ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName::GetName () const 858ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 859ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham if (m_type_sp) 860ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return m_type_sp->GetName(); 861ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham else 862ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return m_type_name; 863ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 864ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 865ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamvoid 866ef22b90240618ed8056dac14a756dff574f8218aGreg ClaytonTypeAndOrName::SetName (const ConstString &type_name) 867ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 868ef22b90240618ed8056dac14a756dff574f8218aGreg Clayton m_type_name = type_name; 869ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 870ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 871ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamvoid 872ef22b90240618ed8056dac14a756dff574f8218aGreg ClaytonTypeAndOrName::SetName (const char *type_name_cstr) 873ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 874ef22b90240618ed8056dac14a756dff574f8218aGreg Clayton m_type_name.SetCString (type_name_cstr); 875ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 876ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 877ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghamvoid 878ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName::SetTypeSP (lldb::TypeSP type_sp) 879ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 880ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham m_type_sp = type_sp; 881ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham if (type_sp) 882ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham m_type_name = type_sp->GetName(); 883ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 884ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham 885ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Inghambool 886ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim InghamTypeAndOrName::IsEmpty() 887ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham{ 888ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham if (m_type_name || m_type_sp) 889ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return false; 890ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham else 891ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham return true; 892ef80aabe53b7fdf61309ba6d3d6865c94c681345Jim Ingham} 893979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 8941a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granatavoid 8951a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico GranataTypeAndOrName::Clear () 8961a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata{ 8971a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata m_type_name.Clear(); 8981a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata m_type_sp.reset(); 8991a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata} 9001a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 9011a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granatabool 9021a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico GranataTypeAndOrName::HasName () 9031a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata{ 9041a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return (bool)m_type_name; 9051a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata} 9061a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 9071a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granatabool 9081a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico GranataTypeAndOrName::HasTypeSP () 9091a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata{ 9101a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata return m_type_sp.get() != NULL; 9111a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata} 9121a469c75c0597abc2a9abdf86b624b2e71ea8650Enrico Granata 9130fb0bcc9d4e951145e1b8c783652224c09b23af4Greg ClaytonTypeImpl::TypeImpl(const lldb_private::ClangASTType& clang_ast_type) : 91452f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_ast_type(clang_ast_type), 9150fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type_sp() 91652f792329be5db8e38961350589e97e8f2823acdGreg Clayton{ 91752f792329be5db8e38961350589e97e8f2823acdGreg Clayton} 918979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 9190fb0bcc9d4e951145e1b8c783652224c09b23af4Greg ClaytonTypeImpl::TypeImpl(const lldb::TypeSP& type) : 92052f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_ast_type(type->GetClangForwardType()), 9210fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type_sp(type) 9220fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton{ 9230fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton} 924979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 9257dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Claytonvoid 9267dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg ClaytonTypeImpl::SetType (const lldb::TypeSP &type_sp) 9277dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton{ 9287dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton if (type_sp) 9297dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton { 93052f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_ast_type = type_sp->GetClangForwardType(); 9317dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton m_type_sp = type_sp; 9327dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton } 9337dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton else 9347dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton { 9357dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton m_clang_ast_type.Clear(); 9367dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton m_type_sp.reset(); 9377dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton } 9387dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton} 9397dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton 940979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico GranataTypeImpl& 941979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico GranataTypeImpl::operator = (const TypeImpl& rhs) 942979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{ 943979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata if (*this != rhs) 944979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata { 9450fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_clang_ast_type = rhs.m_clang_ast_type; 9460fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type_sp = rhs.m_type_sp; 947979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata } 948979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata return *this; 949979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata} 950979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 951979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granataclang::ASTContext* 952979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico GranataTypeImpl::GetASTContext() 953979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{ 954979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata if (!IsValid()) 955979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata return NULL; 956979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 9570fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type.GetASTContext(); 958979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata} 959979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 960979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granatalldb::clang_type_t 961979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico GranataTypeImpl::GetOpaqueQualType() 962979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata{ 963979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata if (!IsValid()) 964979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata return NULL; 965979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 9660fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_clang_ast_type.GetOpaqueQualType(); 967979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata} 96896154be69fa240a662419183ed08e1cfc5418164Greg Clayton 96996154be69fa240a662419183ed08e1cfc5418164Greg Claytonbool 97096154be69fa240a662419183ed08e1cfc5418164Greg ClaytonTypeImpl::GetDescription (lldb_private::Stream &strm, 97196154be69fa240a662419183ed08e1cfc5418164Greg Clayton lldb::DescriptionLevel description_level) 97296154be69fa240a662419183ed08e1cfc5418164Greg Clayton{ 97396154be69fa240a662419183ed08e1cfc5418164Greg Clayton if (m_clang_ast_type.IsValid()) 97496154be69fa240a662419183ed08e1cfc5418164Greg Clayton { 97552f792329be5db8e38961350589e97e8f2823acdGreg Clayton m_clang_ast_type.DumpTypeDescription (&strm); 97696154be69fa240a662419183ed08e1cfc5418164Greg Clayton } 97796154be69fa240a662419183ed08e1cfc5418164Greg Clayton else 97896154be69fa240a662419183ed08e1cfc5418164Greg Clayton { 97996154be69fa240a662419183ed08e1cfc5418164Greg Clayton strm.PutCString ("No value"); 98096154be69fa240a662419183ed08e1cfc5418164Greg Clayton } 98196154be69fa240a662419183ed08e1cfc5418164Greg Clayton return true; 98296154be69fa240a662419183ed08e1cfc5418164Greg Clayton} 98396154be69fa240a662419183ed08e1cfc5418164Greg Clayton 9848c3391ba76c5e3440a0cc10296dbde1b44300509Enrico GranataConstString 9858c3391ba76c5e3440a0cc10296dbde1b44300509Enrico GranataTypeImpl::GetName () 9868c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata{ 9878c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata if (m_clang_ast_type.IsValid()) 98852f792329be5db8e38961350589e97e8f2823acdGreg Clayton return m_clang_ast_type.GetConstTypeName(); 9898c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata return ConstString(); 9908c3391ba76c5e3440a0cc10296dbde1b44300509Enrico Granata} 991