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