aboutsummaryrefslogtreecommitdiff
path: root/AST/DeclSerialization.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-11-02 18:05:11 +0000
committerTed Kremenek <kremenek@apple.com>2007-11-02 18:05:11 +0000
commit0497331350e9f7838c03eca5f2782a53160f7423 (patch)
treeaad8650346148009d66176d53173e9551042bf8d /AST/DeclSerialization.cpp
parent54a2f071a37ee63d3ef1d4e7ca2570542ee12115 (diff)
Added most of the boilerplate code for Decl serialization. Still a few
key functions to implement. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43648 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'AST/DeclSerialization.cpp')
-rw-r--r--AST/DeclSerialization.cpp117
1 files changed, 117 insertions, 0 deletions
diff --git a/AST/DeclSerialization.cpp b/AST/DeclSerialization.cpp
index 3a326f006b..c07edb4a58 100644
--- a/AST/DeclSerialization.cpp
+++ b/AST/DeclSerialization.cpp
@@ -26,3 +26,120 @@ Decl* Decl::Materialize(llvm::Deserializer& D) {
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;
+}