From 0b57cec536236d46e3dba9bd041533462f33dbb7 Mon Sep 17 00:00:00 2001 From: Dimitry Andric Date: Fri, 20 Dec 2019 19:53:05 +0000 Subject: Move all sources from the llvm project into contrib/llvm-project. This uses the new layout of the upstream repository, which was recently migrated to GitHub, and converted into a "monorepo". That is, most of the earlier separate sub-projects with their own branches and tags were consolidated into one top-level directory, and are now branched and tagged together. Updating the vendor area to match this layout is next. --- .../lib/Serialization/PCHContainerOperations.cpp | 68 ++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 contrib/llvm-project/clang/lib/Serialization/PCHContainerOperations.cpp (limited to 'contrib/llvm-project/clang/lib/Serialization/PCHContainerOperations.cpp') diff --git a/contrib/llvm-project/clang/lib/Serialization/PCHContainerOperations.cpp b/contrib/llvm-project/clang/lib/Serialization/PCHContainerOperations.cpp new file mode 100644 index 000000000000..00063d64f3f2 --- /dev/null +++ b/contrib/llvm-project/clang/lib/Serialization/PCHContainerOperations.cpp @@ -0,0 +1,68 @@ +//=== Serialization/PCHContainerOperations.cpp - PCH Containers -*- 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 +// +//===----------------------------------------------------------------------===// +// +// This file defines PCHContainerOperations and RawPCHContainerOperation. +// +//===----------------------------------------------------------------------===// + +#include "clang/Serialization/PCHContainerOperations.h" +#include "clang/AST/ASTConsumer.h" +#include "clang/Lex/ModuleLoader.h" +#include "llvm/Bitstream/BitstreamReader.h" +#include "llvm/Support/raw_ostream.h" +#include + +using namespace clang; + +PCHContainerWriter::~PCHContainerWriter() {} +PCHContainerReader::~PCHContainerReader() {} + +namespace { + +/// A PCHContainerGenerator that writes out the PCH to a flat file. +class RawPCHContainerGenerator : public ASTConsumer { + std::shared_ptr Buffer; + std::unique_ptr OS; + +public: + RawPCHContainerGenerator(std::unique_ptr OS, + std::shared_ptr Buffer) + : Buffer(std::move(Buffer)), OS(std::move(OS)) {} + + ~RawPCHContainerGenerator() override = default; + + void HandleTranslationUnit(ASTContext &Ctx) override { + if (Buffer->IsComplete) { + // Make sure it hits disk now. + *OS << Buffer->Data; + OS->flush(); + } + // Free the space of the temporary buffer. + llvm::SmallVector Empty; + Buffer->Data = std::move(Empty); + } +}; + +} // anonymous namespace + +std::unique_ptr RawPCHContainerWriter::CreatePCHContainerGenerator( + CompilerInstance &CI, const std::string &MainFileName, + const std::string &OutputFileName, std::unique_ptr OS, + std::shared_ptr Buffer) const { + return llvm::make_unique(std::move(OS), Buffer); +} + +StringRef +RawPCHContainerReader::ExtractPCH(llvm::MemoryBufferRef Buffer) const { + return Buffer.getBuffer(); +} + +PCHContainerOperations::PCHContainerOperations() { + registerWriter(llvm::make_unique()); + registerReader(llvm::make_unique()); +} -- cgit v1.2.3