TestModuleFileExtension.h revision 341825
11817SN/A//===-- TestModuleFileExtension.h - Module Extension Tester -----*- C++ -*-===//
21817SN/A//
32281Sihse//                     The LLVM Compiler Infrastructure
41817SN/A//
51817SN/A// This file is distributed under the University of Illinois Open Source
61817SN/A// License. See LICENSE.TXT for details.
71817SN/A//
81817SN/A//===----------------------------------------------------------------------===//
91817SN/A#ifndef LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
101817SN/A#define LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
111817SN/A
121817SN/A#include "clang/Serialization/ModuleFileExtension.h"
131817SN/A#include "clang/Basic/LLVM.h"
141817SN/A#include "llvm/ADT/StringRef.h"
151817SN/A#include "llvm/Bitcode/BitstreamReader.h"
161817SN/A#include <string>
171817SN/A
181817SN/Anamespace clang {
191817SN/A
201817SN/A/// A module file extension used for testing purposes.
211817SN/Aclass TestModuleFileExtension : public ModuleFileExtension {
221817SN/A  std::string BlockName;
231817SN/A  unsigned MajorVersion;
241817SN/A  unsigned MinorVersion;
251822Serikj  bool Hashed;
261822Serikj  std::string UserInfo;
271817SN/A
281817SN/A  class Writer : public ModuleFileExtensionWriter {
291817SN/A  public:
301817SN/A    Writer(ModuleFileExtension *Ext) : ModuleFileExtensionWriter(Ext) { }
311822Serikj    ~Writer() override;
321822Serikj
331817SN/A    void writeExtensionContents(Sema &SemaRef,
341817SN/A                                llvm::BitstreamWriter &Stream) override;
351844Serikj  };
361822Serikj
371817SN/A  class Reader : public ModuleFileExtensionReader {
381817SN/A    llvm::BitstreamCursor Stream;
391822Serikj
401822Serikj  public:
411822Serikj    ~Reader() override;
421822Serikj
431822Serikj    Reader(ModuleFileExtension *Ext, const llvm::BitstreamCursor &InStream);
441817SN/A  };
451822Serikj
461817SN/Apublic:
471817SN/A  TestModuleFileExtension(StringRef BlockName,
481817SN/A                          unsigned MajorVersion,
491817SN/A                          unsigned MinorVersion,
501822Serikj                          bool Hashed,
511822Serikj                          StringRef UserInfo)
521817SN/A    : BlockName(BlockName),
531844Serikj      MajorVersion(MajorVersion), MinorVersion(MinorVersion),
541844Serikj      Hashed(Hashed), UserInfo(UserInfo) { }
551844Serikj  ~TestModuleFileExtension() override;
561822Serikj
571822Serikj  ModuleFileExtensionMetadata getExtensionMetadata() const override;
581817SN/A
591822Serikj  llvm::hash_code hashExtension(llvm::hash_code Code) const override;
601822Serikj
611817SN/A  std::unique_ptr<ModuleFileExtensionWriter>
621822Serikj  createExtensionWriter(ASTWriter &Writer) override;
631822Serikj
641817SN/A  std::unique_ptr<ModuleFileExtensionReader>
651822Serikj  createExtensionReader(const ModuleFileExtensionMetadata &Metadata,
661822Serikj                        ASTReader &Reader, serialization::ModuleFile &Mod,
671817SN/A                        const llvm::BitstreamCursor &Stream) override;
681822Serikj};
691822Serikj
701817SN/A} // end namespace clang
711817SN/A
721822Serikj#endif // LLVM_CLANG_FRONTEND_TESTMODULEFILEEXTENSION_H
731822Serikj