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