FrontendAction: Track active file kind.

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105581 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Daniel Dunbar 2010-06-07 23:25:49 +00:00
Родитель eb58d831b2
Коммит 685ac6665a
3 изменённых файлов: 18 добавлений и 9 удалений

Просмотреть файл

@ -15,10 +15,10 @@
#include <string>
namespace clang {
class ASTUnit;
class ASTConsumer;
class CompilerInstance;
class ASTMergeAction;
class ASTUnit;
class CompilerInstance;
enum InputKind {
IK_None,
@ -40,6 +40,7 @@ enum InputKind {
/// the frontend.
class FrontendAction {
std::string CurrentFile;
InputKind CurrentFileKind;
llvm::OwningPtr<ASTUnit> CurrentASTUnit;
CompilerInstance *Instance;
friend class ASTMergeAction;
@ -117,6 +118,11 @@ public:
return CurrentFile;
}
InputKind getCurrentFileKind() const {
assert(!CurrentFile.empty() && "No current file!");
return CurrentFileKind;
}
ASTUnit &getCurrentASTUnit() const {
assert(!CurrentASTUnit && "No current AST unit!");
return *CurrentASTUnit;
@ -126,7 +132,7 @@ public:
return CurrentASTUnit.take();
}
void setCurrentFile(llvm::StringRef Value, ASTUnit *AST = 0);
void setCurrentFile(llvm::StringRef Value, InputKind Kind, ASTUnit *AST = 0);
/// @}
/// @name Supported Modes

Просмотреть файл

@ -26,7 +26,8 @@ bool ASTMergeAction::BeginSourceFileAction(CompilerInstance &CI,
// FIXME: This is a hack. We need a better way to communicate the
// AST file, compiler instance, and file name than member variables
// of FrontendAction.
AdaptedAction->setCurrentFile(getCurrentFile(), takeCurrentASTUnit());
AdaptedAction->setCurrentFile(getCurrentFile(), getCurrentFileKind(),
takeCurrentASTUnit());
AdaptedAction->setCompilerInstance(&CI);
return AdaptedAction->BeginSourceFileAction(CI, Filename);
}

Просмотреть файл

@ -25,8 +25,10 @@ FrontendAction::FrontendAction() : Instance(0) {}
FrontendAction::~FrontendAction() {}
void FrontendAction::setCurrentFile(llvm::StringRef Value, ASTUnit *AST) {
void FrontendAction::setCurrentFile(llvm::StringRef Value, InputKind Kind,
ASTUnit *AST) {
CurrentFile = Value;
CurrentFileKind = Kind;
CurrentASTUnit.reset(AST);
}
@ -35,7 +37,7 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
InputKind InputKind) {
assert(!Instance && "Already processing a source file!");
assert(!Filename.empty() && "Unexpected empty filename!");
setCurrentFile(Filename);
setCurrentFile(Filename, InputKind);
setCompilerInstance(&CI);
// AST files follow a very different path, since they share objects via the
@ -52,7 +54,7 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
if (!AST)
goto failure;
setCurrentFile(Filename, AST);
setCurrentFile(Filename, InputKind, AST);
// Set the shared objects, these are reset when we finish processing the
// file, otherwise the CompilerInstance will happily destroy them.
@ -127,7 +129,7 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI,
}
CI.getDiagnosticClient().EndSourceFile();
setCurrentFile("");
setCurrentFile("", IK_None);
setCompilerInstance(0);
return false;
}
@ -206,7 +208,7 @@ void FrontendAction::EndSourceFile() {
}
setCompilerInstance(0);
setCurrentFile("");
setCurrentFile("", IK_None);
}
//===----------------------------------------------------------------------===//