ClangASTType.h revision afb7c85df796f74262917e44dd68f668dade3911
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) :
34979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    m_type (type),
35979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    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
61b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    lldb::clang_type_t
621674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    GetOpaqueQualType() const
631674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    {
641674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton        return m_type;
651674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    }
661674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
671674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    clang::ASTContext *
681674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    GetASTContext() const
691674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    {
701674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton        return m_ast;
711674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    }
721674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
731674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    ConstString
74b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton    GetConstTypeName ();
751674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static ConstString
77b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton    GetConstTypeName (lldb::clang_type_t clang_type);
785c28dd1daf8de701ce1eeb8f9b8d3e3b5e39ad50Greg Clayton
79b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton    static std::string
80b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton    GetTypeNameForQualType (clang::QualType qual_type);
81b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton
82b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton    static std::string
83b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton    GetTypeNameForOpaqueQualType (lldb::clang_type_t opaque_qual_type);
84b302b2f50e079b11a12ebafc29104c198f4f15e4Greg Clayton
85bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton    uint32_t
86960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    GetClangTypeBitWidth ();
87960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
88bdcb6abaa287df2c5f312c51d993c1d0b0cb120cGreg Clayton    static uint32_t
89b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    GetClangTypeBitWidth (clang::ASTContext *ast_context, lldb::clang_type_t opaque_clang_qual_type);
90960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
91960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    size_t
92960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    GetTypeBitAlign ();
93960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
94960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    static size_t
95b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    GetTypeBitAlign (clang::ASTContext *ast_context, lldb::clang_type_t clang_type);
96960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
9762fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton    lldb::LanguageType
9862fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton    GetMinimumLanguage ();
9962fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton
10062fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton    static lldb::LanguageType
101afb7c85df796f74262917e44dd68f668dade3911Enrico Granata    GetMinimumLanguage (clang::ASTContext *ctx,
102afb7c85df796f74262917e44dd68f668dade3911Enrico Granata                        lldb::clang_type_t clang_type);
10362fcf03cee420445b28fa79623075bb5ba379a9aGreg Clayton
1041674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    void
1051674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    DumpValue (ExecutionContext *exe_ctx,
1061674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               Stream *s,
1071674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               lldb::Format format,
1081674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               const DataExtractor &data,
1091674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               uint32_t data_offset,
1101674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               size_t data_byte_size,
1111674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               uint32_t bitfield_bit_size,
1121674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               uint32_t bitfield_bit_offset,
1131674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               bool show_types,
1141674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               bool show_summary,
1151674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               bool verbose,
1161674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               uint32_t depth);
1171674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1181674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static void
1191674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    DumpValue (clang::ASTContext *ast_context,
120b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton               lldb::clang_type_t opaque_clang_qual_type,
1211674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               ExecutionContext *exe_ctx,
1221674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               Stream *s,
1231674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               lldb::Format format,
1241674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               const DataExtractor &data,
1251674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               uint32_t data_offset,
1261674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               size_t data_byte_size,
1271674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               uint32_t bitfield_bit_size,
1281674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               uint32_t bitfield_bit_offset,
1291674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               bool show_types,
1301674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               bool show_summary,
1311674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               bool verbose,
1321674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton               uint32_t depth);
1331674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1341674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    bool
1351674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    DumpTypeValue (Stream *s,
1361674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   lldb::Format format,
1371674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   const DataExtractor &data,
1381674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   uint32_t data_offset,
1391674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   size_t data_byte_size,
1401674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   uint32_t bitfield_bit_size,
1411674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   uint32_t bitfield_bit_offset);
1421674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1431674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1441674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static bool
1451674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    DumpTypeValue (clang::ASTContext *ast_context,
146b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton                   lldb::clang_type_t opaque_clang_qual_type,
1471674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   Stream *s,
1481674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   lldb::Format format,
1491674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   const DataExtractor &data,
1501674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   uint32_t data_offset,
1511674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   size_t data_byte_size,
1521674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   uint32_t bitfield_bit_size,
1531674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   uint32_t bitfield_bit_offset);
1541674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1551674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    void
1561674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    DumpSummary (ExecutionContext *exe_ctx,
1571674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                 Stream *s,
1581674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                 const DataExtractor &data,
1591674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                 uint32_t data_offset,
1601674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                 size_t data_byte_size);
1611674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1621674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1631674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static void
1641674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    DumpSummary (clang::ASTContext *ast_context,
165b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton                 lldb::clang_type_t opaque_clang_qual_type,
1661674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                 ExecutionContext *exe_ctx,
1671674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                 Stream *s,
1681674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                 const DataExtractor &data,
1691674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                 uint32_t data_offset,
1701674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                 size_t data_byte_size);
171960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
172960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    void
173960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    DumpTypeDescription (Stream *s);
174960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
175960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    static void
176960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    DumpTypeDescription (clang::ASTContext *ast_context,
177b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton                         lldb::clang_type_t opaque_clang_qual_type,
178960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton                         Stream *s);
1793aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan
1803aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan    void DumpTypeCode (Stream *s);
1813aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan
1823aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan    static void
1833aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan    DumpTypeCode (void *type,
1843aa7da5cb3327792415de44405e0896c6bdc305bSean Callanan                  Stream *s);
185960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
1861674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    lldb::Encoding
1871674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    GetEncoding (uint32_t &count);
1881674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1891674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static lldb::Encoding
190b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    GetEncoding (lldb::clang_type_t opaque_clang_qual_type, uint32_t &count);
1911674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1921674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    lldb::Format
1931674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    GetFormat ();
1941674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
1951674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static lldb::Format
196b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    GetFormat (lldb::clang_type_t opaque_clang_qual_type);
1971391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata
1981391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata    uint32_t
199979e20d127335143ffc89c2e37ec3a8b717ff22dEnrico Granata    GetTypeByteSize() const;
2001391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata
2011391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata    static uint32_t
2021391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata    GetTypeByteSize(clang::ASTContext *ast_context,
2031391a391072a4b25c21b7198733ef7aa47a616c7Enrico Granata                    lldb::clang_type_t opaque_clang_qual_type);
2041674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
2051674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    bool
2061674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    GetValueAsScalar (const DataExtractor &data,
2071674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                      uint32_t data_offset,
2081674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                      size_t data_byte_size,
2091674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                      Scalar &value);
2101674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
2111674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static bool
2121674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    GetValueAsScalar (clang::ASTContext *ast_context,
213b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton                      lldb::clang_type_t opaque_clang_qual_type,
2141674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                      const DataExtractor &data,
2151674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                      uint32_t data_offset,
2161674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                      size_t data_byte_size,
2171674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                      Scalar &value);
2181674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
219462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton
220462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    bool
221462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsDefined();
222462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton
223462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static bool
224b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    IsDefined (lldb::clang_type_t opaque_clang_qual_type);
225462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton
2261674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    bool
227e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan    IsConst();
228e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan
229e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan    static bool
230e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan    IsConst (lldb::clang_type_t opaque_clang_qual_type);
231e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan
232e8e5557af333aba8183ce6e9fed9996221eb1547Sean Callanan    bool
2331674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    SetValueFromScalar (const Scalar &value,
2341674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                        Stream &strm);
2351674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
2361674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static bool
2371674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    SetValueFromScalar (clang::ASTContext *ast_context,
238b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton                        lldb::clang_type_t opaque_clang_qual_type,
2391674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                        const Scalar &value,
2401674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                        Stream &strm);
2411674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
24257b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton    void
24357b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton    SetClangType (clang::ASTContext *ast, lldb::clang_type_t type)
24457b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton    {
24557b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton        m_type = type;
24657b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton        m_ast = ast;
24757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton    }
24857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton
2491674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    bool
2501674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    ReadFromMemory (ExecutionContext *exe_ctx,
2511674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                    lldb::addr_t addr,
252b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                    AddressType address_type,
2531674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                    DataExtractor &data);
2541674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
2551674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static bool
2561674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    ReadFromMemory (clang::ASTContext *ast_context,
257b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton                    lldb::clang_type_t opaque_clang_qual_type,
2581674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                    ExecutionContext *exe_ctx,
2591674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                    lldb::addr_t addr,
260b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                    AddressType address_type,
2611674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                    DataExtractor &data);
2621674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
2631674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    bool
2641674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    WriteToMemory (ExecutionContext *exe_ctx,
2651674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   lldb::addr_t addr,
266b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                   AddressType address_type,
2671674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   StreamString &new_value);
2681674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
2691674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    static bool
2701674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton    WriteToMemory (clang::ASTContext *ast_context,
271b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton                   lldb::clang_type_t opaque_clang_qual_type,
2721674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   ExecutionContext *exe_ctx,
2731674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   lldb::addr_t addr,
274b344843f75ef893762c93fd0a22d2d45712ce74dGreg Clayton                   AddressType address_type,
2751674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton                   StreamString &new_value);
2761674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
277b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    lldb::clang_type_t
278585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton    GetPointeeType ();
279585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton
280b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    static lldb::clang_type_t
281b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    GetPointeeType (lldb::clang_type_t opaque_clang_qual_type);
282b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton
283b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    static lldb::clang_type_t
284b433a3d8b910d571c0bcdcd5018778ac3763e703Greg Clayton    RemoveFastQualifiers (lldb::clang_type_t);
285585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton
2861674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Claytonprivate:
28757b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton    lldb::clang_type_t m_type;
28857b3c6b12812b0a7a79f896855c787bd4d893ecbGreg Clayton    clang::ASTContext *m_ast;
2891674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton};
2901674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
2911674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
2921674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton} // namespace lldb_private
2931674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton
2941674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#endif // #ifndef liblldb_ClangASTType_h_
295