Move ChainedIncludesSource into the implementation
This doesn't need to be in the headers. llvm-svn: 212451
This commit is contained in:
parent
7eb95e21d7
commit
9e0523d749
|
@ -1,75 +0,0 @@
|
|||
//===- ChainedIncludesSource.h - Chained PCHs in Memory ---------*- C++ -*-===//
|
||||
//
|
||||
// The LLVM Compiler Infrastructure
|
||||
//
|
||||
// This file is distributed under the University of Illinois Open Source
|
||||
// License. See LICENSE.TXT for details.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
//
|
||||
// This file defines the ChainedIncludesSource class, which converts headers
|
||||
// to chained PCHs in memory, mainly used for testing.
|
||||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
#ifndef LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H
|
||||
#define LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H
|
||||
|
||||
#include "clang/Sema/ExternalSemaSource.h"
|
||||
#include <vector>
|
||||
|
||||
namespace clang {
|
||||
class CompilerInstance;
|
||||
|
||||
class ChainedIncludesSource : public ExternalSemaSource {
|
||||
public:
|
||||
virtual ~ChainedIncludesSource();
|
||||
|
||||
static IntrusiveRefCntPtr<ChainedIncludesSource> create(CompilerInstance &CI);
|
||||
|
||||
ExternalSemaSource &getFinalReader() const { return *FinalReader; }
|
||||
|
||||
private:
|
||||
std::vector<CompilerInstance *> CIs;
|
||||
IntrusiveRefCntPtr<ExternalSemaSource> FinalReader;
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ExternalASTSource interface.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
Decl *GetExternalDecl(uint32_t ID) override;
|
||||
Selector GetExternalSelector(uint32_t ID) override;
|
||||
uint32_t GetNumExternalSelectors() override;
|
||||
Stmt *GetExternalDeclStmt(uint64_t Offset) override;
|
||||
CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset) override;
|
||||
bool FindExternalVisibleDeclsByName(const DeclContext *DC,
|
||||
DeclarationName Name) override;
|
||||
ExternalLoadResult FindExternalLexicalDecls(const DeclContext *DC,
|
||||
bool (*isKindWeWant)(Decl::Kind),
|
||||
SmallVectorImpl<Decl*> &Result) override;
|
||||
void CompleteType(TagDecl *Tag) override;
|
||||
void CompleteType(ObjCInterfaceDecl *Class) override;
|
||||
void StartedDeserializing() override;
|
||||
void FinishedDeserializing() override;
|
||||
void StartTranslationUnit(ASTConsumer *Consumer) override;
|
||||
void PrintStats() override;
|
||||
|
||||
/// Return the amount of memory used by memory buffers, breaking down
|
||||
/// by heap-backed versus mmap'ed memory.
|
||||
void getMemoryBufferSizes(MemoryBufferSizes &sizes) const override;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ExternalSemaSource interface.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void InitializeSema(Sema &S) override;
|
||||
void ForgetSema() override;
|
||||
void ReadMethodPool(Selector Sel) override;
|
||||
bool LookupUnqualified(LookupResult &R, Scope *S) override;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif
|
|
@ -39,6 +39,7 @@ class Decl;
|
|||
class DependencyOutputOptions;
|
||||
class DiagnosticsEngine;
|
||||
class DiagnosticOptions;
|
||||
class ExternalSemaSource;
|
||||
class FileManager;
|
||||
class HeaderSearch;
|
||||
class HeaderSearchOptions;
|
||||
|
@ -162,6 +163,12 @@ void AttachHeaderIncludeGen(Preprocessor &PP, bool ShowAllHeaders = false,
|
|||
/// a seekable stream.
|
||||
void CacheTokens(Preprocessor &PP, llvm::raw_fd_ostream* OS);
|
||||
|
||||
/// The ChainedIncludesSource class converts headers to chained PCHs in
|
||||
/// memory, mainly for testing.
|
||||
IntrusiveRefCntPtr<ExternalSemaSource>
|
||||
createChainedIncludesSource(CompilerInstance &CI,
|
||||
IntrusiveRefCntPtr<ExternalSemaSource> &Reader);
|
||||
|
||||
/// createInvocationFromCommandLine - Construct a compiler invocation object for
|
||||
/// a command line argument vector.
|
||||
///
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
//
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
#include "clang/Frontend/ChainedIncludesSource.h"
|
||||
#include "clang/Basic/TargetInfo.h"
|
||||
#include "clang/Frontend/ASTUnit.h"
|
||||
#include "clang/Frontend/CompilerInstance.h"
|
||||
|
@ -25,6 +24,54 @@
|
|||
|
||||
using namespace clang;
|
||||
|
||||
namespace {
|
||||
class ChainedIncludesSource : public ExternalSemaSource {
|
||||
public:
|
||||
virtual ~ChainedIncludesSource();
|
||||
|
||||
ExternalSemaSource &getFinalReader() const { return *FinalReader; }
|
||||
|
||||
std::vector<CompilerInstance *> CIs;
|
||||
IntrusiveRefCntPtr<ExternalSemaSource> FinalReader;
|
||||
|
||||
protected:
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ExternalASTSource interface.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
Decl *GetExternalDecl(uint32_t ID) override;
|
||||
Selector GetExternalSelector(uint32_t ID) override;
|
||||
uint32_t GetNumExternalSelectors() override;
|
||||
Stmt *GetExternalDeclStmt(uint64_t Offset) override;
|
||||
CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset) override;
|
||||
bool FindExternalVisibleDeclsByName(const DeclContext *DC,
|
||||
DeclarationName Name) override;
|
||||
ExternalLoadResult
|
||||
FindExternalLexicalDecls(const DeclContext *DC,
|
||||
bool (*isKindWeWant)(Decl::Kind),
|
||||
SmallVectorImpl<Decl *> &Result) override;
|
||||
void CompleteType(TagDecl *Tag) override;
|
||||
void CompleteType(ObjCInterfaceDecl *Class) override;
|
||||
void StartedDeserializing() override;
|
||||
void FinishedDeserializing() override;
|
||||
void StartTranslationUnit(ASTConsumer *Consumer) override;
|
||||
void PrintStats() override;
|
||||
|
||||
/// Return the amount of memory used by memory buffers, breaking down
|
||||
/// by heap-backed versus mmap'ed memory.
|
||||
void getMemoryBufferSizes(MemoryBufferSizes &sizes) const override;
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// ExternalSemaSource interface.
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
void InitializeSema(Sema &S) override;
|
||||
void ForgetSema() override;
|
||||
void ReadMethodPool(Selector Sel) override;
|
||||
bool LookupUnqualified(LookupResult &R, Scope *S) override;
|
||||
};
|
||||
}
|
||||
|
||||
static ASTReader *
|
||||
createASTReader(CompilerInstance &CI, StringRef pchFile,
|
||||
SmallVectorImpl<llvm::MemoryBuffer *> &memBufs,
|
||||
|
@ -62,8 +109,8 @@ ChainedIncludesSource::~ChainedIncludesSource() {
|
|||
delete CIs[i];
|
||||
}
|
||||
|
||||
IntrusiveRefCntPtr<ChainedIncludesSource>
|
||||
ChainedIncludesSource::create(CompilerInstance &CI) {
|
||||
IntrusiveRefCntPtr<ExternalSemaSource> clang::createChainedIncludesSource(
|
||||
CompilerInstance &CI, IntrusiveRefCntPtr<ExternalSemaSource> &Reader) {
|
||||
|
||||
std::vector<std::string> &includes = CI.getPreprocessorOpts().ChainedIncludes;
|
||||
assert(!includes.empty() && "No '-chain-include' in options!");
|
||||
|
@ -156,7 +203,6 @@ ChainedIncludesSource::create(CompilerInstance &CI) {
|
|||
assert(!serialBufs.empty());
|
||||
std::string pchName = includes.back() + ".pch-final";
|
||||
serialBufNames.push_back(pchName);
|
||||
IntrusiveRefCntPtr<ASTReader> Reader;
|
||||
Reader = createASTReader(CI, pchName, serialBufs, serialBufNames);
|
||||
if (!Reader)
|
||||
return nullptr;
|
||||
|
|
|
@ -12,7 +12,6 @@
|
|||
#include "clang/AST/ASTContext.h"
|
||||
#include "clang/AST/DeclGroup.h"
|
||||
#include "clang/Frontend/ASTUnit.h"
|
||||
#include "clang/Frontend/ChainedIncludesSource.h"
|
||||
#include "clang/Frontend/CompilerInstance.h"
|
||||
#include "clang/Frontend/FrontendDiagnostic.h"
|
||||
#include "clang/Frontend/FrontendPluginRegistry.h"
|
||||
|
@ -315,13 +314,12 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
|
|||
|
||||
if (!CI.getPreprocessorOpts().ChainedIncludes.empty()) {
|
||||
// Convert headers to PCH and chain them.
|
||||
IntrusiveRefCntPtr<ChainedIncludesSource> source;
|
||||
source = ChainedIncludesSource::create(CI);
|
||||
IntrusiveRefCntPtr<ExternalSemaSource> source, FinalReader;
|
||||
source = createChainedIncludesSource(CI, FinalReader);
|
||||
if (!source)
|
||||
goto failure;
|
||||
CI.setModuleManager(static_cast<ASTReader*>(&source->getFinalReader()));
|
||||
CI.setModuleManager(static_cast<ASTReader *>(FinalReader.get()));
|
||||
CI.getASTContext().setExternalSource(source);
|
||||
|
||||
} else if (!CI.getPreprocessorOpts().ImplicitPCHInclude.empty()) {
|
||||
// Use PCH.
|
||||
assert(hasPCHSupport() && "This action does not have PCH support!");
|
||||
|
|
Loading…
Reference in New Issue