diff options
Diffstat (limited to 'clang/lib/Frontend/TestModuleFileExtension.h')
| -rw-r--r-- | clang/lib/Frontend/TestModuleFileExtension.h | 71 | 
1 files changed, 71 insertions, 0 deletions
| diff --git a/clang/lib/Frontend/TestModuleFileExtension.h b/clang/lib/Frontend/TestModuleFileExtension.h new file mode 100644 index 0000000000000..13e090783b110 --- /dev/null +++ b/clang/lib/Frontend/TestModuleFileExtension.h @@ -0,0 +1,71 @@ +//===-- TestModuleFileExtension.h - Module Extension Tester -----*- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// +#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/Bitstream/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 | 
