ASTCommon.cpp revision 218893
176224Sobrien//===--- ASTCommon.cpp - Common stuff for ASTReader/ASTWriter----*- C++ -*-===// 276224Sobrien// 376224Sobrien// The LLVM Compiler Infrastructure 476224Sobrien// 576224Sobrien// This file is distributed under the University of Illinois Open Source 638928Sjdp// License. See LICENSE.TXT for details. 738928Sjdp// 838928Sjdp//===----------------------------------------------------------------------===// 976224Sobrien// 1038928Sjdp// This file defines common functions that both ASTReader and ASTWriter use. 1138928Sjdp// 1238928Sjdp//===----------------------------------------------------------------------===// 1338928Sjdp 1438928Sjdp#include "ASTCommon.h" 1538928Sjdp#include "clang/Serialization/ASTDeserializationListener.h" 1638928Sjdp#include "clang/Basic/IdentifierTable.h" 1738928Sjdp#include "llvm/ADT/StringExtras.h" 1838928Sjdp 1938928Sjdpusing namespace clang; 2038928Sjdp 2138928Sjdp// Give ASTDeserializationListener's VTable a home. 2238928SjdpASTDeserializationListener::~ASTDeserializationListener() { } 2338928Sjdp 2438928Sjdpserialization::TypeIdx 2538928Sjdpserialization::TypeIdxFromBuiltin(const BuiltinType *BT) { 2638928Sjdp unsigned ID = 0; 2738928Sjdp switch (BT->getKind()) { 2838928Sjdp case BuiltinType::Void: ID = PREDEF_TYPE_VOID_ID; break; 2938928Sjdp case BuiltinType::Bool: ID = PREDEF_TYPE_BOOL_ID; break; 3038928Sjdp case BuiltinType::Char_U: ID = PREDEF_TYPE_CHAR_U_ID; break; 3138928Sjdp case BuiltinType::UChar: ID = PREDEF_TYPE_UCHAR_ID; break; 3238928Sjdp case BuiltinType::UShort: ID = PREDEF_TYPE_USHORT_ID; break; 3338928Sjdp case BuiltinType::UInt: ID = PREDEF_TYPE_UINT_ID; break; 3438928Sjdp case BuiltinType::ULong: ID = PREDEF_TYPE_ULONG_ID; break; 3538928Sjdp case BuiltinType::ULongLong: ID = PREDEF_TYPE_ULONGLONG_ID; break; 3638928Sjdp case BuiltinType::UInt128: ID = PREDEF_TYPE_UINT128_ID; break; 3738928Sjdp case BuiltinType::Char_S: ID = PREDEF_TYPE_CHAR_S_ID; break; 3838928Sjdp case BuiltinType::SChar: ID = PREDEF_TYPE_SCHAR_ID; break; 3938928Sjdp case BuiltinType::WChar_S: 4038928Sjdp case BuiltinType::WChar_U: ID = PREDEF_TYPE_WCHAR_ID; break; 4138928Sjdp case BuiltinType::Short: ID = PREDEF_TYPE_SHORT_ID; break; 4238928Sjdp case BuiltinType::Int: ID = PREDEF_TYPE_INT_ID; break; 4338928Sjdp case BuiltinType::Long: ID = PREDEF_TYPE_LONG_ID; break; 4438928Sjdp case BuiltinType::LongLong: ID = PREDEF_TYPE_LONGLONG_ID; break; 4538928Sjdp case BuiltinType::Int128: ID = PREDEF_TYPE_INT128_ID; break; 4638928Sjdp case BuiltinType::Float: ID = PREDEF_TYPE_FLOAT_ID; break; 4738928Sjdp case BuiltinType::Double: ID = PREDEF_TYPE_DOUBLE_ID; break; 4838928Sjdp case BuiltinType::LongDouble: ID = PREDEF_TYPE_LONGDOUBLE_ID; break; 4938928Sjdp case BuiltinType::NullPtr: ID = PREDEF_TYPE_NULLPTR_ID; break; 5038928Sjdp case BuiltinType::Char16: ID = PREDEF_TYPE_CHAR16_ID; break; 5138928Sjdp case BuiltinType::Char32: ID = PREDEF_TYPE_CHAR32_ID; break; 5238928Sjdp case BuiltinType::Overload: ID = PREDEF_TYPE_OVERLOAD_ID; break; 5338928Sjdp case BuiltinType::Dependent: ID = PREDEF_TYPE_DEPENDENT_ID; break; 5438928Sjdp case BuiltinType::ObjCId: ID = PREDEF_TYPE_OBJC_ID; break; 5538928Sjdp case BuiltinType::ObjCClass: ID = PREDEF_TYPE_OBJC_CLASS; break; 5638928Sjdp case BuiltinType::ObjCSel: ID = PREDEF_TYPE_OBJC_SEL; break; 5738928Sjdp } 5838928Sjdp 5938928Sjdp return TypeIdx(ID); 6038928Sjdp} 6138928Sjdp 6238928Sjdpunsigned serialization::ComputeHash(Selector Sel) { 6338928Sjdp unsigned N = Sel.getNumArgs(); 6438928Sjdp if (N == 0) 6538928Sjdp ++N; 6638928Sjdp unsigned R = 5381; 6738928Sjdp for (unsigned I = 0; I != N; ++I) 6838928Sjdp if (IdentifierInfo *II = Sel.getIdentifierInfoForSlot(I)) 6938928Sjdp R = llvm::HashString(II->getName(), R); 7038928Sjdp return R; 7138928Sjdp} 7238928Sjdp