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

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

index 06c907a865ceec46802e6f70323482a140883433..24ff9f34a07f07f96732cfccd7bd8a74416177e9 100644 (file)
@@ -88,6 +88,10 @@ void Type::Create(ASTContext& Context, unsigned i, Deserializer& D) {
     case Type::TypeName:
       D.RegisterPtr(PtrID,TypedefType::CreateImpl(Context,D));
       break;
+      
+    case Type::VariableArray:
+      D.RegisterPtr(PtrID,VariableArrayType::CreateImpl(Context,D));
+      break;
   }
 }
 
@@ -199,3 +203,22 @@ Type* TypedefType::CreateImpl(ASTContext& Context, Deserializer& D) {
   return T;
 }
   
+//===----------------------------------------------------------------------===//
+// VariableArrayType
+//===----------------------------------------------------------------------===//
+
+void VariableArrayType::EmitImpl(Serializer& S) const {
+  S.Emit(getElementType());
+  S.EmitInt(getSizeModifier());
+  S.EmitInt(getIndexTypeQualifier());
+  S.EmitOwnedPtr(SizeExpr);
+}
+
+Type* VariableArrayType::CreateImpl(ASTContext& Context, Deserializer& D) {
+  QualType ElTy = QualType::ReadVal(D);
+  ArraySizeModifier am = static_cast<ArraySizeModifier>(D.ReadInt());
+  unsigned ITQ = D.ReadInt();  
+  Expr* SizeExpr = D.ReadOwnedPtr<Expr>();
+  
+  return Context.getVariableArrayType(ElTy,SizeExpr,am,ITQ).getTypePtr();
+}
index 08ab146c07f9bd626bb7a9ee7a9e5d4e8eafa466..1209a70a050db183ad81a4102d82a776a7516a3a 100644 (file)
@@ -599,6 +599,11 @@ public:
   static void Profile(llvm::FoldingSetNodeID &ID, QualType ET) {
     ID.AddPointer(ET.getAsOpaquePtr());
   }
+  
+protected:  
+  virtual void EmitImpl(llvm::Serializer& S) const;
+  static Type* CreateImpl(ASTContext& Context,llvm::Deserializer& D);
+  friend class Type;
 };
 
 /// VectorType - GCC generic vector type. This type is created using