[cfe-commits] r43648 - in /cfe/trunk: AST/DeclSerialization.cpp include/clang/AST/Decl.h
Ted Kremenek
kremenek at apple.com
Fri Nov 2 11:05:11 PDT 2007
Author: kremenek
Date: Fri Nov 2 13:05:11 2007
New Revision: 43648
URL: http://llvm.org/viewvc/llvm-project?rev=43648&view=rev
Log:
Added most of the boilerplate code for Decl serialization. Still a few
key functions to implement.
Modified:
cfe/trunk/AST/DeclSerialization.cpp
cfe/trunk/include/clang/AST/Decl.h
Modified: cfe/trunk/AST/DeclSerialization.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/AST/DeclSerialization.cpp?rev=43648&r1=43647&r2=43648&view=diff
==============================================================================
--- cfe/trunk/AST/DeclSerialization.cpp (original)
+++ cfe/trunk/AST/DeclSerialization.cpp Fri Nov 2 13:05:11 2007
@@ -26,3 +26,120 @@
assert ("FIXME: not implemented.");
return NULL;
}
+
+void NamedDecl::InternalEmit(llvm::Serializer& S) const {
+ S.EmitPtr(Identifier);
+}
+
+void NamedDecl::InternalRead(llvm::Deserializer& D) {
+ D.ReadPtr(Identifier);
+}
+
+void ScopedDecl::InternalEmit(llvm::Serializer& S) const {
+ NamedDecl::InternalEmit(S);
+ S.EmitPtr(Next);
+ S.EmitOwnedPtr<Decl>(NextDeclarator);
+}
+
+void ScopedDecl::InternalRead(llvm::Deserializer& D) {
+ NamedDecl::InternalRead(D);
+ D.ReadPtr(Next);
+ NextDeclarator = cast<ScopedDecl>(D.ReadOwnedPtr<Decl>());
+}
+
+void ValueDecl::InternalEmit(llvm::Serializer& S) const {
+ S.Emit(DeclType);
+ ScopedDecl::InternalEmit(S);
+}
+
+void ValueDecl::InternalRead(llvm::Deserializer& D) {
+ D.Read(DeclType);
+ ScopedDecl::InternalRead(D);
+}
+
+void VarDecl::InternalEmit(llvm::Serializer& S) const {
+ S.EmitInt(SClass);
+ S.EmitInt(objcDeclQualifier);
+ VarDecl::InternalEmit(S);
+ S.EmitOwnedPtr(Init);
+}
+
+void VarDecl::InternalRead(llvm::Deserializer& D) {
+ SClass = D.ReadInt();
+ objcDeclQualifier = static_cast<ObjcDeclQualifier>(D.ReadInt());
+ VarDecl::InternalRead(D);
+ D.ReadOwnedPtr(Init);
+}
+
+
+void BlockVarDecl::Emit(llvm::Serializer& S) const {
+ S.Emit(getLocation());
+ VarDecl::InternalEmit(S);
+}
+
+BlockVarDecl* BlockVarDecl::Materialize(llvm::Deserializer& D) {
+ SourceLocation L = SourceLocation::ReadVal(D);
+ BlockVarDecl* decl = new BlockVarDecl(L,NULL,QualType(),None,NULL);
+ decl->VarDecl::InternalRead(D);
+ return decl;
+}
+
+void FileVarDecl::Emit(llvm::Serializer& S) const {
+ S.Emit(getLocation());
+ VarDecl::InternalEmit(S);
+}
+
+FileVarDecl* FileVarDecl::Materialize(llvm::Deserializer& D) {
+ SourceLocation L = SourceLocation::ReadVal(D);
+ FileVarDecl* decl = new FileVarDecl(L,NULL,QualType(),None,NULL);
+ decl->VarDecl::InternalRead(D);
+ return decl;
+}
+
+void ParmVarDecl::Emit(llvm::Serializer& S) const {
+ S.Emit(getLocation());
+ VarDecl::InternalEmit(S);
+}
+
+ParmVarDecl* ParmVarDecl::Materialize(llvm::Deserializer& D) {
+ SourceLocation L = SourceLocation::ReadVal(D);
+ ParmVarDecl* decl = new ParmVarDecl(L,NULL,QualType(),None,NULL);
+ decl->VarDecl::InternalRead(D);
+ return decl;
+}
+
+void FunctionDecl::Emit(llvm::Serializer& S) const {
+ S.Emit(getLocation());
+ S.EmitInt(SClass);
+ S.EmitBool(IsInline);
+
+ ValueDecl::InternalEmit(S);
+
+ unsigned NumParams = getNumParams();
+ S.EmitInt(NumParams);
+
+ for (unsigned i = 0 ; i < NumParams; ++i)
+ S.EmitOwnedPtr(ParamInfo[i]);
+
+ S.EmitOwnedPtr(Body);
+}
+
+FunctionDecl* FunctionDecl::Materialize(llvm::Deserializer& D) {
+ SourceLocation L = SourceLocation::ReadVal(D);
+ StorageClass SClass = static_cast<StorageClass>(D.ReadInt());
+ bool IsInline = D.ReadBool();
+
+ FunctionDecl* decl = new FunctionDecl(L,NULL,QualType(),SClass,IsInline);
+
+ decl->ValueDecl::InternalRead(D);
+
+ unsigned NumParams = D.ReadInt();
+ decl->ParamInfo = NumParams ? new ParmVarDecl*[NumParams] : NULL;
+
+ for (unsigned i = 0 ; i < NumParams; ++i)
+ D.ReadOwnedPtr(decl->ParamInfo[i]);
+
+ D.ReadOwnedPtr(decl->Body);
+
+ return decl;
+}
Modified: cfe/trunk/include/clang/AST/Decl.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/AST/Decl.h?rev=43648&r1=43647&r2=43648&view=diff
==============================================================================
--- cfe/trunk/include/clang/AST/Decl.h (original)
+++ cfe/trunk/include/clang/AST/Decl.h Fri Nov 2 13:05:11 2007
@@ -185,16 +185,10 @@
return D->getKind() >= NamedFirst && D->getKind() <= NamedLast;
}
static bool classof(const NamedDecl *D) { return true; }
-
- /// Emit - Serialize this NamedDecl to Bitcode.
- void Emit(llvm::Serializer& S) const {
- static_cast<const Decl*>(this)->Emit(S);
- }
-
- /// Materialize - Deserialize a ScopedDecl from Bitcode.
- static inline NamedDecl* Materialize(llvm::Deserializer& D) {
- return cast<NamedDecl>(Decl::Materialize(D));
- }
+
+protected:
+ void InternalEmit(llvm::Serializer& S) const;
+ void InternalRead(llvm::Deserializer& D);
};
/// ScopedDecl - Represent lexically scoped names, used for all ValueDecl's
@@ -229,16 +223,10 @@
return D->getKind() >= ScopedFirst && D->getKind() <= ScopedLast;
}
static bool classof(const ScopedDecl *D) { return true; }
-
- /// Emit - Serialize this ScopedDecl to Bitcode.
- void Emit(llvm::Serializer& S) const {
- static_cast<const Decl*>(this)->Emit(S);
- }
-
- /// Materialize - Deserialize a ScopedDecl from Bitcode.
- static inline ScopedDecl* Materialize(llvm::Deserializer& D) {
- return cast<ScopedDecl>(Decl::Materialize(D));
- }
+
+protected:
+ void InternalEmit(llvm::Serializer& S) const;
+ void InternalRead(llvm::Deserializer& D);
};
/// ValueDecl - Represent the declaration of a variable (in which case it is
@@ -259,16 +247,10 @@
return D->getKind() >= ValueFirst && D->getKind() <= ValueLast;
}
static bool classof(const ValueDecl *D) { return true; }
-
- /// Emit - Serialize this ValueDecl to Bitcode.
- void Emit(llvm::Serializer& S) const {
- static_cast<const Decl*>(this)->Emit(S);
- }
-
- /// Materialize - Deserialize a ValueDecl from Bitcode.
- static inline ValueDecl* Materialize(llvm::Deserializer& D) {
- return cast<ValueDecl>(Decl::Materialize(D));
- }
+
+protected:
+ void InternalEmit(llvm::Serializer& S) const;
+ void InternalRead(llvm::Deserializer& D);
};
/// VarDecl - An instance of this class is created to represent a variable
@@ -339,16 +321,9 @@
friend class StmtIteratorBase;
-public:
- /// Emit - Serialize this VarDecl to Bitcode.
- void Emit(llvm::Serializer& S) const {
- static_cast<const Decl*>(this)->Emit(S);
- }
-
- /// Materialize - Deserialize a VarDecl from Bitcode.
- static inline VarDecl* Materialize(llvm::Deserializer& D) {
- return cast<VarDecl>(Decl::Materialize(D));
- }
+protected:
+ void InternalEmit(llvm::Serializer& S) const;
+ void InternalRead(llvm::Deserializer& D);
};
/// BlockVarDecl - Represent a local variable declaration.
More information about the cfe-commits
mailing list