17 #include "llvm/Bitcode/BitstreamReader.h"
18 #include "llvm/Support/raw_ostream.h"
21 using namespace clang;
29 class RawPCHContainerGenerator :
public ASTConsumer {
30 std::shared_ptr<PCHBuffer>
Buffer;
31 std::unique_ptr<raw_pwrite_stream> OS;
34 RawPCHContainerGenerator(std::unique_ptr<llvm::raw_pwrite_stream> OS,
35 std::shared_ptr<PCHBuffer>
Buffer)
36 : Buffer(std::move(Buffer)), OS(std::move(OS)) {}
38 ~RawPCHContainerGenerator()
override =
default;
40 void HandleTranslationUnit(
ASTContext &Ctx)
override {
48 Buffer->Data = std::move(Empty);
54 std::unique_ptr<ASTConsumer> RawPCHContainerWriter::CreatePCHContainerGenerator(
56 const std::string &OutputFileName, std::unique_ptr<llvm::raw_pwrite_stream> OS,
57 std::shared_ptr<PCHBuffer>
Buffer)
const {
58 return llvm::make_unique<RawPCHContainerGenerator>(std::move(OS),
Buffer);
61 void RawPCHContainerReader::ExtractPCH(
62 llvm::MemoryBufferRef
Buffer, llvm::BitstreamReader &StreamFile)
const {
63 StreamFile.init((
const unsigned char *)Buffer.getBufferStart(),
64 (
const unsigned char *)Buffer.getBufferEnd());
ASTConsumer - This is an abstract interface that should be implemented by clients that read ASTs...
std::unique_ptr< llvm::MemoryBuffer > Buffer
Holds long-lived AST nodes (such as types and decls) that can be referred to throughout the semantic ...
void registerReader(std::unique_ptr< PCHContainerReader > Reader)
CompilerInstance - Helper class for managing a single instance of the Clang compiler.
virtual ~PCHContainerReader()=0
PCHContainerOperations()
Automatically registers a RawPCHContainerWriter and RawPCHContainerReader.
void registerWriter(std::unique_ptr< PCHContainerWriter > Writer)
virtual ~PCHContainerWriter()=0