clang API Documentation
00001 //===- ASTCommon.h - Common stuff for ASTReader/ASTWriter -*- C++ -*-=========// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file defines common functions that both ASTReader and ASTWriter use. 00011 // 00012 //===----------------------------------------------------------------------===// 00013 00014 #ifndef LLVM_CLANG_SERIALIZATION_LIB_AST_COMMON_H 00015 #define LLVM_CLANG_SERIALIZATION_LIB_AST_COMMON_H 00016 00017 #include "clang/Serialization/ASTBitCodes.h" 00018 #include "clang/AST/ASTContext.h" 00019 00020 namespace clang { 00021 00022 namespace serialization { 00023 00024 enum DeclUpdateKind { 00025 UPD_CXX_ADDED_IMPLICIT_MEMBER, 00026 UPD_CXX_ADDED_TEMPLATE_SPECIALIZATION, 00027 UPD_CXX_ADDED_ANONYMOUS_NAMESPACE, 00028 UPD_CXX_INSTANTIATED_STATIC_DATA_MEMBER 00029 }; 00030 00031 TypeIdx TypeIdxFromBuiltin(const BuiltinType *BT); 00032 00033 template <typename IdxForTypeTy> 00034 TypeID MakeTypeID(ASTContext &Context, QualType T, IdxForTypeTy IdxForType) { 00035 if (T.isNull()) 00036 return PREDEF_TYPE_NULL_ID; 00037 00038 unsigned FastQuals = T.getLocalFastQualifiers(); 00039 T.removeLocalFastQualifiers(); 00040 00041 if (T.hasLocalNonFastQualifiers()) 00042 return IdxForType(T).asTypeID(FastQuals); 00043 00044 assert(!T.hasLocalQualifiers()); 00045 00046 if (const BuiltinType *BT = dyn_cast<BuiltinType>(T.getTypePtr())) 00047 return TypeIdxFromBuiltin(BT).asTypeID(FastQuals); 00048 00049 if (T == Context.AutoDeductTy) 00050 return TypeIdx(PREDEF_TYPE_AUTO_DEDUCT).asTypeID(FastQuals); 00051 if (T == Context.AutoRRefDeductTy) 00052 return TypeIdx(PREDEF_TYPE_AUTO_RREF_DEDUCT).asTypeID(FastQuals); 00053 00054 return IdxForType(T).asTypeID(FastQuals); 00055 } 00056 00057 unsigned ComputeHash(Selector Sel); 00058 00059 } // namespace serialization 00060 00061 } // namespace clang 00062 00063 #endif