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:
parent
c5156a932e
commit
380df93fd6
|
@ -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) {
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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) {}
|
||||
|
|
|
@ -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());
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in New Issue