From: David Blaikie Date: Sun, 10 Aug 2014 17:03:42 +0000 (+0000) Subject: unique_ptr-ify FrontendAction::takeCurrentASTUnit X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a588e495a6a8924af298b9e7d304c1a4386a8225;p=clang unique_ptr-ify FrontendAction::takeCurrentASTUnit git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@215319 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Frontend/FrontendAction.h b/include/clang/Frontend/FrontendAction.h index 9ac9d2828f..95e1c09c0c 100644 --- a/include/clang/Frontend/FrontendAction.h +++ b/include/clang/Frontend/FrontendAction.h @@ -20,6 +20,7 @@ #include "clang/Basic/LLVM.h" #include "clang/Basic/LangOptions.h" +#include "clang/Frontend/ASTUnit.h" #include "clang/Frontend/FrontendOptions.h" #include "llvm/ADT/StringRef.h" #include @@ -29,7 +30,6 @@ namespace clang { class ASTConsumer; class ASTMergeAction; -class ASTUnit; class CompilerInstance; /// Abstract base class for actions which can be performed by the frontend. @@ -146,10 +146,12 @@ public: return *CurrentASTUnit; } - ASTUnit *takeCurrentASTUnit() { return CurrentASTUnit.release(); } + std::unique_ptr takeCurrentASTUnit() { + return std::move(CurrentASTUnit); + } void setCurrentInput(const FrontendInputFile &CurrentInput, - ASTUnit *AST = nullptr); + std::unique_ptr AST = nullptr); /// @} /// @name Supported Modes diff --git a/lib/Frontend/FrontendAction.cpp b/lib/Frontend/FrontendAction.cpp index cf13d7b9ba..8295d6ddfa 100644 --- a/lib/Frontend/FrontendAction.cpp +++ b/lib/Frontend/FrontendAction.cpp @@ -129,9 +129,9 @@ FrontendAction::FrontendAction() : Instance(nullptr) {} FrontendAction::~FrontendAction() {} void FrontendAction::setCurrentInput(const FrontendInputFile &CurrentInput, - ASTUnit *AST) { + std::unique_ptr AST) { this->CurrentInput = CurrentInput; - CurrentASTUnit.reset(AST); + CurrentASTUnit = std::move(AST); } ASTConsumer* FrontendAction::CreateWrappedASTConsumer(CompilerInstance &CI, @@ -189,13 +189,12 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI, IntrusiveRefCntPtr Diags(&CI.getDiagnostics()); - ASTUnit *AST = ASTUnit::LoadFromASTFile(InputFile, Diags, - CI.getFileSystemOpts()); + std::unique_ptr AST( + ASTUnit::LoadFromASTFile(InputFile, Diags, CI.getFileSystemOpts())); + if (!AST) goto failure; - setCurrentInput(Input, AST); - // Inform the diagnostic client we are processing a source file. CI.getDiagnosticClient().BeginSourceFile(CI.getLangOpts(), nullptr); HasBegunSourceFile = true; @@ -207,6 +206,8 @@ bool FrontendAction::BeginSourceFile(CompilerInstance &CI, CI.setPreprocessor(&AST->getPreprocessor()); CI.setASTContext(&AST->getASTContext()); + setCurrentInput(Input, std::move(AST)); + // Initialize the action. if (!BeginSourceFileAction(CI, InputFile)) goto failure;