From: Chris Lattner Date: Sat, 28 Mar 2009 01:37:17 +0000 (+0000) Subject: simplify ParseAST by sucking -disable-free handling logic up into X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=9ecd26ad19875e410e76476b36f77c47069ba04c;p=clang simplify ParseAST by sucking -disable-free handling logic up into clang.cpp git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@67890 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Sema/ParseAST.h b/include/clang/Sema/ParseAST.h index b18e5a6729..b41c2da1d4 100644 --- a/include/clang/Sema/ParseAST.h +++ b/include/clang/Sema/ParseAST.h @@ -20,14 +20,10 @@ namespace clang { class TranslationUnit; /// ParseAST - Parse the entire file specified, notifying the ASTConsumer as - /// the file is parsed. + /// the file is parsed. This inserts the parsed decls into TU. /// - /// \param TU If 0, then memory used for AST elements will be allocated only - /// for the duration of the ParseAST() call. In this case, the client should - /// not access any AST elements after ParseAST() returns. void ParseAST(Preprocessor &pp, ASTConsumer *C, - TranslationUnit *TU = 0, - bool PrintStats = false); + TranslationUnit &TU, bool PrintStats = false); } // end namespace clang diff --git a/lib/Sema/ParseAST.cpp b/lib/Sema/ParseAST.cpp index 6923476aeb..6b40d7fd18 100644 --- a/lib/Sema/ParseAST.cpp +++ b/lib/Sema/ParseAST.cpp @@ -25,40 +25,24 @@ using namespace clang; //===----------------------------------------------------------------------===// /// ParseAST - Parse the entire file specified, notifying the ASTConsumer as -/// the file is parsed. +/// the file is parsed. This inserts the parsed decls into TU. /// -/// \param TU If 0, then memory used for AST elements will be allocated only -/// for the duration of the ParseAST() call. In this case, the client should -/// not access any AST elements after ParseAST() returns. void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, - TranslationUnit *TU, bool PrintStats) { + TranslationUnit &TU, bool PrintStats) { // Collect global stats on Decls/Stmts (until we have a module streamer). if (PrintStats) { Decl::CollectingStats(true); Stmt::CollectingStats(true); } - llvm::OwningPtr ContextOwner; - llvm::OwningPtr TranslationUnitOwner; - if (TU == 0) { - ASTContext *Context = new ASTContext(PP.getLangOptions(), - PP.getSourceManager(), - PP.getTargetInfo(), - PP.getIdentifierTable(), - PP.getSelectorTable()); - ContextOwner.reset(Context); - TU = new TranslationUnit(*Context); - TranslationUnitOwner.reset(TU); - } - - Sema S(PP, TU->getContext(), *Consumer); + Sema S(PP, TU.getContext(), *Consumer); Parser P(PP, S); PP.EnterMainSourceFile(); // Initialize the parser. P.Initialize(); - Consumer->InitializeTU(*TU); + Consumer->InitializeTU(TU); Parser::DeclTy *ADecl; @@ -72,12 +56,12 @@ void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, } }; - Consumer->HandleTranslationUnit(*TU); + Consumer->HandleTranslationUnit(TU); if (PrintStats) { fprintf(stderr, "\nSTATISTICS:\n"); P.getActions().PrintStats(); - TU->getContext().PrintStats(); + TU.getContext().PrintStats(); Decl::PrintStats(); Stmt::PrintStats(); Consumer->PrintStats(); diff --git a/tools/clang-cc/clang.cpp b/tools/clang-cc/clang.cpp index 5d3f68dd8e..3b2afa91a6 100644 --- a/tools/clang-cc/clang.cpp +++ b/tools/clang-cc/clang.cpp @@ -1476,17 +1476,26 @@ static void ProcessInputFile(Preprocessor &PP, PreprocessorFactory &PPF, } if (Consumer) { - TranslationUnit *TU = 0; + llvm::OwningPtr ContextOwner; + llvm::OwningPtr TranslationUnitOwner; + + ContextOwner.reset(new ASTContext(PP.getLangOptions(), + PP.getSourceManager(), + PP.getTargetInfo(), + PP.getIdentifierTable(), + PP.getSelectorTable(), + /* FreeMemory = */ !DisableFree)); + TranslationUnitOwner.reset(new TranslationUnit(*ContextOwner.get())); + + + ParseAST(PP, Consumer.get(), *TranslationUnitOwner.get(), Stats); + + // If in -disable-free mode, don't deallocate these when they go out of + // scope. if (DisableFree) { - ASTContext *Context = new ASTContext(PP.getLangOptions(), - PP.getSourceManager(), - PP.getTargetInfo(), - PP.getIdentifierTable(), - PP.getSelectorTable(), - /* FreeMemory = */ false); - TU = new TranslationUnit(*Context); + ContextOwner.take(); + TranslationUnitOwner.take(); } - ParseAST(PP, Consumer.get(), TU, Stats); } if (VerifyDiagnostics)