From: Ted Kremenek Date: Sat, 31 May 2008 20:11:04 +0000 (+0000) Subject: Added "InitializeTU" to ASTConsumer. This is used by Sema::ParseAST to pass a X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=e3a6198400453c0d9623207718e4942f7c111f87;p=clang Added "InitializeTU" to ASTConsumer. This is used by Sema::ParseAST to pass a TranslationUnit object instead of an ASTContext. By default it calls Initialize(ASTConstext& Context) (to match with the current interface used by most ASTConsumers). Modified the ObjC-Rewriter to use InitializeTU, and to tell the TranslationUnit to not free its Decls. This is a workaround for: git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@51825 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/Driver/ASTConsumers.cpp b/Driver/ASTConsumers.cpp index ba9fc90f03..9ab6157cfa 100644 --- a/Driver/ASTConsumers.cpp +++ b/Driver/ASTConsumers.cpp @@ -877,9 +877,8 @@ public: virtual ~ASTSerializer() { delete TU; } - virtual void Initialize(ASTContext &Context) { - if (!TU) TU = new TranslationUnit(Context, lang); - TU->SetOwnsDecls(false); + virtual void InitializeTU(TranslationUnit &TU) { + TU.SetOwnsDecls(false); } virtual void HandleTopLevelDecl(Decl *D) { diff --git a/Driver/RewriteObjC.cpp b/Driver/RewriteObjC.cpp index c523b03d56..f679e554d0 100644 --- a/Driver/RewriteObjC.cpp +++ b/Driver/RewriteObjC.cpp @@ -15,6 +15,7 @@ #include "clang/Rewrite/Rewriter.h" #include "clang/AST/AST.h" #include "clang/AST/ASTConsumer.h" +#include "clang/AST/TranslationUnit.h" #include "clang/Basic/SourceManager.h" #include "clang/Basic/IdentifierTable.h" #include "clang/Basic/Diagnostic.h" @@ -94,7 +95,12 @@ namespace { static const int OBJC_ABI_VERSION =7 ; public: - void Initialize(ASTContext &context); + virtual void Initialize(ASTContext &context); + + virtual void InitializeTU(TranslationUnit &TU) { + TU.SetOwnsDecls(false); + Initialize(TU.getContext()); + } // Top Level Driver code. diff --git a/include/clang/AST/ASTConsumer.h b/include/clang/AST/ASTConsumer.h index bfaa141573..c08f97e640 100644 --- a/include/clang/AST/ASTConsumer.h +++ b/include/clang/AST/ASTConsumer.h @@ -16,6 +16,7 @@ namespace clang { class ASTContext; + class TranslationUnit; class Decl; class TagDecl; class HandleTagDeclDefinition; @@ -31,6 +32,8 @@ public: /// ASTContext. virtual void Initialize(ASTContext &Context) {} + virtual void InitializeTU(TranslationUnit& TU); + /// HandleTopLevelDecl - Handle the specified top-level declaration. This is /// called by HandleTopLevelDeclaration to process every top-level Decl*. virtual void HandleTopLevelDecl(Decl *D) {} diff --git a/lib/AST/ASTConsumer.cpp b/lib/AST/ASTConsumer.cpp index b3d1271092..3f92990f36 100644 --- a/lib/AST/ASTConsumer.cpp +++ b/lib/AST/ASTConsumer.cpp @@ -13,6 +13,8 @@ #include "clang/AST/ASTConsumer.h" #include "clang/AST/Decl.h" +#include "clang/AST/TranslationUnit.h" + using namespace clang; ASTConsumer::~ASTConsumer() {} @@ -26,3 +28,7 @@ void ASTConsumer::HandleTopLevelDeclaration(Decl* d) { else HandleTopLevelDecl(d); } + +void ASTConsumer::InitializeTU(TranslationUnit& TU) { + Initialize(TU.getContext()); +} diff --git a/lib/Sema/ParseAST.cpp b/lib/Sema/ParseAST.cpp index cff3ef7612..9199179af7 100644 --- a/lib/Sema/ParseAST.cpp +++ b/lib/Sema/ParseAST.cpp @@ -46,7 +46,7 @@ void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, bool PrintStats) { // Initialize the parser. P.Initialize(); - Consumer->Initialize(Context); + Consumer->InitializeTU(TU); Parser::DeclTy *ADecl;