| //===-- TestModuleFileExtension.h - Module Extension Tester -----*- C++ -*-===// |
| // |
| // The LLVM Compiler Infrastructure |
| // |
| // This file is distributed under the University of Illinois Open Source |
| // License. See LICENSE.TXT for details. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H |
| #define LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H |
| |
| #include "clang/Serialization/ModuleFileExtension.h" |
| #include "clang/Basic/LLVM.h" |
| #include "llvm/ADT/StringRef.h" |
| #include "llvm/Bitcode/BitstreamReader.h" |
| #include <string> |
| |
| namespace clang { |
| |
| /// A module file extension used for testing purposes. |
| class TestModuleFileExtension : public ModuleFileExtension { |
| std::string BlockName; |
| unsigned MajorVersion; |
| unsigned MinorVersion; |
| bool Hashed; |
| std::string UserInfo; |
| |
| class Writer : public ModuleFileExtensionWriter { |
| public: |
| Writer(ModuleFileExtension *Ext) : ModuleFileExtensionWriter(Ext) { } |
| ~Writer() override; |
| |
| void writeExtensionContents(Sema &SemaRef, |
| llvm::BitstreamWriter &Stream) override; |
| }; |
| |
| class Reader : public ModuleFileExtensionReader { |
| llvm::BitstreamCursor Stream; |
| |
| public: |
| ~Reader() override; |
| |
| Reader(ModuleFileExtension *Ext, const llvm::BitstreamCursor &InStream); |
| }; |
| |
| public: |
| TestModuleFileExtension(StringRef BlockName, |
| unsigned MajorVersion, |
| unsigned MinorVersion, |
| bool Hashed, |
| StringRef UserInfo) |
| : BlockName(BlockName), |
| MajorVersion(MajorVersion), MinorVersion(MinorVersion), |
| Hashed(Hashed), UserInfo(UserInfo) { } |
| ~TestModuleFileExtension() override; |
| |
| ModuleFileExtensionMetadata getExtensionMetadata() const override; |
| |
| llvm::hash_code hashExtension(llvm::hash_code Code) const override; |
| |
| std::unique_ptr<ModuleFileExtensionWriter> |
| createExtensionWriter(ASTWriter &Writer) override; |
| |
| std::unique_ptr<ModuleFileExtensionReader> |
| createExtensionReader(const ModuleFileExtensionMetadata &Metadata, |
| ASTReader &Reader, serialization::ModuleFile &Mod, |
| const llvm::BitstreamCursor &Stream) override; |
| }; |
| |
| } // end namespace clang |
| |
| #endif // LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H |