]> granicus.if.org Git - clang/commitdiff
Implemented serialization of TypedefType.
authorTed Kremenek <kremenek@apple.com>
Wed, 14 Nov 2007 00:27:46 +0000 (00:27 +0000)
committerTed Kremenek <kremenek@apple.com>
Wed, 14 Nov 2007 00:27:46 +0000 (00:27 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44092 91177308-0d34-0410-b5e6-96231b3b80d8

AST/TypeSerialization.cpp
include/clang/AST/Type.h

index 93b2ce3271259f0752785aae601a12a7758614e6..06c907a865ceec46802e6f70323482a140883433 100644 (file)
@@ -84,6 +84,10 @@ void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) {
     case Type::Tagged:
       D.RegisterPtr(PtrID,TagType::CreateImpl(Context,D));
       break;
+      
+    case Type::TypeName:
+      D.RegisterPtr(PtrID,TypedefType::CreateImpl(Context,D));
+      break;
   }
 }
 
@@ -173,3 +177,25 @@ Type* TagType::CreateImpl(ASTContext& Context, Deserializer& D) {
   D.ReadPtr(T->Decl); // May be backpatched.  
   return T;
 }
+
+//===----------------------------------------------------------------------===//
+// TypedefType
+//===----------------------------------------------------------------------===//
+
+void TypedefType::EmitImpl(Serializer& S) const {
+  S.Emit(QualType((Type*)this,0).getCanonicalType());
+  S.EmitPtr(Decl);
+}
+
+Type* TypedefType::CreateImpl(ASTContext& Context, Deserializer& D) {
+  std::vector<Type*>& Types = 
+    const_cast<std::vector<Type*>&>(Context.getTypes());
+  
+  TypedefType* T = new TypedefType(NULL,QualType::ReadVal(D));
+  Types.push_back(T);
+  
+  D.ReadPtr(T->Decl); // May be backpatched.
+  
+  return T;
+}
+  
index 7c55883fc620e6e267d44f375528b5463cc8fd90..08ab146c07f9bd626bb7a9ee7a9e5d4e8eafa466 100644 (file)
@@ -824,6 +824,11 @@ public:
 
   static bool classof(const Type *T) { return T->getTypeClass() == TypeName; }
   static bool classof(const TypedefType *) { return true; }
+  
+protected:  
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D);
+  friend class Type;
 };
 
 /// TypeOfExpr (GCC extension).