ASTContext.h revision 7532dc66648cfe7432c9fe66dec5225f0ab301c6
1ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project//===--- ASTContext.h - Context to hold long-lived AST nodes ----*- C++ -*-===// 2ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// 3ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// The LLVM Compiler Infrastructure 4df143a5041f03a22808b59c76698770b74692815Selim Gurun// 5ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// This file is distributed under the University of Illinois Open Source 6ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// License. See LICENSE.TXT for details. 7ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// 8ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project//===----------------------------------------------------------------------===// 9ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// 10ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// This file defines the ASTContext interface. 11ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// 12ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project//===----------------------------------------------------------------------===// 13ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 14ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#ifndef LLVM_CLANG_AST_ASTCONTEXT_H 15ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#define LLVM_CLANG_AST_ASTCONTEXT_H 16ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 17ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "clang/Basic/IdentifierTable.h" 18ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "clang/Basic/LangOptions.h" 19ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "clang/AST/Builtins.h" 20ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "clang/AST/Decl.h" 21ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "clang/AST/NestedNameSpecifier.h" 22ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "clang/AST/TemplateName.h" 23ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "clang/AST/Type.h" 24ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "clang/Basic/SourceLocation.h" 25ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "llvm/ADT/DenseMap.h" 26ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "llvm/ADT/FoldingSet.h" 2794442ad4107000e6d49f9b85a46a591495a57632Selim Gurun#include "llvm/Bitcode/SerializationFwd.h" 28ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include "llvm/Support/Allocator.h" 29ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#include <vector> 30ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 31ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectnamespace llvm { 32ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project struct fltSemantics; 33ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 34ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 35ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectnamespace clang { 36ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class FileManager; 37ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class ASTRecordLayout; 38ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class Expr; 39ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class IdentifierTable; 40ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class SelectorTable; 41ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class SourceManager; 42ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class TargetInfo; 43ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Decls 44ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class Decl; 45ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class ObjCPropertyDecl; 46ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class RecordDecl; 47ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class TagDecl; 4894442ad4107000e6d49f9b85a46a591495a57632Selim Gurun class TranslationUnitDecl; 4994442ad4107000e6d49f9b85a46a591495a57632Selim Gurun class TypeDecl; 5094442ad4107000e6d49f9b85a46a591495a57632Selim Gurun class TypedefDecl; 51ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class TemplateTypeParmDecl; 52ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class FieldDecl; 53ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class ObjCIvarRefExpr; 54ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project class ObjCIvarDecl; 55ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 56ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// ASTContext - This class holds long-lived AST nodes (such as types and 57ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// decls) that can be referred to throughout the semantic analysis of a file. 58ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectclass ASTContext { 59ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project std::vector<Type*> Types; 60ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<ExtQualType> ExtQualTypes; 61ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<ComplexType> ComplexTypes; 62ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<PointerType> PointerTypes; 63ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<BlockPointerType> BlockPointerTypes; 64ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<LValueReferenceType> LValueReferenceTypes; 65218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang llvm::FoldingSet<RValueReferenceType> RValueReferenceTypes; 66ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<MemberPointerType> MemberPointerTypes; 67ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<ConstantArrayType> ConstantArrayTypes; 68ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<IncompleteArrayType> IncompleteArrayTypes; 69ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project std::vector<VariableArrayType*> VariableArrayTypes; 70ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project std::vector<DependentSizedArrayType*> DependentSizedArrayTypes; 71ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<VectorType> VectorTypes; 72ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<FunctionNoProtoType> FunctionNoProtoTypes; 73ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<FunctionProtoType> FunctionProtoTypes; 74ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<TemplateTypeParmType> TemplateTypeParmTypes; 75ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<TemplateSpecializationType> TemplateSpecializationTypes; 76ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<QualifiedNameType> QualifiedNameTypes; 77ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<TypenameType> TypenameTypes; 78ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<ObjCQualifiedInterfaceType> ObjCQualifiedInterfaceTypes; 79ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<ObjCQualifiedIdType> ObjCQualifiedIdTypes; 80ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 81ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<QualifiedTemplateName> QualifiedTemplateNames; 82ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<DependentTemplateName> DependentTemplateNames; 83ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 84ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// \brief The set of nested name specifiers. 85ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 86ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// This set is managed by the NestedNameSpecifier class. 87ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::FoldingSet<NestedNameSpecifier> NestedNameSpecifiers; 88ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NestedNameSpecifier *GlobalNestedNameSpecifier; 89ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project friend class NestedNameSpecifier; 90ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 91ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// ASTRecordLayouts - A cache mapping from RecordDecls to ASTRecordLayouts. 92ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// This is lazily created. This is intentionally not serialized. 93ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::DenseMap<const RecordDecl*, const ASTRecordLayout*> ASTRecordLayouts; 94ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::DenseMap<const ObjCInterfaceDecl*, 95ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const ASTRecordLayout*> ASTObjCInterfaces; 96ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 97ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::DenseMap<unsigned, FixedWidthIntType*> SignedFixedWidthIntTypes; 98ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::DenseMap<unsigned, FixedWidthIntType*> UnsignedFixedWidthIntTypes; 99ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 100ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // FIXME: Shouldn't ASTRecordForInterface/ASTFieldForIvarRef and 101ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // addRecordToClass/getFieldDecl be part of the backend (i.e. CodeGenTypes and 102ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // CodeGenFunction)? 103ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::DenseMap<const ObjCInterfaceDecl*, 104218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang const RecordDecl*> ASTRecordForInterface; 105df143a5041f03a22808b59c76698770b74692815Selim Gurun llvm::DenseMap<const ObjCIvarRefExpr*, const FieldDecl*> ASTFieldForIvarRef; 106218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 107218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// BuiltinVaListType - built-in va list type. 108218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// This is initially null and set by Sema::LazilyCreateBuiltin when 109218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// a builtin that takes a valist is encountered. 110218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang QualType BuiltinVaListType; 111218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 112218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// ObjCIdType - a pseudo built-in typedef type (set by Sema). 113218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang QualType ObjCIdType; 114218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang const RecordType *IdStructType; 115218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 116218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// ObjCSelType - another pseudo built-in typedef type (set by Sema). 117218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang QualType ObjCSelType; 118218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang const RecordType *SelStructType; 119df143a5041f03a22808b59c76698770b74692815Selim Gurun 120218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// ObjCProtoType - another pseudo built-in typedef type (set by Sema). 121218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang QualType ObjCProtoType; 122218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang const RecordType *ProtoStructType; 123df143a5041f03a22808b59c76698770b74692815Selim Gurun 124218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// ObjCClassType - another pseudo built-in typedef type (set by Sema). 125218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang QualType ObjCClassType; 126218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang const RecordType *ClassStructType; 127218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 128218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang QualType ObjCConstantStringType; 129218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang RecordDecl *CFConstantStringTypeDecl; 130218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 131218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang RecordDecl *ObjCFastEnumerationStateTypeDecl; 132218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 133218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang TranslationUnitDecl *TUDecl; 134218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 135df143a5041f03a22808b59c76698770b74692815Selim Gurun /// SourceMgr - The associated SourceManager object. 136218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang SourceManager &SourceMgr; 137218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 138218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// LangOpts - The language options used to create the AST associated with 139218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// this ASTContext object. 140218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang LangOptions LangOpts; 141218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 142218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang /// MallocAlloc/BumpAlloc - The allocator objects used to create AST objects. 143218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang bool FreeMemory; 144218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang llvm::MallocAllocator MallocAlloc; 145218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang llvm::BumpPtrAllocator BumpAlloc; 146218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wangpublic: 147218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang TargetInfo &Target; 148218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang IdentifierTable &Idents; 149218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang SelectorTable &Selectors; 150218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang DeclarationNameTable DeclarationNames; 151218647ebd721a259319b28f5719e89a4d0d1aaefShimeng (Simon) Wang 152ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project SourceManager& getSourceManager() { return SourceMgr; } 153ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const SourceManager& getSourceManager() const { return SourceMgr; } 154ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void *Allocate(unsigned Size, unsigned Align = 8) { 155ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return FreeMemory ? MallocAlloc.Allocate(Size, Align) : 156ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project BumpAlloc.Allocate(Size, Align); 157ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 158ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void Deallocate(void *Ptr) { 159ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (FreeMemory) 160ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project MallocAlloc.Deallocate(Ptr); 161ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 162ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const LangOptions& getLangOptions() const { return LangOpts; } 163ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 164ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FullSourceLoc getFullLoc(SourceLocation Loc) const { 165ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return FullSourceLoc(Loc,SourceMgr); 166ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 167ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 168ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TranslationUnitDecl *getTranslationUnitDecl() const { return TUDecl; } 169ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 170ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// This is intentionally not serialized. It is populated by the 171ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// ASTContext ctor, and there are no external pointers/references to 172ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// internal variables of BuiltinInfo. 173ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project Builtin::Context BuiltinInfo; 174ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 175ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Builtin Types. 176ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType VoidTy; 177ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType BoolTy; 178ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType CharTy; 179ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType WCharTy; // [C++ 3.9.1p5], integer type in C99. 180ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType SignedCharTy, ShortTy, IntTy, LongTy, LongLongTy; 181ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType UnsignedCharTy, UnsignedShortTy, UnsignedIntTy, UnsignedLongTy; 182ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType UnsignedLongLongTy; 183ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType FloatTy, DoubleTy, LongDoubleTy; 184ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType FloatComplexTy, DoubleComplexTy, LongDoubleComplexTy; 185ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType VoidPtrTy; 186ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType OverloadTy; 187ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType DependentTy; 188ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 189ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ASTContext(const LangOptions& LOpts, SourceManager &SM, TargetInfo &t, 190df143a5041f03a22808b59c76698770b74692815Selim Gurun IdentifierTable &idents, SelectorTable &sels, 191ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool FreeMemory = true, unsigned size_reserve=0); 192ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 193ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ~ASTContext(); 194ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 195df143a5041f03a22808b59c76698770b74692815Selim Gurun void PrintStats() const; 196ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const std::vector<Type*>& getTypes() const { return Types; } 197ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 198ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 199ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Type Constructors 200ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 201ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 202ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getAddSpaceQualType - Return the uniqued reference to the type for an 203ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// address space qualified type with the specified type and address space. 204ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// The resulting type has a union of the qualifiers from T and the address 205ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// space. If T already has an address space specifier, it is silently 206ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// replaced. 207ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getAddrSpaceQualType(QualType T, unsigned AddressSpace); 208ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 209ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getObjCGCQualType - Returns the uniqued reference to the type for an 210ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// objc gc qualified type. The retulting type has a union of the qualifiers 211ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// from T and the gc attribute. 212ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCGCQualType(QualType T, QualType::GCAttrTypes gcAttr); 213ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 214ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getComplexType - Return the uniqued reference to the type for a complex 215ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// number with the specified element type. 216ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getComplexType(QualType T); 217ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 218ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getPointerType - Return the uniqued reference to the type for a pointer to 219ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// the specified type. 220ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getPointerType(QualType T); 221ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 222ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getBlockPointerType - Return the uniqued reference to the type for a block 223ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// of the specified type. 224ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getBlockPointerType(QualType T); 225ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 226ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getLValueReferenceType - Return the uniqued reference to the type for an 227ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// lvalue reference to the specified type. 228ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getLValueReferenceType(QualType T); 229ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 230ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getRValueReferenceType - Return the uniqued reference to the type for an 231ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// rvalue reference to the specified type. 232ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getRValueReferenceType(QualType T); 233ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 234ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getMemberPointerType - Return the uniqued reference to the type for a 235ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// member pointer to the specified type in the specified class. The class 236ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// is a Type because it could be a dependent name. 237ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getMemberPointerType(QualType T, const Type *Cls); 238ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 239ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getVariableArrayType - Returns a non-unique reference to the type for a 240ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// variable array of the specified element type. 241ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getVariableArrayType(QualType EltTy, Expr *NumElts, 242ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ArrayType::ArraySizeModifier ASM, 243ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned EltTypeQuals); 244ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 245ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getDependentSizedArrayType - Returns a non-unique reference to 246ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// the type for a dependently-sized array of the specified element 247ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// type. FIXME: We will need these to be uniqued, or at least 248ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// comparable, at some point. 249ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getDependentSizedArrayType(QualType EltTy, Expr *NumElts, 250ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ArrayType::ArraySizeModifier ASM, 251ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned EltTypeQuals); 252ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 253ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getIncompleteArrayType - Returns a unique reference to the type for a 254ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// incomplete array of the specified element type. 255ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getIncompleteArrayType(QualType EltTy, 256ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ArrayType::ArraySizeModifier ASM, 257ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned EltTypeQuals); 258ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 259ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getConstantArrayType - Return the unique reference to the type for a 260ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// constant array of the specified element type. 261df143a5041f03a22808b59c76698770b74692815Selim Gurun QualType getConstantArrayType(QualType EltTy, const llvm::APInt &ArySize, 262ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ArrayType::ArraySizeModifier ASM, 263ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned EltTypeQuals); 264ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 265ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getVectorType - Return the unique reference to a vector type of 266ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// the specified element type and size. VectorType must be a built-in type. 267ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getVectorType(QualType VectorType, unsigned NumElts); 268ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 269ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getExtVectorType - Return the unique reference to an extended vector type 270ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// of the specified element type and size. VectorType must be a built-in 271ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// type. 272ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getExtVectorType(QualType VectorType, unsigned NumElts); 273ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 274ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getFunctionNoProtoType - Return a K&R style C function type like 'int()'. 275ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 276ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getFunctionNoProtoType(QualType ResultTy); 277ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 278ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getFunctionType - Return a normal function type with a typed argument 279ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// list. isVariadic indicates whether the argument list includes '...'. 280ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getFunctionType(QualType ResultTy, const QualType *ArgArray, 281ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned NumArgs, bool isVariadic, 282ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned TypeQuals); 283ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 284ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getTypeDeclType - Return the unique reference to the type for 285ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// the specified type declaration. 286ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getTypeDeclType(TypeDecl *Decl, TypeDecl* PrevDecl=0); 287ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 288ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getTypedefType - Return the unique reference to the type for the 289ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// specified typename decl. 290ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getTypedefType(TypedefDecl *Decl); 291ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCInterfaceType(ObjCInterfaceDecl *Decl); 292ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType buildObjCInterfaceType(ObjCInterfaceDecl *Decl); 293ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 294ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getTemplateTypeParmType(unsigned Depth, unsigned Index, 295ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project IdentifierInfo *Name = 0); 296ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 297ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getTemplateSpecializationType(TemplateName T, 298ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const TemplateArgument *Args, 299ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned NumArgs, 300ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType Canon = QualType()); 301ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 302ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getQualifiedNameType(NestedNameSpecifier *NNS, 303ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType NamedType); 304ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getTypenameType(NestedNameSpecifier *NNS, 305ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const IdentifierInfo *Name, 306ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType Canon = QualType()); 307ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 308ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getObjCQualifiedInterfaceType - Return a 309ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// ObjCQualifiedInterfaceType type for the given interface decl and 310ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// the conforming protocol list. 311ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCQualifiedInterfaceType(ObjCInterfaceDecl *Decl, 312ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ObjCProtocolDecl **ProtocolList, 313ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned NumProtocols); 314ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 315ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getObjCQualifiedIdType - Return an ObjCQualifiedIdType for a 316ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// given 'id' and conforming protocol list. 317ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCQualifiedIdType(ObjCProtocolDecl **ProtocolList, 318df143a5041f03a22808b59c76698770b74692815Selim Gurun unsigned NumProtocols); 319df143a5041f03a22808b59c76698770b74692815Selim Gurun 320df143a5041f03a22808b59c76698770b74692815Selim Gurun 321ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getTypeOfType - GCC extension. 322df143a5041f03a22808b59c76698770b74692815Selim Gurun QualType getTypeOfExprType(Expr *e); 323ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getTypeOfType(QualType t); 324ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 325df143a5041f03a22808b59c76698770b74692815Selim Gurun /// getTagDeclType - Return the unique reference to the type for the 326df143a5041f03a22808b59c76698770b74692815Selim Gurun /// specified TagDecl (struct/union/class/enum) decl. 327ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getTagDeclType(TagDecl *Decl); 328ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 329df143a5041f03a22808b59c76698770b74692815Selim Gurun /// getSizeType - Return the unique type for "size_t" (C99 7.17), defined 330df143a5041f03a22808b59c76698770b74692815Selim Gurun /// in <stddef.h>. The sizeof operator requires this (C99 6.5.3.4p4). 331ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getSizeType() const; 332ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 333ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getWCharType - In C++, this returns the unique wchar_t type. In C99, this 334ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// returns a type compatible with the type defined in <stddef.h> as defined 335ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// by the target. 336ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getWCharType() const { return WCharTy; } 337ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 338ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getSignedWCharType - Return the type of "signed wchar_t". 339ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// Used when in C++, as a GCC extension. 340ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getSignedWCharType() const; 341ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 342ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getUnsignedWCharType - Return the type of "unsigned wchar_t". 343ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// Used when in C++, as a GCC extension. 344ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getUnsignedWCharType() const; 345ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 346ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getPointerDiffType - Return the unique type for "ptrdiff_t" (ref?) 347ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// defined in <stddef.h>. Pointer - pointer requires this (C99 6.5.6p9). 348ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getPointerDiffType() const; 349ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 350ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // getCFConstantStringType - Return the C structure type used to represent 351ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // constant CFStrings. 352ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getCFConstantStringType(); 353ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 354ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // This setter/getter represents the ObjC type for an NSConstantString. 355ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void setObjCConstantStringInterface(ObjCInterfaceDecl *Decl); 356ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCConstantStringInterface() const { 357ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return ObjCConstantStringType; 358ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 359ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 360ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //// This gets the struct used to keep track of fast enumerations. 361ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCFastEnumerationStateType(); 362ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 363ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getObjCEncodingForType - Emit the ObjC type encoding for the 364ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// given type into \arg S. If \arg NameFields is specified then 365ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// record field names are also encoded. 366ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void getObjCEncodingForType(QualType t, std::string &S, 367ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FieldDecl *Field=NULL) const; 368ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 369ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void getLegacyIntegralTypeEncoding(QualType &t) const; 370ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 371ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Put the string version of type qualifiers into S. 372ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void getObjCEncodingForTypeQualifier(Decl::ObjCDeclQualifier QT, 373ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project std::string &S) const; 374ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 375ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getObjCEncodingForMethodDecl - Return the encoded type for this method 376ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// declaration. 377ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void getObjCEncodingForMethodDecl(const ObjCMethodDecl *Decl, std::string &S); 378ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 379ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getObjCEncodingForPropertyDecl - Return the encoded type for 380ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// this method declaration. If non-NULL, Container must be either 381ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// an ObjCCategoryImplDecl or ObjCImplementationDecl; it should 382ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// only be NULL when getting encodings for protocol properties. 383ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void getObjCEncodingForPropertyDecl(const ObjCPropertyDecl *PD, 384ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const Decl *Container, 385ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project std::string &S); 386ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 387ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getObjCEncodingTypeSize returns size of type for objective-c encoding 388ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// purpose. 389ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int getObjCEncodingTypeSize(QualType t); 390ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 391ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// This setter/getter represents the ObjC 'id' type. It is setup lazily, by 392ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// Sema. id is always a (typedef for a) pointer type, a pointer to a struct. 393ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCIdType() const { return ObjCIdType; } 394ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void setObjCIdType(TypedefDecl *Decl); 395ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 396ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void setObjCSelType(TypedefDecl *Decl); 397ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCSelType() const { return ObjCSelType; } 398ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 399ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void setObjCProtoType(QualType QT); 400ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCProtoType() const { return ObjCProtoType; } 401ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 402ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// This setter/getter repreents the ObjC 'Class' type. It is setup lazily, by 403ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// Sema. 'Class' is always a (typedef for a) pointer type, a pointer to a 404ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// struct. 405ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getObjCClassType() const { return ObjCClassType; } 406ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void setObjCClassType(TypedefDecl *Decl); 407ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 408ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void setBuiltinVaListType(QualType T); 409ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getBuiltinVaListType() const { return BuiltinVaListType; } 410ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 411ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getFixedWidthIntType(unsigned Width, bool Signed); 412ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 413ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TemplateName getQualifiedTemplateName(NestedNameSpecifier *NNS, 414ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool TemplateKeyword, 415ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TemplateDecl *Template); 416ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 417ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TemplateName getDependentTemplateName(NestedNameSpecifier *NNS, 418ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const IdentifierInfo *Name); 419ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 420ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectprivate: 421ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getFromTargetType(unsigned Type) const; 422ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 423ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 424ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Type Predicates. 425ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 426ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 427ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectpublic: 428ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// isObjCObjectPointerType - Returns true if type is an Objective-C pointer 429ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// to an object type. This includes "id" and "Class" (two 'special' pointers 430ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// to struct), Interface* (pointer to ObjCInterfaceType) and id<P> (qualified 431ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// ID type). 432ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool isObjCObjectPointerType(QualType Ty) const; 433ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 434df143a5041f03a22808b59c76698770b74692815Selim Gurun /// getObjCGCAttr - Returns one of GCNone, Weak or Strong objc's 435ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// garbage collection attribute. 436ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 437ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType::GCAttrTypes getObjCGCAttrKind(const QualType &Ty) const; 438ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 439ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// isObjCNSObjectType - Return true if this is an NSObject object with 440ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// its NSObject attribute set. 441ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool isObjCNSObjectType(QualType Ty) const; 442ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 443ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 444ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Type Sizing and Analysis 445ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 446ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 447ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getFloatTypeSemantics - Return the APFloat 'semantics' for the specified 448ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// scalar floating point type. 449ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const llvm::fltSemantics &getFloatTypeSemantics(QualType T) const; 450ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 451ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getTypeInfo - Get the size and alignment of the specified complete type in 452ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// bits. 453ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project std::pair<uint64_t, unsigned> getTypeInfo(const Type *T); 454ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project std::pair<uint64_t, unsigned> getTypeInfo(QualType T) { 455ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return getTypeInfo(T.getTypePtr()); 456ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 457ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 458ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getTypeSize - Return the size of the specified type, in bits. This method 459ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// does not work on incomplete types. 460ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uint64_t getTypeSize(QualType T) { 461ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return getTypeInfo(T).first; 462ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 463ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project uint64_t getTypeSize(const Type *T) { 464ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return getTypeInfo(T).first; 465ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 466ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 467ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getTypeAlign - Return the ABI-specified alignment of a type, in bits. 468ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// This method does not work on incomplete types. 469ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned getTypeAlign(QualType T) { 470ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return getTypeInfo(T).second; 471ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 472ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned getTypeAlign(const Type *T) { 473ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return getTypeInfo(T).second; 474ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 475ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 476ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getPreferredTypeAlign - Return the "preferred" alignment of the specified 477ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// type for the current target in bits. This can be different than the ABI 478ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// alignment in cases where it is beneficial for performance to overalign 479ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// a data type. 480ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned getPreferredTypeAlign(const Type *T); 481ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 482ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getDeclAlignInBytes - Return the alignment of the specified decl 483ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// that should be returned by __alignof(). Note that bitfields do 484ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// not have a valid alignment, so this method will assert on them. 485ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned getDeclAlignInBytes(const Decl *D); 486ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 487ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getASTRecordLayout - Get or compute information about the layout of the 488ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// specified record (struct/union/class), which indicates its size and field 489ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// position information. 490ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const ASTRecordLayout &getASTRecordLayout(const RecordDecl *D); 491ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 492ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const ASTRecordLayout &getASTObjCInterfaceLayout(const ObjCInterfaceDecl *D); 493ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const RecordDecl *addRecordToClass(const ObjCInterfaceDecl *D); 494ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void CollectObjCIvars(const ObjCInterfaceDecl *OI, 495ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project std::vector<FieldDecl*> &Fields) const; 496ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const FieldDecl *getFieldDecl(const ObjCIvarRefExpr *MRef) { 497ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::DenseMap<const ObjCIvarRefExpr *, const FieldDecl*>::iterator I 498ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project = ASTFieldForIvarRef.find(MRef); 499ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project assert (I != ASTFieldForIvarRef.end() && "Unable to find field_decl"); 500ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return I->second; 501ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 502ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void setFieldDecl(const ObjCInterfaceDecl *OI, 503ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const ObjCIvarDecl *Ivar, 504ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const ObjCIvarRefExpr *MRef); 505ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 506ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Type Operators 507ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 508ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 509ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getCanonicalType - Return the canonical (structural) type corresponding to 510ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// the specified potentially non-canonical type. The non-canonical version 511ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// of a type may have many "decorated" versions of types. Decorators can 512ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// include typedefs, 'typeof' operators, etc. The returned type is guaranteed 513ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// to be free of any of these, allowing two canonical types to be compared 514ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// for exact equality with a simple pointer comparison. 515ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getCanonicalType(QualType T); 516ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const Type *getCanonicalType(const Type *T) { 517ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return T->getCanonicalTypeInternal().getTypePtr(); 518ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 519ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 520ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// \brief Determine whether the given types are equivalent. 521ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool hasSameType(QualType T1, QualType T2) { 522ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return getCanonicalType(T1) == getCanonicalType(T2); 523ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 524ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 525ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// \brief Determine whether the given types are equivalent after 526ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// cvr-qualifiers have been removed. 527ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool hasSameUnqualifiedType(QualType T1, QualType T2) { 528ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project T1 = getCanonicalType(T1); 529ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project T2 = getCanonicalType(T2); 530ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return T1.getUnqualifiedType() == T2.getUnqualifiedType(); 531ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 532ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 533ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// \brief Retrieves the "canonical" declaration of the given tag 534ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// declaration. 535ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 536ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// The canonical declaration for the given tag declaration is 537ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// either the definition of the tag (if it is a complete type) or 538ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// the first declaration of that tag. 539ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project TagDecl *getCanonicalDecl(TagDecl *Tag) { 540ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType T = getTagDeclType(Tag); 541ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return cast<TagDecl>(cast<TagType>(T.getTypePtr()->CanonicalType) 542df143a5041f03a22808b59c76698770b74692815Selim Gurun ->getDecl()); 543ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 544ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 545ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// \brief Retrieves the "canonical" nested name specifier for a 546ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// given nested name specifier. 547ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 548ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// The canonical nested name specifier is a nested name specifier 549ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// that uniquely identifies a type or namespace within the type 550ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// system. For example, given: 551ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 552ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// \code 553ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// namespace N { 554ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// struct S { 555ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// template<typename T> struct X { typename T* type; }; 556ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// }; 557ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// } 558ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 559ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// template<typename T> struct Y { 560ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// typename N::S::X<T>::type member; 561ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// }; 562ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// \endcode 563ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 564ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// Here, the nested-name-specifier for N::S::X<T>:: will be 565ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// S::X<template-param-0-0>, since 'S' and 'X' are uniquely defined 566ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// by declarations in the type system and the canonical type for 567df143a5041f03a22808b59c76698770b74692815Selim Gurun /// the template type parameter 'T' is template-param-0-0. 568ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project NestedNameSpecifier * 569ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project getCanonicalNestedNameSpecifier(NestedNameSpecifier *NNS); 570ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 571ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// Type Query functions. If the type is an instance of the specified class, 572ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// return the Type pointer for the underlying maximally pretty type. This 573ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// is a member of ASTContext because this may need to do some amount of 574ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// canonicalization, e.g. to move type qualifiers into the element type. 575ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const ArrayType *getAsArrayType(QualType T); 576ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const ConstantArrayType *getAsConstantArrayType(QualType T) { 577ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return dyn_cast_or_null<ConstantArrayType>(getAsArrayType(T)); 578ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 579ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const VariableArrayType *getAsVariableArrayType(QualType T) { 580ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return dyn_cast_or_null<VariableArrayType>(getAsArrayType(T)); 581ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 582ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const IncompleteArrayType *getAsIncompleteArrayType(QualType T) { 583ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return dyn_cast_or_null<IncompleteArrayType>(getAsArrayType(T)); 584ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 585ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 586ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getBaseElementType - Returns the innermost element type of a variable 587ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// length array type. For example, will return "int" for int[m][n] 588ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getBaseElementType(const VariableArrayType *VAT); 589ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 590ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getArrayDecayedType - Return the properly qualified result of decaying the 591ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// specified array type to a pointer. This operation is non-trivial when 592ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// handling typedefs etc. The canonical type of "T" must be an array type, 593ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// this returns a pointer to a properly qualified element of the array. 594ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 595ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// See C99 6.7.5.3p7 and C99 6.3.2.1p3. 596ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getArrayDecayedType(QualType T); 597ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 598ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getIntegerTypeOrder - Returns the highest ranked integer type: 599ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// C99 6.3.1.8p1. If LHS > RHS, return 1. If LHS == RHS, return 0. If 600ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// LHS < RHS, return -1. 601ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int getIntegerTypeOrder(QualType LHS, QualType RHS); 602ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 603ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getFloatingTypeOrder - Compare the rank of the two specified floating 604ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// point types, ignoring the domain of the type (i.e. 'double' == 605ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// '_Complex double'). If LHS > RHS, return 1. If LHS == RHS, return 0. If 606ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// LHS < RHS, return -1. 607ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project int getFloatingTypeOrder(QualType LHS, QualType RHS); 608ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 609ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// getFloatingTypeOfSizeWithinDomain - Returns a real floating 610ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// point or a complex type (based on typeDomain/typeSize). 611ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 'typeDomain' is a real floating point or complex type. 612ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// 'typeSize' is a real floating point or complex type. 613df143a5041f03a22808b59c76698770b74692815Selim Gurun QualType getFloatingTypeOfSizeWithinDomain(QualType typeSize, 614ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType typeDomain) const; 615ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 616ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectprivate: 617ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Helper for integer ordering 618ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned getIntegerRank(Type* T); 619ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 620ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectpublic: 621ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 622ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 623ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Type Compatibility Predicates 624ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 625ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 626ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// Compatibility predicates used to check assignment expressions. 627ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool typesAreCompatible(QualType, QualType); // C99 6.2.7p1 628ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool typesAreBlockCompatible(QualType lhs, QualType rhs); 629ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 630ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool isObjCIdType(QualType T) const { 631ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return T == ObjCIdType; 632ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 633ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool isObjCIdStructType(QualType T) const { 634ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!IdStructType) // ObjC isn't enabled 635ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return false; 636ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return T->getAsStructureType() == IdStructType; 637ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 638ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool isObjCClassType(QualType T) const { 639ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return T == ObjCClassType; 640ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 641ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool isObjCClassStructType(QualType T) const { 642ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project if (!ClassStructType) // ObjC isn't enabled 643ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return false; 644ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return T->getAsStructureType() == ClassStructType; 645ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 646ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool isObjCSelType(QualType T) const { 647ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project assert(SelStructType && "isObjCSelType used before 'SEL' type is built"); 648ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return T->getAsStructureType() == SelStructType; 649ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 650ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 651ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Check the safety of assignment from LHS to RHS 652ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool canAssignObjCInterfaces(const ObjCInterfaceType *LHS, 653ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const ObjCInterfaceType *RHS); 654ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool areComparableObjCPointerTypes(QualType LHS, QualType RHS); 655ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 656ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Functions for calculating composite types 657ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType mergeTypes(QualType, QualType); 658ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType mergeFunctionTypes(QualType, QualType); 659ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 660ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 661ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Integer Predicates 662ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 663ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 664ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // The width of an integer, as defined in C99 6.2.6.2. This is the number 665ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // of bits in an integer type excluding any padding bits. 666ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project unsigned getIntWidth(QualType T); 667ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 668ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Per C99 6.2.5p6, for every signed integer type, there is a corresponding 669ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // unsigned integer type. This method takes a signed type, and returns the 670ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // corresponding unsigned integer type. 671ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project QualType getCorrespondingUnsignedType(QualType T); 672ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 673ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 674ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Type Iterators. 675ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 676df143a5041f03a22808b59c76698770b74692815Selim Gurun 677ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project typedef std::vector<Type*>::iterator type_iterator; 678ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project typedef std::vector<Type*>::const_iterator const_type_iterator; 679ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 680ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type_iterator types_begin() { return Types.begin(); } 681ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project type_iterator types_end() { return Types.end(); } 682ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const_type_iterator types_begin() const { return Types.begin(); } 683ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project const_type_iterator types_end() const { return Types.end(); } 684ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 685ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 686ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Serialization 687ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 688ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 689ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void EmitASTBitcodeBuffer(std::vector<unsigned char> &Buffer) const; 690ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project static ASTContext *ReadASTBitcodeBuffer(llvm::MemoryBuffer &MBuffer, 691ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FileManager &FMgr); 692ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 693ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void Emit(llvm::Serializer& S) const; 694ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project static ASTContext *Create(llvm::Deserializer& D); 695ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 696ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 697ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Integer Values 698ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project //===--------------------------------------------------------------------===// 699ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 700ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// MakeIntValue - Make an APSInt of the appropriate width and 701ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project /// signedness for the given \arg Value and integer \arg Type. 702ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::APSInt MakeIntValue(uint64_t Value, QualType Type) { 703ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project llvm::APSInt Res(getIntWidth(Type), !Type->isSignedIntegerType()); 704ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project Res = Value; 705ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return Res; 706ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project } 707ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 708ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectprivate: 709ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project ASTContext(const ASTContext&); // DO NOT IMPLEMENT 710ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void operator=(const ASTContext&); // DO NOT IMPLEMENT 711ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 712ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void InitBuiltinTypes(); 713ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void InitBuiltinType(QualType &R, BuiltinType::Kind K); 714ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 715ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project // Return the ObjC type encoding for a given type. 716ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project void getObjCEncodingForTypeImpl(QualType t, std::string &S, 717ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool ExpandPointedToStructures, 718ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool ExpandStructures, 719ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project FieldDecl *Field, 720ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool OutermostType = false, 721ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project bool EncodingProperty = false) const; 722ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 723ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project}; 724ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 725ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} // end namespace clang 726ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 727ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// operator new and delete aren't allowed inside namespaces. 728ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project// The throw specifications are mandated by the standard. 729ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @brief Placement new for using the ASTContext's allocator. 730ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// 731ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// This placement form of operator new uses the ASTContext's allocator for 732ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// obtaining memory. It is a non-throwing new, which means that it returns 733ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// null on error. (If that is what the allocator does. The current does, so if 734ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// this ever changes, this operator will have to be changed, too.) 735ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// Usage looks like this (assuming there's an ASTContext 'Context' in scope): 736ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @code 737ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// // Default alignment (16) 738ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// IntegerLiteral *Ex = new (Context) IntegerLiteral(arguments); 739ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// // Specific alignment 740ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// IntegerLiteral *Ex2 = new (Context, 8) IntegerLiteral(arguments); 741ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @endcode 742ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// Please note that you cannot use delete on the pointer; it must be 743ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// deallocated using an explicit destructor call followed by 744ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @c Context.Deallocate(Ptr). 745ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// 746ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @param Bytes The number of bytes to allocate. Calculated by the compiler. 747ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @param C The ASTContext that provides the allocator. 748df143a5041f03a22808b59c76698770b74692815Selim Gurun/// @param Alignment The alignment of the allocated memory (if the underlying 749ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// allocator supports it). 750ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @return The allocated memory. Could be NULL. 751ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectinline void *operator new(size_t Bytes, clang::ASTContext &C, 752ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project size_t Alignment = 16) throw () { 753ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return C.Allocate(Bytes, Alignment); 754ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 755ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @brief Placement delete companion to the new above. 756ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// 757ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// This operator is just a companion to the new above. There is no way of 758ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// invoking it directly; see the new operator for more details. This operator 759ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// is called implicitly by the compiler if a placement new expression using 760ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// the ASTContext throws in the object constructor. 761ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectinline void operator delete(void *Ptr, clang::ASTContext &C) 762ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project throw () { 763ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project C.Deallocate(Ptr); 764ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 765ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 766ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// This placement form of operator new[] uses the ASTContext's allocator for 767ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// obtaining memory. It is a non-throwing new[], which means that it returns 768ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// null on error. 769ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// Usage looks like this (assuming there's an ASTContext 'Context' in scope): 770ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @code 771ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// // Default alignment (16) 772ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// char *data = new (Context) char[10]; 773ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// // Specific alignment 774ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// char *data = new (Context, 8) char[10]; 775ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @endcode 776ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// Please note that you cannot use delete on the pointer; it must be 777ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// deallocated using an explicit destructor call followed by 778df143a5041f03a22808b59c76698770b74692815Selim Gurun/// @c Context.Deallocate(Ptr). 779ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// 780ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @param Bytes The number of bytes to allocate. Calculated by the compiler. 781ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @param C The ASTContext that provides the allocator. 782ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @param Alignment The alignment of the allocated memory (if the underlying 783ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// allocator supports it). 784df143a5041f03a22808b59c76698770b74692815Selim Gurun/// @return The allocated memory. Could be NULL. 785ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectinline void *operator new[](size_t Bytes, clang::ASTContext& C, 786df143a5041f03a22808b59c76698770b74692815Selim Gurun size_t Alignment = 16) throw () { 787ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project return C.Allocate(Bytes, Alignment); 788ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 789ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 790ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// @brief Placement delete[] companion to the new[] above. 791ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// 792ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// This operator is just a companion to the new[] above. There is no way of 793ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// invoking it directly; see the new[] operator for more details. This operator 794ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// is called implicitly by the compiler if a placement new[] expression using 795ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project/// the ASTContext throws in the object constructor. 796ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Projectinline void operator delete[](void *Ptr, clang::ASTContext &C) throw () { 797ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project C.Deallocate(Ptr); 798ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project} 799ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project 800ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project#endif 801ab4e2e90f63db6b1cd8bb2e453cac899ef43d42bThe Android Open Source Project