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

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

index cf2ae47f403c822a5b1bcd1030d7e5ec7b300133..93b2ce3271259f0752785aae601a12a7758614e6 100644 (file)
@@ -70,6 +70,9 @@ void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) {
       D.RegisterPtr(PtrID,ComplexType::CreateImpl(Context,D));
       break;
       
+    case Type::ConstantArray:
+      D.RegisterPtr(PtrID,ConstantArrayType::CreateImpl(Context,D));
+      
     case Type::FunctionProto:
       D.RegisterPtr(PtrID,FunctionTypeProto::CreateImpl(Context,D));
       break;
@@ -96,6 +99,28 @@ Type* ComplexType::CreateImpl(ASTContext& Context, Deserializer& D) {
   return Context.getComplexType(QualType::ReadVal(D)).getTypePtr();
 }
 
+//===----------------------------------------------------------------------===//
+// ConstantArray
+//===----------------------------------------------------------------------===//
+
+void ConstantArrayType::EmitImpl(Serializer& S) const {
+  S.Emit(getElementType());
+  S.EmitInt(getSizeModifier());
+  S.EmitInt(getIndexTypeQualifier());
+  S.Emit(Size);
+}
+
+Type* ConstantArrayType::CreateImpl(ASTContext& Context, Deserializer& D) {
+  QualType ElTy = QualType::ReadVal(D);
+  ArraySizeModifier am = static_cast<ArraySizeModifier>(D.ReadInt());
+  unsigned ITQ = D.ReadInt();
+
+  llvm::APInt Size;
+  D.Read(Size);
+
+  return Context.getConstantArrayType(ElTy,Size,am,ITQ).getTypePtr();
+}
+
 //===----------------------------------------------------------------------===//
 // FunctionTypeProto
 //===----------------------------------------------------------------------===//
index 430474484b0d5c58835fae5332f0ee0ad23506e4..7c55883fc620e6e267d44f375528b5463cc8fd90 100644 (file)
@@ -560,6 +560,11 @@ public:
     return T->getTypeClass() == ConstantArray; 
   }
   static bool classof(const ConstantArrayType *) { return true; }
+  
+protected:  
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static Type* CreateImpl(ASTContext& Context, llvm::Deserializer& D);
+  friend class Type;
 };
 
 // FIXME: VariableArrayType's aren't uniqued (since expressions aren't).