aboutsummaryrefslogtreecommitdiff
path: root/AST/DeclSerialization.cpp
diff options
context:
space:
mode:
authorTed Kremenek <kremenek@apple.com>2007-10-25 21:37:16 +0000
committerTed Kremenek <kremenek@apple.com>2007-10-25 21:37:16 +0000
commit2f1f8cb1b8f487086053579802407d64ca2b587f (patch)
tree0e80c94febac97e3fab2993551d61f5aaec53b77 /AST/DeclSerialization.cpp
parentccd87b07a714b6e2735a80e89e425ce7fdf6a8d8 (diff)
Added skeleton for Decl serialization.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@43361 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'AST/DeclSerialization.cpp')
-rw-r--r--AST/DeclSerialization.cpp62
1 files changed, 62 insertions, 0 deletions
diff --git a/AST/DeclSerialization.cpp b/AST/DeclSerialization.cpp
new file mode 100644
index 0000000000..9b2278a4be
--- /dev/null
+++ b/AST/DeclSerialization.cpp
@@ -0,0 +1,62 @@
+//===--- DeclSerialization.cpp - Serialization of Decls ---------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file was developed by Ted Kremenek and is distributed under
+// the University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This files defines methods that implement bitcode serialization for Decls.
+//
+//===----------------------------------------------------------------------===//
+
+#include "clang/AST/Decl.h"
+#include "clang/AST/Expr.h"
+#include "llvm/Bitcode/Serialize.h"
+#include "llvm/Bitcode/Deserialize.h"
+
+using llvm::SerializeTrait;
+using llvm::Deserializer;
+using llvm::Serializer;
+using namespace clang;
+
+
+static void EmitEnumConstantDecl(Serializer& S, EnumConstantDecl& decl) {
+ S.Emit(decl.getLocation());
+ S.EmitPtr(decl.getIdentifier());
+// S.Emit(decl.getType()); FIXME
+ S.EmitOwnedPtr<Stmt>(decl.getInitExpr());
+ // S.Emit(decl.getInitVal()); FIXME
+ S.EmitOwnedPtr<Decl>(decl.getNextDeclarator());
+}
+
+static void EmitFunctionDecl(Serializer& S, FunctionDecl& decl) {
+ S.Emit(decl.getLocation());
+ S.EmitPtr(decl.getIdentifier());
+// S.Emit(decl.getType()); FIXME
+// S.Emit(decl.getStorageClass()); FIXME
+ S.EmitBool(decl.isInline());
+ S.EmitOwnedPtr<Decl>(decl.getNextDeclarator());
+}
+
+
+void SerializeTrait<Decl>::Emit(Serializer& S, Decl& decl) {
+ assert (!decl.isInvalidDecl() && "Can only serialize valid decls.");
+
+ S.EmitInt((unsigned) decl.getKind());
+
+ switch (decl.getKind()) {
+ default:
+ assert (false && "Serialization not implemented for decl type.");
+ return;
+
+ case Decl::EnumConstant:
+ EmitEnumConstantDecl(S,cast<EnumConstantDecl>(decl));
+ return;
+
+ case Decl::Function:
+ EmitFunctionDecl(S,cast<FunctionDecl>(decl));
+ return;
+ }
+}