diff options
author | Ted Kremenek <kremenek@apple.com> | 2007-11-14 00:31:36 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2007-11-14 00:31:36 +0000 |
commit | ed1a01d4d0ee773eb6478ff9701b46d2f0c06952 (patch) | |
tree | bd2518cda07d0a039054cfc5c449884143492f42 | |
parent | b28166d11e788bc99fd5cd47c4f649ea0195c3b1 (diff) |
Implemented serialization of VariableArrayTypes.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@44093 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | AST/TypeSerialization.cpp | 23 | ||||
-rw-r--r-- | include/clang/AST/Type.h | 5 |
2 files changed, 28 insertions, 0 deletions
diff --git a/AST/TypeSerialization.cpp b/AST/TypeSerialization.cpp index 06c907a865..24ff9f34a0 100644 --- a/AST/TypeSerialization.cpp +++ b/AST/TypeSerialization.cpp @@ -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(); +} diff --git a/include/clang/AST/Type.h b/include/clang/AST/Type.h index 08ab146c07..1209a70a05 100644 --- a/include/clang/AST/Type.h +++ b/include/clang/AST/Type.h @@ -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 |