Skip to content
Snippets Groups Projects
Commit 9a69387f authored by Daniel Dunbar's avatar Daniel Dunbar
Browse files

Add a trivial example plugin, which prints the names of the top-level decls.

 - The build scriptage is about twice as long as the code, which is nice. :)

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@88826 91177308-0d34-0410-b5e6-96231b3b80d8
parent 297b0833
No related branches found
No related tags found
No related merge requests found
...@@ -9,6 +9,6 @@ ...@@ -9,6 +9,6 @@
LEVEL = ../../.. LEVEL = ../../..
PARALLEL_DIRS := wpa PARALLEL_DIRS := PrintFunctionNames wpa
include $(LEVEL)/Makefile.common include $(LEVEL)/Makefile.common
set(SHARED_LIBRARY TRUE)
set(LLVM_NO_RTTI 1)
set(LLVM_USED_LIBS
clangFrontend clangIndex clangSema clangAnalysis clangAST clangParse clangLex clangBasic)
set( LLVM_LINK_COMPONENTS
MC
support
)
add_clang_library(PrintFunctionNames PrintFunctionNames.cpp)
set_target_properties(PrintFunctionNames
PROPERTIES
LINKER_LANGUAGE CXX)
##===- examples/PrintFunctionNames/Makefile ----------------*- Makefile -*-===##
#
# The LLVM Compiler Infrastructure
#
# This file is distributed under the University of Illinois Open Source
# License. See LICENSE.TXT for details.
#
##===----------------------------------------------------------------------===##
LEVEL = ../../../..
LIBRARYNAME = PrintFunctionNames
CPPFLAGS += -I$(PROJ_SRC_DIR)/../../include -I$(PROJ_OBJ_DIR)/../../include
CXXFLAGS = -fno-rtti
# Include this here so we can get the configuration of the targets that have
# been configured for construction. We have to do this early so we can set up
# LINK_COMPONENTS before including Makefile.rules
include $(LEVEL)/Makefile.config
LINK_LIBS_IN_SHARED = 1
SHARED_LIBRARY = 1
LINK_COMPONENTS := MC support
USEDLIBS = clangFrontend.a clangIndex.a clangSema.a clangAnalysis.a clangAST.a clangParse.a clangLex.a clangBasic.a
include $(LEVEL)/Makefile.common
//===- PrintFunctionNames.cpp ---------------------------------------------===//
//
// The LLVM Compiler Infrastructure
//
// This file is distributed under the University of Illinois Open Source
// License. See LICENSE.TXT for details.
//
//===----------------------------------------------------------------------===//
//
// Example clang-cc plugin which simply prints the names of all the top-level
// decls in the input file.
//
//===----------------------------------------------------------------------===//
#include "clang/Frontend/FrontendPluginRegistry.h"
#include "clang/AST/ASTConsumer.h"
#include "clang/AST/AST.h"
#include "llvm/Support/raw_ostream.h"
using namespace clang;
namespace {
class PrintFunctionsConsumer : public ASTConsumer {
public:
virtual void HandleTopLevelDecl(DeclGroupRef DG) {
for (DeclGroupRef::iterator i = DG.begin(), e = DG.end(); i != e; ++i) {
const Decl *D = *i;
if (const NamedDecl *ND = dyn_cast<NamedDecl>(D))
llvm::errs() << "top-level-decl: \"" << ND->getNameAsString() << "\"\n";
}
}
};
class PrintFunctionNamesAction : public ASTFrontendAction {
protected:
ASTConsumer *CreateASTConsumer(CompilerInstance &CI, llvm::StringRef) {
return new PrintFunctionsConsumer();
}
};
}
FrontendPluginRegistry::Add<PrintFunctionNamesAction>
X("print-fns", "print function names");
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment