ASTCommon.cpp revision 3f59c975aa5d047f7edd1b900b5e885c38af0ef7
15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===--- ASTCommon.cpp - Common stuff for ASTReader/ASTWriter----*- C++ -*-===//
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//                     The LLVM Compiler Infrastructure
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// This file is distributed under the University of Illinois Open Source
65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// License. See LICENSE.TXT for details.
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//  This file defines common functions that both ASTReader and ASTWriter use.
115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)//===----------------------------------------------------------------------===//
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ASTCommon.h"
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "clang/Serialization/ASTDeserializationListener.h"
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "clang/Basic/IdentifierTable.h"
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "llvm/ADT/StringExtras.h"
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)using namespace clang;
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Give ASTDeserializationListener's VTable a home.
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)ASTDeserializationListener::~ASTDeserializationListener() { }
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)serialization::TypeIdx
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)serialization::TypeIdxFromBuiltin(const BuiltinType *BT) {
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unsigned ID = 0;
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  switch (BT->getKind()) {
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Void:       ID = PREDEF_TYPE_VOID_ID;       break;
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Bool:       ID = PREDEF_TYPE_BOOL_ID;       break;
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Char_U:     ID = PREDEF_TYPE_CHAR_U_ID;     break;
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::UChar:      ID = PREDEF_TYPE_UCHAR_ID;      break;
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::UShort:     ID = PREDEF_TYPE_USHORT_ID;     break;
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::UInt:       ID = PREDEF_TYPE_UINT_ID;       break;
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::ULong:      ID = PREDEF_TYPE_ULONG_ID;      break;
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::ULongLong:  ID = PREDEF_TYPE_ULONGLONG_ID;  break;
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::UInt128:    ID = PREDEF_TYPE_UINT128_ID;    break;
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Char_S:     ID = PREDEF_TYPE_CHAR_S_ID;     break;
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::SChar:      ID = PREDEF_TYPE_SCHAR_ID;      break;
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::WChar_S:
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::WChar_U:    ID = PREDEF_TYPE_WCHAR_ID;      break;
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Short:      ID = PREDEF_TYPE_SHORT_ID;      break;
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Int:        ID = PREDEF_TYPE_INT_ID;        break;
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Long:       ID = PREDEF_TYPE_LONG_ID;       break;
445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::LongLong:   ID = PREDEF_TYPE_LONGLONG_ID;   break;
455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Int128:     ID = PREDEF_TYPE_INT128_ID;     break;
465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Float:      ID = PREDEF_TYPE_FLOAT_ID;      break;
475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Double:     ID = PREDEF_TYPE_DOUBLE_ID;     break;
485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::LongDouble: ID = PREDEF_TYPE_LONGDOUBLE_ID; break;
495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::NullPtr:    ID = PREDEF_TYPE_NULLPTR_ID;    break;
505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Char16:     ID = PREDEF_TYPE_CHAR16_ID;     break;
515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Char32:     ID = PREDEF_TYPE_CHAR32_ID;     break;
525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Overload:   ID = PREDEF_TYPE_OVERLOAD_ID;   break;
535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::Dependent:  ID = PREDEF_TYPE_DEPENDENT_ID;  break;
545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::ObjCId:     ID = PREDEF_TYPE_OBJC_ID;       break;
555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::ObjCClass:  ID = PREDEF_TYPE_OBJC_CLASS;    break;
565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::ObjCSel:    ID = PREDEF_TYPE_OBJC_SEL;      break;
575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  case BuiltinType::UndeducedAuto:
585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    assert(0 && "Should not see undeduced auto here");
595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    break;
605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return TypeIdx(ID);
635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)unsigned serialization::ComputeHash(Selector Sel) {
665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unsigned N = Sel.getNumArgs();
675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  if (N == 0)
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    ++N;
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  unsigned R = 5381;
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  for (unsigned I = 0; I != N; ++I)
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    if (IdentifierInfo *II = Sel.getIdentifierInfoForSlot(I))
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      R = llvm::HashString(II->getName(), R);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  return R;
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)