ClangASTType.h revision 77e67a51acb825d79d25be687c085833713d5205
11674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton//===-- ClangASTType.h ------------------------------------------*- C++ -*-===// 21674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// 31674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// The LLVM Compiler Infrastructure 41674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// 51674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// This file is distributed under the University of Illinois Open Source 61674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// License. See LICENSE.TXT for details. 71674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// 81674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton//===----------------------------------------------------------------------===// 91674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 101674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#ifndef liblldb_ClangASTType_h_ 111674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#define liblldb_ClangASTType_h_ 121674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 133e1c95a5eccc5fca012fcd91226ea67710b7ff26Peter Collingbourne#include <string> 14b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton#include "lldb/lldb-private.h" 151674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#include "lldb/Core/ClangForward.h" 161674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 171674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Claytonnamespace lldb_private { 181674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 191674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton//---------------------------------------------------------------------- 201674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// A class that can carry around a clang ASTContext and a opaque clang 211674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// QualType. A clang::QualType can be easily reconstructed from an 221674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// opaque clang type and often the ASTContext is needed when doing 231674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// various type related tasks, so this class allows both items to travel 241674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// in a single very lightweight class that can be used. There are many 251674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// static equivalents of the member functions that allow the ASTContext 261674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// and the opaque clang QualType to be specified for ease of use and 271674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton// to avoid code duplication. 281674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton//---------------------------------------------------------------------- 291674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Claytonclass ClangASTType 301674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton{ 3157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Claytonpublic: 32979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata 33979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata ClangASTType (clang::ASTContext *ast_context, lldb::clang_type_t type) : 340fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_type (type), 350fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton m_ast (ast_context) 361674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 371674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 381674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 391674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ClangASTType (const ClangASTType &tw) : 401674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton m_type (tw.m_type), 411674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton m_ast (tw.m_ast) 421674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 431674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 441674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 451674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ClangASTType () : 461674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton m_type (0), 471674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton m_ast (0) 481674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 491674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 501674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 51bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton virtual ~ClangASTType(); 521674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 531674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const ClangASTType & 541674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton operator= (const ClangASTType &atb) 551674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 561674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton m_type = atb.m_type; 571674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton m_ast = atb.m_ast; 581674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton return *this; 591674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 601674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 610fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton bool 620fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton IsValid () const 630fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton { 640fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton return m_type != NULL && m_ast != NULL; 650fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton } 660fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 67b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t 681674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetOpaqueQualType() const 691674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 701674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton return m_type; 711674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 721674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 731674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton clang::ASTContext * 741674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetASTContext() const 751674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton { 761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton return m_ast; 771674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton } 781674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 79946618a80e17d210e6592e94d10a15ad592572baGreg Clayton static ClangASTType 80946618a80e17d210e6592e94d10a15ad592572baGreg Clayton GetCanonicalType (clang::ASTContext *ast, lldb::clang_type_t clang_type); 81946618a80e17d210e6592e94d10a15ad592572baGreg Clayton 82946618a80e17d210e6592e94d10a15ad592572baGreg Clayton ClangASTType 83946618a80e17d210e6592e94d10a15ad592572baGreg Clayton GetCanonicalType () 84946618a80e17d210e6592e94d10a15ad592572baGreg Clayton { 85946618a80e17d210e6592e94d10a15ad592572baGreg Clayton return GetCanonicalType (GetASTContext(), GetOpaqueQualType()); 86946618a80e17d210e6592e94d10a15ad592572baGreg Clayton } 87946618a80e17d210e6592e94d10a15ad592572baGreg Clayton 881674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ConstString 89b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton GetConstTypeName (); 90dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 91dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton ConstString 92dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetConstQualifiedTypeName (); 931674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 940b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton static lldb::BasicType 950b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton GetBasicTypeEnumeration (const ConstString &name); 960b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 970b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton static ClangASTType 980b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton GetBasicType (clang::ASTContext *ast, lldb::BasicType type); 990b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 1000b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton static ClangASTType 1010b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton GetBasicType (clang::ASTContext *ast, const ConstString &name); 1020b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 1031674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static ConstString 104dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetConstTypeName (clang::ASTContext *ast, 105dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton lldb::clang_type_t clang_type); 1065c28dd1daf8de701ce1eeb8f9b8d3e3b5e39ad50Greg Clayton 107dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton static ConstString 108dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetConstQualifiedTypeName (clang::ASTContext *ast, 109dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton lldb::clang_type_t clang_type); 110dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 111b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton static std::string 112dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetTypeNameForQualType (clang::ASTContext *ast, 113dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton clang::QualType qual_type); 114b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton 115b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton static std::string 116dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetTypeNameForOpaqueQualType (clang::ASTContext *ast, 117dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton lldb::clang_type_t opaque_qual_type); 118b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton 119fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t 120940ca9447d84a08883d2ce77a765475f09243fc5Greg Clayton GetClangTypeByteSize (); 121940ca9447d84a08883d2ce77a765475f09243fc5Greg Clayton 122f95fc9e09fa0a32de0a3904a1517266df37e8bffGreg Clayton static uint64_t 123f95fc9e09fa0a32de0a3904a1517266df37e8bffGreg Clayton GetClangTypeByteSize (clang::ASTContext *ast_context, 124f95fc9e09fa0a32de0a3904a1517266df37e8bffGreg Clayton lldb::clang_type_t clang_type); 125f95fc9e09fa0a32de0a3904a1517266df37e8bffGreg Clayton 126fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t 127960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton GetClangTypeBitWidth (); 128960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 129fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton static uint64_t 130b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetClangTypeBitWidth (clang::ASTContext *ast_context, lldb::clang_type_t opaque_clang_qual_type); 131960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 132960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton size_t 133960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton GetTypeBitAlign (); 134960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 135960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton static size_t 136b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetTypeBitAlign (clang::ASTContext *ast_context, lldb::clang_type_t clang_type); 137960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 13862fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton lldb::LanguageType 13962fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton GetMinimumLanguage (); 14062fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton 14162fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton static lldb::LanguageType 142afb7c85df796f74262917e44dd68f668dade3911Enrico Granata GetMinimumLanguage (clang::ASTContext *ctx, 143afb7c85df796f74262917e44dd68f668dade3911Enrico Granata lldb::clang_type_t clang_type); 14462fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton 145d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton static lldb::TypeClass 146d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetTypeClass (clang::ASTContext *ast_context, 147d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton lldb::clang_type_t clang_type); 148d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 149946618a80e17d210e6592e94d10a15ad592572baGreg Clayton lldb::TypeClass 150946618a80e17d210e6592e94d10a15ad592572baGreg Clayton GetTypeClass () const 151946618a80e17d210e6592e94d10a15ad592572baGreg Clayton { 152946618a80e17d210e6592e94d10a15ad592572baGreg Clayton return GetTypeClass (GetASTContext(), GetOpaqueQualType()); 153946618a80e17d210e6592e94d10a15ad592572baGreg Clayton } 154b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata 15577e67a51acb825d79d25be687c085833713d5205Greg Clayton bool 15677e67a51acb825d79d25be687c085833713d5205Greg Clayton IsPolymorphicClass () 15777e67a51acb825d79d25be687c085833713d5205Greg Clayton { 15877e67a51acb825d79d25be687c085833713d5205Greg Clayton return IsPolymorphicClass(GetASTContext(), GetOpaqueQualType()); 15977e67a51acb825d79d25be687c085833713d5205Greg Clayton } 16077e67a51acb825d79d25be687c085833713d5205Greg Clayton 16177e67a51acb825d79d25be687c085833713d5205Greg Clayton static bool 16277e67a51acb825d79d25be687c085833713d5205Greg Clayton IsPolymorphicClass (clang::ASTContext *ast_context, lldb::clang_type_t clang_type); 16377e67a51acb825d79d25be687c085833713d5205Greg Clayton 164b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata ClangASTType 165b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata GetFullyUnqualifiedType (); 166b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata 167b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata static ClangASTType 168b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata GetFullyUnqualifiedType (clang::ASTContext *ast_context, lldb::clang_type_t clang_type); 169b6a4c565732b3a7b546ba2aa0e7aec3a4bb359a4Enrico Granata 1701674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton void 1711674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpValue (ExecutionContext *exe_ctx, 1721674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 1731674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 1741674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 175fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 1761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 1771674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 1781674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_offset, 1791674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_types, 1801674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_summary, 1811674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool verbose, 1821674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t depth); 1831674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 1841674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static void 1851674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpValue (clang::ASTContext *ast_context, 186b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 1871674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ExecutionContext *exe_ctx, 1881674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 1891674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 1901674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 191fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 1921674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 1931674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 1941674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_offset, 1951674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_types, 1961674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_summary, 1971674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool verbose, 1981674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t depth); 1991674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2001674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 2011674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpTypeValue (Stream *s, 2021674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 2031674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 204fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 2051674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 2061674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 20724a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton uint32_t bitfield_bit_offset, 20824a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton ExecutionContextScope *exe_scope); 2091674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2101674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2111674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 2121674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpTypeValue (clang::ASTContext *ast_context, 213b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 2141674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 2151674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 2161674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 217fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 2181674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 2191674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 22024a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton uint32_t bitfield_bit_offset, 22124a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton ExecutionContextScope *exe_scope); 2221674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2231674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton void 2241674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpSummary (ExecutionContext *exe_ctx, 2251674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 2261674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 227fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 2281674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size); 2291674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2301674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2311674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static void 2321674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpSummary (clang::ASTContext *ast_context, 233b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 2341674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ExecutionContext *exe_ctx, 2351674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 2361674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 237fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 2381674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size); 239960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 240960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton void 241133214fe6ebe3cf7f509047a3d297fca1f4b09eeGreg Clayton DumpTypeDescription (); // Dump to stdout 242133214fe6ebe3cf7f509047a3d297fca1f4b09eeGreg Clayton 243133214fe6ebe3cf7f509047a3d297fca1f4b09eeGreg Clayton void 244960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton DumpTypeDescription (Stream *s); 245960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 246960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton static void 247960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton DumpTypeDescription (clang::ASTContext *ast_context, 248b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 249960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton Stream *s); 2503aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan 2511674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Encoding 252fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton GetEncoding (uint64_t &count); 2531674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2541674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static lldb::Encoding 255fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton GetEncoding (lldb::clang_type_t opaque_clang_qual_type, uint64_t &count); 2561674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2571674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format 2581674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetFormat (); 2591674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2601674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static lldb::Format 261b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetFormat (lldb::clang_type_t opaque_clang_qual_type); 2621391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata 263fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t 264979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetTypeByteSize() const; 2651391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata 266fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton static uint64_t 2671391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata GetTypeByteSize(clang::ASTContext *ast_context, 2681391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata lldb::clang_type_t opaque_clang_qual_type); 2691674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2701674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 2711674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetValueAsScalar (const DataExtractor &data, 272fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 2731674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 2741674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Scalar &value); 2751674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 2771674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetValueAsScalar (clang::ASTContext *ast_context, 278b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 2791674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 280fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 2811674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 2821674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Scalar &value); 2831674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 284462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 285462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton bool 286462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton IsDefined(); 287462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 288462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton static bool 289b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton IsDefined (lldb::clang_type_t opaque_clang_qual_type); 290462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 2911674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 292e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan IsConst(); 293e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan 294e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan static bool 295e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan IsConst (lldb::clang_type_t opaque_clang_qual_type); 296e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan 297e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan bool 2981674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton SetValueFromScalar (const Scalar &value, 2991674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream &strm); 3001674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3011674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 3021674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton SetValueFromScalar (clang::ASTContext *ast_context, 303b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 3041674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const Scalar &value, 3051674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream &strm); 3061674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 30757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton void 30857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton SetClangType (clang::ASTContext *ast, lldb::clang_type_t type) 30957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton { 31057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_type = type; 31157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_ast = ast; 31257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton } 31357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton 3141674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 3151674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ReadFromMemory (ExecutionContext *exe_ctx, 3161674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 317b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 3181674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DataExtractor &data); 3191674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3201674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 3211674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ReadFromMemory (clang::ASTContext *ast_context, 322b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 3231674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ExecutionContext *exe_ctx, 3241674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 325b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 3261674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DataExtractor &data); 3271674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3281674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 3291674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton WriteToMemory (ExecutionContext *exe_ctx, 3301674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 331b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 3321674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton StreamString &new_value); 3331674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3341674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 3351674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton WriteToMemory (clang::ASTContext *ast_context, 336b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 3371674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ExecutionContext *exe_ctx, 3381674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 339b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 3401674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton StreamString &new_value); 3411674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 342b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t 343946618a80e17d210e6592e94d10a15ad592572baGreg Clayton GetPointeeType () const; 344585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton 345b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton static lldb::clang_type_t 346b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetPointeeType (lldb::clang_type_t opaque_clang_qual_type); 347915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 348915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::clang_type_t 349fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton GetArrayElementType (uint64_t& stride); 350915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 351915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata static lldb::clang_type_t 352915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetArrayElementType (clang::ASTContext* ast, 353915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::clang_type_t opaque_clang_qual_type, 354fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t& stride); 355915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 356915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::clang_type_t 3570a19a1b9c25117854f226256805239d95153ed2dGreg Clayton GetPointerType () const; 358915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 359915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata static lldb::clang_type_t 360915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetPointerType (clang::ASTContext *ast_context, 361915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::clang_type_t opaque_clang_qual_type); 362b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton 363b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton static lldb::clang_type_t 364b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton RemoveFastQualifiers (lldb::clang_type_t); 365585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton 36688db4597c7567be050b7a729f7306832f28428bbGreg Clayton static clang::CXXRecordDecl * 36788db4597c7567be050b7a729f7306832f28428bbGreg Clayton GetAsCXXRecordDecl (lldb::clang_type_t opaque_clang_qual_type); 36888db4597c7567be050b7a729f7306832f28428bbGreg Clayton 3697dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton void 3707dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton Clear() 3717dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton { 3727dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton m_type = NULL; 3737dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton m_ast = NULL; 3747dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton } 3757dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton 3761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Claytonprivate: 37757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton lldb::clang_type_t m_type; 37857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton clang::ASTContext *m_ast; 3791674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton}; 3801674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3810fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonbool operator == (const ClangASTType &lhs, const ClangASTType &rhs); 3820fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonbool operator != (const ClangASTType &lhs, const ClangASTType &rhs); 3830fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 3841674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3851674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton} // namespace lldb_private 3861674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3871674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#endif // #ifndef liblldb_ClangASTType_h_ 388