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: <rdar://problem/5966749>

llvm-svn: 51825
This commit is contained in:
Ted Kremenek 2008-05-31 20:11:04 +00:00
parent c5156a932e
commit 380df93fd6
5 changed files with 19 additions and 5 deletions

View File

@ -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) {

View File

@ -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.

View File

@ -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) {}

View File

@ -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());
}

View File

@ -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;