1*6499e9c6SDaniel Dunbar //===- PrintFunctionNames.cpp ---------------------------------------------===// 2*6499e9c6SDaniel Dunbar // 3*6499e9c6SDaniel Dunbar // The LLVM Compiler Infrastructure 4*6499e9c6SDaniel Dunbar // 5*6499e9c6SDaniel Dunbar // This file is distributed under the University of Illinois Open Source 6*6499e9c6SDaniel Dunbar // License. See LICENSE.TXT for details. 7*6499e9c6SDaniel Dunbar // 8*6499e9c6SDaniel Dunbar //===----------------------------------------------------------------------===// 9*6499e9c6SDaniel Dunbar // 10*6499e9c6SDaniel Dunbar // Example clang-cc plugin which simply prints the names of all the top-level 11*6499e9c6SDaniel Dunbar // decls in the input file. 12*6499e9c6SDaniel Dunbar // 13*6499e9c6SDaniel Dunbar //===----------------------------------------------------------------------===// 14*6499e9c6SDaniel Dunbar 15*6499e9c6SDaniel Dunbar #include "clang/Frontend/FrontendPluginRegistry.h" 16*6499e9c6SDaniel Dunbar #include "clang/AST/ASTConsumer.h" 17*6499e9c6SDaniel Dunbar #include "clang/AST/AST.h" 18*6499e9c6SDaniel Dunbar #include "llvm/Support/raw_ostream.h" 19*6499e9c6SDaniel Dunbar using namespace clang; 20*6499e9c6SDaniel Dunbar 21*6499e9c6SDaniel Dunbar namespace { 22*6499e9c6SDaniel Dunbar 23*6499e9c6SDaniel Dunbar class PrintFunctionsConsumer : public ASTConsumer { 24*6499e9c6SDaniel Dunbar public: 25*6499e9c6SDaniel Dunbar virtual void HandleTopLevelDecl(DeclGroupRef DG) { 26*6499e9c6SDaniel Dunbar for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) { 27*6499e9c6SDaniel Dunbar const Decl *D = *i; 28*6499e9c6SDaniel Dunbar if (const NamedDecl *ND = dyn_cast<NamedDecl>(D)) 29*6499e9c6SDaniel Dunbar llvm::errs() << "top-level-decl: \"" << ND->getNameAsString() << "\"\n"; 30*6499e9c6SDaniel Dunbar } 31*6499e9c6SDaniel Dunbar } 32*6499e9c6SDaniel Dunbar }; 33*6499e9c6SDaniel Dunbar 34*6499e9c6SDaniel Dunbar class PrintFunctionNamesAction : public ASTFrontendAction { 35*6499e9c6SDaniel Dunbar protected: 36*6499e9c6SDaniel Dunbar ASTConsumer *CreateASTConsumer(CompilerInstance &CI, llvm::StringRef) { 37*6499e9c6SDaniel Dunbar return new PrintFunctionsConsumer(); 38*6499e9c6SDaniel Dunbar } 39*6499e9c6SDaniel Dunbar }; 40*6499e9c6SDaniel Dunbar 41*6499e9c6SDaniel Dunbar } 42*6499e9c6SDaniel Dunbar 43*6499e9c6SDaniel Dunbar FrontendPluginRegistry::Add<PrintFunctionNamesAction> 44*6499e9c6SDaniel Dunbar X("print-fns", "print function names"); 45