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"
21 //===----------------------------------------------------------------------===//
22 // Custom Consumer Actions
23 //===----------------------------------------------------------------------===//
25 class InitOnlyAction : public FrontendAction {
26 virtual void ExecuteAction();
28 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
32 // Don't claim to only use the preprocessor, we want to follow the AST path,
34 virtual bool usesPreprocessorOnly() const { return false; }
37 //===----------------------------------------------------------------------===//
38 // AST Consumer Actions
39 //===----------------------------------------------------------------------===//
41 class ASTPrintAction : public ASTFrontendAction {
43 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
47 class ASTDumpAction : public ASTFrontendAction {
49 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
53 class ASTDumpXMLAction : public ASTFrontendAction {
55 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
59 class ASTViewAction : public ASTFrontendAction {
61 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
65 class DeclContextPrintAction : public ASTFrontendAction {
67 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
71 class GeneratePCHAction : public ASTFrontendAction {
73 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
76 virtual TranslationUnitKind getTranslationUnitKind() {
80 virtual bool hasASTFileSupport() const { return false; }
83 /// \brief Compute the AST consumer arguments that will be used to
84 /// create the PCHGenerator instance returned by CreateASTConsumer.
86 /// \returns true if an error occurred, false otherwise.
87 static bool ComputeASTConsumerArguments(CompilerInstance &CI,
90 std::string &OutputFile,
94 class GenerateModuleAction : public ASTFrontendAction {
95 clang::Module *Module;
98 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
101 virtual TranslationUnitKind getTranslationUnitKind() {
105 virtual bool hasASTFileSupport() const { return false; }
108 virtual bool BeginSourceFileAction(CompilerInstance &CI, StringRef Filename);
110 /// \brief Compute the AST consumer arguments that will be used to
111 /// create the PCHGenerator instance returned by CreateASTConsumer.
113 /// \returns true if an error occurred, false otherwise.
114 static bool ComputeASTConsumerArguments(CompilerInstance &CI,
116 std::string &Sysroot,
117 std::string &OutputFile,
121 class SyntaxOnlyAction : public ASTFrontendAction {
123 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
127 virtual bool hasCodeCompletionSupport() const { return true; }
131 * \brief Frontend action adaptor that merges ASTs together.
133 * This action takes an existing AST file and "merges" it into the AST
134 * context, producing a merged context. This action is an action
135 * adaptor, which forwards most of its calls to another action that
136 * will consume the merged context.
138 class ASTMergeAction : public FrontendAction {
139 /// \brief The action that the merge action adapts.
140 FrontendAction *AdaptedAction;
142 /// \brief The set of AST files to merge.
143 std::vector<std::string> ASTFiles;
146 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
149 virtual bool BeginSourceFileAction(CompilerInstance &CI,
152 virtual void ExecuteAction();
153 virtual void EndSourceFileAction();
156 ASTMergeAction(FrontendAction *AdaptedAction, ArrayRef<std::string> ASTFiles);
157 virtual ~ASTMergeAction();
159 virtual bool usesPreprocessorOnly() const;
160 virtual TranslationUnitKind getTranslationUnitKind();
161 virtual bool hasPCHSupport() const;
162 virtual bool hasASTFileSupport() const;
163 virtual bool hasCodeCompletionSupport() const;
166 class PrintPreambleAction : public FrontendAction {
168 void ExecuteAction();
169 virtual ASTConsumer *CreateASTConsumer(CompilerInstance &, StringRef) {
173 virtual bool usesPreprocessorOnly() const { return true; }
176 //===----------------------------------------------------------------------===//
177 // Preprocessor Actions
178 //===----------------------------------------------------------------------===//
180 class DumpRawTokensAction : public PreprocessorFrontendAction {
182 void ExecuteAction();
185 class DumpTokensAction : public PreprocessorFrontendAction {
187 void ExecuteAction();
190 class GeneratePTHAction : public PreprocessorFrontendAction {
192 void ExecuteAction();
195 class PreprocessOnlyAction : public PreprocessorFrontendAction {
197 void ExecuteAction();
200 class PrintPreprocessedAction : public PreprocessorFrontendAction {
202 void ExecuteAction();
204 virtual bool hasPCHSupport() const { return true; }
207 } // end namespace clang