//===--- 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(decl.getInitExpr()); // S.Emit(decl.getInitVal()); FIXME S.EmitOwnedPtr(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.getNextDeclarator()); } void SerializeTrait::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(decl)); return; case Decl::Function: EmitFunctionDecl(S,cast(decl)); return; } }