//===-- Serializer.h - ClangDoc Serializer ----------------------*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// // // This file implements the serializing functions fro the clang-doc tool. Given // a particular declaration, it collects the appropriate information and returns // a serialized bitcode string for the declaration. // //===----------------------------------------------------------------------===// #ifndef LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H #define LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H #include "Representation.h" #include "clang/AST/AST.h" #include "clang/AST/CommentVisitor.h" #include #include using namespace clang::comments; namespace clang { namespace doc { namespace serialize { // The first element will contain the relevant information about the declaration // passed as parameter. // The second element will contain the relevant information about the // declaration's parent, it can be a NamespaceInfo or RecordInfo. // Both elements can be nullptrs if the declaration shouldn't be handled. // When the declaration is handled, the first element will be a nullptr for // EnumDecl, FunctionDecl and CXXMethodDecl; they are only returned wrapped in // its parent scope. For NamespaceDecl and RecordDecl both elements are not // nullptr. std::pair, std::unique_ptr> emitInfo(const NamespaceDecl *D, const FullComment *FC, int LineNumber, StringRef File, bool IsFileInRootDir, bool PublicOnly); std::pair, std::unique_ptr> emitInfo(const RecordDecl *D, const FullComment *FC, int LineNumber, StringRef File, bool IsFileInRootDir, bool PublicOnly); std::pair, std::unique_ptr> emitInfo(const EnumDecl *D, const FullComment *FC, int LineNumber, StringRef File, bool IsFileInRootDir, bool PublicOnly); std::pair, std::unique_ptr> emitInfo(const FunctionDecl *D, const FullComment *FC, int LineNumber, StringRef File, bool IsFileInRootDir, bool PublicOnly); std::pair, std::unique_ptr> emitInfo(const CXXMethodDecl *D, const FullComment *FC, int LineNumber, StringRef File, bool IsFileInRootDir, bool PublicOnly); // Function to hash a given USR value for storage. // As USRs (Unified Symbol Resolution) could be large, especially for functions // with long type arguments, we use 160-bits SHA1(USR) values to // guarantee the uniqueness of symbols while using a relatively small amount of // memory (vs storing USRs directly). SymbolID hashUSR(llvm::StringRef USR); std::string serialize(std::unique_ptr &I); } // namespace serialize } // namespace doc } // namespace clang #endif // LLVM_CLANG_TOOLS_EXTRA_CLANG_DOC_SERIALIZE_H