74 lines · c
1//===-- TestModuleFileExtension.h - Module Extension Tester -----*- C++ -*-===//2//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-exception6//7//===----------------------------------------------------------------------===//8#ifndef LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H9#define LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H10 11#include "clang/Serialization/ModuleFileExtension.h"12#include "clang/Basic/LLVM.h"13#include "llvm/ADT/StringRef.h"14#include "llvm/Bitstream/BitstreamReader.h"15#include <string>16 17namespace clang {18 19/// A module file extension used for testing purposes.20class TestModuleFileExtension21 : public llvm::RTTIExtends<TestModuleFileExtension, 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 static char ID;48 49 TestModuleFileExtension(StringRef BlockName, unsigned MajorVersion,50 unsigned MinorVersion, bool Hashed,51 StringRef UserInfo)52 : BlockName(BlockName), MajorVersion(MajorVersion),53 MinorVersion(MinorVersion), Hashed(Hashed), UserInfo(UserInfo) {}54 ~TestModuleFileExtension() override;55 56 ModuleFileExtensionMetadata getExtensionMetadata() const override;57 58 void hashExtension(ExtensionHashBuilder &HBuilder) const override;59 60 std::unique_ptr<ModuleFileExtensionWriter>61 createExtensionWriter(ASTWriter &Writer) override;62 63 std::unique_ptr<ModuleFileExtensionReader>64 createExtensionReader(const ModuleFileExtensionMetadata &Metadata,65 ASTReader &Reader, serialization::ModuleFile &Mod,66 const llvm::BitstreamCursor &Stream) override;67 68 std::string str() const;69};70 71} // end namespace clang72 73#endif // LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H74