ClangASTContext.h revision 6916e358c9725b75ed91f31236c147f26c9af10e
124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===-- ClangASTContext.h ---------------------------------------*- C++ -*-===//
224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//                     The LLVM Compiler Infrastructure
424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// This file is distributed under the University of Illinois Open Source
624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// License. See LICENSE.TXT for details.
724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//
824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner//===----------------------------------------------------------------------===//
924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#ifndef liblldb_ClangASTContext_h_
1124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#define liblldb_ClangASTContext_h_
1224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C Includes
1424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes
1524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <string>
1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector>
17ced18cd66f0f32ec1d2226005044dd1cd44710c6Eli Friedman#include <memory>
18ced18cd66f0f32ec1d2226005044dd1cd44710c6Eli Friedman#include <stdint.h>
1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes
2124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes
2224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-enumerations.h"
2324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ClangForward.h"
241674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#include "lldb/Symbol/ClangASTType.h"
2524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private {
2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Declaration;
2924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ClangASTContext
3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{
3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic:
33bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    enum {
34bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeHasChildren        = (1u <<  0),
35bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeHasValue           = (1u <<  1),
36bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsArray            = (1u <<  2),
37bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsBlock            = (1u <<  3),
38bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsBuiltIn          = (1u <<  4),
39bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsClass            = (1u <<  5),
40bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsCPlusPlus        = (1u <<  6),
41bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsEnumeration      = (1u <<  7),
42bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsFuncPrototype    = (1u <<  8),
43bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsMember           = (1u <<  9),
44bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsObjC             = (1u << 10),
45bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsPointer          = (1u << 11),
46bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsReference        = (1u << 12),
47bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsStructUnion      = (1u << 13),
48bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsTemplate         = (1u << 14),
49bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsTypedef          = (1u << 15),
50bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton        eTypeIsVector           = (1u << 16)
51bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    };
52bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton
5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Constructors and Destructors
5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ClangASTContext(const char *target_triple);
5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ~ClangASTContext();
5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::ASTContext *
6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    getASTContext();
6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::Builtin::Context *
6424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    getBuiltinContext();
6524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::IdentifierTable *
6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    getIdentifierTable();
6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
6924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::LangOptions *
7024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    getLanguageOptions();
7124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::SelectorTable *
7324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    getSelectorTable();
7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::SourceManager *
7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    getSourceManager();
7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::Diagnostic *
7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    getDiagnostic();
8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::TargetOptions *
8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    getTargetOptions();
8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::TargetInfo *
8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    getTargetInfo();
8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    Clear();
8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const char *
9124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetTargetTriple ();
9224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
9424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    SetTargetTriple (const char *target_triple);
9524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
9624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Basic Types
9824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
9924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
100462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
10124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetBuiltinTypeForEncodingAndBitSize (lldb::Encoding encoding,
10224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                          uint32_t bit_size);
10324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
104462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
10524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetBuiltinTypeForEncodingAndBitSize (clang::ASTContext *ast_context,
10624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                         lldb::Encoding encoding,
10724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                         uint32_t bit_size);
10824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
109462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
11024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetBuiltinTypeForDWARFEncodingAndBitSize (
11124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        const char *type_name,
11224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint32_t dw_ate,
11324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner        uint32_t bit_size);
11424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
115462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
116a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan    GetBuiltInType_void(clang::ASTContext *ast_context);
117a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan
118462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
119a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan    GetBuiltInType_void()
120a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan    {
121a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan        return GetBuiltInType_void(getASTContext());
122a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan    }
123960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
124462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
125960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    GetBuiltInType_objc_id();
126960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
127462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
128960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    GetBuiltInType_objc_Class();
129960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton
130462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
131960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton    GetBuiltInType_objc_selector();
13224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
133462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
13424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetCStringType(bool is_const);
13524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
136462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetVoidPtrType(bool is_const);
13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
139462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetVoidPtrType(clang::ASTContext *ast_context, bool is_const);
14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
142462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
14324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    CopyType(clang::ASTContext *dest_context,
14424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner             clang::ASTContext *source_context,
145462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton             lldb::clang_type_t clang_type);
14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
1476916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    static clang::Decl *
1486916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton    CopyDecl (clang::ASTContext *dest_context,
1496916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton              clang::ASTContext *source_context,
1506916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton              clang::Decl *source_decl);
1516916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton
1525510dddc33260a991284ef81ca343594f23262e8Sean Callanan    static bool
1535510dddc33260a991284ef81ca343594f23262e8Sean Callanan    AreTypesSame(clang::ASTContext *ast_context,
154462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                 lldb::clang_type_t type1,
155462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                 lldb::clang_type_t type2);
1565510dddc33260a991284ef81ca343594f23262e8Sean Callanan
1575510dddc33260a991284ef81ca343594f23262e8Sean Callanan    bool
158462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    AreTypesSame(lldb::clang_type_t type1,
159462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                 lldb::clang_type_t type2)
1605510dddc33260a991284ef81ca343594f23262e8Sean Callanan    {
161a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan        return ClangASTContext::AreTypesSame(getASTContext(), type1, type2);
1625510dddc33260a991284ef81ca343594f23262e8Sean Callanan    }
1635510dddc33260a991284ef81ca343594f23262e8Sean Callanan
16424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
16524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // CVR modifiers
16624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
16724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
168462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
169462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    AddConstModifier (lldb::clang_type_t clang_type);
17024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
171462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
172462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    AddRestrictModifier (lldb::clang_type_t clang_type);
17324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
174462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
175462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    AddVolatileModifier (lldb::clang_type_t clang_type);
17624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
17724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
17824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Structure, Unions, Classes
17924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
181462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
182e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    CreateRecordType (const char *name,
183e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                      int kind,
1849488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton                      clang::DeclContext *decl_ctx,
1859488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton                      lldb::LanguageType language);
18624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
18760a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan    static bool
18860a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan    AddFieldToRecordType (clang::ASTContext *ast_context,
189462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                          lldb::clang_type_t record_qual_type,
190e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                          const char *name,
191462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                          lldb::clang_type_t field_type,
192585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton                          lldb::AccessType access,
193e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                          uint32_t bitfield_bit_size);
194e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton
19524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
196462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    AddFieldToRecordType (lldb::clang_type_t record_qual_type,
19760a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                          const char *name,
198462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                          lldb::clang_type_t field_type,
19960a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                          lldb::AccessType access,
20060a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                          uint32_t bitfield_bit_size)
20160a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan    {
2021d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton        return ClangASTContext::AddFieldToRecordType (getASTContext(),
2031d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                      record_qual_type,
2041d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                      name,
2051d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                      field_type,
2061d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                      access,
2071d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                      bitfield_bit_size);
20860a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan    }
209795230029c9c8ff35c167ee5f548b1b373b89c33Sean Callanan
210412440aa3a110e4068ee99729f7883c828fb3dceGreg Clayton    static clang::CXXMethodDecl *
211795230029c9c8ff35c167ee5f548b1b373b89c33Sean Callanan    AddMethodToCXXRecordType (clang::ASTContext *ast_context,
212462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                              lldb::clang_type_t record_opaque_type,
213795230029c9c8ff35c167ee5f548b1b373b89c33Sean Callanan                              const char *name,
214462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                              lldb::clang_type_t method_type,
215412440aa3a110e4068ee99729f7883c828fb3dceGreg Clayton                              lldb::AccessType access,
2161d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                              bool is_virtual,
2171d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                              bool is_static,
21830449d50f5328ca745d09d943b7e3b1ba41bff08Greg Clayton                              bool is_inline,
21930449d50f5328ca745d09d943b7e3b1ba41bff08Greg Clayton                              bool is_explicit);
220795230029c9c8ff35c167ee5f548b1b373b89c33Sean Callanan
221412440aa3a110e4068ee99729f7883c828fb3dceGreg Clayton    clang::CXXMethodDecl *
222462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    AddMethodToCXXRecordType (lldb::clang_type_t record_opaque_type,
223795230029c9c8ff35c167ee5f548b1b373b89c33Sean Callanan                              const char *name,
224462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                              lldb::clang_type_t method_type,
225412440aa3a110e4068ee99729f7883c828fb3dceGreg Clayton                              lldb::AccessType access,
2261d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                              bool is_virtual,
2271d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                              bool is_static,
22830449d50f5328ca745d09d943b7e3b1ba41bff08Greg Clayton                              bool is_inline,
22930449d50f5328ca745d09d943b7e3b1ba41bff08Greg Clayton                              bool is_explicit)
230795230029c9c8ff35c167ee5f548b1b373b89c33Sean Callanan
231795230029c9c8ff35c167ee5f548b1b373b89c33Sean Callanan    {
2321d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton        return ClangASTContext::AddMethodToCXXRecordType (getASTContext(),
2331d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                          record_opaque_type,
2341d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                          name,
2351d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                          method_type,
2361d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                          access,
2371d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                          is_virtual,
2381d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                                          is_static,
23930449d50f5328ca745d09d943b7e3b1ba41bff08Greg Clayton                                                          is_inline,
24030449d50f5328ca745d09d943b7e3b1ba41bff08Greg Clayton                                                          is_explicit);
241795230029c9c8ff35c167ee5f548b1b373b89c33Sean Callanan    }
24260a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan
24360a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan    bool
244e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    FieldIsBitfield (clang::FieldDecl* field,
245e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                     uint32_t& bitfield_bit_size);
24624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
24724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
248e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    FieldIsBitfield (clang::ASTContext *ast_context,
249e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                     clang::FieldDecl* field,
250e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                     uint32_t& bitfield_bit_size);
25124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
25324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    RecordHasFields (const clang::RecordDecl *record_decl);
25424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
25524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
256462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    SetDefaultAccessForRecordFields (lldb::clang_type_t clang_type,
257e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                     int default_accessibility,
258e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                     int *assigned_accessibilities,
259e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                     size_t num_assigned_accessibilities);
26084f8075072eef306234f8109573067647735c111Greg Clayton
261462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
26284f8075072eef306234f8109573067647735c111Greg Clayton    CreateObjCClass (const char *name,
26384f8075072eef306234f8109573067647735c111Greg Clayton                     clang::DeclContext *decl_ctx,
26484f8075072eef306234f8109573067647735c111Greg Clayton                     bool isForwardDecl,
26584f8075072eef306234f8109573067647735c111Greg Clayton                     bool isInternal);
26684f8075072eef306234f8109573067647735c111Greg Clayton
26760a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan    static bool
26860a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan    AddObjCClassIVar (clang::ASTContext *ast_context,
269462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                      lldb::clang_type_t class_opaque_type,
27060a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                      const char *name,
271462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                      lldb::clang_type_t ivar_opaque_type,
27260a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                      lldb::AccessType access,
27360a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                      uint32_t bitfield_bit_size,
27460a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                      bool isSynthesized);
27560a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan
27684f8075072eef306234f8109573067647735c111Greg Clayton    bool
277462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    AddObjCClassIVar (lldb::clang_type_t class_opaque_type,
27884f8075072eef306234f8109573067647735c111Greg Clayton                      const char *name,
279462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                      lldb::clang_type_t ivar_opaque_type,
280585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton                      lldb::AccessType access,
28184f8075072eef306234f8109573067647735c111Greg Clayton                      uint32_t bitfield_bit_size,
28260a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                      bool isSynthesized)
28360a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan    {
284a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan        return ClangASTContext::AddObjCClassIVar (getASTContext(),
28560a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                                                  class_opaque_type,
28660a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                                                  name,
28760a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                                                  ivar_opaque_type,
28860a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                                                  access,
28960a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                                                  bitfield_bit_size,
29060a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan                                                  isSynthesized);
29160a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan    }
29284f8075072eef306234f8109573067647735c111Greg Clayton
29384f8075072eef306234f8109573067647735c111Greg Clayton    bool
294462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    SetObjCSuperClass (lldb::clang_type_t class_clang_type,
295462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                       lldb::clang_type_t superclass_clang_type);
2969488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton
2979488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton    static bool
298462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    ObjCTypeHasIVars (lldb::clang_type_t class_clang_type, bool check_superclass);
2999488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton
3009488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton    static bool
3019488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton    ObjCDeclHasIVars (clang::ObjCInterfaceDecl *class_interface_decl,
3029488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton                      bool check_superclass);
3039488b7423b556c7c777b721d2094fd5ec4a47578Greg Clayton
3041d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton
3051d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    static clang::ObjCMethodDecl *
3061d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    AddMethodToObjCObjectType (clang::ASTContext *ast_context,
307462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                               lldb::clang_type_t class_opaque_type,
3081d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                               const char *name,  // the full symbol name as seen in the symbol table ("-[NString stringWithCString:]")
309462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                               lldb::clang_type_t method_opaque_type,
3101d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                               lldb::AccessType access);
3111d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton
3121d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    clang::ObjCMethodDecl *
313462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    AddMethodToObjCObjectType (lldb::clang_type_t class_opaque_type,
3141d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                               const char *name,  // the full symbol name as seen in the symbol table ("-[NString stringWithCString:]")
315462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                               lldb::clang_type_t method_opaque_type,
3161d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                               lldb::AccessType access)
3171d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    {
3181d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton        return AddMethodToObjCObjectType (getASTContext(),
3191d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                          class_opaque_type,
3201d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                          name,
3211d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                          method_opaque_type,
3221d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton                                          access);
3231d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    }
3241d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton
3251d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton
32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Aggregate Types
32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
330462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsAggregateType (lldb::clang_type_t clang_type);
33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
332bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    // Returns a mask containing bits from the ClangASTContext::eTypeXXX enumerations
333bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    static uint32_t
334f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton    GetTypeInfo (lldb::clang_type_t clang_type,
335f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton                     clang::ASTContext *ast_context,                // The AST for clang_type (can be NULL)
336f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton                     lldb::clang_type_t *pointee_or_element_type);  // (can be NULL)
337bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton
33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static uint32_t
339462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    GetNumChildren (lldb::clang_type_t clang_type,
340e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                    bool omit_empty_base_classes);
34124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
342462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
343e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    GetChildClangTypeAtIndex (const char *parent_name,
344462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                              lldb::clang_type_t  parent_clang_type,
345e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              uint32_t idx,
346e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              bool transparent_pointers,
347e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              bool omit_empty_base_classes,
348e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              std::string& child_name,
349e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              uint32_t &child_byte_size,
350e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              int32_t &child_byte_offset,
351e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              uint32_t &child_bitfield_bit_size,
352bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton                              uint32_t &child_bitfield_bit_offset,
353bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton                              bool &child_is_base_class);
354e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton
355462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
356e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    GetChildClangTypeAtIndex (clang::ASTContext *ast_context,
357e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              const char *parent_name,
358462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                              lldb::clang_type_t  parent_clang_type,
359e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              uint32_t idx,
360e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              bool transparent_pointers,
361e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              bool omit_empty_base_classes,
362e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              std::string& child_name,
363e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              uint32_t &child_byte_size,
364e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              int32_t &child_byte_offset,
365e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              uint32_t &child_bitfield_bit_size,
366bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton                              uint32_t &child_bitfield_bit_offset,
367bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton                              bool &child_is_base_class);
368e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton
36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Lookup a child given a name. This function will match base class names
37024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // and member member names in "clang_type" only, not descendants.
37124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static uint32_t
37224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetIndexOfChildWithName (clang::ASTContext *ast_context,
373462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                             lldb::clang_type_t clang_type,
37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                             const char *name,
37524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                             bool omit_empty_base_classes);
37624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
37724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Lookup a child member given a name. This function will match member names
37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // only and will descend into "clang_type" children in search for the first
37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // member in this class, or any base class that matches "name".
38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // TODO: Return all matches for a given name by returning a vector<vector<uint32_t>>
38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // so we catch all names that match a given child name, not just the first.
38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static size_t
38324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetIndexOfChildMemberWithName (clang::ASTContext *ast_context,
384462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                                   lldb::clang_type_t clang_type,
38524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   const char *name,
38624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   bool omit_empty_base_classes,
38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner                                   std::vector<uint32_t>& child_indexes);
38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // clang::TagType
39124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
39224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
39324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
394462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    SetTagTypeKind (lldb::clang_type_t  tag_qual_type,
395e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                    int kind);
39624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
39824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // C++ Base Classes
39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
40124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::CXXBaseSpecifier *
402462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    CreateBaseClassSpecifier (lldb::clang_type_t  base_class_type,
403585660cc442f7faf8d2cbd936e4c92ac689c30e5Greg Clayton                              lldb::AccessType access,
404e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              bool is_virtual,
405e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                              bool base_of_class);
406e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton
407e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    static void
408e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    DeleteBaseClassSpecifiers (clang::CXXBaseSpecifier **base_classes,
409e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                               unsigned num_base_classes);
41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
412462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    SetBaseClassesForClassType (lldb::clang_type_t  class_clang_type,
413e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                clang::CXXBaseSpecifier const * const *base_classes,
414e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                unsigned num_base_classes);
41524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
41624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
41724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // DeclContext Functions
41824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
41924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
42024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static clang::DeclContext *
421462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    GetDeclContextForType (lldb::clang_type_t  qual_type);
42224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
42324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
42424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Namespace Declarations
42524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
42624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
42724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::NamespaceDecl *
428e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    GetUniqueNamespaceDeclaration (const char *name,
429e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                   const Declaration &decl,
430e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                   clang::DeclContext *decl_ctx);
43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Function Types
43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::FunctionDecl *
437e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    CreateFunctionDeclaration (const char *name,
438462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                               lldb::clang_type_t  function_Type,
439e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                               int storage,
440e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                               bool is_inline);
441e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton
442462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
4432ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan    CreateFunctionType (clang::ASTContext *ast_context,
444462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                        lldb::clang_type_t result_type,
445462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                        lldb::clang_type_t *args,
4462ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                        unsigned num_args,
4472ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                        bool is_variadic,
4482ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                        unsigned type_quals);
4492ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan
450462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
451462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    CreateFunctionType (lldb::clang_type_t result_type,
452462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                        lldb::clang_type_t *args,
453e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                        unsigned num_args,
4542ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                        bool is_variadic,
4552ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                        unsigned type_quals)
4562ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan    {
457a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan        return ClangASTContext::CreateFunctionType(getASTContext(),
4582ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                                                   result_type,
4592ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                                                   args,
4602ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                                                   num_args,
4612ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                                                   is_variadic,
4622ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan                                                   type_quals);
4632ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan    }
464e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton
46524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    clang::ParmVarDecl *
4662ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan    CreateParameterDeclaration (const char *name,
467462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                               lldb::clang_type_t param_type,
468e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                               int storage);
46924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
47024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    void
471e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    SetFunctionParameters (clang::FunctionDecl *function_decl,
472e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                           clang::ParmVarDecl **params,
473e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                           unsigned num_params);
47424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
47524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
47624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Array Types
47724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
47824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
479462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
480462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    CreateArrayType (lldb::clang_type_t  element_type,
481e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                     size_t element_count,
482e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                     uint32_t bit_stride);
48324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
48424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
48524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Tag Declarations
48624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
48724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
488462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    StartTagDeclarationDefinition (lldb::clang_type_t  qual_type);
48924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
49024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
491462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    CompleteTagDeclarationDefinition (lldb::clang_type_t  qual_type);
49224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
49324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
49424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Enumeration Types
49524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
496462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
497462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    CreateEnumerationType (const Declaration &decl, const char *name, lldb::clang_type_t integer_qual_type);
49824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
499462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    static lldb::clang_type_t
500462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    GetEnumerationIntegerType (lldb::clang_type_t enum_clang_type);
501462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton
50224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    bool
503462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    AddEnumerationValueToEnumerationType (lldb::clang_type_t  enum_qual_type,
504462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                                          lldb::clang_type_t  enumerator_qual_type,
505e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                          const Declaration &decl,
506e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                          const char *name,
507e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                          int64_t enum_value,
508e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                                          uint32_t enum_value_bit_size);
509e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton
51024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
51124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Pointers & References
51224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
513462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
514462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    CreatePointerType (lldb::clang_type_t clang_type);
51524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
516462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
517462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    CreateLValueReferenceType (lldb::clang_type_t clang_type);
51824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
519462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
520462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    CreateRValueReferenceType (lldb::clang_type_t clang_type);
52124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
522462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
523462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    CreateMemberPointerType (lldb::clang_type_t  clang_pointee_type,
524462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                             lldb::clang_type_t  clang_class_type);
525fa97069b86f30aa44bb23a1de506ae220359b4faGreg Clayton
52624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    size_t
52724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    GetPointerBitSize ();
52824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
52924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
530462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsIntegerType (lldb::clang_type_t clang_type, bool &is_signed);
53124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
53224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
533462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsPointerType (lldb::clang_type_t clang_type, lldb::clang_type_t *target_type = NULL);
53424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
53524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
536462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsPointerOrReferenceType (lldb::clang_type_t clang_type, lldb::clang_type_t *target_type = NULL);
53724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
53824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
539462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsCStringType (lldb::clang_type_t clang_type, uint32_t &length);
54003e0f97cfa469792dd69b36f782d33a014225788Greg Clayton
54103e0f97cfa469792dd69b36f782d33a014225788Greg Clayton    static bool
542462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsFunctionPointerType (lldb::clang_type_t clang_type);
54324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
54424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
545462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsArrayType (lldb::clang_type_t clang_type, lldb::clang_type_t *member_type = NULL, uint64_t *size = NULL);
54624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
54724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
54824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Typedefs
54924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
550462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    lldb::clang_type_t
551e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    CreateTypedefType (const char *name,
552462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                       lldb::clang_type_t clang_type,
553e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                       clang::DeclContext *decl_ctx);
55424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
55524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
55624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Type names
55724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
55824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static std::string
559462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    GetTypeName(lldb::clang_type_t clang_type);
56024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
56124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static bool
562462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsFloatingPointType (lldb::clang_type_t clang_type, uint32_t &count, bool &is_complex);
56324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
5641d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    static bool
565bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    GetCXXClassName (lldb::clang_type_t clang_type,
566bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton                     std::string &class_name);
567bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton
568bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton    static bool
569462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsCXXClassType (lldb::clang_type_t clang_type);
5701d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton
5711d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton    static bool
572462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    IsObjCClassType (lldb::clang_type_t clang_type);
5731d8173f1b622482bd6610cc34ffd5668b75cf7bdGreg Clayton
574f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton    static bool
575f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton    IsCharType (lldb::clang_type_t clang_type);
576f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton
577f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton    static size_t
578f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton    GetArraySize (lldb::clang_type_t clang_type);
579f3d0b0c8081691128626eb496fdfcbf8ae54c1deGreg Clayton
58024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //static bool
581e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    //ConvertFloatValueToString (clang::ASTContext *ast_context,
582462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    //                           lldb::clang_type_t clang_type,
583e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    //                           const uint8_t* bytes,
584e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    //                           size_t byte_size,
585e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    //                           int apint_byte_order,
586e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    //                           std::string &float_str);
587e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton
58824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    static size_t
589e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton    ConvertStringToFloatValue (clang::ASTContext *ast_context,
590462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton                               lldb::clang_type_t clang_type,
591e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                               const char *s,
592e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                               uint8_t *dst,
593e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton                               size_t dst_size);
594e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton
595a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan    //------------------------------------------------------------------
596a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan    // Qualifiers
597a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan    //------------------------------------------------------------------
598a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan    static unsigned
599462d4147f3bb9141bf62d904f58a623db00669dfGreg Clayton    GetTypeQualifiers(lldb::clang_type_t clang_type);
60024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected:
60124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
60224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // Classes that inherit from ClangASTContext can see and modify these
60324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
60424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::string                             m_target_triple;
60524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<clang::ASTContext>        m_ast_context_ap;
60624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<clang::LangOptions>       m_language_options_ap;
60724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<clang::SourceManager>     m_source_manager_ap;
60824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<clang::Diagnostic>        m_diagnostic_ap;
60924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<clang::TargetOptions>     m_target_options_ap;
61024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<clang::TargetInfo>        m_target_info_ap;
61124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<clang::IdentifierTable>   m_identifier_table_ap;
61224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<clang::SelectorTable>     m_selector_table_ap;
61324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    std::auto_ptr<clang::Builtin::Context>  m_builtins_ap;
61424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
61524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate:
61624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
61724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    // For ClangASTContext only
61824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    //------------------------------------------------------------------
61924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    ClangASTContext(const ClangASTContext&);
62024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner    const ClangASTContext& operator=(const ClangASTContext&);
62124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner};
62224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
62324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private
62424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner
62524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif  // liblldb_ClangASTContext_h_
626