1 //===-- TestModuleFileExtension.h - Module Extension Tester -----*- C++ -*-===//
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
7 //===----------------------------------------------------------------------===//
8 #ifndef LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
9 #define LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
11 #include "clang/Serialization/ModuleFileExtension.h"
12 #include "clang/Basic/LLVM.h"
13 #include "llvm/ADT/StringRef.h"
14 #include "llvm/Bitstream/BitstreamReader.h"
19 /// A module file extension used for testing purposes.
20 class TestModuleFileExtension
21 : public llvm::RTTIExtends
<TestModuleFileExtension
, 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
);
49 TestModuleFileExtension(StringRef BlockName
, unsigned MajorVersion
,
50 unsigned MinorVersion
, bool Hashed
,
52 : BlockName(BlockName
), MajorVersion(MajorVersion
),
53 MinorVersion(MinorVersion
), Hashed(Hashed
), UserInfo(UserInfo
) {}
54 ~TestModuleFileExtension() override
;
56 ModuleFileExtensionMetadata
getExtensionMetadata() const override
;
58 void hashExtension(ExtensionHashBuilder
&HBuilder
) const override
;
60 std::unique_ptr
<ModuleFileExtensionWriter
>
61 createExtensionWriter(ASTWriter
&Writer
) override
;
63 std::unique_ptr
<ModuleFileExtensionReader
>
64 createExtensionReader(const ModuleFileExtensionMetadata
&Metadata
,
65 ASTReader
&Reader
, serialization::ModuleFile
&Mod
,
66 const llvm::BitstreamCursor
&Stream
) override
;
68 std::string
str() const;
71 } // end namespace clang
73 #endif // LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H