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