1 //===-- FrontendActions.h - Useful Frontend Actions -------------*- C++ -*-===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #ifndef LLVM_CLANG_FRONTEND_FRONTENDACTIONS_H
11 #define LLVM_CLANG_FRONTEND_FRONTENDACTIONS_H
13 #include "clang/Frontend/FrontendAction.h"
19 //===----------------------------------------------------------------------===//
20 // Custom Consumer Actions
21 //===----------------------------------------------------------------------===//
23 class InitOnlyAction : public FrontendAction {
24 virtual void ExecuteAction();
26 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
27 llvm::StringRef InFile);
30 // Don't claim to only use the preprocessor, we want to follow the AST path,
32 virtual bool usesPreprocessorOnly() const { return false; }
35 //===----------------------------------------------------------------------===//
36 // AST Consumer Actions
37 //===----------------------------------------------------------------------===//
39 class ASTPrintAction : public ASTFrontendAction {
41 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
42 llvm::StringRef InFile);
45 class ASTPrintXMLAction : public ASTFrontendAction {
47 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
48 llvm::StringRef InFile);
51 class ASTDumpAction : public ASTFrontendAction {
53 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
54 llvm::StringRef InFile);
57 class ASTViewAction : public ASTFrontendAction {
59 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
60 llvm::StringRef InFile);
63 class DeclContextPrintAction : public ASTFrontendAction {
65 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
66 llvm::StringRef InFile);
69 class GeneratePCHAction : public ASTFrontendAction {
71 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
72 llvm::StringRef InFile);
74 virtual bool usesCompleteTranslationUnit() { return false; }
76 virtual bool hasASTFileSupport() const { return false; }
79 /// \brief Compute the AST consumer arguments that will be used to
80 /// create the PCHGenerator instance returned by CreateASTConsumer.
82 /// \returns true if an error occurred, false otherwise.
83 static bool ComputeASTConsumerArguments(CompilerInstance &CI,
84 llvm::StringRef InFile,
86 llvm::raw_ostream *&OS,
90 class InheritanceViewAction : public ASTFrontendAction {
92 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
93 llvm::StringRef InFile);
96 class SyntaxOnlyAction : public ASTFrontendAction {
98 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
99 llvm::StringRef InFile);
102 virtual bool hasCodeCompletionSupport() const { return true; }
105 class BoostConAction : public SyntaxOnlyAction {
107 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
108 llvm::StringRef InFile);
112 * \brief Frontend action adaptor that merges ASTs together.
114 * This action takes an existing AST file and "merges" it into the AST
115 * context, producing a merged context. This action is an action
116 * adaptor, which forwards most of its calls to another action that
117 * will consume the merged context.
119 class ASTMergeAction : public FrontendAction {
120 /// \brief The action that the merge action adapts.
121 FrontendAction *AdaptedAction;
123 /// \brief The set of AST files to merge.
124 std::vector<std::string> ASTFiles;
127 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
128 llvm::StringRef InFile);
130 virtual bool BeginSourceFileAction(CompilerInstance &CI,
131 llvm::StringRef Filename);
133 virtual void ExecuteAction();
134 virtual void EndSourceFileAction();
137 ASTMergeAction(FrontendAction *AdaptedAction,
138 std::string *ASTFiles, unsigned NumASTFiles);
139 virtual ~ASTMergeAction();
141 virtual bool usesPreprocessorOnly() const;
142 virtual bool usesCompleteTranslationUnit();
143 virtual bool hasPCHSupport() const;
144 virtual bool hasASTFileSupport() const;
145 virtual bool hasCodeCompletionSupport() const;
148 class PrintPreambleAction : public FrontendAction {
150 void ExecuteAction();
151 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &, llvm::StringRef) {
155 virtual bool usesPreprocessorOnly() const { return true; }
158 //===----------------------------------------------------------------------===//
159 // Preprocessor Actions
160 //===----------------------------------------------------------------------===//
162 class DumpRawTokensAction : public PreprocessorFrontendAction {
164 void ExecuteAction();
167 class DumpTokensAction : public PreprocessorFrontendAction {
169 void ExecuteAction();
172 class GeneratePTHAction : public PreprocessorFrontendAction {
174 void ExecuteAction();
177 class PreprocessOnlyAction : public PreprocessorFrontendAction {
179 void ExecuteAction();
182 class PrintPreprocessedAction : public PreprocessorFrontendAction {
184 void ExecuteAction();
186 virtual bool hasPCHSupport() const { return true; }
189 } // end namespace clang