1//===- ChainedIncludesSource.h - Chained PCHs in Memory ---------*- C++ -*-===//
2//
3//                     The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9//
10//  This file defines the ChainedIncludesSource class, which converts headers
11//  to chained PCHs in memory, mainly used for testing.
12//
13//===----------------------------------------------------------------------===//
14#ifndef LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H
15#define LLVM_CLANG_SERIALIZATION_CHAINEDINCLUDESSOURCE_H
16
17#include "clang/Sema/ExternalSemaSource.h"
18#include <vector>
19
20namespace clang {
21  class CompilerInstance;
22
23class ChainedIncludesSource : public ExternalSemaSource {
24public:
25  virtual ~ChainedIncludesSource();
26
27  static ChainedIncludesSource *create(CompilerInstance &CI);
28
29  ExternalSemaSource &getFinalReader() const { return *FinalReader; }
30
31private:
32  std::vector<CompilerInstance *> CIs;
33  OwningPtr<ExternalSemaSource> FinalReader;
34
35
36protected:
37
38//===----------------------------------------------------------------------===//
39// ExternalASTSource interface.
40//===----------------------------------------------------------------------===//
41
42  virtual Decl *GetExternalDecl(uint32_t ID);
43  virtual Selector GetExternalSelector(uint32_t ID);
44  virtual uint32_t GetNumExternalSelectors();
45  virtual Stmt *GetExternalDeclStmt(uint64_t Offset);
46  virtual CXXBaseSpecifier *GetExternalCXXBaseSpecifiers(uint64_t Offset);
47  virtual bool FindExternalVisibleDeclsByName(const DeclContext *DC,
48                                              DeclarationName Name);
49  virtual ExternalLoadResult FindExternalLexicalDecls(const DeclContext *DC,
50                                        bool (*isKindWeWant)(Decl::Kind),
51                                        SmallVectorImpl<Decl*> &Result);
52  virtual void CompleteType(TagDecl *Tag);
53  virtual void CompleteType(ObjCInterfaceDecl *Class);
54  virtual void StartedDeserializing();
55  virtual void FinishedDeserializing();
56  virtual void StartTranslationUnit(ASTConsumer *Consumer);
57  virtual void PrintStats();
58
59  /// Return the amount of memory used by memory buffers, breaking down
60  /// by heap-backed versus mmap'ed memory.
61  virtual void getMemoryBufferSizes(MemoryBufferSizes &sizes) const;
62
63//===----------------------------------------------------------------------===//
64// ExternalSemaSource interface.
65//===----------------------------------------------------------------------===//
66
67  virtual void InitializeSema(Sema &S);
68  virtual void ForgetSema();
69  virtual void ReadMethodPool(Selector Sel);
70  virtual bool LookupUnqualified(LookupResult &R, Scope *S);
71};
72
73}
74
75#endif
76