blob: 9b2278a4bebb1f5ae94766a115e0959a822e4498 [file] [log] [blame]
Ted Kremenek2f1f8cb2007-10-25 21:37:16 +00001//===--- DeclSerialization.cpp - Serialization of Decls ---------*- C++ -*-===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file was developed by Ted Kremenek and is distributed under
6// the University of Illinois Open Source License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10// This files defines methods that implement bitcode serialization for Decls.
11//
12//===----------------------------------------------------------------------===//
13
14#include "clang/AST/Decl.h"
15#include "clang/AST/Expr.h"
16#include "llvm/Bitcode/Serialize.h"
17#include "llvm/Bitcode/Deserialize.h"
18
19using llvm::SerializeTrait;
20using llvm::Deserializer;
21using llvm::Serializer;
22using namespace clang;
23
24
25static void EmitEnumConstantDecl(Serializer& S, EnumConstantDecl& decl) {
26 S.Emit(decl.getLocation());
27 S.EmitPtr(decl.getIdentifier());
28// S.Emit(decl.getType()); FIXME
29 S.EmitOwnedPtr<Stmt>(decl.getInitExpr());
30 // S.Emit(decl.getInitVal()); FIXME
31 S.EmitOwnedPtr<Decl>(decl.getNextDeclarator());
32}
33
34static void EmitFunctionDecl(Serializer& S, FunctionDecl& decl) {
35 S.Emit(decl.getLocation());
36 S.EmitPtr(decl.getIdentifier());
37// S.Emit(decl.getType()); FIXME
38// S.Emit(decl.getStorageClass()); FIXME
39 S.EmitBool(decl.isInline());
40 S.EmitOwnedPtr<Decl>(decl.getNextDeclarator());
41}
42
43
44void SerializeTrait<Decl>::Emit(Serializer& S, Decl& decl) {
45 assert (!decl.isInvalidDecl() && "Can only serialize valid decls.");
46
47 S.EmitInt((unsigned) decl.getKind());
48
49 switch (decl.getKind()) {
50 default:
51 assert (false && "Serialization not implemented for decl type.");
52 return;
53
54 case Decl::EnumConstant:
55 EmitEnumConstantDecl(S,cast<EnumConstantDecl>(decl));
56 return;
57
58 case Decl::Function:
59 EmitFunctionDecl(S,cast<FunctionDecl>(decl));
60 return;
61 }
62}