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