brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.4 KiB · e22c87e Raw
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