1 //===-- TestModuleFileExtension.h - Module Extension Tester -----*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
9 #ifndef LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
10 #define LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
12 #include "clang/Serialization/ModuleFileExtension.h"
13 #include "clang/Basic/LLVM.h"
14 #include "llvm/ADT/StringRef.h"
15 #include "llvm/Bitcode/BitstreamReader.h"
20 /// A module file extension used for testing purposes.
21 class TestModuleFileExtension : public ModuleFileExtension {
22 std::string BlockName;
23 unsigned MajorVersion;
24 unsigned MinorVersion;
28 class Writer : public ModuleFileExtensionWriter {
30 Writer(ModuleFileExtension *Ext) : ModuleFileExtensionWriter(Ext) { }
33 void writeExtensionContents(Sema &SemaRef,
34 llvm::BitstreamWriter &Stream) override;
37 class Reader : public ModuleFileExtensionReader {
38 llvm::BitstreamCursor Stream;
43 Reader(ModuleFileExtension *Ext, const llvm::BitstreamCursor &InStream);
47 TestModuleFileExtension(StringRef BlockName,
48 unsigned MajorVersion,
49 unsigned MinorVersion,
52 : BlockName(BlockName),
53 MajorVersion(MajorVersion), MinorVersion(MinorVersion),
54 Hashed(Hashed), UserInfo(UserInfo) { }
55 ~TestModuleFileExtension() override;
57 ModuleFileExtensionMetadata getExtensionMetadata() const override;
59 llvm::hash_code hashExtension(llvm::hash_code Code) const override;
61 std::unique_ptr<ModuleFileExtensionWriter>
62 createExtensionWriter(ASTWriter &Writer) override;
64 std::unique_ptr<ModuleFileExtensionReader>
65 createExtensionReader(const ModuleFileExtensionMetadata &Metadata,
66 ASTReader &Reader, serialization::ModuleFile &Mod,
67 const llvm::BitstreamCursor &Stream) override;
70 } // end namespace clang
72 #endif // LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H