//===--- ASTWriterDecl.cpp - Declaration Serialization --------------------===////// The LLVM Compiler Infrastructure//// This file is distributed under the University of Illinois Open Source// License. See LICENSE.TXT for details.////===----------------------------------------------------------------------===////// This file implements serialization for Declarations.////===----------------------------------------------------------------------===//#include"clang/Serialization/ASTWriter.h"#include"ASTCommon.h"#include"clang/AST/DeclVisitor.h"#include"clang/AST/DeclCXX.h"#include"clang/AST/DeclTemplate.h"#include"clang/AST/Expr.h"#include"clang/AST/DeclContextInternals.h"#include"llvm/ADT/Twine.h"#include"llvm/Bitcode/BitstreamWriter.h"#include"llvm/Support/ErrorHandling.h"usingnamespaceclang;usingnamespaceserialization;//===----------------------------------------------------------------------===//// Declaration serialization//===----------------------------------------------------------------------===//namespaceclang{classASTDeclWriter:publicDeclVisitor<ASTDeclWriter,void>{ASTWriter&Writer;ASTContext&Context;typedefASTWriter::RecordDataRecordData;RecordData&Record;public:serialization::DeclCodeCode;unsignedAbbrevToUse;ASTDeclWriter(ASTWriter&Writer,ASTContext&Context,RecordData&Record):Writer(Writer),Context(Context),Record(Record){}voidVisit(Decl*D);voidVisitDecl(Decl*D);voidVisitTranslationUnitDecl(TranslationUnitDecl*D);voidVisitNamedDecl(NamedDecl*D);voidVisitLabelDecl(LabelDecl*LD);voidVisitNamespaceDecl(NamespaceDecl*D);voidVisitUsingDirectiveDecl(UsingDirectiveDecl*D);voidVisitNamespaceAliasDecl(NamespaceAliasDecl*D);voidVisitTypeDecl(TypeDecl*D);voidVisitTypedefDecl(TypedefDecl*D);voidVisitTypeAliasDecl(TypeAliasDecl*D);voidVisitUnresolvedUsingTypenameDecl(UnresolvedUsingTypenameDecl*D);voidVisitTagDecl(TagDecl*D);voidVisitEnumDecl(EnumDecl*D);voidVisitRecordDecl(RecordDecl*D);voidVisitCXXRecordDecl(CXXRecordDecl*D);voidVisitClassTemplateSpecializationDecl(ClassTemplateSpecializationDecl*D);voidVisitClassTemplatePartialSpecializationDecl(ClassTemplatePartialSpecializationDecl*D);voidVisitTemplateTypeParmDecl(TemplateTypeParmDecl*D);voidVisitValueDecl(ValueDecl*D);voidVisitEnumConstantDecl(EnumConstantDecl*D);voidVisitUnresolvedUsingValueDecl(UnresolvedUsingValueDecl*D);voidVisitDeclaratorDecl(DeclaratorDecl*D);voidVisitFunctionDecl