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