]> CyberLeo.Net >> Repos - FreeBSD/stable/9.git/blob - contrib/llvm/tools/clang/include/clang/Frontend/FrontendActions.h
MFC r234353:
[FreeBSD/stable/9.git] / contrib / llvm / tools / clang / include / clang / Frontend / FrontendActions.h
1 //===-- FrontendActions.h - Useful Frontend Actions -------------*- C++ -*-===//
2 //
3 //                     The LLVM Compiler Infrastructure
4 //
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
7 //
8 //===----------------------------------------------------------------------===//
9
10 #ifndef LLVM_CLANG_FRONTEND_FRONTENDACTIONS_H
11 #define LLVM_CLANG_FRONTEND_FRONTENDACTIONS_H
12
13 #include "clang/Frontend/FrontendAction.h"
14 #include <string>
15 #include <vector>
16
17 namespace clang {
18
19 class Module;
20   
21 //===----------------------------------------------------------------------===//
22 // Custom Consumer Actions
23 //===----------------------------------------------------------------------===//
24
25 class InitOnlyAction : public FrontendAction {
26   virtual void ExecuteAction();
27
28   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
29                                          StringRef InFile);
30
31 public:
32   // Don't claim to only use the preprocessor, we want to follow the AST path,
33   // but do nothing.
34   virtual bool usesPreprocessorOnly() const { return false; }
35 };
36
37 //===----------------------------------------------------------------------===//
38 // AST Consumer Actions
39 //===----------------------------------------------------------------------===//
40
41 class ASTPrintAction : public ASTFrontendAction {
42 protected:
43   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
44                                          StringRef InFile);
45 };
46
47 class ASTDumpAction : public ASTFrontendAction {
48 protected:
49   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
50                                          StringRef InFile);
51 };
52
53 class ASTDumpXMLAction : public ASTFrontendAction {
54 protected:
55   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
56                                          StringRef InFile);
57 };
58
59 class ASTViewAction : public ASTFrontendAction {
60 protected:
61   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
62                                          StringRef InFile);
63 };
64
65 class DeclContextPrintAction : public ASTFrontendAction {
66 protected:
67   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
68                                          StringRef InFile);
69 };
70
71 class GeneratePCHAction : public ASTFrontendAction {
72 protected:
73   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
74                                          StringRef InFile);
75
76   virtual TranslationUnitKind getTranslationUnitKind() {
77     return TU_Prefix;
78   }
79
80   virtual bool hasASTFileSupport() const { return false; }
81
82 public:
83   /// \brief Compute the AST consumer arguments that will be used to
84   /// create the PCHGenerator instance returned by CreateASTConsumer.
85   ///
86   /// \returns true if an error occurred, false otherwise.
87   static bool ComputeASTConsumerArguments(CompilerInstance &CI,
88                                           StringRef InFile,
89                                           std::string &Sysroot,
90                                           std::string &OutputFile,
91                                           raw_ostream *&OS);
92 };
93
94 class GenerateModuleAction : public ASTFrontendAction {
95   clang::Module *Module;
96   
97 protected:
98   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
99                                          StringRef InFile);
100   
101   virtual TranslationUnitKind getTranslationUnitKind() { 
102     return TU_Module;
103   }
104   
105   virtual bool hasASTFileSupport() const { return false; }
106   
107 public:
108   virtual bool BeginSourceFileAction(CompilerInstance &CI, StringRef Filename);
109   
110   /// \brief Compute the AST consumer arguments that will be used to
111   /// create the PCHGenerator instance returned by CreateASTConsumer.
112   ///
113   /// \returns true if an error occurred, false otherwise.
114   static bool ComputeASTConsumerArguments(CompilerInstance &CI,
115                                           StringRef InFile,
116                                           std::string &Sysroot,
117                                           std::string &OutputFile,
118                                           raw_ostream *&OS);
119 };
120   
121 class SyntaxOnlyAction : public ASTFrontendAction {
122 protected:
123   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
124                                          StringRef InFile);
125
126 public:
127   virtual bool hasCodeCompletionSupport() const { return true; }
128 };
129
130 /**
131  * \brief Frontend action adaptor that merges ASTs together.
132  *
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.
137  */
138 class ASTMergeAction : public FrontendAction {
139   /// \brief The action that the merge action adapts.
140   FrontendAction *AdaptedAction;
141   
142   /// \brief The set of AST files to merge.
143   std::vector<std::string> ASTFiles;
144
145 protected:
146   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &CI,
147                                          StringRef InFile);
148
149   virtual bool BeginSourceFileAction(CompilerInstance &CI,
150                                      StringRef Filename);
151
152   virtual void ExecuteAction();
153   virtual void EndSourceFileAction();
154
155 public:
156   ASTMergeAction(FrontendAction *AdaptedAction, ArrayRef<std::string> ASTFiles);
157   virtual ~ASTMergeAction();
158
159   virtual bool usesPreprocessorOnly() const;
160   virtual TranslationUnitKind getTranslationUnitKind();
161   virtual bool hasPCHSupport() const;
162   virtual bool hasASTFileSupport() const;
163   virtual bool hasCodeCompletionSupport() const;
164 };
165
166 class PrintPreambleAction : public FrontendAction {
167 protected:
168   void ExecuteAction();
169   virtual ASTConsumer *CreateASTConsumer(CompilerInstance &, StringRef) { 
170     return 0; 
171   }
172   
173   virtual bool usesPreprocessorOnly() const { return true; }
174 };
175   
176 //===----------------------------------------------------------------------===//
177 // Preprocessor Actions
178 //===----------------------------------------------------------------------===//
179
180 class DumpRawTokensAction : public PreprocessorFrontendAction {
181 protected:
182   void ExecuteAction();
183 };
184
185 class DumpTokensAction : public PreprocessorFrontendAction {
186 protected:
187   void ExecuteAction();
188 };
189
190 class GeneratePTHAction : public PreprocessorFrontendAction {
191 protected:
192   void ExecuteAction();
193 };
194
195 class PreprocessOnlyAction : public PreprocessorFrontendAction {
196 protected:
197   void ExecuteAction();
198 };
199
200 class PrintPreprocessedAction : public PreprocessorFrontendAction {
201 protected:
202   void ExecuteAction();
203
204   virtual bool hasPCHSupport() const { return true; }
205 };
206   
207 }  // end namespace clang
208
209 #endif