clang API Documentation

MultiplexConsumer.h
Go to the documentation of this file.
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