clang API Documentation
00001 //===-- MultiplexConsumer.h - AST Consumer for PCH Generation ---*- C++ -*-===// 00002 // 00003 // The LLVM Compiler Infrastructure 00004 // 00005 // This file is distributed under the University of Illinois Open Source 00006 // License. See LICENSE.TXT for details. 00007 // 00008 //===----------------------------------------------------------------------===// 00009 // 00010 // This file declares the MultiplexConsumer class, which can be used to 00011 // multiplex ASTConsumer and SemaConsumer messages to many consumers. 00012 // 00013 //===----------------------------------------------------------------------===// 00014 00015 #ifndef CLANG_FRONTEND_MULTIPLEXCONSUMER_H 00016 #define CLANG_FRONTEND_MULTIPLEXCONSUMER_H 00017 00018 #include "clang/Basic/LLVM.h" 00019 #include "clang/Sema/SemaConsumer.h" 00020 #include "clang/Basic/LLVM.h" 00021 #include "llvm/ADT/OwningPtr.h" 00022 #include <vector> 00023 00024 namespace clang { 00025 00026 class MultiplexASTMutationListener; 00027 class MultiplexASTDeserializationListener; 00028 00029 // Has a list of ASTConsumers and calls each of them. Owns its children. 00030 class MultiplexConsumer : public SemaConsumer { 00031 public: 00032 // Takes ownership of the pointers in C. 00033 MultiplexConsumer(ArrayRef<ASTConsumer*> C); 00034 ~MultiplexConsumer(); 00035 00036 // ASTConsumer 00037 virtual void Initialize(ASTContext &Context); 00038 virtual void HandleCXXStaticMemberVarInstantiation(VarDecl *VD); 00039 virtual bool HandleTopLevelDecl(DeclGroupRef D); 00040 virtual void HandleInterestingDecl(DeclGroupRef D); 00041 virtual void HandleTranslationUnit(ASTContext &Ctx); 00042 virtual void HandleTagDeclDefinition(TagDecl *D); 00043 virtual void HandleCXXImplicitFunctionInstantiation(FunctionDecl *D); 00044 virtual void HandleTopLevelDeclInObjCContainer(DeclGroupRef D); 00045 virtual void CompleteTentativeDefinition(VarDecl *D); 00046 virtual void HandleVTable(CXXRecordDecl *RD, bool DefinitionRequired); 00047 virtual ASTMutationListener *GetASTMutationListener(); 00048 virtual ASTDeserializationListener *GetASTDeserializationListener(); 00049 virtual void PrintStats(); 00050 00051 // SemaConsumer 00052 virtual void InitializeSema(Sema &S); 00053 virtual void ForgetSema(); 00054 00055 static bool classof(const MultiplexConsumer *) { return true; } 00056 private: 00057 std::vector<ASTConsumer*> Consumers; // Owns these. 00058 OwningPtr<MultiplexASTMutationListener> MutationListener; 00059 OwningPtr<MultiplexASTDeserializationListener> DeserializationListener; 00060 }; 00061 00062 } // end namespace clang 00063 00064 #endif