ClangASTContext.h revision a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999
15e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen//===-- ClangASTContext.h ---------------------------------------*- C++ -*-===// 25e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen// 3a335d334d45701a42c283257fa44f2f7148e186dBrian Paul// The LLVM Compiler Infrastructure 4ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes// 55761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul// This file is distributed under the University of Illinois Open Source 65761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul// License. See LICENSE.TXT for details. 7ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes// 85e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen//===----------------------------------------------------------------------===// 95e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 105e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#ifndef liblldb_ClangASTContext_h_ 115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#define liblldb_ClangASTContext_h_ 125e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 135e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen// C Includes 14ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes// C++ Includes 155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include <string> 165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include <vector> 17ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes#include <memory> 185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include <stdint.h> 195e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 205e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen// Other libraries and framework includes 215e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "llvm/ADT/OwningPtr.h" 225e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "llvm/ADT/SmallVector.h" 235e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen#include "clang/AST/TemplateBase.h" 245e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 255e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 26e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul// Project includes 27e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul#include "lldb/lldb-enumerations.h" 28e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul#include "lldb/Core/ClangForward.h" 29e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul#include "lldb/Symbol/ClangASTType.h" 30e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paul 31e9b34885b8ff2ccb67a801cd1ce07e0df1b0e397Brian Paulnamespace lldb_private { 325e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 331d5a68970f1d8fcca29ce24e6667a143733197f0Brian Paulclass Declaration; 341d5a68970f1d8fcca29ce24e6667a143733197f0Brian Paul 35ba8f6172bdfb44594537a304225b54152584d701Gareth Hughesclass ClangASTContext 365e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen{ 37f2c023291a1f2887294d2aac504f8b82857ad092Brian Paulpublic: 38f2c023291a1f2887294d2aac504f8b82857ad092Brian Paul enum { 39f2c023291a1f2887294d2aac504f8b82857ad092Brian Paul eTypeHasChildren = (1u << 0), 402dbc515a669be123a019aeb4aa5aae6b1679f6a9Brian Paul eTypeHasValue = (1u << 1), 415e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen eTypeIsArray = (1u << 2), 4216b393d05990b6e917e144f9de87d0103b4c3e6dIan Romanick eTypeIsBlock = (1u << 3), 43001d944fd50e0579739b8865e6e09be5d267c05aEric Anholt eTypeIsBuiltIn = (1u << 4), 445e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen eTypeIsClass = (1u << 5), 45ede4205b245ee58bacf866d298273ebbe31feacfLuca Barbieri eTypeIsCPlusPlus = (1u << 6), 4663e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca eTypeIsEnumeration = (1u << 7), 4763e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca eTypeIsFuncPrototype = (1u << 8), 4863e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca eTypeIsMember = (1u << 9), 4963e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca eTypeIsObjC = (1u << 10), 5063e7a4c6e5bf51d8090046ebc5adcb4207448565José Fonseca eTypeIsPointer = (1u << 11), 51da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin eTypeIsReference = (1u << 12), 525606dfb572bf4b89b4882265924705bacc8c182bIan Romanick eTypeIsStructUnion = (1u << 13), 535606dfb572bf4b89b4882265924705bacc8c182bIan Romanick eTypeIsTemplate = (1u << 14), 545606dfb572bf4b89b4882265924705bacc8c182bIan Romanick eTypeIsTypedef = (1u << 15), 555606dfb572bf4b89b4882265924705bacc8c182bIan Romanick eTypeIsVector = (1u << 16), 565606dfb572bf4b89b4882265924705bacc8c182bIan Romanick eTypeIsScalar = (1u << 17) 575606dfb572bf4b89b4882265924705bacc8c182bIan Romanick }; 585fc5820cbc0faf57a48154466b4792294841a690José Fonseca 5950e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich typedef void (*CompleteTagDeclCallback)(void *baton, clang::TagDecl *); 6050e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich typedef void (*CompleteObjCInterfaceDeclCallback)(void *baton, clang::ObjCInterfaceDecl *); 6150e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich 6250e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich //------------------------------------------------------------------ 6350e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich // Constructors and Destructors 6450e0091a9d70f9e6383ad322d4df7576bd7c38f7Mathias Fröhlich //------------------------------------------------------------------ 655606dfb572bf4b89b4882265924705bacc8c182bIan Romanick ClangASTContext (const char *triple = NULL); 665606dfb572bf4b89b4882265924705bacc8c182bIan Romanick 675606dfb572bf4b89b4882265924705bacc8c182bIan Romanick ~ClangASTContext(); 686dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 695e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen clang::ASTContext * 706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell getASTContext(); 715e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 727f25d9ebb4856273c46ea4bbba4152b85f610a91Brian Paul clang::Builtin::Context * 7333e9ac20e3b399c6ec6ec2f586a9402b68590992Brian Paul getBuiltinContext(); 74e9d9dab0cd8614898ecc2aceb49d8faf354cdbdfBrian Paul 7532ef6e75839d6be283e034436e5dd34eabb67958Keith Whitwell clang::IdentifierTable * 765e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen getIdentifierTable(); 77f9995b30756140724f41daf963fa06167912be7fKristian Høgsberg 78b939adfa155f2b3ca5c5226e86da85629654d79bKeith Whitwell clang::LangOptions * 799a21d4670ce88cd2476930f3c5f7945cc57579e8Ian Romanick getLanguageOptions(); 8084870e215667c999202be31057df6e31a0389bb7Brian Paul 8184870e215667c999202be31057df6e31a0389bb7Brian Paul clang::SelectorTable * 826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell getSelectorTable(); 835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 845e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen clang::FileManager * 85fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul getFileManager(); 86fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul 87fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul clang::SourceManager * 88fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul getSourceManager(); 89fe49dcb3b03454ec1451b610ea89f2374946e090Brian Paul 905e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen clang::DiagnosticsEngine * 91c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul getDiagnosticsEngine(); 92c628fd743ee3c3305e9beac7f0e6efacf6982115Brian Paul 9353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul clang::DiagnosticConsumer * 9453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul getDiagnosticConsumer(); 9553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 9653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul clang::TargetOptions * 9753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul getTargetOptions(); 986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 994c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul clang::TargetInfo * 1004dafbc3dc75be565704f437016f70a63c48d1539Brian Paul getTargetInfo(); 10153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 10253f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul void 10353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul Clear(); 10453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 10553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul const char * 10653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul GetTargetTriple (); 10794b30dc390f1fdd526c080080830016fad3e2ee2Brian Paul 108fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell void 10953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul SetTargetTriple (const char *target_triple); 11053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 11153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul void 11253f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul SetArchitecture (const ArchSpec &arch); 11353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 11453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul bool 11553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul HasExternalSource (); 11653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 117762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich void 118762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich SetExternalSource (llvm::OwningPtr<clang::ExternalASTSource> &ast_source_ap); 119762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich 120762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich void 121762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich RemoveExternalSource (); 122762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich 123762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich bool 124762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich GetCompleteType (lldb::clang_type_t clang_type); 125762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich 126762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich static bool 127762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich GetCompleteType (clang::ASTContext *ast, 128762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich lldb::clang_type_t clang_type); 129762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich 130762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich bool 131762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich IsCompleteType (lldb::clang_type_t clang_type); 132762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich 133762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich static bool 134762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich IsCompleteType (clang::ASTContext *ast, 1354c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul lldb::clang_type_t clang_type); 13653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 13753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul bool 138b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich GetCompleteDecl (clang::Decl *decl) 139b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich { 140b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich return ClangASTContext::GetCompleteDecl(getASTContext(), decl); 141b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich } 142b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 143b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich static bool 144b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich GetCompleteDecl (clang::ASTContext *ast, 145b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich clang::Decl *decl); 146b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 147b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich void SetMetadataAsUserID (uintptr_t object, 148b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich lldb::user_id_t user_id); 149b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 150b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich void SetMetadata (uintptr_t object, 151b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich ClangASTMetadata &meta_data) 152b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich { 153b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich SetMetadata(getASTContext(), object, meta_data); 154b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich } 155b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 156b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich static void 157b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich SetMetadata (clang::ASTContext *ast, 158b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich uintptr_t object, 159b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich ClangASTMetadata &meta_data); 160b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 161b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich ClangASTMetadata * 162b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich GetMetadata (uintptr_t object) 163b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich { 164b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich return GetMetadata(getASTContext(), object); 165b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich } 166b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 16753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul static ClangASTMetadata * 16853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul GetMetadata (clang::ASTContext *ast, 16953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul uintptr_t object); 17053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 171f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich //------------------------------------------------------------------ 172f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich // Basic Types 173f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich //------------------------------------------------------------------ 174f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich 175f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich lldb::clang_type_t 176f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich GetBuiltinTypeForEncodingAndBitSize (lldb::Encoding encoding, 177f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich uint32_t bit_size); 178f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich 179f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich static lldb::clang_type_t 180f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich GetBuiltinTypeForEncodingAndBitSize (clang::ASTContext *ast, 181f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich lldb::Encoding encoding, 182f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich uint32_t bit_size); 183f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich 184f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich lldb::clang_type_t 185f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich GetBuiltinTypeForDWARFEncodingAndBitSize ( 186f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich const char *type_name, 187762c9766c93697af8d7fbaa729aed118789dbe8eMathias Fröhlich uint32_t dw_ate, 188f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich uint32_t bit_size); 189f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich 190f364ac1da10ff67eba5196c1074aff579864f741Mathias Fröhlich static lldb::clang_type_t 191f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich GetBuiltInType_void(clang::ASTContext *ast); 192b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 193b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich lldb::clang_type_t 194f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich GetBuiltInType_void() 195b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich { 196b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich return GetBuiltInType_void(getASTContext()); 197f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich } 1982a207c4bf95312b68093280b97229cc4316f5724Mathias Froehlich 1992a207c4bf95312b68093280b97229cc4316f5724Mathias Froehlich lldb::clang_type_t 2002a207c4bf95312b68093280b97229cc4316f5724Mathias Froehlich GetBuiltInType_bool(); 201b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich 202b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich lldb::clang_type_t 203f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich GetBuiltInType_objc_id(); 2042a207c4bf95312b68093280b97229cc4316f5724Mathias Froehlich 205b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich lldb::clang_type_t 206b57101302d832f890b9a3b228513d930d91e1de0Mathias Fröhlich GetBuiltInType_objc_Class(); 207f60e892c5017f66282080983da87f638d13917c5Mathias Fröhlich 20853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul static lldb::clang_type_t 2094c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul GetUnknownAnyType(clang::ASTContext *ast); 210bb38cadb1c5f2dc13096a091bdaf61dc3e3cfa4dMichal Krol 211bb38cadb1c5f2dc13096a091bdaf61dc3e3cfa4dMichal Krol lldb::clang_type_t 2126489a1d5bab75589569658d374257bf23cb67a23Paul Berry GetUnknownAnyType() 21351e7b058750cc480c296d45f773d7a5a662457f5Brian Paul { 2146489a1d5bab75589569658d374257bf23cb67a23Paul Berry return ClangASTContext::GetUnknownAnyType(getASTContext()); 2157c26b61f9366a397e353d7b7f1f1d1f6d0dcd0c7Keith Whitwell } 2164c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul 2175761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul lldb::clang_type_t 2185761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul GetBuiltInType_objc_selector(); 2195761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul 2205761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul lldb::clang_type_t 2215761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul GetCStringType(bool is_const); 2225761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul 2235761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul lldb::clang_type_t 2245761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul GetVoidType(); 2255761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul 2265761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul lldb::clang_type_t 2275761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul GetVoidType(clang::ASTContext *ast); 2285761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul 2295761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul lldb::clang_type_t 2305761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul GetVoidPtrType(bool is_const); 2315761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul 2325761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul static lldb::clang_type_t 2335761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul GetVoidPtrType(clang::ASTContext *ast, bool is_const); 2347d68c639ddb0f9df45cf698b8e8227bf1860b5fePaul Berry 2357d68c639ddb0f9df45cf698b8e8227bf1860b5fePaul Berry static clang::DeclContext * 2367d68c639ddb0f9df45cf698b8e8227bf1860b5fePaul Berry GetTranslationUnitDecl (clang::ASTContext *ast); 2377d68c639ddb0f9df45cf698b8e8227bf1860b5fePaul Berry 2385761c64823c10093c0f72bc8a62c99b86362e4e5Brian Paul clang::DeclContext * 2394c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul GetTranslationUnitDecl () 2407c26b61f9366a397e353d7b7f1f1d1f6d0dcd0c7Keith Whitwell { 2417c26b61f9366a397e353d7b7f1f1d1f6d0dcd0c7Keith Whitwell return GetTranslationUnitDecl (getASTContext()); 242da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin } 243da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 244da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin static bool 245da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GetClassMethodInfoForDeclContext (clang::DeclContext *decl_ctx, 246da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::LanguageType &language, 247da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin bool &is_instance_method, 248da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin ConstString &language_object_name); 2497c42390453e611367cf1ba11446692ec04e0abfbZack Rusin 2507c42390453e611367cf1ba11446692ec04e0abfbZack Rusin static lldb::clang_type_t 2517c42390453e611367cf1ba11446692ec04e0abfbZack Rusin CopyType(clang::ASTContext *dest_context, 2527c42390453e611367cf1ba11446692ec04e0abfbZack Rusin clang::ASTContext *source_context, 2537c42390453e611367cf1ba11446692ec04e0abfbZack Rusin lldb::clang_type_t clang_type); 2547c42390453e611367cf1ba11446692ec04e0abfbZack Rusin 2557c42390453e611367cf1ba11446692ec04e0abfbZack Rusin static clang::Decl * 2567c42390453e611367cf1ba11446692ec04e0abfbZack Rusin CopyDecl (clang::ASTContext *dest_context, 2577c42390453e611367cf1ba11446692ec04e0abfbZack Rusin clang::ASTContext *source_context, 2587c42390453e611367cf1ba11446692ec04e0abfbZack Rusin clang::Decl *source_decl); 259da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 260da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin static bool 261da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin AreTypesSame(clang::ASTContext *ast, 262da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::clang_type_t type1, 263da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::clang_type_t type2, 264da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin bool ignore_qualifiers = false); 265da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 266da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin bool 267da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin AreTypesSame(lldb::clang_type_t type1, 268da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::clang_type_t type2, 269da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin bool ignore_qualifiers = false) 270da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin { 271da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin return ClangASTContext::AreTypesSame(getASTContext(), type1, type2, ignore_qualifiers); 272da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin } 273da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 274da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 275da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::clang_type_t 276da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GetTypeForDecl (clang::TagDecl *decl); 277da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 278da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::clang_type_t 279da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GetTypeForDecl (clang::ObjCInterfaceDecl *objc_decl); 280da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 281da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin static lldb::BasicType 282da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin GetLLDBBasicTypeEnumeration (lldb::clang_type_t clang_type); 283da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 284da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin //------------------------------------------------------------------ 285da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin // CVR modifiers 286da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin //------------------------------------------------------------------ 287da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 288cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paul static lldb::clang_type_t 289cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paul AddConstModifier (lldb::clang_type_t clang_type); 290da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 291da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin static lldb::clang_type_t 292da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin AddRestrictModifier (lldb::clang_type_t clang_type); 293da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 294da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin static lldb::clang_type_t 295da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin AddVolatileModifier (lldb::clang_type_t clang_type); 296da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 297da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin //------------------------------------------------------------------ 298da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin // Structure, Unions, Classes 299da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin //------------------------------------------------------------------ 300da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 301da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::clang_type_t 302da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin CreateRecordType (clang::DeclContext *decl_ctx, 303da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::AccessType access_type, 304da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin const char *name, 305da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin int kind, 306da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::LanguageType language, 307da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin ClangASTMetadata *metadata = NULL); 308da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin 309da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin static clang::FieldDecl * 310da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin AddFieldToRecordType (clang::ASTContext *ast, 311da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::clang_type_t record_qual_type, 312cfae745a8bcbc108611178b69c645cfe29f28b37Brian Paul const char *name, 313da7bd6a90e1fee5c16327338fd251c0f6be34e36Zack Rusin lldb::clang_type_t field_type, 3147c26b61f9366a397e353d7b7f1f1d1f6d0dcd0c7Keith Whitwell lldb::AccessType access, 3156489a1d5bab75589569658d374257bf23cb67a23Paul Berry uint32_t bitfield_bit_size); 31651e7b058750cc480c296d45f773d7a5a662457f5Brian Paul 3176489a1d5bab75589569658d374257bf23cb67a23Paul Berry clang::FieldDecl * 31827413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell AddFieldToRecordType (lldb::clang_type_t record_qual_type, 3194c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul const char *name, 3204dafbc3dc75be565704f437016f70a63c48d1539Brian Paul lldb::clang_type_t field_type, 32153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul lldb::AccessType access, 32253f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul uint32_t bitfield_bit_size) 32353f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul { 32453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul return ClangASTContext::AddFieldToRecordType (getASTContext(), 32553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul record_qual_type, 32653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul name, 32753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul field_type, 32853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul access, 32953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul bitfield_bit_size); 33053f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul } 33153f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul 332c3626a91cee5034528f3f92c802a8e5947ea5f92Keith Whitwell static void 3339d0b8d72d8d704ff4d8e10448b60cbb42f07eecbBrian Paul BuildIndirectFields (clang::ASTContext *ast, 3349d0b8d72d8d704ff4d8e10448b60cbb42f07eecbBrian Paul lldb::clang_type_t record_qual_type); 3353d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry 3363d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry void 3373d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry BuildIndirectFields (lldb::clang_type_t record_qual_type) 338a90046f1097ad95de2aa95ca65741dff5cddced9Brian { 3394c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul ClangASTContext::BuildIndirectFields(getASTContext(), 34027413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell record_qual_type); 3411a65d098cea54352335460fedf97f705d20f2ab7Brian Paul } 34290ebb581e60d29bd565ad4d8a49e642de7b0ce5dBrian Paul 3436489a1d5bab75589569658d374257bf23cb67a23Paul Berry static clang::CXXMethodDecl * 3446489a1d5bab75589569658d374257bf23cb67a23Paul Berry AddMethodToCXXRecordType (clang::ASTContext *ast, 3456489a1d5bab75589569658d374257bf23cb67a23Paul Berry lldb::clang_type_t record_opaque_type, 3466489a1d5bab75589569658d374257bf23cb67a23Paul Berry const char *name, 3476489a1d5bab75589569658d374257bf23cb67a23Paul Berry lldb::clang_type_t method_type, 3486489a1d5bab75589569658d374257bf23cb67a23Paul Berry lldb::AccessType access, 3496489a1d5bab75589569658d374257bf23cb67a23Paul Berry bool is_virtual, 3506489a1d5bab75589569658d374257bf23cb67a23Paul Berry bool is_static, 3519520f483b8f1e45fa474674b415554988de5d8d3Brian Paul bool is_inline, 3521a65d098cea54352335460fedf97f705d20f2ab7Brian Paul bool is_explicit, 3536489a1d5bab75589569658d374257bf23cb67a23Paul Berry bool is_attr_used, 3543d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry bool is_artificial); 3553d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry 3566489a1d5bab75589569658d374257bf23cb67a23Paul Berry clang::CXXMethodDecl * 3576489a1d5bab75589569658d374257bf23cb67a23Paul Berry AddMethodToCXXRecordType (lldb::clang_type_t record_opaque_type, 3586489a1d5bab75589569658d374257bf23cb67a23Paul Berry const char *name, 3596489a1d5bab75589569658d374257bf23cb67a23Paul Berry lldb::clang_type_t method_type, 3606489a1d5bab75589569658d374257bf23cb67a23Paul Berry lldb::AccessType access, 3616489a1d5bab75589569658d374257bf23cb67a23Paul Berry bool is_virtual, 3621a65d098cea54352335460fedf97f705d20f2ab7Brian Paul bool is_static, 3636489a1d5bab75589569658d374257bf23cb67a23Paul Berry bool is_inline, 3646489a1d5bab75589569658d374257bf23cb67a23Paul Berry bool is_explicit, 3656489a1d5bab75589569658d374257bf23cb67a23Paul Berry bool is_attr_used, 3666489a1d5bab75589569658d374257bf23cb67a23Paul Berry bool is_artificial) 3676489a1d5bab75589569658d374257bf23cb67a23Paul Berry 3686489a1d5bab75589569658d374257bf23cb67a23Paul Berry { 3696489a1d5bab75589569658d374257bf23cb67a23Paul Berry return ClangASTContext::AddMethodToCXXRecordType (getASTContext(), 3706489a1d5bab75589569658d374257bf23cb67a23Paul Berry record_opaque_type, 3719520f483b8f1e45fa474674b415554988de5d8d3Brian Paul name, 3721a65d098cea54352335460fedf97f705d20f2ab7Brian Paul method_type, 3736489a1d5bab75589569658d374257bf23cb67a23Paul Berry access, 3746489a1d5bab75589569658d374257bf23cb67a23Paul Berry is_virtual, 3756489a1d5bab75589569658d374257bf23cb67a23Paul Berry is_static, 3763d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry is_inline, 3773d7c5a4f6f4155e249f6eac76d861eb1bc59eb69Paul Berry is_explicit, 3786489a1d5bab75589569658d374257bf23cb67a23Paul Berry is_attr_used, 3796489a1d5bab75589569658d374257bf23cb67a23Paul Berry is_artificial); 3806489a1d5bab75589569658d374257bf23cb67a23Paul Berry } 3816489a1d5bab75589569658d374257bf23cb67a23Paul Berry 3821a65d098cea54352335460fedf97f705d20f2ab7Brian Paul class TemplateParameterInfos 3836489a1d5bab75589569658d374257bf23cb67a23Paul Berry { 38490ebb581e60d29bd565ad4d8a49e642de7b0ce5dBrian Paul public: 38553f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul bool 38653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul IsValid() const 38727413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell { 38827413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell if (args.empty()) 38927413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell return false; 39027413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell return args.size() == names.size(); 3919d0b8d72d8d704ff4d8e10448b60cbb42f07eecbBrian Paul } 3929d0b8d72d8d704ff4d8e10448b60cbb42f07eecbBrian Paul 39327413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell size_t 39427413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell GetSize () const 39527413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell { 39627413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell if (IsValid()) 39727413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell return args.size(); 39827413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell return 0; 39927413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell } 40027413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell 40107373512c72ca0fc19cccd1d102f14f1a41fd1bdBrian llvm::SmallVector<const char *, 8> names; 40207373512c72ca0fc19cccd1d102f14f1a41fd1bdBrian llvm::SmallVector<clang::TemplateArgument, 8> args; 40307373512c72ca0fc19cccd1d102f14f1a41fd1bdBrian }; 40407373512c72ca0fc19cccd1d102f14f1a41fd1bdBrian 40527413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell clang::FunctionTemplateDecl * 40627413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell CreateFunctionTemplateDecl (clang::DeclContext *decl_ctx, 40727413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell clang::FunctionDecl *func_decl, 40827413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell const char *name, 40927413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell const TemplateParameterInfos &infos); 41027413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell 41127413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell void 41227413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell CreateFunctionTemplateSpecializationInfo (clang::FunctionDecl *func_decl, 41327413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell clang::FunctionTemplateDecl *Template, 41453f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul const TemplateParameterInfos &infos); 41527413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell 41627413ed249d5614de3057eda3401a6cc9ca5b324Keith Whitwell clang::ClassTemplateDecl * 41790ebb581e60d29bd565ad4d8a49e642de7b0ce5dBrian Paul CreateClassTemplateDecl (clang::DeclContext *decl_ctx, 41890ebb581e60d29bd565ad4d8a49e642de7b0ce5dBrian Paul lldb::AccessType access_type, 419c3626a91cee5034528f3f92c802a8e5947ea5f92Keith Whitwell const char *class_name, 4204c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul int kind, 421a90046f1097ad95de2aa95ca65741dff5cddced9Brian const TemplateParameterInfos &infos); 4228d475822e6e19fa79719c856a2db5b6a205db1b9Brian Paul 423bec341d00c5fbc9c5f1c19c1b6729de636ffbfcbDave Airlie clang::ClassTemplateSpecializationDecl * 424e4da46e007de5c83202976a12efb0e894494a354Eric Anholt CreateClassTemplateSpecializationDecl (clang::DeclContext *decl_ctx, 425e4da46e007de5c83202976a12efb0e894494a354Eric Anholt clang::ClassTemplateDecl *class_template_decl, 426e4da46e007de5c83202976a12efb0e894494a354Eric Anholt int kind, 427bec341d00c5fbc9c5f1c19c1b6729de636ffbfcbDave Airlie const TemplateParameterInfos &infos); 428e4da46e007de5c83202976a12efb0e894494a354Eric Anholt 429e4da46e007de5c83202976a12efb0e894494a354Eric Anholt lldb::clang_type_t 430e4da46e007de5c83202976a12efb0e894494a354Eric Anholt CreateClassTemplateSpecializationType (clang::ClassTemplateSpecializationDecl *class_template_specialization_decl); 431e4da46e007de5c83202976a12efb0e894494a354Eric Anholt 432e4da46e007de5c83202976a12efb0e894494a354Eric Anholt static clang::DeclContext * 433bec341d00c5fbc9c5f1c19c1b6729de636ffbfcbDave Airlie GetAsDeclContext (clang::CXXMethodDecl *cxx_method_decl); 4341c09bcfdda4083636a3ac27d804a34ef87875ce7Brian 4354c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul static clang::DeclContext * 436c3626a91cee5034528f3f92c802a8e5947ea5f92Keith Whitwell GetAsDeclContext (clang::ObjCMethodDecl *objc_method_decl); 437c3626a91cee5034528f3f92c802a8e5947ea5f92Keith Whitwell 438894844a8d956a0ee5f95836331dc318f49fdb845Brian Paul 439e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul static bool 440e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul CheckOverloadedOperatorKindParameterCount (uint32_t op_kind, 4414c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul uint32_t num_params); 4424c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul 4434c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul bool 4444c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul FieldIsBitfield (clang::FieldDecl* field, 4454c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul uint32_t& bitfield_bit_size); 4464c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul 4474c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul static bool 4484c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul FieldIsBitfield (clang::ASTContext *ast, 4494c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul clang::FieldDecl* field, 4504c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul uint32_t& bitfield_bit_size); 451555f0a88182e2b1af809b2d97abdac02814a2f28Brian Paul 452555f0a88182e2b1af809b2d97abdac02814a2f28Brian Paul static bool 4534c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul RecordHasFields (const clang::RecordDecl *record_decl); 4544c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul 4554c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul void 4564c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul SetDefaultAccessForRecordFields (lldb::clang_type_t clang_type, 4574c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul int default_accessibility, 4584c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul int *assigned_accessibilities, 4594c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul size_t num_assigned_accessibilities); 4604c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul 4614c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul lldb::clang_type_t 4624c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul CreateObjCClass (const char *name, 4634c4268dd31ce119d5d3db090adf0935bf3c27831Brian Paul clang::DeclContext *decl_ctx, 464e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul bool isForwardDecl, 465e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul bool isInternal, 466e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul ClangASTMetadata *metadata = NULL); 467e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 468e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul static clang::FieldDecl * 469e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul AddObjCClassIVar (clang::ASTContext *ast, 470e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul lldb::clang_type_t class_opaque_type, 471e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul const char *name, 472e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul lldb::clang_type_t ivar_opaque_type, 473e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul lldb::AccessType access, 474e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul uint32_t bitfield_bit_size, 475e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul bool isSynthesized); 476e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul 477e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul clang::FieldDecl * 478e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul AddObjCClassIVar (lldb::clang_type_t class_opaque_type, 479e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul const char *name, 480e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul lldb::clang_type_t ivar_opaque_type, 481e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul lldb::AccessType access, 482e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul uint32_t bitfield_bit_size, 483e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul bool isSynthesized) 484e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul { 485e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul return ClangASTContext::AddObjCClassIVar (getASTContext(), 486e4b2356c07d31fbeeabb13b2fb47db703b473080Brian Paul class_opaque_type, 487894844a8d956a0ee5f95836331dc318f49fdb845Brian Paul name, 488ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul ivar_opaque_type, 489ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul access, 490ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul bitfield_bit_size, 491ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul isSynthesized); 492ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul } 493ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul 494ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul static bool 495ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul AddObjCClassProperty 496ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul ( 497ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul clang::ASTContext *ast, 498ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul lldb::clang_type_t class_opaque_type, 499ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul const char *property_name, 500ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul lldb::clang_type_t property_opaque_type, // The property type is only required if you don't have an ivar decl 501ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul clang::ObjCIvarDecl *ivar_decl, 502ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul const char *property_setter_name, 503ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul const char *property_getter_name, 504ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul uint32_t property_attributes, 505ea4fe661d7f3a95d9db17e1475076f1badf8e1a6Brian Paul ClangASTMetadata *metadata = NULL 5064c8fadc6d996c8c433826c4c763104b7d69cf7e5Brian Paul ); 5070fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5080fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul bool 5090fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul AddObjCClassProperty 5100fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul ( 5110fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul lldb::clang_type_t class_opaque_type, 5120fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul const char *property_name, 5130fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul lldb::clang_type_t property_opaque_type, 5140fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul clang::ObjCIvarDecl *ivar_decl, 5150fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul const char *property_setter_name, 5160fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul const char *property_getter_name, 5170fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul uint32_t property_attributes, 5180fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul ClangASTMetadata *metadata = NULL 5190fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul ) 5200fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul { 5210fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul return ClangASTContext::AddObjCClassProperty (getASTContext(), 5220fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul class_opaque_type, 5230fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul property_name, 5240fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul property_opaque_type, 5250fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul ivar_decl, 5260fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul property_setter_name, 5270fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul property_getter_name, 5280fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul property_attributes, 5290fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul metadata); 5300fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul } 5310fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5320fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul bool 5330fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul SetObjCSuperClass (lldb::clang_type_t class_clang_type, 5340fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul lldb::clang_type_t superclass_clang_type); 5350fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5360fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul static bool 5370fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul ObjCTypeHasIVars (lldb::clang_type_t class_clang_type, bool check_superclass); 5380fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5390fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul static bool 5400fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul ObjCDeclHasIVars (clang::ObjCInterfaceDecl *class_interface_decl, 5410fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul bool check_superclass); 5420fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5430fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5440fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul static clang::ObjCMethodDecl * 5450fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul AddMethodToObjCObjectType (clang::ASTContext *ast, 5460fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul lldb::clang_type_t class_opaque_type, 5470fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul const char *name, // the full symbol name as seen in the symbol table ("-[NString stringWithCString:]") 5480fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul lldb::clang_type_t method_opaque_type, 5490fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul lldb::AccessType access); 5500fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5510fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul clang::ObjCMethodDecl * 5520fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul AddMethodToObjCObjectType (lldb::clang_type_t class_opaque_type, 5530fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul const char *name, // the full symbol name as seen in the symbol table ("-[NString stringWithCString:]") 5540fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul lldb::clang_type_t method_opaque_type, 5550fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul lldb::AccessType access) 5560fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul { 5570fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul return AddMethodToObjCObjectType (getASTContext(), 5580fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul class_opaque_type, 5590fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul name, 5600fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul method_opaque_type, 5610fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul access); 5620fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul } 5630fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul 5640fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul static bool 565a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie SetHasExternalStorage (lldb::clang_type_t clang_type, bool has_extern); 566a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie 567a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie //------------------------------------------------------------------ 5680fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul // Aggregate Types 5690fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul //------------------------------------------------------------------ 5700fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul static bool 5710fefafb2e46fa7ead35ef05fda10368af0970c88Brian Paul IsAggregateType (lldb::clang_type_t clang_type); 5726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 5735e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen // Returns a mask containing bits from the ClangASTContext::eTypeXXX enumerations 5746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static uint32_t 575ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetTypeInfo (lldb::clang_type_t clang_type, 576ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell clang::ASTContext *ast, // The AST for clang_type (can be NULL) 577ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t *pointee_or_element_type); // (can be NULL) 578ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 579ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell static uint32_t 580ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetNumChildren (clang::ASTContext *ast, 581ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t clang_type, 582ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell bool omit_empty_base_classes); 583ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 584ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell static uint32_t 585ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetNumDirectBaseClasses (clang::ASTContext *ast, 586ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t clang_type); 587ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 588ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell static uint32_t 589ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetNumVirtualBaseClasses (clang::ASTContext *ast, 590ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t clang_type); 591ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 592ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell static uint32_t 593ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetNumFields (clang::ASTContext *ast, 594ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t clang_type); 595ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 596ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell static lldb::clang_type_t 597ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetDirectBaseClassAtIndex (clang::ASTContext *ast, 598ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t clang_type, 599ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell uint32_t idx, 600ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell uint32_t *bit_offset_ptr); 601ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 602ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell static lldb::clang_type_t 603ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetVirtualBaseClassAtIndex (clang::ASTContext *ast, 604ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t clang_type, 605ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell uint32_t idx, 606ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell uint32_t *bit_offset_ptr); 607ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 608ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell static lldb::clang_type_t 609ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetFieldAtIndex (clang::ASTContext *ast, 610ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t clang_type, 611ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell uint32_t idx, 612ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell std::string& name, 613ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell uint64_t *bit_offset_ptr, 614ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell uint32_t *bitfield_bit_size_ptr, 615ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell bool *is_bitfield_ptr); 616ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 617ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell static uint32_t 618ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetNumPointeeChildren (lldb::clang_type_t clang_type); 619ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell 620ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t 621ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell GetChildClangTypeAtIndex (ExecutionContext *exe_ctx, 622ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell const char *parent_name, 623ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell lldb::clang_type_t parent_clang_type, 624ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell uint32_t idx, 625ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell bool transparent_pointers, 626ff56908e09c0351179478deb19677cf56eec1f64Keith Whitwell bool omit_empty_base_classes, 6275e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen bool ignore_array_bounds, 6285e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen std::string& child_name, 6296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell uint32_t &child_byte_size, 6305e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen int32_t &child_byte_offset, 6315e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen uint32_t &child_bitfield_bit_size, 6326dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell uint32_t &child_bitfield_bit_offset, 633b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul bool &child_is_base_class, 634b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul bool &child_is_deref_of_parent); 635b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul 636b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul static lldb::clang_type_t 637b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul GetChildClangTypeAtIndex (ExecutionContext *exe_ctx, 638b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul clang::ASTContext *ast, 639b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul const char *parent_name, 640b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul lldb::clang_type_t parent_clang_type, 641b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul uint32_t idx, 642b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul bool transparent_pointers, 643b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul bool omit_empty_base_classes, 644b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul bool ignore_array_bounds, 645b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul std::string& child_name, 646b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul uint32_t &child_byte_size, 647b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul int32_t &child_byte_offset, 648b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul uint32_t &child_bitfield_bit_size, 649b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul uint32_t &child_bitfield_bit_offset, 650b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul bool &child_is_base_class, 651b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul bool &child_is_deref_of_parent); 652b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul 6534dafbc3dc75be565704f437016f70a63c48d1539Brian Paul // Lookup a child given a name. This function will match base class names 6546dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // and member member names in "clang_type" only, not descendants. 6554dafbc3dc75be565704f437016f70a63c48d1539Brian Paul static uint32_t 6564dafbc3dc75be565704f437016f70a63c48d1539Brian Paul GetIndexOfChildWithName (clang::ASTContext *ast, 6576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t clang_type, 6585e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen const char *name, 6595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen bool omit_empty_base_classes); 6606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 6616dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // Lookup a child member given a name. This function will match member names 6626dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // only and will descend into "clang_type" children in search for the first 6636dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // member in this class, or any base class that matches "name". 6647391ba1e9d81f15465059db25d1279eefdbeb1a9Brian Paul // TODO: Return all matches for a given name by returning a vector<vector<uint32_t>> 6655e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen // so we catch all names that match a given child name, not just the first. 666180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen static size_t 6676dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GetIndexOfChildMemberWithName (clang::ASTContext *ast, 6685e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen lldb::clang_type_t clang_type, 6695e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen const char *name, 6705e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen bool omit_empty_base_classes, 6716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell std::vector<uint32_t>& child_indexes); 6725e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell size_t 6746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GetNumTemplateArguments (lldb::clang_type_t clang_type) 6756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell { 6766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell return GetNumTemplateArguments(getASTContext(), clang_type); 677b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul } 6785e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t 6806dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GetTemplateArgument (lldb::clang_type_t clang_type, 6816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell size_t idx, 6827391ba1e9d81f15465059db25d1279eefdbeb1a9Brian Paul lldb::TemplateArgumentKind &kind) 683ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes { 6845e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen return GetTemplateArgument(getASTContext(), clang_type, idx, kind); 6856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell } 6866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 6876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static size_t 6886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GetNumTemplateArguments (clang::ASTContext *ast, 6895e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen lldb::clang_type_t clang_type); 6905e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 6915e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen static lldb::clang_type_t 6926dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GetTemplateArgument (clang::ASTContext *ast, 6934dafbc3dc75be565704f437016f70a63c48d1539Brian Paul lldb::clang_type_t clang_type, 6946dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell size_t idx, 6954dafbc3dc75be565704f437016f70a63c48d1539Brian Paul lldb::TemplateArgumentKind &kind); 6964dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 6976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 6986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // clang::TagType 6996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 7006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell bool 7025e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen SetTagTypeKind (lldb::clang_type_t tag_qual_type, 7035e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen int kind); 7045e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 7056dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 7064dafbc3dc75be565704f437016f70a63c48d1539Brian Paul // C++ Base Classes 7075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen //------------------------------------------------------------------ 7084dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 7094dafbc3dc75be565704f437016f70a63c48d1539Brian Paul clang::CXXBaseSpecifier * 7106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell CreateBaseClassSpecifier (lldb::clang_type_t base_class_type, 7115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen lldb::AccessType access, 7125e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen bool is_virtual, 7134d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul bool base_of_class); 7144d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul 7154d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul static void 7164d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul DeleteBaseClassSpecifiers (clang::CXXBaseSpecifier **base_classes, 7174d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul unsigned num_base_classes); 7184d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul 7194d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul bool 720093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie SetBaseClassesForClassType (lldb::clang_type_t class_clang_type, 721093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie clang::CXXBaseSpecifier const * const *base_classes, 722093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie unsigned num_base_classes); 723093dc9e548537e6c77e33064a584f849ad90dfa5Dave Airlie 7245e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen //------------------------------------------------------------------ 7254d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul // DeclContext Functions 7266dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 7274dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 7286dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static clang::DeclContext * 7294dafbc3dc75be565704f437016f70a63c48d1539Brian Paul GetDeclContextForType (lldb::clang_type_t qual_type); 7304dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 7314d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul //------------------------------------------------------------------ 7324d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul // Namespace Declarations 7334d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul //------------------------------------------------------------------ 7344d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul 7356dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell clang::NamespaceDecl * 73653f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul GetUniqueNamespaceDeclaration (const char *name, 7376dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell clang::DeclContext *decl_ctx); 7386dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 7406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // Function Types 7416dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 7426dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell clang::FunctionDecl * 744e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák CreateFunctionDeclaration (clang::DeclContext *decl_ctx, 7456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell const char *name, 7466dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t function_Type, 7476dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell int storage, 7486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell bool is_inline); 7496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7506dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static lldb::clang_type_t 7516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell CreateFunctionType (clang::ASTContext *ast, 7523728673bd1b974e54858fbab6ff62d3607b0d3f0Brian Paul lldb::clang_type_t result_type, 753e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák lldb::clang_type_t *args, 7544d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul unsigned num_args, 7554d21ecde7702852f30a4f3b90af0e9811b230c63Brian Paul bool is_variadic, 756e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák unsigned type_quals); 757e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák 758e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák lldb::clang_type_t 7596dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell CreateFunctionType (lldb::clang_type_t result_type, 760e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák lldb::clang_type_t *args, 76174713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul unsigned num_args, 76274713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul bool is_variadic, 76374713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul unsigned type_quals) 76474713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul { 76574713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul return ClangASTContext::CreateFunctionType(getASTContext(), 76674713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul result_type, 76774713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul args, 76874713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul num_args, 769175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt is_variadic, 770175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt type_quals); 771175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt } 772175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt 773175ad8050e3337f7065306017ea4eb8eae599f6dEric Anholt clang::ParmVarDecl * 77474713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul CreateParameterDeclaration (const char *name, 77574713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul lldb::clang_type_t param_type, 77674713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul int storage); 77774713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul 77874713e2d293f9e796a4053a5a99ee5cb7df5c740Brian Paul void 7796dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell SetFunctionParameters (clang::FunctionDecl *function_decl, 7806dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell clang::ParmVarDecl **params, 7816dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell unsigned num_params); 7826dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7836dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 7846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // Array Types 7856dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 7866dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 7876dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t 7886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell CreateArrayType (lldb::clang_type_t element_type, 7896dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell size_t element_count, 7906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell uint32_t bit_stride); 791ba3da6154c324cc916845bc5de3de077d0b59ffcBrian Paul 792ba3da6154c324cc916845bc5de3de077d0b59ffcBrian Paul //------------------------------------------------------------------ 793e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák // Tag Declarations 794ba3da6154c324cc916845bc5de3de077d0b59ffcBrian Paul //------------------------------------------------------------------ 795e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák bool 796a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie StartTagDeclarationDefinition (lldb::clang_type_t qual_type); 797a637280e42b9a2f4ccbb5e7b209c5645073f584eDave Airlie 7985e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen bool 7995e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen CompleteTagDeclarationDefinition (lldb::clang_type_t qual_type); 8005e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 8024dafbc3dc75be565704f437016f70a63c48d1539Brian Paul // Enumeration Types 8036dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 8044dafbc3dc75be565704f437016f70a63c48d1539Brian Paul lldb::clang_type_t 8054dafbc3dc75be565704f437016f70a63c48d1539Brian Paul CreateEnumerationType (const char *name, 8066dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell clang::DeclContext *decl_ctx, 807095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul const Declaration &decl, 808095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul lldb::clang_type_t integer_qual_type); 809fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell 810fd2756006a0baf63f60548d8f509de5b9a143608Keith Whitwell static lldb::clang_type_t 8115e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GetEnumerationIntegerType (lldb::clang_type_t enum_clang_type); 812095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul 813ba8f6172bdfb44594537a304225b54152584d701Gareth Hughes bool 8146dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell AddEnumerationValueToEnumerationType (lldb::clang_type_t enum_qual_type, 815095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul lldb::clang_type_t enumerator_qual_type, 816095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul const Declaration &decl, 8175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen const char *name, 8186dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell int64_t enum_value, 819095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul uint32_t enum_value_bit_size); 820095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul 821095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul //------------------------------------------------------------------ 822095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul // Pointers & References 823ea81daf9544205b892926bdbbcdfdfc63fd7d872Brian Paul //------------------------------------------------------------------ 824095c6699f449ed4803f23e844cc0227743a9c3e1Brian Paul lldb::clang_type_t 8256dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell CreatePointerType (lldb::clang_type_t clang_type); 8265e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8275e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen static lldb::clang_type_t 8285e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen CreatePointerType (clang::ASTContext *ast, 8296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t clang_type); 8304dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 8316dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static lldb::clang_type_t 8324dafbc3dc75be565704f437016f70a63c48d1539Brian Paul CreateLValueReferenceType (clang::ASTContext *ast_context, 8334dafbc3dc75be565704f437016f70a63c48d1539Brian Paul lldb::clang_type_t clang_type); 8346dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 835bcb3957b6c22caf35d9b300440648c3e656e8b4cKeith Whitwell static lldb::clang_type_t 8366dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell CreateRValueReferenceType (clang::ASTContext *ast_context, 8376dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t clang_type); 8386dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 8396dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t 8405e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen CreateLValueReferenceType (lldb::clang_type_t clang_type) 8415e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen { 8425e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen return ClangASTContext::CreateLValueReferenceType(getASTContext(), clang_type); 8436dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell } 8444dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 8456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t 8464dafbc3dc75be565704f437016f70a63c48d1539Brian Paul CreateRValueReferenceType (lldb::clang_type_t clang_type) 8474dafbc3dc75be565704f437016f70a63c48d1539Brian Paul { 8486dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell return ClangASTContext::CreateRValueReferenceType(getASTContext(), clang_type); 8496dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell } 8506dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 8516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t 8525e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen CreateMemberPointerType (lldb::clang_type_t clang_pointee_type, 8535e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen lldb::clang_type_t clang_class_type); 8545e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8555e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen uint32_t 8565e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GetPointerBitSize (); 8575e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8585e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen static bool 8595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen IsIntegerType (lldb::clang_type_t clang_type, bool &is_signed); 8605e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 861bc42c19f22c3b719712529d86faea818f34150a2Brian Paul static bool 8625e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen IsPointerType (lldb::clang_type_t clang_type, lldb::clang_type_t *target_type = NULL); 8635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8645e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen static bool 8655e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen IsReferenceType (lldb::clang_type_t clang_type, lldb::clang_type_t *target_type = NULL); 8665e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8675e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen static bool 8685e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen IsPointerOrReferenceType (lldb::clang_type_t clang_type, lldb::clang_type_t *target_type = NULL); 8695e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8705e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen static bool 871bc42c19f22c3b719712529d86faea818f34150a2Brian Paul IsPossibleCPlusPlusDynamicType (clang::ASTContext *ast, 8725e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen lldb::clang_type_t clang_type, 8736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t *target_type = NULL); 8746dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 8756dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static bool 8766dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell IsPossibleDynamicType (clang::ASTContext *ast, 8776dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t clang_type, 8786dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t *dynamic_pointee_type, // Can pass NULL 8795e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen bool check_cplusplus, 8805e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen bool check_objc); 8815e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8825e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen static bool 8835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen IsCStringType (lldb::clang_type_t clang_type, uint32_t &length); 8846dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 8855e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen static bool 8865e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen IsFunctionPointerType (lldb::clang_type_t clang_type); 8875e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 8886dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static lldb::clang_type_t 8894dafbc3dc75be565704f437016f70a63c48d1539Brian Paul GetAsArrayType (lldb::clang_type_t clang_type, 8906dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t *member_type = NULL, 8914dafbc3dc75be565704f437016f70a63c48d1539Brian Paul uint64_t *size = NULL); 8924dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 8936dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static bool 894e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák IsArrayType (lldb::clang_type_t clang_type, 8956dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell lldb::clang_type_t *member_type = NULL, 8966dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell uint64_t *size = NULL) 8976dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell { 8986dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell return GetAsArrayType(clang_type, member_type, size) != 0; 8996dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell } 9006dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 9015e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen //------------------------------------------------------------------ 902180b0dab8b87ef7987b9f2c44068d1eea3f54939Jouk Jansen // Typedefs 903071357096e682e9af59ad45ea5abc444ab431837Michal Krol //------------------------------------------------------------------ 904740467dd62962b4effdaf51e38edc032e2a39487Nicholas Miell lldb::clang_type_t 9055e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen CreateTypedefType (const char *name, 9065e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen lldb::clang_type_t clang_type, 9075e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen clang::DeclContext *decl_ctx); 9086dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 9094dafbc3dc75be565704f437016f70a63c48d1539Brian Paul //------------------------------------------------------------------ 9106dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // Type names 9116dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 9126dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static bool 9134dafbc3dc75be565704f437016f70a63c48d1539Brian Paul IsFloatingPointType (lldb::clang_type_t clang_type, uint32_t &count, bool &is_complex); 9144dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 9155e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen // true iff this is one of the types that can "fit" 9165e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen // in a Scalar object 9175e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen static bool 9185e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen IsScalarType (lldb::clang_type_t clang_type); 9195e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 9206dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static bool 9216dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell IsPointerToScalarType (lldb::clang_type_t clang_type); 922efb41b07ff213735e8ea08f38a7799f9d80459fcBrian Paul 9232a37053fd5591eeb21db33aa8f6ee444da1eee7aMichal Krol static bool 9245e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen IsArrayOfScalarType (lldb::clang_type_t clang_type); 9255e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 92686b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul static bool 9276dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GetCXXClassName (lldb::clang_type_t clang_type, 9284dafbc3dc75be565704f437016f70a63c48d1539Brian Paul std::string &class_name); 9296dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 9304dafbc3dc75be565704f437016f70a63c48d1539Brian Paul static bool 9314dafbc3dc75be565704f437016f70a63c48d1539Brian Paul IsCXXClassType (lldb::clang_type_t clang_type); 9324dafbc3dc75be565704f437016f70a63c48d1539Brian Paul 9336dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static bool 934cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell IsBeingDefined (lldb::clang_type_t clang_type); 9356dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 936b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul static bool 937b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul IsObjCClassType (lldb::clang_type_t clang_type); 938cab974cf6c2dbfbf5dd5d291e1aae0f8eeb34290Keith Whitwell 939b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul static bool 9406dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell IsObjCObjectPointerType (lldb::clang_type_t clang_type, lldb::clang_type_t *target_type); 9416dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 9426dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static bool 94389966cdb1b5974059c32308d74b5bb09943a6fa1Brian Paul GetObjCClassName (lldb::clang_type_t clang_type, 9446dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell std::string &class_name); 9456dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 9464cb3579e52fed48d623698610e31d05ac8c8946fBrian Paul static bool 9475e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen IsCharType (lldb::clang_type_t clang_type); 948b114ff3783c1aff636c4293eccfc9e04b802d3bfBrian Paul 949e5c6a92a12b5cd7db205d72039f58d302b0be9d5Marek Olšák static size_t 9505e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen GetArraySize (lldb::clang_type_t clang_type); 9516dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 9525e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen //static bool 9536dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //ConvertFloatValueToString (clang::ASTContext *ast, 9544dafbc3dc75be565704f437016f70a63c48d1539Brian Paul // lldb::clang_type_t clang_type, 9556dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // const uint8_t* bytes, 9566dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // size_t byte_size, 9576dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // int apint_byte_order, 9586dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell // std::string &float_str); 9595e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen 9606dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static size_t 9615e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen ConvertStringToFloatValue (clang::ASTContext *ast, 9625e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen lldb::clang_type_t clang_type, 9635e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen const char *s, 9646dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell uint8_t *dst, 9654dafbc3dc75be565704f437016f70a63c48d1539Brian Paul size_t dst_size); 9666dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 9674dafbc3dc75be565704f437016f70a63c48d1539Brian Paul //------------------------------------------------------------------ 9684dafbc3dc75be565704f437016f70a63c48d1539Brian Paul // Qualifiers 9696dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 9706dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell static unsigned 9716dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell GetTypeQualifiers(lldb::clang_type_t clang_type); 9726dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwellprotected: 9736dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell //------------------------------------------------------------------ 9745e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen // Classes that inherit from ClangASTContext can see and modify these 9755e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen //------------------------------------------------------------------ 9765e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen std::string m_target_triple; 97753f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul std::auto_ptr<clang::ASTContext> m_ast_ap; 9784dafbc3dc75be565704f437016f70a63c48d1539Brian Paul std::auto_ptr<clang::LangOptions> m_language_options_ap; 97953f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul std::auto_ptr<clang::FileManager> m_file_manager_ap; 9804dafbc3dc75be565704f437016f70a63c48d1539Brian Paul std::auto_ptr<clang::FileSystemOptions> m_file_system_options_ap; 9814dafbc3dc75be565704f437016f70a63c48d1539Brian Paul std::auto_ptr<clang::SourceManager> m_source_manager_ap; 9825e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen std::auto_ptr<clang::DiagnosticsEngine> m_diagnostics_engine_ap; 9835e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen std::auto_ptr<clang::DiagnosticConsumer> m_diagnostic_consumer_ap; 9845e3bc0c2a2bcdf59949410f94c9b705fc1281ce8Jouk Jansen llvm::IntrusiveRefCntPtr<clang::TargetOptions> m_target_options_rp; 98586b842790b720cd6b1499ce8edca8a4e9c8dc029Brian Paul std::auto_ptr<clang::TargetInfo> m_target_info_ap; 9864dafbc3dc75be565704f437016f70a63c48d1539Brian Paul std::auto_ptr<clang::IdentifierTable> m_identifier_table_ap; 9874dafbc3dc75be565704f437016f70a63c48d1539Brian Paul std::auto_ptr<clang::SelectorTable> m_selector_table_ap; 98853f82c5aadbb15585754bfacf3237093eccdb2ceBrian Paul std::auto_ptr<clang::Builtin::Context> m_builtins_ap; 9894dafbc3dc75be565704f437016f70a63c48d1539Brian Paul CompleteTagDeclCallback m_callback_tag_decl; 9904dafbc3dc75be565704f437016f70a63c48d1539Brian Paul CompleteObjCInterfaceDeclCallback m_callback_objc_decl; 991736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul void * m_callback_baton; 9925ef4e4ffb8053db87f52df3c9b2ddb71d9c7d6e5Roland Scheideggerprivate: 993736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul //------------------------------------------------------------------ 994736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul // For ClangASTContext only 995736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul //------------------------------------------------------------------ 996736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul ClangASTContext(const ClangASTContext&); 997736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul const ClangASTContext& operator=(const ClangASTContext&); 998736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul}; 999736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul 1000736fcbec4732830e7976fb5eb309b13e03be132cBrian Paul} // namespace lldb_private 10016dc85575000127630489b407c50a4b3ea87c9acbKeith Whitwell 1002b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian#endif // liblldb_ClangASTContext_h_ 1003b6adf336f41d2f0ed0ea33eaf53faee9635a2405Brian