diff options
author | Ted Kremenek <kremenek@apple.com> | 2007-10-25 21:37:16 +0000 |
---|---|---|
committer | Ted Kremenek <kremenek@apple.com> | 2007-10-25 21:37:16 +0000 |
commit | 2f1f8cb1b8f487086053579802407d64ca2b587f (patch) | |
tree | 0e80c94febac97e3fab2993551d61f5aaec53b77 /AST/DeclSerialization.cpp | |
parent | ccd87b07a714b6e2735a80e89e425ce7fdf6a8d8 (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.cpp | 62 |
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; + } +} |