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 1481a96aa6242f7b559770f5dc62316253cb8cb0d4Greg Clayton#include <stdint.h> 1581a96aa6242f7b559770f5dc62316253cb8cb0d4Greg Clayton 1624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// C++ Includes 1724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <string> 1824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include <vector> 1924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Other libraries and framework includes 21b01000fd063629facd45044f137446fb748ee179Greg Clayton#include "llvm/ADT/OwningPtr.h" 22f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton#include "llvm/ADT/SmallVector.h" 23f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton#include "clang/AST/TemplateBase.h" 24b01000fd063629facd45044f137446fb748ee179Greg Clayton 252546fd2a7adb2081e77ce6779e25646c0e3498a9Jim Ingham 2624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner// Project includes 2724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/lldb-enumerations.h" 2824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#include "lldb/Core/ClangForward.h" 291674b12bbc3dae7b9543b8c5f958e90ddc767fa4Greg Clayton#include "lldb/Symbol/ClangASTType.h" 3024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnernamespace lldb_private { 3224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass Declaration; 3424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 3524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerclass ClangASTContext 3624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner{ 3724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerpublic: 38b01000fd063629facd45044f137446fb748ee179Greg Clayton typedef void (*CompleteTagDeclCallback)(void *baton, clang::TagDecl *); 39b01000fd063629facd45044f137446fb748ee179Greg Clayton typedef void (*CompleteObjCInterfaceDeclCallback)(void *baton, clang::ObjCInterfaceDecl *); 40f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 4124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 4224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Constructors and Destructors 4324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 44b01000fd063629facd45044f137446fb748ee179Greg Clayton ClangASTContext (const char *triple = NULL); 4524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ~ClangASTContext(); 4724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 4824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::ASTContext * 4924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner getASTContext(); 5024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::Builtin::Context * 5224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner getBuiltinContext(); 5324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::IdentifierTable * 5524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner getIdentifierTable(); 5624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 5724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::LangOptions * 5824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner getLanguageOptions(); 5924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 6024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::SelectorTable * 6124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner getSelectorTable(); 6224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 638a3b0a85dd512824f528cfa55d93f530ebe38be8Sean Callanan clang::FileManager * 648a3b0a85dd512824f528cfa55d93f530ebe38be8Sean Callanan getFileManager(); 658a3b0a85dd512824f528cfa55d93f530ebe38be8Sean Callanan 6624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::SourceManager * 6724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner getSourceManager(); 6824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 69c1535187de67e4ce48053a7677c76825adcdda44Sean Callanan clang::DiagnosticsEngine * 70c1535187de67e4ce48053a7677c76825adcdda44Sean Callanan getDiagnosticsEngine(); 71887d25180c9ebe10513654baa96bfb31f7f1f260Sean Callanan 72c1535187de67e4ce48053a7677c76825adcdda44Sean Callanan clang::DiagnosticConsumer * 73c1535187de67e4ce48053a7677c76825adcdda44Sean Callanan getDiagnosticConsumer(); 7424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::TargetOptions * 7624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner getTargetOptions(); 7724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 7824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::TargetInfo * 7924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner getTargetInfo(); 8024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 8224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner Clear(); 8324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const char * 8524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetTargetTriple (); 8624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 8724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 8824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner SetTargetTriple (const char *target_triple); 8924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 90395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton void 91395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton SetArchitecture (const ArchSpec &arch); 92395fc33dc4b06c048ed35047ec461bc092ef2df3Greg Clayton 93b01000fd063629facd45044f137446fb748ee179Greg Clayton bool 94b01000fd063629facd45044f137446fb748ee179Greg Clayton HasExternalSource (); 95b01000fd063629facd45044f137446fb748ee179Greg Clayton 96b01000fd063629facd45044f137446fb748ee179Greg Clayton void 97b01000fd063629facd45044f137446fb748ee179Greg Clayton SetExternalSource (llvm::OwningPtr<clang::ExternalASTSource> &ast_source_ap); 98b01000fd063629facd45044f137446fb748ee179Greg Clayton 99b01000fd063629facd45044f137446fb748ee179Greg Clayton void 100b01000fd063629facd45044f137446fb748ee179Greg Clayton RemoveExternalSource (); 101d44c9d31d23d0b44ce40325ad69226889a9638bcEnrico Granata 102d44c9d31d23d0b44ce40325ad69226889a9638bcEnrico Granata bool 103e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton GetCompleteDecl (clang::Decl *decl) 104e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton { 105e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton return ClangASTContext::GetCompleteDecl(getASTContext(), decl); 106e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton } 107e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 108e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton static bool 109e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton GetCompleteDecl (clang::ASTContext *ast, 110e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton clang::Decl *decl); 111fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan 112017c16aa483e6edabdbbee1bdcd1ce3f8e8a12d1Greg Clayton void SetMetadataAsUserID (const void *object, 113a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999Jim Ingham lldb::user_id_t user_id); 114a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999Jim Ingham 115017c16aa483e6edabdbbee1bdcd1ce3f8e8a12d1Greg Clayton void SetMetadata (const void *object, 116a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999Jim Ingham ClangASTMetadata &meta_data) 117fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan { 118a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999Jim Ingham SetMetadata(getASTContext(), object, meta_data); 119fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan } 120fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan 121fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan static void 122fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan SetMetadata (clang::ASTContext *ast, 123017c16aa483e6edabdbbee1bdcd1ce3f8e8a12d1Greg Clayton const void *object, 124a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999Jim Ingham ClangASTMetadata &meta_data); 125fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan 126a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999Jim Ingham ClangASTMetadata * 127017c16aa483e6edabdbbee1bdcd1ce3f8e8a12d1Greg Clayton GetMetadata (const void *object) 128fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan { 129fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan return GetMetadata(getASTContext(), object); 130fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan } 131fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan 132a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999Jim Ingham static ClangASTMetadata * 133fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan GetMetadata (clang::ASTContext *ast, 134017c16aa483e6edabdbbee1bdcd1ce3f8e8a12d1Greg Clayton const void *object); 135e6d72ca9a6b22cd062136bbff039c3d8217f798aGreg Clayton 13624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Basic Types 13824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 13952f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 14024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner GetBuiltinTypeForEncodingAndBitSize (lldb::Encoding encoding, 14124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t bit_size); 14252f792329be5db8e38961350589e97e8f2823acdGreg Clayton 14352f792329be5db8e38961350589e97e8f2823acdGreg Clayton static ClangASTType 144b01000fd063629facd45044f137446fb748ee179Greg Clayton GetBuiltinTypeForEncodingAndBitSize (clang::ASTContext *ast, 14524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner lldb::Encoding encoding, 14624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner uint32_t bit_size); 14724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 14852f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 14952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetBasicType (lldb::BasicType type); 15024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 15152f792329be5db8e38961350589e97e8f2823acdGreg Clayton static ClangASTType 15252f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetBasicType (clang::ASTContext *ast, lldb::BasicType type); 153a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan 15452f792329be5db8e38961350589e97e8f2823acdGreg Clayton static ClangASTType 15552f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetBasicType (clang::ASTContext *ast, const ConstString &name); 156a91dd997b1e809c67901b7ac481942cacae19150Sean Callanan 15752f792329be5db8e38961350589e97e8f2823acdGreg Clayton static lldb::BasicType 15852f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetBasicTypeEnumeration (const ConstString &name); 159960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 16052f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 16152f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetBuiltinTypeForDWARFEncodingAndBitSize ( 16252f792329be5db8e38961350589e97e8f2823acdGreg Clayton const char *type_name, 16352f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t dw_ate, 16452f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t bit_size); 165960d6a40711f05effe6fcc5b66f0952450f79ea2Greg Clayton 16652f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 16752f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetCStringType(bool is_const); 168fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan 16952f792329be5db8e38961350589e97e8f2823acdGreg Clayton static ClangASTType 170fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan GetUnknownAnyType(clang::ASTContext *ast); 171fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan 17252f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 173fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan GetUnknownAnyType() 174fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan { 175fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan return ClangASTContext::GetUnknownAnyType(getASTContext()); 176fb3058efeaacc2ced967e46842dfc4875b3daf14Sean Callanan } 1778d6115615f55ae38ff141f0a6859d59750da8d02Sean Callanan 17852f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t 17952f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetPointerByteSize (); 18024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 181673f3dbea64b116166dfa668006cdc84224a27c0Sean Callanan static clang::DeclContext * 182673f3dbea64b116166dfa668006cdc84224a27c0Sean Callanan GetTranslationUnitDecl (clang::ASTContext *ast); 183673f3dbea64b116166dfa668006cdc84224a27c0Sean Callanan 184673f3dbea64b116166dfa668006cdc84224a27c0Sean Callanan clang::DeclContext * 185673f3dbea64b116166dfa668006cdc84224a27c0Sean Callanan GetTranslationUnitDecl () 186673f3dbea64b116166dfa668006cdc84224a27c0Sean Callanan { 187673f3dbea64b116166dfa668006cdc84224a27c0Sean Callanan return GetTranslationUnitDecl (getASTContext()); 188673f3dbea64b116166dfa668006cdc84224a27c0Sean Callanan } 189673f3dbea64b116166dfa668006cdc84224a27c0Sean Callanan 190b3a1a2bba41281ba56a99fe64887a8a04760784cGreg Clayton static bool 191b3a1a2bba41281ba56a99fe64887a8a04760784cGreg Clayton GetClassMethodInfoForDeclContext (clang::DeclContext *decl_ctx, 192b3a1a2bba41281ba56a99fe64887a8a04760784cGreg Clayton lldb::LanguageType &language, 193b3a1a2bba41281ba56a99fe64887a8a04760784cGreg Clayton bool &is_instance_method, 194b3a1a2bba41281ba56a99fe64887a8a04760784cGreg Clayton ConstString &language_object_name); 195b3a1a2bba41281ba56a99fe64887a8a04760784cGreg Clayton 19652f792329be5db8e38961350589e97e8f2823acdGreg Clayton static ClangASTType 19724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner CopyType(clang::ASTContext *dest_context, 19852f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType source_type); 19924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 2006916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton static clang::Decl * 2016916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton CopyDecl (clang::ASTContext *dest_context, 2026916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton clang::ASTContext *source_context, 2036916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton clang::Decl *source_decl); 2046916e358c9725b75ed91f31236c147f26c9af10eGreg Clayton 2055510dddc33260a991284ef81ca343594f23262e8Sean Callanan static bool 20652f792329be5db8e38961350589e97e8f2823acdGreg Clayton AreTypesSame(ClangASTType type1, 20752f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType type2, 20870c6cf4b614cd79a54cf1a8696f7b4c963229868Sean Callanan bool ignore_qualifiers = false); 2095510dddc33260a991284ef81ca343594f23262e8Sean Callanan 21052f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 211b01000fd063629facd45044f137446fb748ee179Greg Clayton GetTypeForDecl (clang::TagDecl *decl); 212b01000fd063629facd45044f137446fb748ee179Greg Clayton 21352f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 214b01000fd063629facd45044f137446fb748ee179Greg Clayton GetTypeForDecl (clang::ObjCInterfaceDecl *objc_decl); 215b01000fd063629facd45044f137446fb748ee179Greg Clayton 21624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 21752f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Structure, Unions, Classes 21824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 21924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22052f792329be5db8e38961350589e97e8f2823acdGreg Clayton static clang::AccessSpecifier 22152f792329be5db8e38961350589e97e8f2823acdGreg Clayton ConvertAccessTypeToAccessSpecifier (lldb::AccessType access); 22224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22352f792329be5db8e38961350589e97e8f2823acdGreg Clayton static clang::AccessSpecifier 22452f792329be5db8e38961350589e97e8f2823acdGreg Clayton UnifyAccessSpecifiers (clang::AccessSpecifier lhs, clang::AccessSpecifier rhs); 22524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 22652f792329be5db8e38961350589e97e8f2823acdGreg Clayton static uint32_t 22752f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetNumBaseClasses (const clang::CXXRecordDecl *cxx_record_decl, 22852f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool omit_empty_base_classes); 22924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23052f792329be5db8e38961350589e97e8f2823acdGreg Clayton static uint32_t 23152f792329be5db8e38961350589e97e8f2823acdGreg Clayton GetIndexForRecordBase (const clang::RecordDecl *record_decl, 23252f792329be5db8e38961350589e97e8f2823acdGreg Clayton const clang::CXXBaseSpecifier *base_spec, 23352f792329be5db8e38961350589e97e8f2823acdGreg Clayton bool omit_empty_base_classes); 23424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 23552f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 2365e8eb5c428e91b99f3884b53fc5deea0ecb001cdGreg Clayton CreateRecordType (clang::DeclContext *decl_ctx, 2375e8eb5c428e91b99f3884b53fc5deea0ecb001cdGreg Clayton lldb::AccessType access_type, 2385e8eb5c428e91b99f3884b53fc5deea0ecb001cdGreg Clayton const char *name, 239e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton int kind, 240fafffe000eb4a3902ecefc82446d11e6838167c6Sean Callanan lldb::LanguageType language, 241a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999Jim Ingham ClangASTMetadata *metadata = NULL); 24260a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan 243f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton class TemplateParameterInfos 244f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton { 245f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton public: 246f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton bool 247f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton IsValid() const 248f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton { 249f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton if (args.empty()) 250f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton return false; 251f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton return args.size() == names.size(); 252f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton } 253f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 254f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton size_t 255f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton GetSize () const 256f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton { 257f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton if (IsValid()) 258f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton return args.size(); 259f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton return 0; 260f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton } 261f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 262f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton llvm::SmallVector<const char *, 8> names; 263f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton llvm::SmallVector<clang::TemplateArgument, 8> args; 264f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton }; 265f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 266b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton clang::FunctionTemplateDecl * 267b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton CreateFunctionTemplateDecl (clang::DeclContext *decl_ctx, 268b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton clang::FunctionDecl *func_decl, 269b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton const char *name, 270b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton const TemplateParameterInfos &infos); 271b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton 272b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton void 273b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton CreateFunctionTemplateSpecializationInfo (clang::FunctionDecl *func_decl, 274b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton clang::FunctionTemplateDecl *Template, 275b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton const TemplateParameterInfos &infos); 276b7fad95031b51dde040dc8b3de7bd8db2d14f613Greg Clayton 277f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton clang::ClassTemplateDecl * 278f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton CreateClassTemplateDecl (clang::DeclContext *decl_ctx, 2795e8eb5c428e91b99f3884b53fc5deea0ecb001cdGreg Clayton lldb::AccessType access_type, 280f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton const char *class_name, 281f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton int kind, 282f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton const TemplateParameterInfos &infos); 283f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 284f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton clang::ClassTemplateSpecializationDecl * 285f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton CreateClassTemplateSpecializationDecl (clang::DeclContext *decl_ctx, 286f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton clang::ClassTemplateDecl *class_template_decl, 287f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton int kind, 288f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton const TemplateParameterInfos &infos); 289f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 29052f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 291f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton CreateClassTemplateSpecializationType (clang::ClassTemplateSpecializationDecl *class_template_specialization_decl); 292f6a5bd78aaef0e4d477208289ace03cfa7f60649Greg Clayton 293a83f8779ac614263d92959d2338e6e9f08d8f9fbGreg Clayton static clang::DeclContext * 294a83f8779ac614263d92959d2338e6e9f08d8f9fbGreg Clayton GetAsDeclContext (clang::CXXMethodDecl *cxx_method_decl); 295a83f8779ac614263d92959d2338e6e9f08d8f9fbGreg Clayton 296a83f8779ac614263d92959d2338e6e9f08d8f9fbGreg Clayton static clang::DeclContext * 297a83f8779ac614263d92959d2338e6e9f08d8f9fbGreg Clayton GetAsDeclContext (clang::ObjCMethodDecl *objc_method_decl); 298a83f8779ac614263d92959d2338e6e9f08d8f9fbGreg Clayton 299a83f8779ac614263d92959d2338e6e9f08d8f9fbGreg Clayton 3008c6907c4daa74a8ebc418ec6eed151b68bda6321Greg Clayton static bool 3018c6907c4daa74a8ebc418ec6eed151b68bda6321Greg Clayton CheckOverloadedOperatorKindParameterCount (uint32_t op_kind, 3028c6907c4daa74a8ebc418ec6eed151b68bda6321Greg Clayton uint32_t num_params); 3038c6907c4daa74a8ebc418ec6eed151b68bda6321Greg Clayton 30460a0ced7da29dbe746115d7ae3498c0e1af5d58aSean Callanan bool 305e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton FieldIsBitfield (clang::FieldDecl* field, 306e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton uint32_t& bitfield_bit_size); 30724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 30824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 309b01000fd063629facd45044f137446fb748ee179Greg Clayton FieldIsBitfield (clang::ASTContext *ast, 310e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton clang::FieldDecl* field, 311e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton uint32_t& bitfield_bit_size); 31224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner static bool 31424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner RecordHasFields (const clang::RecordDecl *record_decl); 31524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 31684f8075072eef306234f8109573067647735c111Greg Clayton 31752f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 31884f8075072eef306234f8109573067647735c111Greg Clayton CreateObjCClass (const char *name, 31984f8075072eef306234f8109573067647735c111Greg Clayton clang::DeclContext *decl_ctx, 32084f8075072eef306234f8109573067647735c111Greg Clayton bool isForwardDecl, 321a4974db9b26cc4f33e16c990304b51f4a1d38611Sean Callanan bool isInternal, 322a32c5a5aa1fec0f9bc2a5b123f07ff6b8c979999Jim Ingham ClangASTMetadata *metadata = NULL); 32324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 324bf8e42b9da0e1c6349a727d644ad37610b00d556Greg Clayton // Returns a mask containing bits from the ClangASTContext::eTypeXXX enumerations 32524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 32724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 32824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Namespace Declarations 32924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::NamespaceDecl * 332e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton GetUniqueNamespaceDeclaration (const char *name, 333e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton clang::DeclContext *decl_ctx); 33424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Function Types 33724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 33824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 33924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::FunctionDecl * 3405f24c5053d9fa99bd20e6b1e5b8c659c68d57be7Greg Clayton CreateFunctionDeclaration (clang::DeclContext *decl_ctx, 3415f24c5053d9fa99bd20e6b1e5b8c659c68d57be7Greg Clayton const char *name, 34252f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &function_Type, 343e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton int storage, 344e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton bool is_inline); 345e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton 34652f792329be5db8e38961350589e97e8f2823acdGreg Clayton static ClangASTType 347b01000fd063629facd45044f137446fb748ee179Greg Clayton CreateFunctionType (clang::ASTContext *ast, 34852f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &result_type, 34952f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType *args, 3502ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan unsigned num_args, 3512ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan bool is_variadic, 3522ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan unsigned type_quals); 3532ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan 35452f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 35552f792329be5db8e38961350589e97e8f2823acdGreg Clayton CreateFunctionType (const ClangASTType &result_type, 35652f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType *args, 357e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton unsigned num_args, 3582ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan bool is_variadic, 3592ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan unsigned type_quals) 3602ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan { 361a751f7b1baa037ab6e9398f7bf5eb3a36a84e984Sean Callanan return ClangASTContext::CreateFunctionType(getASTContext(), 3622ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan result_type, 3632ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan args, 3642ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan num_args, 3652ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan is_variadic, 3662ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan type_quals); 3672ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan } 368e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton 36924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner clang::ParmVarDecl * 3702ea8f27fe76e30ba8fff1f58a50ad3e409e8a8baSean Callanan CreateParameterDeclaration (const char *name, 37152f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType ¶m_type, 37252f792329be5db8e38961350589e97e8f2823acdGreg Clayton int storage); 37324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner void 375e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton SetFunctionParameters (clang::FunctionDecl *function_decl, 376e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton clang::ParmVarDecl **params, 377e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton unsigned num_params); 37824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 37924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Array Types 38124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38352f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 38452f792329be5db8e38961350589e97e8f2823acdGreg Clayton CreateArrayType (const ClangASTType &element_type, 385f95fc9e09fa0a32de0a3904a1517266df37e8bffGreg Clayton size_t element_count, 386f95fc9e09fa0a32de0a3904a1517266df37e8bffGreg Clayton bool is_vector); 38724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 38824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 38924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Enumeration Types 39024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 39152f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 3920d62dfd4974eb23f550f992e594894b96c5696d1Greg Clayton CreateEnumerationType (const char *name, 3930d62dfd4974eb23f550f992e594894b96c5696d1Greg Clayton clang::DeclContext *decl_ctx, 3940d62dfd4974eb23f550f992e594894b96c5696d1Greg Clayton const Declaration &decl, 39552f792329be5db8e38961350589e97e8f2823acdGreg Clayton const ClangASTType &integer_qual_type); 396e9d0df45df0ee87623985d1e59947a2ca50c14eaGreg Clayton 39724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 39852f792329be5db8e38961350589e97e8f2823acdGreg Clayton // Floating point functions 39924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 40024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 40152f792329be5db8e38961350589e97e8f2823acdGreg Clayton ClangASTType 402a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton GetFloatTypeFromBitSize (size_t bit_size) 403a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton { 404a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton return GetFloatTypeFromBitSize (getASTContext(), bit_size); 405a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton } 406a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton 40752f792329be5db8e38961350589e97e8f2823acdGreg Clayton static ClangASTType 408a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton GetFloatTypeFromBitSize (clang::ASTContext *ast, 409a9dc882693ef65ee3657b96f018fec3685d37282Greg Clayton size_t bit_size); 41024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprotected: 41124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // Classes that inherit from ClangASTContext can see and modify these 41324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 41481a96aa6242f7b559770f5dc62316253cb8cb0d4Greg Clayton std::string m_target_triple; 41552f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::ASTContext> m_ast_ap; 41652f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::LangOptions> m_language_options_ap; 41752f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::FileManager> m_file_manager_ap; 41852f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::FileSystemOptions> m_file_system_options_ap; 41952f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::SourceManager> m_source_manager_ap; 42052f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::DiagnosticsEngine> m_diagnostics_engine_ap; 42152f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::DiagnosticConsumer> m_diagnostic_consumer_ap; 4226a97d425a9bb1a137a7dcf7be90edd37d21f4dbbSean Callanan llvm::IntrusiveRefCntPtr<clang::TargetOptions> m_target_options_rp; 42352f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::TargetInfo> m_target_info_ap; 42452f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::IdentifierTable> m_identifier_table_ap; 42552f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::SelectorTable> m_selector_table_ap; 42652f792329be5db8e38961350589e97e8f2823acdGreg Clayton std::unique_ptr<clang::Builtin::Context> m_builtins_ap; 42781a96aa6242f7b559770f5dc62316253cb8cb0d4Greg Clayton CompleteTagDeclCallback m_callback_tag_decl; 42881a96aa6242f7b559770f5dc62316253cb8cb0d4Greg Clayton CompleteObjCInterfaceDeclCallback m_callback_objc_decl; 42981a96aa6242f7b559770f5dc62316253cb8cb0d4Greg Clayton void * m_callback_baton; 43052f792329be5db8e38961350589e97e8f2823acdGreg Clayton uint32_t m_pointer_byte_size; 43124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattnerprivate: 43224943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 43324943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner // For ClangASTContext only 43424943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner //------------------------------------------------------------------ 43524943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner ClangASTContext(const ClangASTContext&); 43624943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner const ClangASTContext& operator=(const ClangASTContext&); 43724943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner}; 43824943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 43924943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner} // namespace lldb_private 44024943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner 44124943d2ee8bfaa7cf5893e4709143924157a5c1eChris Lattner#endif // liblldb_ClangASTContext_h_ 442