[cfe-commits] r111634 - in /cfe/trunk: include/clang/Serialization/ASTWriter.h lib/Serialization/ASTCommon.cpp lib/Serialization/ASTCommon.h lib/Serialization/ASTWriter.cpp

Argyrios Kyrtzidis akyrtzi at gmail.com
Fri Aug 20 09:04:21 PDT 2010


Author: akirtzidis
Date: Fri Aug 20 11:04:20 2010
New Revision: 111634

URL: http://llvm.org/viewvc/llvm-project?rev=111634&view=rev
Log:
Refactoring; move the functionality of ASTWriter::GetOrCreateTypeID to the more generic
MakeTypeID template function which accepts a type and a function object that returns a TypeIdx.

MakeTypeID is in PCHCommon.h so that it can be used by ASTReader too.

Modified:
    cfe/trunk/include/clang/Serialization/ASTWriter.h
    cfe/trunk/lib/Serialization/ASTCommon.cpp
    cfe/trunk/lib/Serialization/ASTCommon.h
    cfe/trunk/lib/Serialization/ASTWriter.cpp

Modified: cfe/trunk/include/clang/Serialization/ASTWriter.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Serialization/ASTWriter.h?rev=111634&r1=111633&r2=111634&view=diff
==============================================================================
--- cfe/trunk/include/clang/Serialization/ASTWriter.h (original)
+++ cfe/trunk/include/clang/Serialization/ASTWriter.h Fri Aug 20 11:04:20 2010
@@ -367,6 +367,9 @@
   /// \brief Force a type to be emitted and get its ID.
   serialization::TypeID GetOrCreateTypeID(QualType T);
 
+  /// \brief Determine the type ID of an already-emitted type.
+  serialization::TypeID getTypeID(QualType T);
+
   /// \brief Force a type to be emitted and get its index.
   serialization::TypeIdx GetOrCreateTypeIdx(QualType T);
 

Modified: cfe/trunk/lib/Serialization/ASTCommon.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTCommon.cpp?rev=111634&r1=111633&r2=111634&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTCommon.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTCommon.cpp Fri Aug 20 11:04:20 2010
@@ -17,6 +17,46 @@
 
 using namespace clang;
 
+serialization::TypeIdx
+serialization::TypeIdxFromBuiltin(const BuiltinType *BT) {
+  unsigned ID = 0;
+  switch (BT->getKind()) {
+  case BuiltinType::Void:       ID = PREDEF_TYPE_VOID_ID;       break;
+  case BuiltinType::Bool:       ID = PREDEF_TYPE_BOOL_ID;       break;
+  case BuiltinType::Char_U:     ID = PREDEF_TYPE_CHAR_U_ID;     break;
+  case BuiltinType::UChar:      ID = PREDEF_TYPE_UCHAR_ID;      break;
+  case BuiltinType::UShort:     ID = PREDEF_TYPE_USHORT_ID;     break;
+  case BuiltinType::UInt:       ID = PREDEF_TYPE_UINT_ID;       break;
+  case BuiltinType::ULong:      ID = PREDEF_TYPE_ULONG_ID;      break;
+  case BuiltinType::ULongLong:  ID = PREDEF_TYPE_ULONGLONG_ID;  break;
+  case BuiltinType::UInt128:    ID = PREDEF_TYPE_UINT128_ID;    break;
+  case BuiltinType::Char_S:     ID = PREDEF_TYPE_CHAR_S_ID;     break;
+  case BuiltinType::SChar:      ID = PREDEF_TYPE_SCHAR_ID;      break;
+  case BuiltinType::WChar:      ID = PREDEF_TYPE_WCHAR_ID;      break;
+  case BuiltinType::Short:      ID = PREDEF_TYPE_SHORT_ID;      break;
+  case BuiltinType::Int:        ID = PREDEF_TYPE_INT_ID;        break;
+  case BuiltinType::Long:       ID = PREDEF_TYPE_LONG_ID;       break;
+  case BuiltinType::LongLong:   ID = PREDEF_TYPE_LONGLONG_ID;   break;
+  case BuiltinType::Int128:     ID = PREDEF_TYPE_INT128_ID;     break;
+  case BuiltinType::Float:      ID = PREDEF_TYPE_FLOAT_ID;      break;
+  case BuiltinType::Double:     ID = PREDEF_TYPE_DOUBLE_ID;     break;
+  case BuiltinType::LongDouble: ID = PREDEF_TYPE_LONGDOUBLE_ID; break;
+  case BuiltinType::NullPtr:    ID = PREDEF_TYPE_NULLPTR_ID;    break;
+  case BuiltinType::Char16:     ID = PREDEF_TYPE_CHAR16_ID;     break;
+  case BuiltinType::Char32:     ID = PREDEF_TYPE_CHAR32_ID;     break;
+  case BuiltinType::Overload:   ID = PREDEF_TYPE_OVERLOAD_ID;   break;
+  case BuiltinType::Dependent:  ID = PREDEF_TYPE_DEPENDENT_ID;  break;
+  case BuiltinType::ObjCId:     ID = PREDEF_TYPE_OBJC_ID;       break;
+  case BuiltinType::ObjCClass:  ID = PREDEF_TYPE_OBJC_CLASS;    break;
+  case BuiltinType::ObjCSel:    ID = PREDEF_TYPE_OBJC_SEL;      break;
+  case BuiltinType::UndeducedAuto:
+    assert(0 && "Should not see undeduced auto here");
+    break;
+  }
+
+  return TypeIdx(ID);
+}
+
 unsigned serialization::ComputeHash(Selector Sel) {
   unsigned N = Sel.getNumArgs();
   if (N == 0)

Modified: cfe/trunk/lib/Serialization/ASTCommon.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTCommon.h?rev=111634&r1=111633&r2=111634&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTCommon.h (original)
+++ cfe/trunk/lib/Serialization/ASTCommon.h Fri Aug 20 11:04:20 2010
@@ -14,11 +14,33 @@
 #ifndef LLVM_CLANG_SERIALIZATION_LIB_AST_COMMON_H
 #define LLVM_CLANG_SERIALIZATION_LIB_AST_COMMON_H
 
+#include "clang/Serialization/ASTBitCodes.h"
+
 namespace clang {
-  class Selector;
 
 namespace serialization {
 
+TypeIdx TypeIdxFromBuiltin(const BuiltinType *BT);
+
+template <typename IdxForTypeTy>
+TypeID MakeTypeID(QualType T, IdxForTypeTy IdxForType) {
+  if (T.isNull())
+    return PREDEF_TYPE_NULL_ID;
+
+  unsigned FastQuals = T.getLocalFastQualifiers();
+  T.removeFastQualifiers();
+
+  if (T.hasLocalNonFastQualifiers())
+    return IdxForType(T).asTypeID(FastQuals);
+
+  assert(!T.hasLocalQualifiers());
+
+  if (const BuiltinType *BT = dyn_cast<BuiltinType>(T.getTypePtr()))
+    return TypeIdxFromBuiltin(BT).asTypeID(FastQuals);
+
+  return IdxForType(T).asTypeID(FastQuals);
+}
+
 unsigned ComputeHash(Selector Sel);
 
 } // namespace serialization

Modified: cfe/trunk/lib/Serialization/ASTWriter.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Serialization/ASTWriter.cpp?rev=111634&r1=111633&r2=111634&view=diff
==============================================================================
--- cfe/trunk/lib/Serialization/ASTWriter.cpp (original)
+++ cfe/trunk/lib/Serialization/ASTWriter.cpp Fri Aug 20 11:04:20 2010
@@ -2583,57 +2583,13 @@
 }
 
 TypeID ASTWriter::GetOrCreateTypeID(QualType T) {
-  if (T.isNull())
-    return PREDEF_TYPE_NULL_ID;
-
-  unsigned FastQuals = T.getLocalFastQualifiers();
-  T.removeFastQualifiers();
-
-  if (T.hasLocalNonFastQualifiers())
-    return GetOrCreateTypeIdx(T).asTypeID(FastQuals);
-
-  assert(!T.hasLocalQualifiers());
-
-  if (const BuiltinType *BT = dyn_cast<BuiltinType>(T.getTypePtr())) {
-    TypeID ID = 0;
-    switch (BT->getKind()) {
-    case BuiltinType::Void:       ID = PREDEF_TYPE_VOID_ID;       break;
-    case BuiltinType::Bool:       ID = PREDEF_TYPE_BOOL_ID;       break;
-    case BuiltinType::Char_U:     ID = PREDEF_TYPE_CHAR_U_ID;     break;
-    case BuiltinType::UChar:      ID = PREDEF_TYPE_UCHAR_ID;      break;
-    case BuiltinType::UShort:     ID = PREDEF_TYPE_USHORT_ID;     break;
-    case BuiltinType::UInt:       ID = PREDEF_TYPE_UINT_ID;       break;
-    case BuiltinType::ULong:      ID = PREDEF_TYPE_ULONG_ID;      break;
-    case BuiltinType::ULongLong:  ID = PREDEF_TYPE_ULONGLONG_ID;  break;
-    case BuiltinType::UInt128:    ID = PREDEF_TYPE_UINT128_ID;    break;
-    case BuiltinType::Char_S:     ID = PREDEF_TYPE_CHAR_S_ID;     break;
-    case BuiltinType::SChar:      ID = PREDEF_TYPE_SCHAR_ID;      break;
-    case BuiltinType::WChar:      ID = PREDEF_TYPE_WCHAR_ID;      break;
-    case BuiltinType::Short:      ID = PREDEF_TYPE_SHORT_ID;      break;
-    case BuiltinType::Int:        ID = PREDEF_TYPE_INT_ID;        break;
-    case BuiltinType::Long:       ID = PREDEF_TYPE_LONG_ID;       break;
-    case BuiltinType::LongLong:   ID = PREDEF_TYPE_LONGLONG_ID;   break;
-    case BuiltinType::Int128:     ID = PREDEF_TYPE_INT128_ID;     break;
-    case BuiltinType::Float:      ID = PREDEF_TYPE_FLOAT_ID;      break;
-    case BuiltinType::Double:     ID = PREDEF_TYPE_DOUBLE_ID;     break;
-    case BuiltinType::LongDouble: ID = PREDEF_TYPE_LONGDOUBLE_ID; break;
-    case BuiltinType::NullPtr:    ID = PREDEF_TYPE_NULLPTR_ID;    break;
-    case BuiltinType::Char16:     ID = PREDEF_TYPE_CHAR16_ID;     break;
-    case BuiltinType::Char32:     ID = PREDEF_TYPE_CHAR32_ID;     break;
-    case BuiltinType::Overload:   ID = PREDEF_TYPE_OVERLOAD_ID;   break;
-    case BuiltinType::Dependent:  ID = PREDEF_TYPE_DEPENDENT_ID;  break;
-    case BuiltinType::ObjCId:     ID = PREDEF_TYPE_OBJC_ID;       break;
-    case BuiltinType::ObjCClass:  ID = PREDEF_TYPE_OBJC_CLASS;    break;
-    case BuiltinType::ObjCSel:    ID = PREDEF_TYPE_OBJC_SEL;      break;
-    case BuiltinType::UndeducedAuto:
-      assert(0 && "Should not see undeduced auto here");
-      break;
-    }
-
-    return TypeIdx(ID).asTypeID(FastQuals);
-  }
+  return MakeTypeID(T,
+              std::bind1st(std::mem_fun(&ASTWriter::GetOrCreateTypeIdx), this));
+}
 
-  return GetOrCreateTypeIdx(T).asTypeID(FastQuals);
+TypeID ASTWriter::getTypeID(QualType T) {
+  return MakeTypeID(T,
+              std::bind1st(std::mem_fun(&ASTWriter::getTypeIdx), this));
 }
 
 TypeIdx ASTWriter::GetOrCreateTypeIdx(QualType T) {





More information about the cfe-commits mailing list