aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorDaniel Dunbar <daniel@zuster.org>2008-10-16 16:54:18 +0000
committerDaniel Dunbar <daniel@zuster.org>2008-10-16 16:54:18 +0000
commitd3db40151868df39b14d2ef8ffacf19e8c36331f (patch)
tree578814d5ceb5a81fc11992b8271c3a977757747d /lib
parent1e6759e9e33dcaa73ce14c8a908ac9f87ac16463 (diff)
Add --disable-free flag to clang.
- Disables the freeing of the ASTContext and the TranslationUnit after parsing & sema. - Primarily for timing the impact on -fsyntax-only timings. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@57643 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/Sema/ParseAST.cpp31
1 files changed, 20 insertions, 11 deletions
diff --git a/lib/Sema/ParseAST.cpp b/lib/Sema/ParseAST.cpp
index fc35096827..567cfc2763 100644
--- a/lib/Sema/ParseAST.cpp
+++ b/lib/Sema/ParseAST.cpp
@@ -26,26 +26,30 @@ using namespace clang;
/// ParseAST - Parse the entire file specified, notifying the ASTConsumer as
/// the file is parsed. This takes ownership of the ASTConsumer and
/// ultimately deletes it.
-void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, bool PrintStats) {
+///
+/// \param FreeMemory If false, the memory used for AST elements is
+/// not released.
+void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer,
+ bool PrintStats, bool FreeMemory) {
// Collect global stats on Decls/Stmts (until we have a module streamer).
if (PrintStats) {
Decl::CollectingStats(true);
Stmt::CollectingStats(true);
}
- ASTContext Context(PP.getLangOptions(), PP.getSourceManager(),
- PP.getTargetInfo(),
- PP.getIdentifierTable(), PP.getSelectorTable());
-
- TranslationUnit TU(Context);
- Sema S(PP, Context, *Consumer);
+ ASTContext *Context =
+ new ASTContext(PP.getLangOptions(), PP.getSourceManager(),
+ PP.getTargetInfo(),
+ PP.getIdentifierTable(), PP.getSelectorTable());
+ TranslationUnit *TU = new TranslationUnit(*Context);
+ Sema S(PP, *Context, *Consumer);
Parser P(PP, S);
PP.EnterMainSourceFile();
// Initialize the parser.
P.Initialize();
- Consumer->InitializeTU(TU);
+ Consumer->InitializeTU(*TU);
Parser::DeclTy *ADecl;
@@ -55,17 +59,17 @@ void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, bool PrintStats) {
// skipping something.
if (ADecl) {
Decl* D = static_cast<Decl*>(ADecl);
- TU.AddTopLevelDecl(D); // TranslationUnit now owns the Decl.
+ TU->AddTopLevelDecl(D); // TranslationUnit now owns the Decl.
Consumer->HandleTopLevelDecl(D);
}
};
- Consumer->HandleTranslationUnit(TU);
+ Consumer->HandleTranslationUnit(*TU);
if (PrintStats) {
fprintf(stderr, "\nSTATISTICS:\n");
P.getActions().PrintStats();
- Context.PrintStats();
+ Context->PrintStats();
Decl::PrintStats();
Stmt::PrintStats();
Consumer->PrintStats();
@@ -73,4 +77,9 @@ void clang::ParseAST(Preprocessor &PP, ASTConsumer *Consumer, bool PrintStats) {
Decl::CollectingStats(false);
Stmt::CollectingStats(false);
}
+
+ if (FreeMemory) {
+ delete TU;
+ delete Context;
+ }
}