diff options
author | Alp Toker <alp@nuanti.com> | 2014-07-07 11:07:10 +0000 |
---|---|---|
committer | Alp Toker <alp@nuanti.com> | 2014-07-07 11:07:10 +0000 |
commit | 67d62bc20d95da125b1bb2025d35a80144273639 (patch) | |
tree | 6645b060b212c0824280a2cb174c29665acb1d50 /lib/Frontend/ChainedIncludesSource.cpp | |
parent | 1e2908f3ccb7f281abe429f28e57d3a167c15dd5 (diff) |
Move ChainedIncludesSource into the implementation
This doesn't need to be in the headers.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@212451 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Frontend/ChainedIncludesSource.cpp')
-rw-r--r-- | lib/Frontend/ChainedIncludesSource.cpp | 54 |
1 files changed, 50 insertions, 4 deletions
diff --git a/lib/Frontend/ChainedIncludesSource.cpp b/lib/Frontend/ChainedIncludesSource.cpp index 387f67118e..e6e73ac963 100644 --- a/lib/Frontend/ChainedIncludesSource.cpp +++ b/lib/Frontend/ChainedIncludesSource.cpp @@ -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; |