ClangASTType.h revision 133214fe6ebe3cf7f509047a3d297fca1f4b09ee
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 791674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ConstString 80b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton GetConstTypeName (); 81dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 82dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton ConstString 83dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetConstQualifiedTypeName (); 841674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 850b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton static lldb::BasicType 860b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton GetBasicTypeEnumeration (const ConstString &name); 870b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 880b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton static ClangASTType 890b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton GetBasicType (clang::ASTContext *ast, lldb::BasicType type); 900b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 910b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton static ClangASTType 920b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton GetBasicType (clang::ASTContext *ast, const ConstString &name); 930b93a7546473b15fb14dbc129f1fe5ed6ee14976Greg Clayton 941674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static ConstString 95dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetConstTypeName (clang::ASTContext *ast, 96dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton lldb::clang_type_t clang_type); 975c28dd1daf8de701ce1eeb8f9b8d3e3b5e39ad50Greg Clayton 98dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton static ConstString 99dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetConstQualifiedTypeName (clang::ASTContext *ast, 100dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton lldb::clang_type_t clang_type); 101dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton 102b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton static std::string 103dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetTypeNameForQualType (clang::ASTContext *ast, 104dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton clang::QualType qual_type); 105b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton 106b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton static std::string 107dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton GetTypeNameForOpaqueQualType (clang::ASTContext *ast, 108dc0a38c5a727cae5362b218a3180d0f4265a619dGreg Clayton lldb::clang_type_t opaque_qual_type); 109b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton 110fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t 111940ca9447d84a08883d2ce77a765475f09243fc5Greg Clayton GetClangTypeByteSize (); 112940ca9447d84a08883d2ce77a765475f09243fc5Greg Clayton 113fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t 114960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton GetClangTypeBitWidth (); 115960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 116fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton static uint64_t 117b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetClangTypeBitWidth (clang::ASTContext *ast_context, lldb::clang_type_t opaque_clang_qual_type); 118960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 119960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton size_t 120960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton GetTypeBitAlign (); 121960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 122960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton static size_t 123b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetTypeBitAlign (clang::ASTContext *ast_context, lldb::clang_type_t clang_type); 124960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 12562fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton lldb::LanguageType 12662fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton GetMinimumLanguage (); 12762fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton 12862fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton static lldb::LanguageType 129afb7c85df796f74262917e44dd68f668dade3911Enrico Granata GetMinimumLanguage (clang::ASTContext *ctx, 130afb7c85df796f74262917e44dd68f668dade3911Enrico Granata lldb::clang_type_t clang_type); 13162fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton 132d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton static lldb::TypeClass 133d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton GetTypeClass (clang::ASTContext *ast_context, 134d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton lldb::clang_type_t clang_type); 135d68e089f8353eaf845c3559dac6d47b32830974fGreg Clayton 1361674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton void 1371674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpValue (ExecutionContext *exe_ctx, 1381674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 1391674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 1401674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 141fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 1421674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 1431674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 1441674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_offset, 1451674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_types, 1461674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_summary, 1471674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool verbose, 1481674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t depth); 1491674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 1501674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static void 1511674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpValue (clang::ASTContext *ast_context, 152b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 1531674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ExecutionContext *exe_ctx, 1541674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 1551674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 1561674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 157fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 1581674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 1591674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 1601674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_offset, 1611674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_types, 1621674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool show_summary, 1631674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool verbose, 1641674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t depth); 1651674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 1661674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 1671674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpTypeValue (Stream *s, 1681674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 1691674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 170fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 1711674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 1721674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 17324a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton uint32_t bitfield_bit_offset, 17424a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton ExecutionContextScope *exe_scope); 1751674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 1761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 1771674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 1781674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpTypeValue (clang::ASTContext *ast_context, 179b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 1801674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 1811674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format format, 1821674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 183fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 1841674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 1851674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton uint32_t bitfield_bit_size, 18624a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton uint32_t bitfield_bit_offset, 18724a6bd9835ed1655984397b0cdf35127e47681e9Greg Clayton ExecutionContextScope *exe_scope); 1881674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 1891674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton void 1901674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpSummary (ExecutionContext *exe_ctx, 1911674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 1921674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 193fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 1941674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size); 1951674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 1961674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 1971674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static void 1981674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DumpSummary (clang::ASTContext *ast_context, 199b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 2001674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ExecutionContext *exe_ctx, 2011674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream *s, 2021674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 203fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 2041674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size); 205960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 206960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton void 207133214fe6ebe3cf7f509047a3d297fca1f4b09eeGreg Clayton DumpTypeDescription (); // Dump to stdout 208133214fe6ebe3cf7f509047a3d297fca1f4b09eeGreg Clayton 209133214fe6ebe3cf7f509047a3d297fca1f4b09eeGreg Clayton void 210960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton DumpTypeDescription (Stream *s); 211960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 212960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton static void 213960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton DumpTypeDescription (clang::ASTContext *ast_context, 214b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 215960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton Stream *s); 2163aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan 2173aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan void DumpTypeCode (Stream *s); 2183aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan 2193aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan static void 2203aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan DumpTypeCode (void *type, 2213aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan Stream *s); 222960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 2231674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Encoding 224fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton GetEncoding (uint64_t &count); 2251674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2261674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static lldb::Encoding 227fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton GetEncoding (lldb::clang_type_t opaque_clang_qual_type, uint64_t &count); 2281674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2291674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::Format 2301674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetFormat (); 2311674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2321674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static lldb::Format 233b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetFormat (lldb::clang_type_t opaque_clang_qual_type); 2341391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata 235fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t 236979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata GetTypeByteSize() const; 2371391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata 238fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton static uint64_t 2391391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata GetTypeByteSize(clang::ASTContext *ast_context, 2401391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata lldb::clang_type_t opaque_clang_qual_type); 2411674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2421674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 2431674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetValueAsScalar (const DataExtractor &data, 244fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 2451674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 2461674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Scalar &value); 2471674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2481674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 2491674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton GetValueAsScalar (clang::ASTContext *ast_context, 250b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 2511674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const DataExtractor &data, 252fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton lldb::offset_t data_offset, 2531674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton size_t data_byte_size, 2541674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Scalar &value); 2551674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 256462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 257462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton bool 258462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton IsDefined(); 259462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 260462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton static bool 261b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton IsDefined (lldb::clang_type_t opaque_clang_qual_type); 262462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton 2631674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 264e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan IsConst(); 265e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan 266e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan static bool 267e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan IsConst (lldb::clang_type_t opaque_clang_qual_type); 268e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan 269e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan bool 2701674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton SetValueFromScalar (const Scalar &value, 2711674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream &strm); 2721674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2731674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 2741674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton SetValueFromScalar (clang::ASTContext *ast_context, 275b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 2761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton const Scalar &value, 2771674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton Stream &strm); 2781674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 27957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton void 28057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton SetClangType (clang::ASTContext *ast, lldb::clang_type_t type) 28157b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton { 28257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_type = type; 28357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton m_ast = ast; 28457b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton } 28557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton 2861674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 2871674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ReadFromMemory (ExecutionContext *exe_ctx, 2881674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 289b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 2901674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DataExtractor &data); 2911674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 2921674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 2931674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ReadFromMemory (clang::ASTContext *ast_context, 294b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 2951674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ExecutionContext *exe_ctx, 2961674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 297b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 2981674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton DataExtractor &data); 2991674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3001674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton bool 3011674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton WriteToMemory (ExecutionContext *exe_ctx, 3021674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 303b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 3041674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton StreamString &new_value); 3051674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3061674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton static bool 3071674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton WriteToMemory (clang::ASTContext *ast_context, 308b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t opaque_clang_qual_type, 3091674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton ExecutionContext *exe_ctx, 3101674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton lldb::addr_t addr, 311b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton AddressType address_type, 3121674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton StreamString &new_value); 3131674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 314b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton lldb::clang_type_t 315585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton GetPointeeType (); 316585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton 317b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton static lldb::clang_type_t 318b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton GetPointeeType (lldb::clang_type_t opaque_clang_qual_type); 319915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 320915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::clang_type_t 321fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton GetArrayElementType (uint64_t& stride); 322915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 323915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata static lldb::clang_type_t 324915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetArrayElementType (clang::ASTContext* ast, 325915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::clang_type_t opaque_clang_qual_type, 326fe6dc6e241c52822710380cec0931351a1d7b2d3Greg Clayton uint64_t& stride); 327915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 328915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::clang_type_t 3290a19a1b9c25117854f226256805239d95153ed2dGreg Clayton GetPointerType () const; 330915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata 331915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata static lldb::clang_type_t 332915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata GetPointerType (clang::ASTContext *ast_context, 333915448044bac6fdac22a33cc46697dcb771a8df2Enrico Granata lldb::clang_type_t opaque_clang_qual_type); 334b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton 335b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton static lldb::clang_type_t 336b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton RemoveFastQualifiers (lldb::clang_type_t); 337585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton 33888db4597c7567be050b7a729f7306832f28428bbGreg Clayton static clang::CXXRecordDecl * 33988db4597c7567be050b7a729f7306832f28428bbGreg Clayton GetAsCXXRecordDecl (lldb::clang_type_t opaque_clang_qual_type); 34088db4597c7567be050b7a729f7306832f28428bbGreg Clayton 3417dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton void 3427dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton Clear() 3437dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton { 3447dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton m_type = NULL; 3457dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton m_ast = NULL; 3467dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton } 3477dd5c51fbab8384b18f20ecc125f9a1bb3c9bcb2Greg Clayton 3481674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Claytonprivate: 34957b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton lldb::clang_type_t m_type; 35057b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton clang::ASTContext *m_ast; 3511674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton}; 3521674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3530fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonbool operator == (const ClangASTType &lhs, const ClangASTType &rhs); 3540fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Claytonbool operator != (const ClangASTType &lhs, const ClangASTType &rhs); 3550fb0bcc9d4e951145e1b8c783652224c09b23af4Greg Clayton 3561674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3571674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton} // namespace lldb_private 3581674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton 3591674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#endif // #ifndef liblldb_ClangASTType_h_ 360