From 685ac6665a3f91f9a66a9f44b6bf755a0cd929ea Mon Sep 17 00:00:00 2001 From: Daniel Dunbar Date: Mon, 7 Jun 2010 23:25:49 +0000 Subject: [PATCH] FrontendAction: Track active file kind. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@105581 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/clang/Frontend/FrontendAction.h | 12 +++++++++--- lib/Frontend/ASTMerge.cpp | 3 ++- lib/Frontend/FrontendAction.cpp | 12 +++++++----- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/include/clang/Frontend/FrontendAction.h b/include/clang/Frontend/FrontendAction.h index 9945be79b7..3992c92874 100644 --- a/include/clang/Frontend/FrontendAction.h +++ b/include/clang/Frontend/FrontendAction.h @@ -15,10 +15,10 @@ #include 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 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 diff --git a/lib/Frontend/ASTMerge.cpp b/lib/Frontend/ASTMerge.cpp index 8118631d5c..e916e20065 100644 --- a/lib/Frontend/ASTMerge.cpp +++ b/lib/Frontend/ASTMerge.cpp @@ -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); } diff --git a/lib/Frontend/FrontendAction.cpp b/lib/Frontend/FrontendAction.cpp index 92137a6dc5..56676e1ef9 100644 --- a/lib/Frontend/FrontendAction.cpp +++ b/lib/Frontend/FrontendAction.cpp @@ -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); } //===----------------------------------------------------------------------===// -- 2.40.0